Energieberichte

Ich denke schon, muss es aber erst testen.
Es wird ja nur die Kostenvariable für das Trinkwasser und als Zähler der Wasserzählerstand (bei mir Arcus-eds für WW und KW) ausgetauscht, oder?

DANKE schon mal vorab!

das man das Logging aktivieren muss - im Skript wohlgemerkt!

nein ! die Variable muss geloggt werden

Für was steht dann das „Logging“ im Skript?

Und ich hab noch ein anderes Problem:
Erster Tag wurde richtig im Diagramm angezeigt, dann sind alle Werte gegenüber den Angezeigten (linke Spalten) falsch?

Was mache ich falsch?

Archiv: Aktueller Tag / Aktuelle Kosten
Im Diagramm wird dann Monat eingestellt und die obigen Variablen werden genommen.

Hallo,

danke für die Tolle Arbeit! Habe den Script aus #45 ausprobiert an sich funktioniert er gut.
Leider ist es nicht komplett das was bei mir funktionieren würde.

Wie würdet ihr es lösen?

Bei mir sieht es so aus:
Hab 3 Werte, quasi 3 Zähler wegen PV Anlage. Da wäre es schön eingespeiste Kosten zu berechnen und Eigenverbrauch zu errechnen.

Variable 1 bietet zugekaufter Strom (Zähler 1)
Variable 2 Eingespeister Strom (Zähler 1)
Variable 3 Produzierter Strom (Zähler 2)

Nun Müsste aus Variable 2 und 3 PV Strom Eigenverbrauch errechnet und geloggt werden.

Was sagt Ihr dazu? Schwer hin zu bekommen oder hat es vielleicht jemand schon mal gemacht?

Gruß

Hallo,

habe etwas an den Script gearbeitet. Naja eher herumprobiert,an sich läuft er.
Hab da noch ne Frage zu der Berechnung. Ich bekomme jeden Tag oder eher alle 10 Sec einen Wert
der immer größer wird.
Also Stromverbrauch 80kw dann 81kw z.B. Er rechnet mir aber für den Tag mehr zusammen als für die Woche
da passt was nicht mit den zusammenrechnen. Könnt Ihr mir nen Tipp geben wie man es richtig macht?

Hier z.B.:

$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($einspDayID, CalcConsumption($data));
SetValue($einspCostDayCostID,GetValue($einspDayID)*$verkauf);

Und wie kann ich aus 2 Variablen oder Werten eine Variable abziehen?

EDIT:

Für eigen Verbrauch hebe ich folgendes Script erstellt, hoffe war so in etwa Richtig:

<?

///////////////////  Eigenverbrauch ausrechnen  //////////////////////////////

$pvproduktion = GetValue(35916);
$einspeisung = GetValue(10419);
$eigenverbrauch =(25472);

$eigenverbrauch = $pvproduktion - $einspeisung;
SetValueFloat(25472, $eigenverbrauch);
?>  

Hallo,

so leider habe ich es nicht hinbekommen das das Script die Zahlen richtig zusammen zählt.
Vielleicht könnt Ihr mal auf die Sprünge helfen?

Hier ist das Script: (Achtung noch nicht fertig)

<? 
#include('globalfunction.ips.php');
#########################################################################################################################################################################
# Scriptbezeichnung: HM.Consumption.ips.php
# Version: 1.2
# Author: Heiko Wilknitz
# Anpassung by Zerfasm & Drapple  
#
# Auswertung und Hochrechnung des Stromverbrauches
# Nochamls vielen Dank an Pitti der den Ursprung für dieses Skript gelegt hat!

// ----------------------------- KONFIGURATION --------------------------------------------------------------------------------------------------------------------------

// Anzahl Nachkommastellen bei Ergebnissen
$roundTo2   = 2; //Anzahl Nachkommastellen bei Ergebnissen
$roundTo3   = 3; //Anzahl Nachkommastellen bei Ergebnissen
$kosten        = GetValue(44754); //Floatvariable mit dem Preis pro kWh
$verkauf       = GetValue(36848); // Floatvariable Verkaufspreis pro KWh

//Logging einstellen
$logDay        = false; //Logging für Tag einstellen
$logWeek    = false; //Logging für Woche einstellen
$logMonth    = false; //Logging für Monat einstellen
$logYear    = false; //Logging für Jahr einstellen
$logVisual    = false; //Anzeige der Variable in der Visualisierung im Webfront deaktiveren oder aktivieren

//Auswahl ob Instanzen mit den Variablen unter einer Kategorie oder einer weiteren Instanz angeordnet werden sollen
$category = true;

//Wenn das Skript die max. Zeit von 30 Sekunden beim ersten ausführen überschreitet, kann mit der nächsten Zeile die Fehlermeldung verhindert werden
set_time_limit (60); //Hier kann die Zeit in Sekunden angegeben werden

// ----------------------------------- ID´s -----------------------------------------------------------------------------------------------------------------------------
$parentID     = IPS_GetObject($_IPS['SELF']); 
$parentID     = $parentID['ParentID'];

//ID des ArchiveHandler ermitteln 
$instances     = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}'); 
$archiveID     = $instances[0]; 

// Verbrauchszähler / Bezogener Strom
//$valueID     = IPS_GetObjectIDByIdent("ENERGY_COUNTER_TOTAL", $parentID); //Wenn ObjektID verwendet werden soll
$valueID     = 21927; //Wenn VariablenID verwendet werden soll

// PV Strom Erzeugt und Eingespeist
$eurzeugtID   = 35916;
$eingespeistID = 10419;
$eigenverbID = 25472;


// -------------------------- VARIABLENPROFIL ERSTELLEN -----------------------------------------------------------------------------------------------------------------
// Profilname kWh    
$vpname="kWh";
if (!IPS_VariableProfileExists($vpname)) //Wenn das Provil noch nicht Exestiert dann lege es an:
{
    IPS_CreateVariableProfile($vpname, 2); //Variabelprofil erstellen
    IPS_SetVariableProfileIcon($vpname,"Lightning"); //Variabelprofil Icon zuweisen
    IPS_SetVariableProfileText($vpname,""," kWh"); //Suffix setzen
    IPS_SetVariableProfileValues($vpname, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
    IPS_SetVariableProfileDigits($vpname, $roundTo2); //Anzahl Nachkommastellen, in diesem Fall 2
}

// Profilname"Euro"
$vpname2="Euro";
if (!IPS_VariableProfileExists($vpname2)) //Wenn das Provil noch nicht Exestiert dann lege es an:
{
    IPS_CreateVariableProfile($vpname2, 2); //Variabelprofil erstellen
    IPS_SetVariableProfileIcon($vpname2,"Euro"); //Variabelprofil Icon zuweisen
    IPS_SetVariableProfileText($vpname2,""," €"); //Suffix setzen
    IPS_SetVariableProfileValues($vpname2, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
    IPS_SetVariableProfileDigits($vpname2, $roundTo2); //Anzahl Nachkommastellen, in diesem Fall 2
} 

// -------------------------- AUSWAHL OB KATEGORIEN ODER INSTANZEN ERSTELLEN --------------------------------------------------------------------------------------------

If ($category == true)
{
    $enerID = GetorCreatecategory("Zugekaufter Strom",$parentID);
    $enerCostID = GetorCreatecategory("Zugekaufter Strom kosten",$parentID);
    $einspKID = GetorCreatecategory("Eingespeister Strom",$parentID);
    $einspCostKID = GetorCreatecategory("Eingespeister Strom kosten",$parentID);
    $erzeugKID = GetorCreatecategory("PV produzierter Strom",$parentID);
    $eigenKID = GetorCreatecategory("Eigenverbrauchter Strom",$parentID);
}
else
{
    $enerID = GetorCreateInstanz("Zugekaufter Strom","dummy",$parentID);
    $enerCostID = GetorCreateInstanz("Zugekaufter Strom kosten","dummy",$parentID);
    $einspKID = GetorCreatecategory("Eingespeister Strom","dummy",$parentID);
    $einspKCostID = GetorCreatecategory("Eingespeister Strom kosten","dummy",$parentID);
    $erzeugKID = GetorCreatecategory("PV produzierter Strom","dummy",$parentID);
    $eigenKID = GetorCreatecategory("Eigenverbrauchter Strom","dummy",$parentID);
}

// -------------------------- INSTANZEN ERSTELLEN -----------------------------------------------------------------------------------------------------------------------
// Verbrauchsinstanzen anlegen
$lastID = GetOrCreateInstanz("Verbrauch Zuletzt","dummy",$enerID);
$currID = GetOrCreateInstanz("Verbrauch Aktuell","dummy",$enerID);
$einspID = GetOrCreateInstanz("Eingespeister Strom Zuletzt","dummy",$einspKID);
$einspcurrID = GetOrCreateInstanz("Eingespeister Strom Aktuell","dummy",$einspKID);
$erzeugID = GetOrCreateInstanz("PV produziert Zuletzt","dummy",$erzeugKID);
$erzeugcurrID = GetOrCreateInstanz("PV produziert Aktuell","dummy",$erzeugKID);
$eigenID = GetOrCreateInstanz("Eigenverbrauchter PV Strom Zuletzt","dummy",$eigenKID);
$eigencurrID = GetOrCreateInstanz("Eigenverbrauchter PV Strom Aktuell","dummy",$eigenKID);
$consID = GetOrCreateInstanz("Hochrechnung Verbrauch","dummy",$enerID); 

// Kosteninstanzen anlegen
$lastCostID = GetOrCreateInstanz("Kosten Zuletzt","dummy",$enerCostID);
$currCostID = GetOrCreateInstanz("Kosten Aktuell","dummy",$enerCostID);
$einspCostID = GetOrCreateInstanz("Kosten verkaufter Strom Zuletzt","dummy",$einspCostKID);
$einspcurrCostID = GetOrCreateInstanz("Kosten verkaufter Strom Aktuell","dummy",$einspCostKID);
$consCostID = GetOrCreateInstanz("Hochrechnung Kosten","dummy",$enerCostID); 


// -------------------------- VARIABLEN ERSTELLEN -----------------------------------------------------------------------------------------------------------------------

// Verbrauchsvariablen anlegen bzw. auslesen: für Stromverbrauch
$lastDayID     = GetOrCreateVariable('Letzter Tag',2,"POWER_CONSUMPTION_LAST_DAY",$vpname,"",$logDay,$lastID,"1",$logVisual); 
$lastWeekID = GetOrCreateVariable('Letzte Woche',2,"POWER_CONSUMPTION_LAST_WEEK",$vpname,"",$logWeek,$lastID,"2",$logVisual); 
$lastMonthID = GetOrCreateVariable('Letzter Monat',2,"POWER_CONSUMPTION_LAST_MONTH",$vpname,"",$logMonth,$lastID,"3",$logVisual); 
$lastYearID = GetOrCreateVariable('Letztes Jahr',2,"POWER_CONSUMPTION_LAST_YEAR",$vpname,"",$logYear,$lastID,"4",$logVisual); 

$currDayID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_CONSUMPTION_ACTUAL_DAY",$vpname,"",$logDay,$currID,"1",$logVisual);
$currWeekID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_CONSUMPTION_ACTUAL_WEEK",$vpname,"",$logWeek,$currID,"2",$logVisual);
$currMonthID = GetOrCreateVariable('Aktueller Monat',2,"POWER_CONSUMPTION_ACTUAL_MONTH",$vpname,"",$logMonth,$currID,"3",$logVisual);
$currYearID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_CONSUMPTION_ACTUAL_YEAR",$vpname,"",$logYear,$currID,"4",$logVisual);

$consDayID     = GetOrCreateVariable('Tag',2,"POWER_CONSUMPTION_EXTRAPOLATION_DAY",$vpname,"",$logDay,$consID,"1",$logVisual);
$consWeekID = GetOrCreateVariable('Woche',2,"POWER_CONSUMPTION_EXTRAPOLATION_WEEK",$vpname,"",$logWeek,$consID,"2",$logVisual);
$consMonthID = GetOrCreateVariable('Monat',2,"POWER_CONSUMPTION_EXTRAPOLATION_MONTH",$vpname,"",$logMonth,$consID,"3",$logVisual);
$consYearID = GetOrCreateVariable('Jahr',2,"POWER_CONSUMPTION_EXTRAPOLATION_YEAR",$vpname,"",$logYear,$consID,"4",$logVisual);

// Verbrauchsvariablen anlegen bzw. auslesen: für erzeugten Strom
$erzeugDayID     = GetOrCreateVariable('Letzter Tag',2,"POWER_CONSUMPTION_LAST_DAY",$vpname,"",$logDay,$erzeugID,"1",$logVisual); 
$erzeugWeekID = GetOrCreateVariable('Letzte Woche',2,"POWER_CONSUMPTION_LAST_WEEK",$vpname,"",$logWeek,$erzeugID,"2",$logVisual); 
$erzeugMonthID = GetOrCreateVariable('Letzter Monat',2,"POWER_CONSUMPTION_LAST_MONTH",$vpname,"",$logMonth,$erzeugID,"3",$logVisual); 
$erzeugYearID = GetOrCreateVariable('Letztes Jahr',2,"POWER_CONSUMPTION_LAST_YEAR",$vpname,"",$logYear,$erzeugID,"4",$logVisual); 

$erzeugcurrDayID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_CONSUMPTION_ACTUAL_DAY",$vpname,"",$logDay,$erzeugcurrID,"1",$logVisual);
$erzeugcurrWeekID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_CONSUMPTION_ACTUAL_WEEK",$vpname,"",$logWeek,$erzeugcurrID,"2",$logVisual);
$erzeugcurrMonthID = GetOrCreateVariable('Aktueller Monat',2,"POWER_CONSUMPTION_ACTUAL_MONTH",$vpname,"",$logMonth,$erzeugcurrID,"3",$logVisual);
$erzeugcurrYearID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_CONSUMPTION_ACTUAL_YEAR",$vpname,"",$logYear,$erzeugcurrID,"4",$logVisual);

// Verbrauchsvariablen anlegen bzw. auslesen: für eingespeisten Strom
$einspDayID     = GetOrCreateVariable('Letzter Tag',2,"POWER_CONSUMPTION_LAST_DAY",$vpname,"",$logDay,$einspID,"1",$logVisual); 
$einspWeekID = GetOrCreateVariable('Letzte Woche',2,"POWER_CONSUMPTION_LAST_WEEK",$vpname,"",$logWeek,$einspID,"2",$logVisual); 
$einspMonthID = GetOrCreateVariable('Letzter Monat',2,"POWER_CONSUMPTION_LAST_MONTH",$vpname,"",$logMonth,$einspID,"3",$logVisual); 
$einspYearID = GetOrCreateVariable('Letztes Jahr',2,"POWER_CONSUMPTION_LAST_YEAR",$vpname,"",$logYear,$einspID,"4",$logVisual); 

$einspcurrDayID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_CONSUMPTION_ACTUAL_DAY",$vpname,"",$logDay,$einspcurrID,"1",$logVisual);
$einspcurrWeekID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_CONSUMPTION_ACTUAL_WEEK",$vpname,"",$logWeek,$einspcurrID,"2",$logVisual);
$einspcurrMonthID = GetOrCreateVariable('Aktueller Monat',2,"POWER_CONSUMPTION_ACTUAL_MONTH",$vpname,"",$logMonth,$einspcurrID,"3",$logVisual);
$einspcurrYearID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_CONSUMPTION_ACTUAL_YEAR",$vpname,"",$logYear,$einspcurrID,"4",$logVisual);

// Verbrauchsvariablen anlegen bzw. auslesen / ausrechen: für PV verbrauchten Strom
$eigenDayID     = GetOrCreateVariable('Letzter Tag',2,"POWER_CONSUMPTION_LAST_DAY",$vpname,"",$logDay,$eigenID,"1",$logVisual); 
$eigenWeekID = GetOrCreateVariable('Letzte Woche',2,"POWER_CONSUMPTION_LAST_WEEK",$vpname,"",$logWeek,$eigenID,"2",$logVisual); 
$eigenMonthID = GetOrCreateVariable('Letzter Monat',2,"POWER_CONSUMPTION_LAST_MONTH",$vpname,"",$logMonth,$eigenID,"3",$logVisual); 
$eigenYearID = GetOrCreateVariable('Letztes Jahr',2,"POWER_CONSUMPTION_LAST_YEAR",$vpname,"",$logYear,$eigenID,"4",$logVisual); 

$eigencurrDayID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_CONSUMPTION_ACTUAL_DAY",$vpname,"",$logDay,$eigencurrID,"1",$logVisual);
$eigencurrWeekID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_CONSUMPTION_ACTUAL_WEEK",$vpname,"",$logWeek,$eigencurrID,"2",$logVisual);
$eigencurrMonthID = GetOrCreateVariable('Aktueller Monat',2,"POWER_CONSUMPTION_ACTUAL_MONTH",$vpname,"",$logMonth,$eigencurrID,"3",$logVisual);
$eigencurrYearID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_CONSUMPTION_ACTUAL_YEAR",$vpname,"",$logYear,$eigencurrID,"4",$logVisual);



// Kostenvariablen anlegen bzw. auslesen für Strombezug
$lastDayCostID     = GetOrCreateVariable('Letzter Tag',2,"POWER_COST_LAST_DAY", $vpname2,"",$logDay,$lastCostID,"1",$logVisual);
$lastWeekCostID = GetOrCreateVariable('Letzte Woche',2,"POWER_COST_LAST_WEEK", $vpname2,"",$logWeek,$lastCostID,"2",$logVisual);
$lastMonthCostID = GetOrCreateVariable('Letzter Monat',2,"POWER_COST_LAST_MONTH", $vpname2,"",$logMonth,$lastCostID,"3",$logVisual);
$lastYearCostID = GetOrCreateVariable('Letztes Jahr',2,"POWER_COST_LAST_YEAR", $vpname2,"",$logYear,$lastCostID,"4",$logVisual);

$currDayCostID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_COST_ACTUAL_DAY", $vpname2,"",$logDay, $currCostID,"1",$logVisual);
$currWeekCostID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_COST_ACTUAL_WEEK", $vpname2,"",$logWeek, $currCostID,"2",$logVisual);
$currMonthCostID = GetOrCreateVariable('Aktueller Monat',2,"POWER_COST_ACTUAL_MONTH", $vpname2,"",$logMonth, $currCostID,"3",$logVisual);
$currYearCostID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_COST_ACTUAL_YEAR",$vpname2,"",$logYear,$currCostID,"4",$logVisual);


$consDayCostID     = GetOrCreateVariable('Tag',2,"POWER_COST_EXTRAPOLATION_DAY",$vpname2,"",$logDay,$consCostID,"1",$logVisual);
$consWeekCostID = GetOrCreateVariable('Woche',2,"POWER_COST_EXTRAPOLATION_WEEK",$vpname2,"",$logWeek,$consCostID,"2",$logVisual);
$consMonthCostID = GetOrCreateVariable('Monat',2,"POWER_COST_EXTRAPOLATION_MONTH",$vpname2,"",$logMonth,$consCostID,"3",$logVisual);
$consYearCostID = GetOrCreateVariable('Jahr',2,"POWER_COST_EXTRAPOLATION_YEAR",$vpname2,"",$logYear,$consCostID,"4",$logVisual);

// Kostenvariablen anlegen bzw. auslesen / errechnen für Einspeisung
$einspCostDayCostID     = GetOrCreateVariable('Letzter Tag',2,"POWER_COST_LAST_DAY", $vpname2,"",$logDay,$einspCostID,"1",$logVisual);
$einspCostWeekCostID = GetOrCreateVariable('Letzte Woche',2,"POWER_COST_LAST_WEEK", $vpname2,"",$logWeek,$einspCostID,"2",$logVisual);
$einspCostMonthCostID = GetOrCreateVariable('Letzter Monat',2,"POWER_COST_LAST_MONTH", $vpname2,"",$logMonth,$einspCostID,"3",$logVisual);
$einspCostYearCostID = GetOrCreateVariable('Letztes Jahr',2,"POWER_COST_LAST_YEAR", $vpname2,"",$logYear,$einspCostID,"4",$logVisual);

$einspcurrDayCostID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_COST_ACTUAL_DAY", $vpname2,"",$logDay,$einspcurrCostID,"1",$logVisual);
$einspcurrWeekCostID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_COST_ACTUAL_WEEK", $vpname2,"",$logWeek,$einspcurrCostID,"2",$logVisual);
$einspcurrMonthCostID = GetOrCreateVariable('Aktueller Monat',2,"POWER_COST_ACTUAL_MONTH", $vpname2,"",$logMonth,$einspcurrCostID,"3",$logVisual);
$einspcurrYearCostID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_COST_ACTUAL_YEAR",$vpname2,"",$logYear,$einspcurrCostID,"4",$logVisual);




// Berechnung für $valueID
// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($lastDayID, CalcConsumption($data));
SetValue($lastDayCostID,GetValue($lastDayID)*$kosten);

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($lastWeekID, CalcConsumption($data));
SetValue($lastWeekCostID,GetValue($lastWeekID)*$kosten);

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $valueID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($lastMonthID, CalcConsumption($data));
SetValue($lastMonthCostID,GetValue($lastMonthID)*$kosten);

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $valueID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($lastYearID, CalcConsumption($data));
SetValue($lastYearCostID,GetValue($lastYearID)*$kosten);


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumption($data);
SetValueFloat($currDayID, $dataDay);
SetValue($currDayCostID,GetValue($currDayID)*$kosten);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumption($data);
SetValueFloat($currWeekID, $dataWeek);
SetValue($currWeekCostID,GetValue($currWeekID)*$kosten);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $valueID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumption($data);
SetValueFloat($currMonthID, $dataMonth);
SetValue($currMonthCostID,GetValue($currMonthID)*$kosten);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $valueID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumption($data);
SetValueFloat($currYearID, $dataYear);
SetValue($currYearCostID,GetValue($currYearID)*$kosten);



// ------------------------- HOCHRECHNUNG -------------------------------------------------------------------------------------------------------------------------------
// TAG
$diff = strtotime('now') - strtotime('today');
$full = 60*60*24; // 24h
$data = round($dataDay*$full/$diff, $roundTo2);
SetValueFloat($consDayID, $data);
SetValue($consDayCostID,GetValue($consDayID)*$kosten);

// WOCHE
$diff = strtotime('now') - strtotime('last monday', strtotime('tomorrow'));
$full = 60*60*24*7; // 7 Tage
$data = round($dataWeek*$full/$diff, $roundTo2);
SetValueFloat($consWeekID, $data);
SetValue($consWeekCostID,GetValue($consWeekID)*$kosten);

// MONAT
$diff = strtotime('now') - strtotime('first day of this month 00:00');
$full = 60*60*24*date('t'); // 1 Monat
$data = round($dataMonth*$full/$diff, $roundTo2);
SetValueFloat($consMonthID, $data);
SetValue($consMonthCostID,GetValue($consMonthID)*$kosten);

// JAHR
$diff = strtotime('now') - strtotime('first day of January');
$full = 60*60*24*365; // 1 Jahr
$data = round($dataYear*$full/$diff, $roundTo2);
SetValueFloat($consYearID, $data);
SetValue($consYearCostID,GetValue($consYearID)*$kosten);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Berechnung für $eurzeugtID
// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($erzeugDayID, CalcConsumption($data));

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($erzeugWeekID, CalcConsumption($data));

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($erzeugMonthID, CalcConsumption($data));

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($erzeugYearID, CalcConsumption($data));


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumption($data);
SetValueFloat($erzeugcurrDayID, $dataDay);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumption($data);
SetValueFloat($erzeugcurrWeekID, $dataWeek);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumption($data);
SetValueFloat($erzeugMonthID, $dataMonth);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumption($data);
SetValueFloat($erzeugcurrYearID, $dataYear);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Berechnung für $eingespeistID
// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($einspDayID, CalcConsumption($data));
SetValue($einspCostDayCostID,GetValue($einspDayID)*$verkauf);

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($einspWeekID, CalcConsumption($data));
SetValue($einspCostDayCostID,GetValue($einspWeekID)*$verkauf);

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($einspMonthID, CalcConsumption($data));
SetValue($einspCostMonthCostID,GetValue($einspMonthID)*$verkauf);

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($einspYearID, CalcConsumption($data));
SetValue($einspCostYearCostID,GetValue($einspYearID)*$verkauf);


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumption($data);
SetValueFloat($einspcurrDayID, $dataDay);
SetValue($einspcurrDayCostID,GetValue($einspcurrDayID)*$verkauf);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumption($data);
SetValueFloat($einspcurrWeekID, $dataWeek);
SetValue($einspcurrWeekCostID,GetValue($einspcurrWeekID)*$verkauf);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumption($data);
SetValueFloat($einspcurrMonthID, $dataMonth);
SetValue($einspcurrMonthCostID,GetValue($einspcurrMonthID)*$verkauf);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumption($data);
SetValueFloat($einspcurrYearID, $dataYear);
SetValue($einspcurrYearCostID,GetValue($einspcurrYearID)*$verkauf);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Berechnung für $eigenverbID
// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($eigenDayID, CalcConsumption($data));

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($eigenWeekID, CalcConsumption($data));

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($eigenMonthID, CalcConsumption($data));

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($eigenYearID, CalcConsumption($data));


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumption($data);
SetValueFloat($eigencurrDayID, $dataDay);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumption($data);
SetValueFloat($eigencurrWeekID, $dataWeek);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumption($data);
SetValueFloat($eigencurrMonthID, $dataMonth);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumption($data);
SetValueFloat($eigencurrYearID, $dataYear);



// ------------------------- TIMER ERSTELLEN ----------------------------------------------------------------------------------------------------------------------------
SetTimerByName($_IPS['SELF'], "Täglich alle Stunde");


// ------------------------- FUNKTIONEN ---------------------------------------------------------------------------------------------------------------------------------
// Funktion zum addieren der Zählerwerte 
function CalcConsumption($values) 
{
    global $roundTo2;
    $consumption = 0;
    foreach($values as $value) 
    {
            $consumption += $value['Avg'];
    }
    return round($consumption, $roundTo2);
} 

// Funktion zum abziehen der Zählerwerte 
function CalcConsumption2($values) 
{
    global $roundTo2;
    $consumption = 0;
    foreach($values as $value) 
    {
            $consumption - $value['Avg'];
    }
    return round($consumption, $roundTo2);
}
    
// Funktion um einen Timer zu erzeugen
function SetTimerByName($parentID, $name) 
{
    Global ${$_IPS['SELF']};
    $eid = @IPS_GetEventIDByName($name, $parentID);
    if($eid === false) 
{
    $eid = IPS_CreateEvent(1);
    IPS_SetParent($eid, $parentID);
    IPS_SetName($eid, $name);
    
    IPS_SetEventCyclic($eid, 2 /* Täglich */, 1 /* Jeden Tag */, 0, 0, 3 /* Stündlich */, 1 /* Alle Stunden */);
    IPS_SetEventCyclicTimeFrom($eid, 0, 1, 0); //Ab 00:01 stündlich starten
    IPS_SetEventActive($eid, true);
}
    return $eid;
} 


// ------------------------- IPS GRUNDFUNKTIONEN -------------------------------------------------------------------------------------------------------------------------
// Erstellt eine Variable, wenn diese noch nicht existiert
function GetOrCreateVariable($name, $vtyp, $ident, $profil, $ascript, $log, $parentID, $position, $logVisual) // erstellt eine Variable, wenn es noch nicht exestiert
/* 
Wert 1 = Name
Wert 2 = Variablentyp
Wert 3 = Variablen-Ident 
Wert 4 = Variablenprofil 
Wert 5 = ScriptID 
Wert 6 = Logging der Daten (True/False)
Wert 7 = Übergeordnete Instanz, wo die Variable angelegt werden soll 
Wert 8 = Reihenfolge / Sortierung der Variablen
Wert 9 = Anzeige der Variable in der Visualisierung im Webfront deaktiveren oder aktivieren
*/
{
    $ObjId = @IPS_GetObjectIDByName($name, $parentID);
    if ($ObjId === false)
    {
        $ObjId = IPS_CreateVariable($vtyp);
        IPS_SetName($ObjId, $name); //Namen vergeben
        IPS_SetIdent($ObjId, $ident); //ObjectIdent vergeben
        IPS_SetParent($ObjId, $parentID); //Variable unter die Instantz verschieben
        @IPS_SetVariableCustomProfile($ObjId, $profil); //Variablen-Profil zuordnen
        @IPS_SetVariableCustomAction($ObjId, $ascript); //Verknüpft das Script mit der Variable als Actionscript

        // Archive Control ID herrausfinden
        foreach(IPS_GetInstanceList ( ) as $m_id) //Durchsucht alle Instanzen und gibt die InstanzID an $i_id weiter
        {
            $typ = IPS_GetInstance($m_id)['ModuleInfo']['ModuleName']; //Fragt die Instanzen nach den Modulnamen ab
            if ($typ =="Archive Control") $modul_id = $m_id; //Wenn die Instanz den Modulnamen "Archive Control" hat, dann schreibe die ID in $modul_id
        }
        
        $logging = AC_GetLoggingStatus($modul_id,$ObjId);
        if ($logging != 1)
        {
            AC_SetLoggingStatus($modul_id, $ObjId, $log);
            AC_SetGraphStatus($modul_id, $ObjId, $logVisual);
            IPS_ApplyChanges($modul_id);
        }// Ende Logging
        
        IPS_SetPosition($ObjId, $position);
    }
    return $ObjId;
}

// Erstellt eine Instanz, wenn diese noch nicht existiert
function GetOrCreateInstanz($name, $ityp, $parentID) //erstellt eine Variable, wenn diese noch nicht exestiert
/*
Wert 1 = Name
Wert 2 = Instanztyp 
Wert 3 = Übergeordnete Instanz, wo die Instanz angelegt werden soll
*/
{
    $ObjId = @IPS_GetObjectIDByName($name, $parentID);
    if ($ObjId === false)
    {
        if ($ityp == "dummy") $ityp='{485D0419-BE97-4548-AA9C-C083EB82E61E}';
        $ObjId = IPS_CreateInstance($ityp);
        IPS_SetName($ObjId, $name); // Namen vergeben
        IPS_SetParent($ObjId, $parentID); // Variable unter die Instantz verschieben
    }
    return $ObjId;
}

// Erstellt ein Script, wenn es noch nicht exestiert
function GetOrCreateScript($name, $parentID, $data, $hidden) 
/*
Wert 1 = Name
Wert 2 = Übergeordnete Instanz, wo das Script angelegt werden soll
Wert 3 = Ist das, was ins Script geschrieben wird
Wert 4 = Ob das Script sichtbar sein soll (true, false)
*/
{
    $ObjId = @IPS_GetObjectIDByName($name, $parentID);
    if ($ObjId === false)
    {
         $ObjId = IPS_CreateScript(0);
        IPS_SetName($ObjId, $name);
        IPS_SetScriptContent($ObjId, "$data"); // Der Text was ins Script geschrieben wird
        IPS_SetHidden($ObjId, $hidden); // Setzt Script auf nicht sichtbar
        IPS_SetParent($ObjId, $parentID); //  Script unter das Parent verschieben
     }
    return $ObjId;
}

// Erstellt eine Kategorie, wenn diese noch nicht exestiert
function GetorCreatecategory($name, $parentID)
#function GetorCreatcategory($name,$parent, $position, $hidden)
{
$LinkID = @IPS_GetObjectIDByName($name, $parentID);
if ($LinkID === false)
{
    $LinkID = IPS_CreateCategory(); // Link anlegen
    IPS_SetName($LinkID, $name); // Link benennen
    IPS_SetParent($LinkID, $parentID); // Link einsortieren unter dem Objekt mit der ID "12345 /*[Webfront\Tablet\EG\Energieberichte\Übersicht\Kosten\Hochrechnung\Hochrechnung Kosten pro Jahr\Waschmaschine]*/"
    #if ($hidden ===true) IPS_SetHidden($LinkID,true);
    #IPS_SetPosition($LinkID,$position); //Position festlegen
}
    return $LinkID;
}
?>

Gruß

Niemand eine Idee?

Hallo PowerDodge,

hab das Script mal kopiert und mit meinem Stromzähler verquickt…

Ich bekomme mit folgenden Anpassungen realistische Werte:

Zuerst eine angepasste Funktion wie folgt im Script ergänzen.

// ------------------------- FUNKTIONEN ---------------------------------------------------------------------------------------------------------------------------------
// Funktion zum addieren der Zählerwerte 

// Die Funktion "CalcConsumptionDiff()" ergänzen (copy/paste)
// lueralba 1.12.2019
function CalcConsumptionDiff($values) 
{
    global $roundTo2;
    $consumption = 0;
    foreach($values as $value) 
    {
            $consumption = $value['Max'] - $value['Min'];
    }
    return round($consumption, $roundTo2);
} 

//    ^
//    |
//    |
//    |
//      Einfach hier vor die bestehende Funktion CalcConsumption() ...

function CalcConsumption($values) 
{
    global $roundTo2;
    $consumption = 0;
    foreach($values as $value) 
    {
            $consumption += $value['Avg'];
    }
    return round($consumption, $roundTo2);
} 


und ALLE Befehle „$data… = CalcConsumption($data);“ ändern
in „$data… = CalcConsumptionDiff($data);“

Beispiel:

// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $valueID, 1, strtotime("today"), strtotime("now"), 0);
//$dataDay = CalcConsumption($data);  ****Auskommentiert****
$dataDay = CalcConsumptionDiff($data);  ****Ersetzung****
SetValueFloat($currDayID, $dataDay);
SetValue($currDayCostID,GetValue($currDayID)*$kosten);

Teste es mal damit.
Ich habe keine PV Anlage und daher alle PV relevanten Dinge gelöscht.

Gruß
lueralba

Hallo,

super vielen Dank schon mal dafür!

Werde ich etwas später ausprobieren.

Gruß

Hallo,

ich hab mir das Skript auch mal geklaut.
Spiel auch schon seit Tagen damit rum.

Bei der letzten Verbesserung durch lueralba bekomme ich keine aktuellen Werte mehr für den Tag. Obwohl der Zähler schon weiter ist.

Das Problem, das ich bei der alten Version schon hatte, das mir der eigen verbrauchte PV Strom nicht angezeigt wird.


<? 
#include('globalfunction.ips.php');
#########################################################################################################################################################################
# Scriptbezeichnung: HM.Consumption.ips.php
# Version: 1.2
# Author: Heiko Wilknitz
# Anpassung by Zerfasm & Drapple  
#
# Auswertung und Hochrechnung des Stromverbrauches
# Nochamls vielen Dank an Pitti der den Ursprung für dieses Skript gelegt hat!

// ----------------------------- KONFIGURATION --------------------------------------------------------------------------------------------------------------------------

// Anzahl Nachkommastellen bei Ergebnissen
$roundTo2   = 2; //Anzahl Nachkommastellen bei Ergebnissen
$roundTo3   = 3; //Anzahl Nachkommastellen bei Ergebnissen
$kosten        = GetValue(29295 /*[Info\EHZ\Auwertung\Bezugspreis]*/); //Floatvariable mit dem Preis pro kWh
$verkauf       = GetValue(56546 /*[Info\EHZ\Auwertung\Einspeisevergütung]*/); // Floatvariable Verkaufspreis pro KWh

//Logging einstellen
$logDay        = true; //Logging für Tag einstellen
$logWeek    = true; //Logging für Woche einstellen
$logMonth    = true; //Logging für Monat einstellen
$logYear    = true; //Logging für Jahr einstellen
$logVisual    = true; //Anzeige der Variable in der Visualisierung im Webfront deaktiveren oder aktivieren

//Auswahl ob Instanzen mit den Variablen unter einer Kategorie oder einer weiteren Instanz angeordnet werden sollen
$category = true;

//Wenn das Skript die max. Zeit von 30 Sekunden beim ersten ausführen überschreitet, kann mit der nächsten Zeile die Fehlermeldung verhindert werden
set_time_limit (60); //Hier kann die Zeit in Sekunden angegeben werden

// ----------------------------------- ID´s -----------------------------------------------------------------------------------------------------------------------------
$parentID     = IPS_GetObject($_IPS['SELF']); 
$parentID     = $parentID['ParentID'];

//ID des ArchiveHandler ermitteln 
$instances     = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}'); 
$archiveID     = $instances[0]; 

// Verbrauchszähler / Bezogener Strom
//$valueID     = IPS_GetObjectIDByIdent("ENERGY_COUNTER_TOTAL", $parentID); //Wenn ObjektID verwendet werden soll
$valueID     = 53658 /*[Info\EHZ\Haus\Haus EHZ Zähler 1029250\01 08 01 bez.]*/; //Wenn VariablenID verwendet werden soll

// PV Strom Erzeugt und Eingespeist
$eurzeugtID   = 11040 /*[Info\EHZ\PV\PV EHZ Zähler\02 08 01 ]*/;
$eingespeistID = 14820 /*[Info\EHZ\Haus\Haus EHZ Zähler 1029250\02 08 01 eins.]*/;
$eigenverbID = 35749 /*[Info\EHZ\PV\PV EHZ Zähler\Eigenverbrauch]*/;


// -------------------------- VARIABLENPROFIL ERSTELLEN -----------------------------------------------------------------------------------------------------------------
// Profilname kWh    
$vpname="kWh";
if (!IPS_VariableProfileExists($vpname)) //Wenn das Provil noch nicht Exestiert dann lege es an:
{
    IPS_CreateVariableProfile($vpname, 2); //Variabelprofil erstellen
    IPS_SetVariableProfileIcon($vpname,"Lightning"); //Variabelprofil Icon zuweisen
    IPS_SetVariableProfileText($vpname,""," kWh"); //Suffix setzen
    IPS_SetVariableProfileValues($vpname, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
    IPS_SetVariableProfileDigits($vpname, $roundTo2); //Anzahl Nachkommastellen, in diesem Fall 2
}

// Profilname"Euro"
$vpname2="Euro";
if (!IPS_VariableProfileExists($vpname2)) //Wenn das Provil noch nicht Exestiert dann lege es an:
{
    IPS_CreateVariableProfile($vpname2, 2); //Variabelprofil erstellen
    IPS_SetVariableProfileIcon($vpname2,"Euro"); //Variabelprofil Icon zuweisen
    IPS_SetVariableProfileText($vpname2,""," €"); //Suffix setzen
    IPS_SetVariableProfileValues($vpname2, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
    IPS_SetVariableProfileDigits($vpname2, $roundTo2); //Anzahl Nachkommastellen, in diesem Fall 2
} 

// -------------------------- AUSWAHL OB KATEGORIEN ODER INSTANZEN ERSTELLEN --------------------------------------------------------------------------------------------

If ($category == true)
{
    $enerID = GetorCreatecategory("Bezug Strom",$parentID);
    $enerCostID = GetorCreatecategory("Bezug Strom kosten",$parentID);
    $einspKID = GetorCreatecategory("Eingespeister Strom",$parentID);
    $einspCostKID = GetorCreatecategory("Eingespeister Strom Vergütung",$parentID);
    $erzeugKID = GetorCreatecategory("PV produzierter Strom",$parentID);
    $eigenKID = GetorCreatecategory("Eigenverbrauchter Strom",$parentID);
}
else
{
    $enerID = GetorCreateInstanz("Bezug Strom","dummy",$parentID);
    $enerCostID = GetorCreateInstanz("Bezug Strom kosten","dummy",$parentID);
    $einspKID = GetorCreatecategory("Eingespeister Strom","dummy",$parentID);
    $einspKCostID = GetorCreatecategory("Eingespeister Strom Vergütung","dummy",$parentID);
    $erzeugKID = GetorCreatecategory("PV produzierter Strom","dummy",$parentID);
    $eigenKID = GetorCreatecategory("Eigenverbrauchter Strom","dummy",$parentID);
}

// -------------------------- INSTANZEN ERSTELLEN -----------------------------------------------------------------------------------------------------------------------
// Verbrauchsinstanzen anlegen
$lastID = GetOrCreateInstanz("Verbrauch Zuletzt","dummy",$enerID);
$currID = GetOrCreateInstanz("Verbrauch Aktuell","dummy",$enerID);
$einspID = GetOrCreateInstanz("Eingespeister Strom Zuletzt","dummy",$einspKID);
$einspcurrID = GetOrCreateInstanz("Eingespeister Strom Aktuell","dummy",$einspKID);
$erzeugID = GetOrCreateInstanz("PV produziert Zuletzt","dummy",$erzeugKID);
$erzeugcurrID = GetOrCreateInstanz("PV produziert Aktuell","dummy",$erzeugKID);
$eigenID = GetOrCreateInstanz("Eigenverbrauchter PV Strom Zuletzt","dummy",$eigenKID);
$eigencurrID = GetOrCreateInstanz("Eigenverbrauchter PV Strom Aktuell","dummy",$eigenKID);
$consID = GetOrCreateInstanz("Hochrechnung Verbrauch","dummy",$enerID); 

// Kosteninstanzen anlegen
$lastCostID = GetOrCreateInstanz("Kosten Zuletzt","dummy",$enerCostID);
$currCostID = GetOrCreateInstanz("Kosten Aktuell","dummy",$enerCostID);
$einspCostID = GetOrCreateInstanz("Kosten verkaufter Strom Zuletzt","dummy",$einspCostKID);
$einspcurrCostID = GetOrCreateInstanz("Betrag verkaufter Strom Aktuell","dummy",$einspCostKID);
$consCostID = GetOrCreateInstanz("Hochrechnung Kosten","dummy",$enerCostID); 


// -------------------------- VARIABLEN ERSTELLEN -----------------------------------------------------------------------------------------------------------------------

// Verbrauchsvariablen anlegen bzw. auslesen: für Stromverbrauch
$lastDayID     = GetOrCreateVariable('Letzter Tag',2,"POWER_CONSUMPTION_LAST_DAY",$vpname,"",$logDay,$lastID,"1",$logVisual); 
$lastWeekID = GetOrCreateVariable('Letzte Woche',2,"POWER_CONSUMPTION_LAST_WEEK",$vpname,"",$logWeek,$lastID,"2",$logVisual); 
$lastMonthID = GetOrCreateVariable('Letzter Monat',2,"POWER_CONSUMPTION_LAST_MONTH",$vpname,"",$logMonth,$lastID,"3",$logVisual); 
$lastYearID = GetOrCreateVariable('Letztes Jahr',2,"POWER_CONSUMPTION_LAST_YEAR",$vpname,"",$logYear,$lastID,"4",$logVisual); 

$currDayID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_CONSUMPTION_ACTUAL_DAY",$vpname,"",$logDay,$currID,"1",$logVisual);
$currWeekID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_CONSUMPTION_ACTUAL_WEEK",$vpname,"",$logWeek,$currID,"2",$logVisual);
$currMonthID = GetOrCreateVariable('Aktueller Monat',2,"POWER_CONSUMPTION_ACTUAL_MONTH",$vpname,"",$logMonth,$currID,"3",$logVisual);
$currYearID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_CONSUMPTION_ACTUAL_YEAR",$vpname,"",$logYear,$currID,"4",$logVisual);

$consDayID     = GetOrCreateVariable('Tag',2,"POWER_CONSUMPTION_EXTRAPOLATION_DAY",$vpname,"",$logDay,$consID,"1",$logVisual);
$consWeekID = GetOrCreateVariable('Woche',2,"POWER_CONSUMPTION_EXTRAPOLATION_WEEK",$vpname,"",$logWeek,$consID,"2",$logVisual);
$consMonthID = GetOrCreateVariable('Monat',2,"POWER_CONSUMPTION_EXTRAPOLATION_MONTH",$vpname,"",$logMonth,$consID,"3",$logVisual);
$consYearID = GetOrCreateVariable('Jahr',2,"POWER_CONSUMPTION_EXTRAPOLATION_YEAR",$vpname,"",$logYear,$consID,"4",$logVisual);

// Verbrauchsvariablen anlegen bzw. auslesen: für erzeugten Strom
$erzeugDayID     = GetOrCreateVariable('Letzter Tag',2,"POWER_CONSUMPTION_LAST_DAY",$vpname,"",$logDay,$erzeugID,"1",$logVisual); 
$erzeugWeekID = GetOrCreateVariable('Letzte Woche',2,"POWER_CONSUMPTION_LAST_WEEK",$vpname,"",$logWeek,$erzeugID,"2",$logVisual); 
$erzeugMonthID = GetOrCreateVariable('Letzter Monat',2,"POWER_CONSUMPTION_LAST_MONTH",$vpname,"",$logMonth,$erzeugID,"3",$logVisual); 
$erzeugYearID = GetOrCreateVariable('Letztes Jahr',2,"POWER_CONSUMPTION_LAST_YEAR",$vpname,"",$logYear,$erzeugID,"4",$logVisual); 

$erzeugcurrDayID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_CONSUMPTION_ACTUAL_DAY",$vpname,"",$logDay,$erzeugcurrID,"1",$logVisual);
$erzeugcurrWeekID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_CONSUMPTION_ACTUAL_WEEK",$vpname,"",$logWeek,$erzeugcurrID,"2",$logVisual);
$erzeugcurrMonthID = GetOrCreateVariable('Aktueller Monat',2,"POWER_CONSUMPTION_ACTUAL_MONTH",$vpname,"",$logMonth,$erzeugcurrID,"3",$logVisual);
$erzeugcurrYearID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_CONSUMPTION_ACTUAL_YEAR",$vpname,"",$logYear,$erzeugcurrID,"4",$logVisual);

// Verbrauchsvariablen anlegen bzw. auslesen: für eingespeisten Strom
$einspDayID     = GetOrCreateVariable('Letzter Tag',2,"POWER_CONSUMPTION_LAST_DAY",$vpname,"",$logDay,$einspID,"1",$logVisual); 
$einspWeekID = GetOrCreateVariable('Letzte Woche',2,"POWER_CONSUMPTION_LAST_WEEK",$vpname,"",$logWeek,$einspID,"2",$logVisual); 
$einspMonthID = GetOrCreateVariable('Letzter Monat',2,"POWER_CONSUMPTION_LAST_MONTH",$vpname,"",$logMonth,$einspID,"3",$logVisual); 
$einspYearID = GetOrCreateVariable('Letztes Jahr',2,"POWER_CONSUMPTION_LAST_YEAR",$vpname,"",$logYear,$einspID,"4",$logVisual); 

$einspcurrDayID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_CONSUMPTION_ACTUAL_DAY",$vpname,"",$logDay,$einspcurrID,"1",$logVisual);
$einspcurrWeekID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_CONSUMPTION_ACTUAL_WEEK",$vpname,"",$logWeek,$einspcurrID,"2",$logVisual);
$einspcurrMonthID = GetOrCreateVariable('Aktueller Monat',2,"POWER_CONSUMPTION_ACTUAL_MONTH",$vpname,"",$logMonth,$einspcurrID,"3",$logVisual);
$einspcurrYearID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_CONSUMPTION_ACTUAL_YEAR",$vpname,"",$logYear,$einspcurrID,"4",$logVisual);

// Verbrauchsvariablen anlegen bzw. auslesen / ausrechen: für PV verbrauchten Strom
$eigenDayID     = GetOrCreateVariable('Letzter Tag',2,"POWER_CONSUMPTION_LAST_DAY",$vpname,"",$logDay,$eigenID,"1",$logVisual); 
$eigenWeekID = GetOrCreateVariable('Letzte Woche',2,"POWER_CONSUMPTION_LAST_WEEK",$vpname,"",$logWeek,$eigenID,"2",$logVisual); 
$eigenMonthID = GetOrCreateVariable('Letzter Monat',2,"POWER_CONSUMPTION_LAST_MONTH",$vpname,"",$logMonth,$eigenID,"3",$logVisual); 
$eigenYearID = GetOrCreateVariable('Letztes Jahr',2,"POWER_CONSUMPTION_LAST_YEAR",$vpname,"",$logYear,$eigenID,"4",$logVisual); 

$eigencurrDayID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_CONSUMPTION_ACTUAL_DAY",$vpname,"",$logDay,$eigencurrID,"1",$logVisual);
$eigencurrWeekID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_CONSUMPTION_ACTUAL_WEEK",$vpname,"",$logWeek,$eigencurrID,"2",$logVisual);
$eigencurrMonthID = GetOrCreateVariable('Aktueller Monat',2,"POWER_CONSUMPTION_ACTUAL_MONTH",$vpname,"",$logMonth,$eigencurrID,"3",$logVisual);
$eigencurrYearID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_CONSUMPTION_ACTUAL_YEAR",$vpname,"",$logYear,$eigencurrID,"4",$logVisual);



// Kostenvariablen anlegen bzw. auslesen für Strombezug
$lastDayCostID     = GetOrCreateVariable('Letzter Tag',2,"POWER_COST_LAST_DAY", $vpname2,"",$logDay,$lastCostID,"1",$logVisual);
$lastWeekCostID = GetOrCreateVariable('Letzte Woche',2,"POWER_COST_LAST_WEEK", $vpname2,"",$logWeek,$lastCostID,"2",$logVisual);
$lastMonthCostID = GetOrCreateVariable('Letzter Monat',2,"POWER_COST_LAST_MONTH", $vpname2,"",$logMonth,$lastCostID,"3",$logVisual);
$lastYearCostID = GetOrCreateVariable('Letztes Jahr',2,"POWER_COST_LAST_YEAR", $vpname2,"",$logYear,$lastCostID,"4",$logVisual);

$currDayCostID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_COST_ACTUAL_DAY", $vpname2,"",$logDay, $currCostID,"1",$logVisual);
$currWeekCostID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_COST_ACTUAL_WEEK", $vpname2,"",$logWeek, $currCostID,"2",$logVisual);
$currMonthCostID = GetOrCreateVariable('Aktueller Monat',2,"POWER_COST_ACTUAL_MONTH", $vpname2,"",$logMonth, $currCostID,"3",$logVisual);
$currYearCostID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_COST_ACTUAL_YEAR",$vpname2,"",$logYear,$currCostID,"4",$logVisual);


$consDayCostID     = GetOrCreateVariable('Tag',2,"POWER_COST_EXTRAPOLATION_DAY",$vpname2,"",$logDay,$consCostID,"1",$logVisual);
$consWeekCostID = GetOrCreateVariable('Woche',2,"POWER_COST_EXTRAPOLATION_WEEK",$vpname2,"",$logWeek,$consCostID,"2",$logVisual);
$consMonthCostID = GetOrCreateVariable('Monat',2,"POWER_COST_EXTRAPOLATION_MONTH",$vpname2,"",$logMonth,$consCostID,"3",$logVisual);
$consYearCostID = GetOrCreateVariable('Jahr',2,"POWER_COST_EXTRAPOLATION_YEAR",$vpname2,"",$logYear,$consCostID,"4",$logVisual);

// Kostenvariablen anlegen bzw. auslesen / errechnen für Einspeisung
$einspCostDayCostID     = GetOrCreateVariable('Letzter Tag',2,"POWER_COST_LAST_DAY", $vpname2,"",$logDay,$einspCostID,"1",$logVisual);
$einspCostWeekCostID = GetOrCreateVariable('Letzte Woche',2,"POWER_COST_LAST_WEEK", $vpname2,"",$logWeek,$einspCostID,"2",$logVisual);
$einspCostMonthCostID = GetOrCreateVariable('Letzter Monat',2,"POWER_COST_LAST_MONTH", $vpname2,"",$logMonth,$einspCostID,"3",$logVisual);
$einspCostYearCostID = GetOrCreateVariable('Letztes Jahr',2,"POWER_COST_LAST_YEAR", $vpname2,"",$logYear,$einspCostID,"4",$logVisual);

$einspcurrDayCostID     = GetOrCreateVariable('Aktueller Tag',2,"POWER_COST_ACTUAL_DAY", $vpname2,"",$logDay,$einspcurrCostID,"1",$logVisual);
$einspcurrWeekCostID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_COST_ACTUAL_WEEK", $vpname2,"",$logWeek,$einspcurrCostID,"2",$logVisual);
$einspcurrMonthCostID = GetOrCreateVariable('Aktueller Monat',2,"POWER_COST_ACTUAL_MONTH", $vpname2,"",$logMonth,$einspcurrCostID,"3",$logVisual);
$einspcurrYearCostID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_COST_ACTUAL_YEAR",$vpname2,"",$logYear,$einspcurrCostID,"4",$logVisual);




// Berechnung für $valueID
// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($lastDayID, CalcConsumptionDiff($data));
SetValue($lastDayCostID,GetValue($lastDayID)*$kosten);

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($lastWeekID, CalcConsumptionDiff($data));
SetValue($lastWeekCostID,GetValue($lastWeekID)*$kosten);

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $valueID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($lastMonthID, CalcConsumptionDiff($data));
SetValue($lastMonthCostID,GetValue($lastMonthID)*$kosten);

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $valueID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($lastYearID, CalcConsumptionDiff($data));
SetValue($lastYearCostID,GetValue($lastYearID)*$kosten);


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumptionDiff($data);
SetValueFloat($currDayID, $dataDay);
SetValue($currDayCostID,GetValue($currDayID)*$kosten);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumptionDiff($data);
SetValueFloat($currWeekID, $dataWeek);
SetValue($currWeekCostID,GetValue($currWeekID)*$kosten);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $valueID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumptionDiff($data);
SetValueFloat($currMonthID, $dataMonth);
SetValue($currMonthCostID,GetValue($currMonthID)*$kosten);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $valueID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumptionDiff($data);
SetValueFloat($currYearID, $dataYear);
SetValue($currYearCostID,GetValue($currYearID)*$kosten);



// ------------------------- HOCHRECHNUNG -------------------------------------------------------------------------------------------------------------------------------
// TAG
$diff = strtotime('now') - strtotime('today');
$full = 60*60*24; // 24h
$data = round($dataDay*$full/$diff, $roundTo2);
SetValueFloat($consDayID, $data);
SetValue($consDayCostID,GetValue($consDayID)*$kosten);

// WOCHE
$diff = strtotime('now') - strtotime('last monday', strtotime('tomorrow'));
$full = 60*60*24*7; // 7 Tage
$data = round($dataWeek*$full/$diff, $roundTo2);
SetValueFloat($consWeekID, $data);
SetValue($consWeekCostID,GetValue($consWeekID)*$kosten);

// MONAT
$diff = strtotime('now') - strtotime('first day of this month 00:00');
$full = 60*60*24*date('t'); // 1 Monat
$data = round($dataMonth*$full/$diff, $roundTo2);
SetValueFloat($consMonthID, $data);
SetValue($consMonthCostID,GetValue($consMonthID)*$kosten);

// JAHR
$diff = strtotime('now') - strtotime('first day of January');
$full = 60*60*24*365; // 1 Jahr
$data = round($dataYear*$full/$diff, $roundTo2);
SetValueFloat($consYearID, $data);
SetValue($consYearCostID,GetValue($consYearID)*$kosten);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Berechnung für $eurzeugtID
// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($erzeugDayID, CalcConsumptionDiff($data));

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($erzeugWeekID, CalcConsumptionDiff($data));

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($erzeugMonthID, CalcConsumptionDiff($data));

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($erzeugYearID, CalcConsumptionDiff($data));


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumptionDiff($data);
SetValueFloat($erzeugcurrDayID, $dataDay);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumptionDiff($data);
SetValueFloat($erzeugcurrWeekID, $dataWeek);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumptionDiff($data);
SetValueFloat($erzeugMonthID, $dataMonth);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumptionDiff($data);
SetValueFloat($erzeugcurrYearID, $dataYear);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Berechnung für $eingespeistID
// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($einspDayID, CalcConsumptionDiff($data));
SetValue($einspCostDayCostID,GetValue($einspDayID)*$verkauf);

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($einspWeekID, CalcConsumptionDiff($data));
SetValue($einspCostDayCostID,GetValue($einspWeekID)*$verkauf);

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($einspMonthID, CalcConsumptionDiff($data));
SetValue($einspCostMonthCostID,GetValue($einspMonthID)*$verkauf);

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($einspYearID, CalcConsumptionDiff($data));
SetValue($einspCostYearCostID,GetValue($einspYearID)*$verkauf);


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumptionDiff($data);
SetValueFloat($einspcurrDayID, $dataDay);
SetValue($einspcurrDayCostID,GetValue($einspcurrDayID)*$verkauf);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumptionDiff($data);
SetValueFloat($einspcurrWeekID, $dataWeek);
SetValue($einspcurrWeekCostID,GetValue($einspcurrWeekID)*$verkauf);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumptionDiff($data);
SetValueFloat($einspcurrMonthID, $dataMonth);
SetValue($einspcurrMonthCostID,GetValue($einspcurrMonthID)*$verkauf);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $eingespeistID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumptionDiff($data);
SetValueFloat($einspcurrYearID, $dataYear);
SetValue($einspcurrYearCostID,GetValue($einspcurrYearID)*$verkauf);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Berechnung für $eigenverbID
// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($eigenDayID, CalcConsumptionDiff($data));

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($eigenWeekID, CalcConsumptionDiff($data));

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($eigenMonthID, CalcConsumptionDiff($data));

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($eigenYearID, CalcConsumptionDiff($data));


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumptionDiff($data);
SetValueFloat($eigencurrDayID, $dataDay);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumptionDiff($data);
SetValueFloat($eigencurrWeekID, $dataWeek);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumptionDiff($data);
SetValueFloat($eigencurrMonthID, $dataMonth);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $eigenverbID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumptionDiff($data);
SetValueFloat($eigencurrYearID, $dataYear);



// ------------------------- TIMER ERSTELLEN ----------------------------------------------------------------------------------------------------------------------------
SetTimerByName($_IPS['SELF'], "Täglich alle Stunde");


// ------------------------- FUNKTIONEN ---------------------------------------------------------------------------------------------------------------------------------
// Funktion zum addieren der Zählerwerte 
function CalcConsumptionDiff($values) 
{
    global $roundTo2;
    $consumption = 0;
    foreach($values as $value) 
    {
            $consumption = $value['Max'] - $value['Min'];
    }
    return round($consumption, $roundTo2);
} 

function CalcConsumption($values) 
{
    global $roundTo2;
    $consumption = 0;
    foreach($values as $value) 
    {
            $consumption += $value['Avg'];
    }
    return round($consumption, $roundTo2);
} 

// Funktion zum abziehen der Zählerwerte 
function CalcConsumption2($values) 
{
    global $roundTo2;
    $consumption = 0;
    foreach($values as $value) 
    {
            $consumption - $value['Avg'];
    }
    return round($consumption, $roundTo2);
}
    
// Funktion um einen Timer zu erzeugen
function SetTimerByName($parentID, $name) 
{
    Global ${$_IPS['SELF']};
    $eid = @IPS_GetEventIDByName($name, $parentID);
    if($eid === false) 
{
    $eid = IPS_CreateEvent(1);
    IPS_SetParent($eid, $parentID);
    IPS_SetName($eid, $name);
    
    IPS_SetEventCyclic($eid, 2 /* Täglich */, 1 /* Jeden Tag */, 0, 0, 3 /* Stündlich */, 1 /* Alle Stunden */);
    IPS_SetEventCyclicTimeFrom($eid, 0, 1, 0); //Ab 00:01 stündlich starten
    IPS_SetEventActive($eid, true);
}
    return $eid;
} 


// ------------------------- IPS GRUNDFUNKTIONEN -------------------------------------------------------------------------------------------------------------------------
// Erstellt eine Variable, wenn diese noch nicht existiert
function GetOrCreateVariable($name, $vtyp, $ident, $profil, $ascript, $log, $parentID, $position, $logVisual) // erstellt eine Variable, wenn es noch nicht exestiert
/* 
Wert 1 = Name
Wert 2 = Variablentyp
Wert 3 = Variablen-Ident 
Wert 4 = Variablenprofil 
Wert 5 = ScriptID 
Wert 6 = Logging der Daten (True/False)
Wert 7 = Übergeordnete Instanz, wo die Variable angelegt werden soll 
Wert 8 = Reihenfolge / Sortierung der Variablen
Wert 9 = Anzeige der Variable in der Visualisierung im Webfront deaktiveren oder aktivieren
*/
{
    $ObjId = @IPS_GetObjectIDByName($name, $parentID);
    if ($ObjId === false)
    {
        $ObjId = IPS_CreateVariable($vtyp);
        IPS_SetName($ObjId, $name); //Namen vergeben
        IPS_SetIdent($ObjId, $ident); //ObjectIdent vergeben
        IPS_SetParent($ObjId, $parentID); //Variable unter die Instantz verschieben
        @IPS_SetVariableCustomProfile($ObjId, $profil); //Variablen-Profil zuordnen
        @IPS_SetVariableCustomAction($ObjId, $ascript); //Verknüpft das Script mit der Variable als Actionscript

        // Archive Control ID herrausfinden
        foreach(IPS_GetInstanceList ( ) as $m_id) //Durchsucht alle Instanzen und gibt die InstanzID an $i_id weiter
        {
            $typ = IPS_GetInstance($m_id)['ModuleInfo']['ModuleName']; //Fragt die Instanzen nach den Modulnamen ab
            if ($typ =="Archive Control") $modul_id = $m_id; //Wenn die Instanz den Modulnamen "Archive Control" hat, dann schreibe die ID in $modul_id
        }
        
        $logging = AC_GetLoggingStatus($modul_id,$ObjId);
        if ($logging != 1)
        {
            AC_SetLoggingStatus($modul_id, $ObjId, $log);
            AC_SetGraphStatus($modul_id, $ObjId, $logVisual);
            IPS_ApplyChanges($modul_id);
        }// Ende Logging
        
        IPS_SetPosition($ObjId, $position);
    }
    return $ObjId;
}

// Erstellt eine Instanz, wenn diese noch nicht existiert
function GetOrCreateInstanz($name, $ityp, $parentID) //erstellt eine Variable, wenn diese noch nicht exestiert
/*
Wert 1 = Name
Wert 2 = Instanztyp 
Wert 3 = Übergeordnete Instanz, wo die Instanz angelegt werden soll
*/
{
    $ObjId = @IPS_GetObjectIDByName($name, $parentID);
    if ($ObjId === false)
    {
        if ($ityp == "dummy") $ityp='{485D0419-BE97-4548-AA9C-C083EB82E61E}';
        $ObjId = IPS_CreateInstance($ityp);
        IPS_SetName($ObjId, $name); // Namen vergeben
        IPS_SetParent($ObjId, $parentID); // Variable unter die Instantz verschieben
    }
    return $ObjId;
}

// Erstellt ein Script, wenn es noch nicht exestiert
function GetOrCreateScript($name, $parentID, $data, $hidden) 
/*
Wert 1 = Name
Wert 2 = Übergeordnete Instanz, wo das Script angelegt werden soll
Wert 3 = Ist das, was ins Script geschrieben wird
Wert 4 = Ob das Script sichtbar sein soll (true, false)
*/
{
    $ObjId = @IPS_GetObjectIDByName($name, $parentID);
    if ($ObjId === false)
    {
         $ObjId = IPS_CreateScript(0);
        IPS_SetName($ObjId, $name);
        IPS_SetScriptContent($ObjId, "$data"); // Der Text was ins Script geschrieben wird
        IPS_SetHidden($ObjId, $hidden); // Setzt Script auf nicht sichtbar
        IPS_SetParent($ObjId, $parentID); //  Script unter das Parent verschieben
     }
    return $ObjId;
}

// Erstellt eine Kategorie, wenn diese noch nicht exestiert
function GetorCreatecategory($name, $parentID)
#function GetorCreatcategory($name,$parent, $position, $hidden)
{
$LinkID = @IPS_GetObjectIDByName($name, $parentID);
if ($LinkID === false)
{
    $LinkID = IPS_CreateCategory(); // Link anlegen
    IPS_SetName($LinkID, $name); // Link benennen
    IPS_SetParent($LinkID, $parentID); // Link einsortieren unter dem Objekt mit der ID "12345"
    #if ($hidden ===true) IPS_SetHidden($LinkID,true);
    #IPS_SetPosition($LinkID,$position); //Position festlegen
}
    return $LinkID;
}
?>

Ich habs noch nicht probiert, bei mir war das Problem
das aktuelle Leistung wenn eingespeist wird mit Minus rein kommt.

Mal sehen, hoffe es wird laufen.

Hallo,

so nun bin ich dazu gekommen, habe aber erst nur ausprobiert. Mehrere Werte werden nicht berechnet oder
auch falsch. Da muss man genauer hin schauen.

So sieht das bei mir aus:

Eine Frage an experten wieso berechnet IPS hier das z.B. nicht korrekt:

// Berechnung für $eurzeugtID
// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($erzeugDayID, CalcConsumptionDiff($data));

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($erzeugWeekID, CalcConsumptionDiff($data));

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($erzeugMonthID, CalcConsumptionDiff($data));

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($erzeugYearID, CalcConsumptionDiff($data));


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumptionDiff($data);
SetValueFloat($erzeugcurrDayID, $dataDay);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumptionDiff($data);
SetValueFloat($erzeugcurrWeekID, $dataWeek);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumptionDiff($data);
SetValueFloat($erzeugMonthID, $dataMonth);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumptionDiff($data);
SetValueFloat($erzeugcurrYearID, $dataYear);

Ergebnis:

Hallo power dodge,

da reicht man den kleinen FInger …

Nein, im Ernst: Ich kenne dein System nicht, ich habe auch keine PV Anlage.
Somit weiß ich auch nicht, womit bei Dir die Variablen befüllt und archiviert sind/werden.

Ich würde zur „Fehlersuche“ des Scriptes

welches freundlicherweise von einem Forumsmitglied geteilt und von Ihm weiterhin oder von anderen IPS Usern gepflegt wird !
Danke dafür an dieser Stelle

erstmal mit dem Wert „PV produzierter Strom-PV produziert Aktuell-Aktueller Tag“ geginnen.

Welchen realistischen Wert erwartest Du hier ?
Es steht hier zweimal 4,00 kWh in deinen letzten Screenshots.

Wird die entsprechende Variable archiviert?
Zählt sie überhaupt hoch ?

Ist das eine akkumulierender Wert (also wie ein km-Zähler) oder ein aktueller kW-Wert (wie Geschwindigkeit km/h) ?

Du schreibst auch dass Du schon früher fehlerhafte (unerwartete) Werte hattest ?

Du siehst, aus der Ferne habe ich so meine Schwierigkeiten zu helfen, da ich nicht vor deinem System sitze.
Mein (um PV reduziertes) Script bringt mit meiner Änderung recht realistische Werte meines Stromzählers (IPS V5.3).

Um zu sehen, was da aus den archivierten, aggregierten Daten geholt wird, kannst du mit dem Befehl var_dump ($data); arbeiten.
Im Script einfügen und im Scripteditor ausführen. Dann erhältst Du unten im Fenster die Ausgabe mit welchen Werten gerechnet wird.

Beispiel zum Debuggen (anschließend die Zeile wieder löschen, sonst wird deine LOG-Datei damit vollgeschrieben:

// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $eurzeugtID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
var_dump ($data);  //  Ausgabe 
$dataDay = CalcConsumptionDiff($data);
SetValueFloat($erzeugcurrDayID, $dataDay);

Was erscheint bei Dir ?

Gruß
lueralba

Hallo Golly,

Obwohl der Zähler schon weiter ist.

Durch das Script wird ein Timer mit einer Stunde angelegt.
Somit werden erst/nur alle Stunde die Variablen neu beschrieben.

Irgendwie sieht es bei Dir so aus, als wenn Du die „falschen“ Variablen-IDs in das Script eingetragen hast ?

Und - welche IPS Version nutzt Du ?

Gruß
lueralba

Hallo Lueralba,

vielen Dank für Deine Antwort.

Wechselrichter sagt es wurden heute 3.3KWh produziert, die Zähler bieten mir 3 Werte an, diese Werte
kommen alle 20 Sec. rein. Bei den Variablen unter Archivierung steht Standart.
Die Werte kommen in etwa so rein: 70,11 , 70,50 , 71,00 so in etwa, grob gesagt.

Eigenverbrauch rechne ich mit einem script aus.

Vielen Dank für den Tipp mit dem Anzeigen der Werte, folgendes ist dabei herausgekommen:

array(1) {
  [0]=>
  array(7) {
    ["TimeStamp"]=>
    int(1575327600)
    ["Avg"]=>
    float(1051,7311581833)
    ["MinTime"]=>
    int(1575327600)
    ["Min"]=>
    float(1050)
    ["MaxTime"]=>
    int(1575379134)
    ["Max"]=>
    float(1054)
    ["Duration"]=>
    int(77328)
  }
}

Hoffe es war so richtig.

Ja genau, manche Werte weren auch mit 0 ausgewertet, oder noch nie.

Vielen Dank noch mal, für die Tipps und die Mühe.

Gruß

Mal ein paar schnelle Notizen zu deiner Ausgabe:

array(1) {
[0]=>
array(7) {
[„TimeStamp“]=>
int(1575327600)
[„Avg“]=>
float(1051,7311581833)
[„MinTime“]=>
int(1575327600) <-----> VON: 03.12.2019 - 00:00:00
[„Min“]=>
float(1050) <-------------> =1050 kW Warum kein Gleitkommawert ?
[„MaxTime“]=>
int(1575379134) <-----> BIS: 03.12.2019 - 14:18:54
[„Max“]=>
float(1054) <-------------> =1054 kW Warum kein Gleitkommawert ?
[„Duration“]=>
int(77328) <-----> Dauer: 21:28:48
}
}

Sind die Min und Max Werte richtig ? 1050,0 kWh um 0:00 und 1054,0 gegen 14:18 das wäre ein Verbrauch in dieser Zeitspanne von ca. 4kW hoch gerechnet auf den heutigen Tag ca. 6,5kW. Da passt doch irgendetwas garnicht.

Gruß
lueralba

Hallo lueralba,

das ist kein Verbrauch sondern Erzeugung der PV.

erstmal mit dem Wert „PV produzierter Strom-PV produziert Aktuell-Aktueller Tag“ geginnen.

Dieser Tageswert wie es aussieht wird richtig berechnet, 4KW sind etwa richtig.
Die Werte sind nicht genau ohne Nachkommastelle da keine PIN zu dem 2ten Zähler zu bekommen ist.
(Hoffe bis jetzt zumindest)

Das zweite Problem könnte sein das ich umgezogen bin von einen System zum anderen. Da habe ich die Daten
importiert zu den paar Variablen.

Im letzten Screenshot wird aber Woche und Monat falsch berechnet.
Woche wäre etwa 7-8 KW
Monat wäre etwa so ähnlich wie der Wert für Woche

Hab auch mal ausprobiert für die Woche welche Daten IPS ausspuckt dafür:

array(1) {
  [0]=>
  array(7) {
    ["TimeStamp"]=>
    int(1575241200)
    ["Avg"]=>
    float(1037,1751862356)
    ["MinTime"]=>
    int(1575241200)
    ["Min"]=>
    float(963)
    ["MaxTime"]=>
    int(1575379134)
    ["Max"]=>
    float(1054)
    ["Duration"]=>
    int(200284)
  }
}

Wie ich merke paar Daten scheinen kaputt zu sein 963 sehe ich öffters in der WebFront.
Daher errechnet er sich wohl die 91 KW

Name: Produzierter Strom (ID: 12233)
Aggregation: Tag
Start: 1.12.2019 00:00:00
Ende: 4.12.2019 08:10:12

TimeStamp;Avg;MinTime;Min;MaxTime;Max
4.12.2019 00:00:00;1054,00;4.12.2019 00:00:00;1054,00;4.12.2019 00:00:00;1054,00
3.12.2019 00:00:00;1051,97;3.12.2019 00:00:00;1050,00;3.12.2019 14:18:54;1054,00
2.12.2019 00:00:00;1017,03;2.12.2019 00:00:00;963,00;2.12.2019 13:32:10;1050,00
1.12.2019 00:00:00;963,00;1.12.2019 00:00:00;963,00;1.12.2019 00:00:00;963,00
Name: Produzierter Strom (ID: 12233)
Aggregation: Tag
Start: 1.11.2019 00:00:00
Ende: 1.12.2019 00:00:00

TimeStamp;Avg;MinTime;Min;MaxTime;Max
1.12.2019 00:00:00;963,00;1.12.2019 00:00:00;963,00;1.12.2019 00:00:00;963,00
30.11.2019 00:00:00;963,00;30.11.2019 00:00:00;963,00;30.11.2019 00:00:00;963,00
29.11.2019 00:00:00;963,00;29.11.2019 00:00:00;963,00;29.11.2019 00:00:00;963,00
28.11.2019 00:00:00;963,00;28.11.2019 00:00:00;963,00;28.11.2019 00:00:00;963,00
27.11.2019 00:00:00;963,00;27.11.2019 00:00:00;963,00;27.11.2019 00:00:00;963,00
26.11.2019 00:00:00;963,00;26.11.2019 00:00:00;963,00;26.11.2019 00:00:00;963,00
25.11.2019 00:00:00;963,00;25.11.2019 00:00:00;963,00;25.11.2019 00:00:00;963,00
24.11.2019 00:00:00;963,00;24.11.2019 00:00:00;963,00;24.11.2019 00:00:00;963,00
23.11.2019 00:00:00;948,76;23.11.2019 00:00:00;935,00;23.11.2019 15:07:26;963,00
22.11.2019 00:00:00;931,43;22.11.2019 00:00:00;928,00;22.11.2019 15:18:05;935,00
21.11.2019 00:00:00;926,36;21.11.2019 00:00:00;925,00;21.11.2019 14:18:35;928,00
20.11.2019 00:00:00;905,59;20.11.2019 00:00:00;888,00;20.11.2019 15:32:15;925,00
19.11.2019 00:00:00;884,94;19.11.2019 00:00:00;882,00;19.11.2019 13:56:04;888,00
18.11.2019 00:00:00;880,99;18.11.2019 00:00:00;880,00;18.11.2019 13:13:14;882,00
17.11.2019 00:00:00;877,14;17.11.2019 00:00:00;874,00;17.11.2019 14:37:23;880,00
16.11.2019 00:00:00;869,91;16.11.2019 00:00:00;866,00;16.11.2019 14:32:10;874,00
15.11.2019 00:00:00;863,46;15.11.2019 00:00:00;861,00;15.11.2019 14:45:50;866,00
14.11.2019 00:00:00;842,95;14.11.2019 00:00:00;826,00;14.11.2019 15:11:29;861,00
13.11.2019 00:00:00;821,81;13.11.2019 00:00:00;817,00;13.11.2019 14:24:49;826,00
12.11.2019 00:00:00;807,75;12.11.2019 00:00:00;798,00;12.11.2019 14:31:08;817,00
11.11.2019 00:00:00;795,30;11.11.2019 00:00:00;793,00;11.11.2019 15:47:18;798,00
10.11.2019 00:00:00;778,09;10.11.2019 00:00:00;765,00;10.11.2019 16:22:18;793,00
9.11.2019 00:00:00;755,97;9.11.2019 00:00:00;746,00;9.11.2019 14:55:17;765,00
8.11.2019 00:00:00;736,38;8.11.2019 00:00:00;727,00;8.11.2019 14:56:27;746,00
7.11.2019 00:00:00;720,47;7.11.2019 00:00:00;714,00;7.11.2019 14:52:26;727,00
6.11.2019 00:00:00;709,86;6.11.2019 00:00:00;706,00;6.11.2019 16:02:56;714,00
5.11.2019 00:00:00;698,77;5.11.2019 00:00:00;692,00;5.11.2019 15:31:55;706,00
4.11.2019 00:00:00;684,79;4.11.2019 00:00:00;678,00;4.11.2019 15:32:15;692,00
3.11.2019 00:00:00;666,44;3.11.2019 00:00:00;654,00;3.11.2019 15:48:24;678,00
2.11.2019 00:00:00;647,92;2.11.2019 00:00:00;642,00;2.11.2019 15:24:56;654,00
1.11.2019 00:00:00;640,13;1.11.2019 00:00:00;638,00;1.11.2019 13:40:45;642,00

Ah denke das hat mit dem Umzug zutun, die 963 hatte es für die Tage auch geschrieben,
an denen er keine Infos hatte. Da scheint der Bock zu sitzen.

Edit: Mehrmals probiert den Bereich über den Archiv zu löschen. Gebe Datum und Uhrzeit an,
da überlegt er kurz und sagt 0 Datensätze wurden gelöscht

Konnte über Archiv keine Datensätze löschen, habe alle für die Variablen Daten gelöscht.
Jetzt muss ich abwarten, bis da sich die Daten ansammeln, hoffe läuft dann besser.

Danke noch mal sehr für die Unterstützung!

Hallo,

hätte noch ne kleine Frage.
Soll ich die Wäre als Standard loggen oder als Zähler?

Gruß

Erstmal Danke für eure arbeit.

Welches ist denn jetzt die aktuelle Version. Das wäre sehr hilfreich.
schon mal DANKE