COP Berechnung Wärmepumpe

Hallo miteinander,

momentan erarbeite ich mir ein Script zur COP Berechnung der Wärmepumpe. Zum einen um das System besser kennenzulernen und zum anderen um aus den Ergebnissen den Betrieb zu optimieren.

Für den Stromverbrauch nutze ich derzeit einen Drehstromzähler am EKM mit 1000 Impulsen.
Die Wärmemenge bekommen wir aus einem M-Bus Zelsius WMZ.

In einer ersten Version habe ich den COP aus den Momentanwerten mit den Nachteilen von sprunghaften Werten berechnet.

Das untere Script soll diesen Effekt etwas minimieren und den COP aus dem Energiemengen der letzten 5 Minuten berechnen.

Das ist jetzt eines meiner ersten Scripte und ich bitte Euch mal darüberzuschauen. Besonders das Abfangen einer Division durch Null bereitet mir Probleme.
Ebenfalls mal die Frage an die Wärmepumpenbesitzer: Welche Werte berechnet Ihr und habe ich vielleicht Denkfehler in meiner untenstehenden Berechnung?

<?
echo "===== COP Berechnung Wärmepumpe ======================================
";
// COP = gelieferte Wärmemenge des WMZ / eingesetzte Energie
$imp_kw = 1000;                  // Impulse pro kw/h
$counter = GetValue(55937);      // EKM Counter 2 für WP aktuell
$counter_old = GetValue(51800);  // EKM Counter 2 vor 5 Minuten
//Fuer Testzwecke koennen Debugausgaben aktiviert werden
// Debug-Modus an=true / aus=false
$debug = true;

// 5 minütlicher Verbrauch
															// echo "Counter: $counter
";   Anzeige aktueller Counter
$delta = $counter - GetValue(51800);         // delta = Zählerdelta 5 Min. Counter old

if($debug) {echo "Counter Old:  $counter_old 
";}
if($debug) {echo "Counter aktuell:  $counter 
";}
if($debug) {echo "Delta:  $delta 
";}

// Teil 1 Stromverbrauch in den letzten 5 Minuten
$data =  IPS_GetVariable(51800);
$delta_t =time()-($data['VariableUpdated']);   // Zeitdiff = aktuelle Zeit - Zeit wo die Var zuletzt upgedatet wurde

if($debug) {echo "Delta:  $delta Sekunden
";}
if($debug) {print_r ($data) ;}
															
SetValue(51800, $counter);      					// setzen Conter old 5 min mit dem aktuellen Wert
$delta_verbrauch = (double)($delta * 3600 / $delta_t / $imp_kw);
SetValue(31548,$$delta_verbrauch);           // setzen Var für  durchschn. Verbrauch je Stunde

if($debug) {echo "Verbrauch:  $delta_verbrauch kW/h
";}

// Teil 2 gelieferte Wärmemenge in den letzten 5 Minuten

$waermemenge_aktuell = GetValue(38693);  /*[15 WMZ\M-Bus Device WMZ\Wärmeenergie Gesamt]*/
$waermemenge_5min = GetValue(33401);  /*[15 WMZ\M-Bus Device WMZ\Waermemenge vor 5 Min]*/
$waermemenge_delta = $waermemenge_aktuell - $waermemenge_5min;

if($debug) {echo "Wärmemenge aktuell:  $delta 
";}
if($debug) {echo "Wärmemenge vor 5 Min.:  $delta 
";}
if($debug) {echo "Wärmemenge Delta:  $delta 
";}

// Teil 3 COP Berechnung im Durchschnitt der letzten 5 Minuten
$cop2 = $waermemenge_delta / $delta_verbrauch;
SetValue(36002, $cop2);
if($debug) {echo "COP2 - 5 Minuten:  $delta 
";}
?>

Herzlichen Dank, Stromer

Hallo Stromer,
da ich mich auch gerade mit der AZ-Auswertung beschäftige - kurze Frage: inwieweit hast Du die Div/Null gelöst?
MFG, kabo63.

ich habe das noch nicht weiterverfolgt. Habe jetzt neue Stromzähler und baue alle neu auf.

Für die Division mach einfach eine Abfrage rein, die Berechnungen mit 0 kW WÄrmemenge verwirft.

…yupp genau so hab ich’s auch gemacht - anhängend mein rudimentäres, hoffentlich funktionierendes Basis-Script, vorerst für den Tagesverbrauch/Tages-AZ

<?
$counter = GetValue(39840 /*[Heizraum\WP Stromzähler\M-Bus Strom\Energy]*/);

// Tages-Verbrauch
$id_event = $IPS_EVENT;
if ($id_event == 44287 /*[Heizraum\WP Stromzähler\Stromverbrauch Wärmepumpe\Stromverbrauch\]*/) {
      $delta = $counter - GetValue(18243 /*[Heizraum\WP Stromzähler\Stromverbrauch Wärmepumpe\counter old midnight]*/);
    SetValue(18243 /*[Heizraum\WP Stromzähler\Stromverbrauch Wärmepumpe\counter old midnight]*/, $counter );
    $delta = (double)($delta);
    SetValue(58714 /*[Heizraum\WP Stromzähler\Stromverbrauch Wärmepumpe\Tagesverbrauch]*/,$delta);
    
//Ermittlung der Gesamt-AZ, zuerst checken, ob Wärme erzeugt wurde

   if (getvaluefloat(22635 /*[Heizraum\WMZ WP gesamt\erzeugte Wärmemengen gesamt	ägliche Wärmemenge]*/) > 0){
    setvaluefloat(53752 /*[Heizraum\Wärmepumpe\WP Arbeitszahlen\AZ_Gesamt]*/, getvaluefloat(22635 /*[Heizraum\WMZ WP gesamt\erzeugte Wärmemengen gesamt	ägliche Wärmemenge]*/) / getvaluefloat(58714 /*[Heizraum\WP Stromzähler\Stromverbrauch Wärmepumpe\Tagesverbrauch]*/));
	}
	else {
	   setvaluefloat(53752 /*[Heizraum\Wärmepumpe\WP Arbeitszahlen\AZ_Gesamt]*/, 0);
	}
}

?>

Gruß, kabo63.