Stromverbrauchshochrechnung mit kleinem Fehler

Hallo zusammen,

meine allererste Scriptbastelstunde hat mich zu einer Erweiterung des Scriptes von Steiner um einen Hochrechnung für die Verbrauchssensibilisierung :smiley: geführt.

Im dritten Teil, erfolgt die Berechnung des täglichen Verbrauches. Dieser Teil sollte nur ausgeführt werden wenn der Mitternachtsevent ausgeführt wird.

Leider klappt das nicht wie gewünscht und dieser Wert wird ebenfalls alle 15 Min. aktualisiert. Habe ich hier Mist gebaut - aber WO?

Danke, Stromer

<?
$imp_kw = 1000;                  // Impulse pro kw/h
$counter = GetValue(16994 /*[12 Stromzähler\EKM-868 (Counter) Z1\Counter aktuelle Leistungsaufnahme]*/);      // EKM Counter aktuell

// 15 minütlicher Verbrauch
																												// echo "Counter: $counter
";   Anzeige aktueller Counter
$delta = $counter - GetValue(50509 /*[12 Stromzähler\EKM-868 (Counter) Z1\Counter old 15 Min]*/);               								         // delta = Zählerdelta 15 Min.
																												// echo  "Delta: $delta
";				   // Anzeige Differenz Delta Counter
$data =  IPS_GetVariable(50509 /*[12 Stromzähler\EKM-868 (Counter) Z1\Counter old 15 Min]*/);
$delta_t =time()-($data['VariableUpdated']);              									// Zeitdiff = aktuelle Zeit - Zeit wo die Var zuletzt upgedatet wurde
																												// echo  "delta_t: $delta_t Sekunden
";			   // Delta Zeit
SetValue(50509 /*[12 Stromzähler\EKM-868 (Counter) Z1\Counter old 15 Min]*/, $counter);      																	// setzen Conter old 15 min mit dem aktuellen Wert
$delta = (double)($delta * 3600 / $delta_t / $imp_kw);
SetValue(53656 /*[12 Stromzähler\EKM-868 (Counter) Z1\durchschnittlicher Verbrauch /h letzte 15 Min]*/,$delta);                                   								   // setzen Var für  durchschn. Verbrauch je Stunde
																												// echo  "Verbrauch: ".$delta ." kW/h
";


// 15 minütlicher Verbrauch auf ein Jahr hochgerechnet
$delta_kj = $delta * 8760;
SetValue(13040 /*[12 Stromzähler\EKM-868 (Counter) Z1\1 Jahr Hochrechnung letzte 15 Min kW/h]*/,$delta_kj);
// 15 minütlicher Verbrauch Kosten
$delta_k = $delta * GetValue(52385 /*[12 Stromzähler\EKM-868 (Counter) Z1\epreis_kwh]*/);  // durschn Verbrauch letzte 15 Min * Preis je kWh
echo  "Kosten letzte 15 Min.: ".$delta_k ." €";
SetValue(26415 /*[12 Stromzähler\EKM-868 (Counter) Z1\Kosten letzte 15 Min]*/,$delta_k);               		   // Kosten letzte 15 Min -> Variable setzen
// 15 minütlicher Verbrauch Kosten auf ein Jahr hochgerechnet
$delta_kj = GetValue(26415 /*[12 Stromzähler\EKM-868 (Counter) Z1\Kosten letzte 15 Min]*/) * 8760;    // Kosten hochgerechnet auf ein Jahr 35040 viertel Stunden
echo  "1 Jahr Hochrechnung letzte 15 Min.: ".$delta_kj ." €";
SetValue(46329 /*[12 Stromzähler\EKM-868 (Counter) Z1\1 Jahr Hochrechnung letzte 15 Min €/h]*/,$delta_kj);               		   // 1 Jahr Hochrechnung der Kosten letzte 15 Min -> Variable setzen


// stündlicher Verbrauch
$data =  IPS_GetVariable(15850 /*[12 Stromzähler\EKM-868 (Counter) Z1\Counter old 60 Min]*/);                           // Counter letzte 60 min
$delta_t =time()-($data['VariableUpdated']);
if ($delta_t >= 3600){                                      // wenn delta > 3600 sekunden dann
   $delta = $counter - GetValue(15850 /*[12 Stromzähler\EKM-868 (Counter) Z1\Counter old 60 Min]*/);                     // neuer counter - conter vor 60 min
    SetValue(15850 /*[12 Stromzähler\EKM-868 (Counter) Z1\Counter old 60 Min]*/, $counter );                             // neuer wert in counter setzen für die nächste berechnung
    $delta = (double)($delta * 3600 / $delta_t / $imp_kw);  //
    SetValue(11067 /*[12 Stromzähler\EKM-868 (Counter) Z1\durchschnittlicher Verbrauch /h letzte 60 Min]*/,$delta);
    
	 //stündliche Kosten
    $delta_k = $delta * GetValue(52385 /*[12 Stromzähler\EKM-868 (Counter) Z1\epreis_kwh]*/);  
	 SetValue(33278 /*[12 Stromzähler\EKM-868 (Counter) Z1\Kosten letzte 60 Min]*/,$delta_k);
	 
	 // stündliche Hochrechnung Verbrauch
    $delta_vj = GetValue(11067 /*[12 Stromzähler\EKM-868 (Counter) Z1\durchschnittlicher Verbrauch /h letzte 60 Min]*/) * 8760;    // Kosten hochgerechnet auf ein Jahr 8760 Stunden
    SetValue(20786 /*[12 Stromzähler\EKM-868 (Counter) Z1\1 Jahr Hochrechnung letzte 60 Min kW/h]*/,$delta_vj);
    
    // stündliche Hochrechnung Kosten (Gesamtmenge * kW Preis)
    $delta_kj = GetValue(20786 /*[12 Stromzähler\EKM-868 (Counter) Z1\1 Jahr Hochrechnung letzte 60 Min kW/h]*/) * GetValue(52385 /*[12 Stromzähler\EKM-868 (Counter) Z1\epreis_kwh]*/);
    SetValue(27917 /*[12 Stromzähler\EKM-868 (Counter) Z1\1 Jahr Hochrechnung letzte 60 Min €/]*/,$delta_kj);
}

// Tages-Verbrauch
$id_event = $IPS_EVENT;
if ($id_event = 51639 /*[12 Stromzähler\EKM-868 (Counter) Z1\MomentanVerbrauchsberechnung Z1\]*/){
      $delta = $counter - GetValue(26131 /*[12 Stromzähler\EKM-868 (Counter) Z1\Counter old Midnight]*/);                 // Counter um Mitternacht
    SetValue(26131 /*[12 Stromzähler\EKM-868 (Counter) Z1\Counter old Midnight]*/, $counter );
    $delta = (double)($delta / 24 / $imp_kw);
    SetValue(43107 /*[12 Stromzähler\EKM-868 (Counter) Z1\durchschnittlicher Verbrauch Gestern]*/,$delta);

	 // Kosten gestern (Verbrauch gestern * kW Preis)
    $delta_k = $delta * GetValue(52385 /*[12 Stromzähler\EKM-868 (Counter) Z1\epreis_kwh]*/);
	 SetValue(10208 /*[12 Stromzähler\EKM-868 (Counter) Z1\Kosten Gestern]*/,$delta_k);

    // Tag Hochrechnung Verbrauch
    $delta_vj = GetValue(43107 /*[12 Stromzähler\EKM-868 (Counter) Z1\durchschnittlicher Verbrauch Gestern]*/) * 365;    // Verbrauch hochgerechnet auf ein Jahr 365 Tage
    SetValue(29219 /*[12 Stromzähler\EKM-868 (Counter) Z1\1 Jahr Hochrechnung letzter Tag kW/h]*/,$delta_vj);

    // Tag Hochrechnung Kosten (Gesamtmenge * kW Preis)
    $delta_kj = GetValue(29219 /*[12 Stromzähler\EKM-868 (Counter) Z1\1 Jahr Hochrechnung letzter Tag kW/h]*/) * GetValue(52385 /*[12 Stromzähler\EKM-868 (Counter) Z1\epreis_kwh]*/);
    SetValue(10711 /*[12 Stromzähler\EKM-868 (Counter) Z1\1 Jahr Hochrechnung letzter Tag €/h]*/,$delta_kj);
}
?>

Hi,

du hast einen Trigger auf das Skript von 15 Minuten gesetzt.
Somit wird dieses Skript immer alle 15 Minuten einmal ausgeführt. (und zusätzlich Mitternacht (2.Trigger).

Damit die Hochrechnung nur einmal läuft, musst du diese in ein seperates Skript auslagern und diesem nur einen Trigger (um Mitternacht) geben.
Und aus dem ursprünglichen Skript entfernen, sonst funkt das alls 15 Minuten dazwischen und überschreibt wieder deine Werte.

Grüße
Björn
:slight_smile:

Hi Björn,

deshalb ist doch das IPS Event Thema drin. Der letzte Teil wird doch nur ausgeführt, wenn der Mitternachtstrigger als Event passt. Und nur hier wird die Variable für den ganzen Tag gesetzt. Sonst nur der 15min Trigger. Dachte ich jedenfalls.

Wird nicht alles nach dem IF nur ausgeführt, wenn der auslösende Event der Mitternachtsevent ist?

Ich trenne das gerne, suche aber mehr nach der Begründung, warum das jetzt nicht läuft.

Hi,

jep hab ich übersehen, dass du mit unterschiedlichen $IPS_Event arbeitest.
War ich wohl zu schnell.

Allerdings stimmt der Vergleich meiner Meinung dann nicht.

if ($id_event = 51639 /*[12 Stromzähler\EKM-868 (Counter) Z1\MomentanVerbrauchsberechnung Z1\]*/)

es müsste meiner Meinung nach , dann „==“ heißen:

if ($id_event == 51639 /*[12 Stromzähler\EKM-868 (Counter) Z1\MomentanVerbrauchsberechnung Z1\]*/)

Vielleicht liegt es ja daran.

Viele Grüße
Björn:)

Danke Björn,

das wars, morgen ist der Beweis erbracht :wink: