Tagesverbrauch einer Float Variable errechen?

Hallo,
nun ich weis nicht wie ich das Problem beschreiben soll, ich versuche es einmal :slight_smile:

Ich habe mir ein Script erstellt, das mir anhand einer Impuls Wasseruhr ( VL,RL Temp. spez. Wärmekapazität des Wassers) den aktuellen Wärme bzw. Kälteverbrauch errechnet und diesen je nach Kälte/Wärmemenge in eine Float Variable Schreibt.
Das Script starte ich minütlich, somit hab ich jedesmal einen anderen Wert.

Aber wie kann ich daraus die tägliche Wärme/Kältemenge errechen?
Ein WMZ gibt pro kwh einen Impuls ab, dies ist aber bei mir nicht der Fall-geht das trotzdem irgendwie?

Vielen Dank!!!:confused:

Also mit dem logging funktioniert es ja leider nicht (Zähler / Standart).
Der aktuelle Wert ändert sich ja minütlich.

Würde es funktionieren wenn ich den Wert der Variable kopiere und in eine andere speichere?
Also jedesmal wenn sich der KWh Wert ändert diesen dann dem vorherigen dazuaddiere? + als Zähler logge?

Also wenn ich das richtig verstanden habe ist die Angabe ein Zählerstand.

Die z.B. um 00:00 1000Kwh hat und um 24:00 1010Kwh beträgt.

dann erstelle ein Skript das die 0:00 den Zählerstand in einen Extravariable schreibt.
Aber bevor du diese änderst berechnest du die Differenz.

Hier ein Beispiel


<?
$id_var = 12345; // Variable des Zählerstandes
$id_save = 54321; // Variable in der Zwischen gespeichert wird.
$id_diff = 11111; // Variable die die Differenz anzeigt

$old_state = GetValue($id_save);
$new_state = GetValue($id_var);
SetValue($id_save, $new_state); //Speichert den Aktuellen Wert um ihn bei der nächsten Berechnung verwenden zu können

if($old_state == 0) Exit; //damit nicht beim ersten Wert der Gesamt KWH wert als Tagesverbrauch angezeigt wird 
$diff = $new_state - $old_state; //berechnen der Differenz

SetValue($id_diff, $diff ); //Setzen der Differenz


?>

Das Skript dann nur noch täglich um 00:01 ausführen und es sollte gehen.

Swen

Danke für deine Hilfe.

Es ist so das der Wert in der Float Variable sich alle 30 Sekunden ändert. Zb. : 1,2 kWh, 1,5 kWh, usw…

Jetzt hab ich mir gedacht das ich auch alle 30 Sekunden denn Wert von dieser Float Variable in eine andere Variable speichere bzw. addiere?

Also ist das kein Zählerstand sondern der Verbrauch?
Dann wirst du wohl kaum genauen Daten bekommen.

Ja genau das ist der aktuelle Verbrauch.
Aber wie errechnet das dann ein WMZ?
Da muss es doch eine Lösung geben? :slight_smile:

Ich habe mir ein Script erstellt, das mir anhand einer Impuls Wasseruhr ( VL,RL Temp. spez. Wärmekapazität des Wassers) den aktuellen Wärme bzw. Kälteverbrauch errechnet und diesen je nach Kälte/Wärmemenge in eine Float Variable Schreibt.
Das Script starte ich minütlich, somit hab ich jedesmal einen anderen Wert.

poste mal das Skript, du machst das ja mit Wasseruhren(wahrscheinlich über ein S0 ausgang).

Swen

Hier das Script zum errechnen der Wärme-Kälteenergie.
Ja, der Durchfluss wird mittels S0 Zähler ermittelt.


<? 
  
 $Durchfluss = GetValueFloat(17461 /*[Hardware IPS\EKM-868 Volumenstrom Heizung\Durchfluss]*/); 

 // Script verlassen, wenn kein Durchfluss 
 if ($Durchfluss == 0) { 
  
 SetValueFloat(33361 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme / Kälteenergie]*/, 0); 
 Return; 
 } 

 $Vorlauf = GetValueFloat(20059 /*[Hardware IPS\JKM-868 (ThermoJET)\VL Fubo + Boilerladung]*/); 
 $Ruecklauf = GetValueFloat(59719 /*[Hardware IPS\JKM-868 (ThermoJET)\RL Fussbodenheizung]*/); 

 $Durchfluss = GetValueFloat(17461 /*[Hardware IPS\EKM-868 Volumenstrom Heizung\Durchfluss]*/); //Durchfluss grösser als 1 
 $c = 4182; // Wasser 

 if ($Durchfluss > 1) 
{ 
   $Menge = $Durchfluss; 
       // Berechnung der Wärmeleistung 
   $delta_T = $Vorlauf - $Ruecklauf;                 
   $waerme = ($c * $Menge * $delta_T) / 3600; // Wh 
}   


if ($waerme <0) {  
        SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme / Kälteenergie]*/, ($waerme/1000));  
    } else {  
       SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme / Kälteenergie]*/, ($waerme/1000)); 
    }  



?> 


damit lässt sich arbeiten, schaue ich mir nachher an

Danke :-)!!!

Ok da du ja mit der Duchflussmenge rechnest, und dein Skript alle 30 min ausgeführt wird, warum nimmst du den wert teilst du den wert nicht durch 2, dann sollte das doch eigentlich deine erbrachte Wärme Leistung in der Letzten halben Stunde sein. Die addierst du dann immer zu deinen variable dazu.

Oder liege ich falsch?
Das Thema schein auch jeden fall komplexer zu sein.
Schau mal hier: http://deacademic.com/dic.nsf/dewiki/1530443

Swen

Hmm, ich starte das Script alle 30 Sekunden :slight_smile: jedoch hab ich immer einen Anderen Wert.
Ich seh mir deinen Link an.

Achso dann musst du durch 120 teilen. :smiley:
Spaß bei Seite, dass geht zwar glaube aber das es zu ungenau ist.
Mehr als den link habe ich auch noch heraus gefunden.

Swen

Würde es etwas bringen den Wert der Float Variable wenn sich diese alle 30 Sekunden aktualisiert in eine andere Variable zu speichern, denn nächsten Wert zu addieren?
Aber es spielt auch der Faktor Zeit eine Rolle, oder???

deswegen ja durch 120 teilen, da du ja Kwh als Ausgabe hast muss du auf 30 sec runter.

Acer

OK, ich werd das heute abend austesten.
Wundert mich das, das noch keiner gelöst hat :slight_smile: oder es in ein schönes php Modul verpackt hat.

Hier mal das aktuelle Script zum errechnen der Wärme/Kältemenge.
Es wird alle 60 Sekunden gestartet ( wichtig für die Berechnung) DANKE an Doctor-Snuggels!!


<?
 
 $Durchfluss = GetValueFloat(17461 /*[Hardware IPS\EKM-868 Volumenstrom Heizung\Durchfluss]*/);

 // Script verlassen, wenn kein Durchfluss
 if ($Durchfluss == 0) {
 
 SetValueFloat(33361 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme / Kälteenergie (alt)]*/, 0);
 Return;
 }

 $Vorlauf = GetValueFloat(20059 /*[Hardware IPS\JKM-868 (ThermoJET)\VL Fubo + Boilerladung]*/);
 $Ruecklauf = GetValueFloat(59719 /*[Hardware IPS\JKM-868 (ThermoJET)\RL Fussbodenheizung]*/);

 $Durchfluss = GetValueFloat(17461 /*[Hardware IPS\EKM-868 Volumenstrom Heizung\Durchfluss]*/); //Durchfluss grösser als 1
 $c = 4182; // Wasser

 if ($Durchfluss > 1)
{
   $Menge = $Durchfluss;
       // Berechnung der Wärmeleistung
   $delta_T = $Vorlauf - $Ruecklauf;                
   $waerme = ($c * $Menge * $delta_T) / 3600; // Wh
   

}  


if ($waerme <0) { 
        SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie]*/, ($waerme/1000)); 
		SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie]*/,0);
		
		$Energie = ($Energie + ($waerme / 60)); //Wh
        SetValueFloat (56052, ($Energie/1000));
		
    } else { 
       SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie]*/, ($waerme/1000));
	   SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie]*/,0);
	   
	       
       $Energie = ($Energie + ($waerme / 60)); //Wh
       SetValueFloat (41161, ($Energie/1000));
	   
	   
    } 



?>


Ich bekomm aber eine Fehlermeldung:


Notice:  Undefined variable: Energie in /mnt/data/symcon/scripts/46988.ips.php on line 41

Warum weis ich nicht-die Variable ist vorhanden!?

Ist es möglich bei einer Negativen Berrechnungen so wie es beim Abtauen der Fall ist ( VL Kälter als RL ) das „-“ davor wegzubekommen?
Ich speichere falls ein Negativer Wert errechnet wird sowieso in eine andere Variable?!

Aber nicht in deinem Script.

Gemeint ist diese Variable:
$Energie = ($Energie + ($waerme / 60)); //Wh
Die ist vorher nirgendwo definiert.

Ganz genau. Du müsstest die Variable $Energie vorher initialisieren. Ich vermute auf 0, aber ich habe mich nicht mit deinen Formeln auseinander gesetzt.

Danke für den Hinweis.

Bei der Berechnung bin ich mir nicht ganz sicher ob der Wert



 $c = 4182;

für Wasser passt? (wärmekapazität) oder muss ich die Dichte das Wassers angeben?

Auch beim Setzen der Energievariable hätte ich noch eine Frage:



 $Energie = ($Energie + ($waerme / 60)); //Wh
       SetValueFloat (41161, ($Energie/1000));
        

Muss ich denn Wert /1000 rechnen, wenn ich der Float Variable das Profil „electric“ zugeordnet habe?