Errechnen der Wärme-Kälteenergie möglich?

Lässt sich dafür auch ein Script basteln?
Oder ist das dann doch zu aufwendig?

Könnte mir dabei jemand behilflich sein, das ich das mit dem Wärmeverbrauch (Tag, Monat, Jahr) errechnen kann?
Weiß nicht wie ich da anfangen soll, bzw. reichen da meine PHP Kenntnisse nicht mehr aus :frowning:

Guten Abend!

Ist es möglich das ich bei meinem Script mit dem ich die Wärmeenergie errechne, das wenn ein negativer Wert errechnet wird dies in eine Andere Variable speichert?

Hierfür müsste ich nach der Wärmemengenberechnung sagen " if wert grösser als 0" speichere in Variable 21250?


 <?
 
 $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
}  


SetValueFloat(33361 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme / Kälteenergie]*/, ($waerme/1000));



?>


If = Wenn
; = Ende

  • Vergleichsoperatoren PHP;)

Wenn der Wert so und so
speichere in Variable 1;

Wenn der Wert so und so
speichere in Variable 2;

Du hasts doch zu 99% Prozent schon stehen:rolleyes:
Das schaffst du auch noch…

Jetzt hab ich die Vergleichsoption eingebaut, so das bevor der Wert geschrieben wird vergleichen wird ob kleiner als „0“ dann in Variable x, sonst in Variable y.
Jedoch werden die Werte nicht in die jeweilige Variable geschrieben, bzw. Fehlermeldung hab ich beim Ausführen des Scriptes auch nicht :confused:



<?
 
 $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 <8) { 
        $outputVariableID = 21250; 
    } else { 
        $outputVariableID = 33361; 
    } 



?>



So sollte es funktionieren :slight_smile:



<?
 
 $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));
    } 



?>


Guten Morgen,
ich hätte eine Frage und zwar möchte ich bei der Er rechnung des DeltaT zwischen VL und RL


$delta_T = $Vorlauf - $Ruecklauf; 

sagen wenn der Errechnete Wert zwischen +3 und - 3 ist,
die Berechnung der Wärmeleistung auf 0 setzen soll.

Ich hab dies mit „if Wert“ und „set value“ versucht, jedoch geht das nur wenn der Wert positiv ist? Bei einer negativen Ergebniss klappt das nicht?

Dann zeig doch mal den entsprechenden Code dazu !

Würde ich so ähnlich übersetzen:

 if ($Wert <3 && $Wert >-3)

Folgenden Code verwende ich das wenn die Differenz kleiner als 0,5 und kleiner als -0,5 ist soll der Wert Null in die jeweilige Variable geschrieben werden.

wenn jedoch eine Negative Errechnung rauskommt die kleiner als -0,5 ist, wird jedoch keine Null geschrieben :rolleyes:


if ($delta_T <0.5 && $delta_T >-0.5) 

 SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie aktuell]*/, 0);
 SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie aktuell]*/, 0);


ich komm nicht mit, sry …

for ($i = -2 ; $i <= 2; $i++)
{
	if ($i <=1.5 && $i >=-1.5)
		$Wert = 0;
	else
		$Wert = $i;
    echo "bei $i wird in $Wert in die Variable geschrieben. 
";
}

erzeugt bei mir folgende Ausgabe:

bei -2 wird in -2 in die Variable geschrieben. 
bei -1 wird in 0 in die Variable geschrieben. 
bei 0 wird in 0 in die Variable geschrieben. 
bei 1 wird in 0 in die Variable geschrieben. 
bei 2 wird in 2 in die Variable geschrieben. 

Das ist doch genau dass, was du erreichen möchtest, oder nicht ?

Edit: Wenn wir nicht vollkommen aneinander vorbeireden, dann müsste das so gehen mit deinem Code. Poste sonst mal dein komplettes Script und was bei welchen Beispielwerten passiert.

Edit2:

Ich gehe mal davon aus, dass du mit

eigentlich größer als -0,5 meinst.

Hier ist mein Gesamt Skript:


 $Durchfluss = GetValueFloat(17461 /*[Hardware IPS\EKM-868 Volumenstrom Heizung\Durchfluss]*/);
 $Heizenergie = GetValueFloat(41161 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme Kälteenergie Gesamt\Heizenergie]*/);
 $Kühlenergie = GetValueFloat(56052 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme Kälteenergie Gesamt\Kühlenergie]*/);
 
 // Script verlassen, wenn kein Durchfluss
 if ($Durchfluss == 0) {
 
 SetValueFloat(33361, 0);
 SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie aktuell]*/, 0);
 SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie aktuell]*/, 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; 
   
if ($delta_T <0.5 && $delta_T <-0.5) // Wenn bei Errechnung Delta_T kleiner als 0,5 ist oder kleiner als -0,5 schreibe 0

 SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie aktuell]*/, 0);
 SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie aktuell]*/, 0);
   			                 
   $waerme = ($c * $Menge * $delta_T) / 3600; // Wh
   

}  



if ($waerme <0) { 
        $waerme=abs($waerme); 
        SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie aktuell]*/, ($waerme/1000)); 
		SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie aktuell]*/,0);
		
	
		$Kühlenergie = ($Kühlenergie + ($waerme / 60 / 1000)); //Kwh 
        SetValueFloat (56052 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme Kälteenergie Gesamt\Kühlenergie]*/, ($Kühlenergie));
		
    } else { 
       SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie aktuell]*/, ($waerme/1000));
	   SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie aktuell]*/,0);
	   
	       
	   $Heizenergie = ($Heizenergie + ($waerme / 60 / 1000)); //Kwh 
       SetValueFloat (41161 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme Kälteenergie Gesamt\Heizenergie]*/, $Heizenergie);
	   
    } 





Habs gerade nur überflogen, kann bei Bedarf aber gerne nachher nochmal genau drüberschauen.

Wenn du mal selbst gucken möchtest: Nach dem if worüber wir reden fehlen geschweifte klammern (Zeile 28), oder ist das Absicht ?
Dadurch wird nur das erste SetValue ausgeführt, bzw. das andere immer, egal wie $delta_T ist.

In deine „Variable 41091 /[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie aktuell]/“
wird sobald $waerme größer gleich 0 ist $waerme/1000 geschrieben, auch wenn du evtl. in Zeile 28 eine „0“ reingeschrieben hast.

Da $waerme, wenn ich mich nicht verguckt hab, positiv wird, sobald $delta_T positiv ist, kann der fall den du vermisst nicht eintreten (das nullsetzen von Variable 41091 im Fall von $delta_T zwischen 0 und -0,5).

Edit: ums nochmal anders auszudrücken, oben im Script schreibst du in bestimmten fällen in eine Variable ne 0, weiter unten wird in die selbe Variable was neues geschrieben/überschrieben. Wenn das Script durchgelaufen ist steht also das was als letzte in die Variable geschrieben wurde drin. Die 0 steht nur die paar millisekunden die das Script läuft drin.

Ich hab das jetzt nicht bis ins Detail analysiert, aber Versuch mal das „if ($delta_T <0.5 && $delta_T <-0.5)“ ans Ende vom Script zu verschieben. Und: ich hab Programmieren nie gelernt oder mach das Beruflich, aber das würde man dann warscheinlich nicht mehr als „sauber“ bezeichnen :stuck_out_tongue:

Wenns nicht klappt, formuliere bitte die genauen Anforderungen an das Script, dann Versuch ich dein Script zum laufen zu bekommen. Einfach als Text, ohne Programmiersprache.

grade noch einen Fehler entdeckt.

in #29 hast dus richtig geschrieben, in deinem fertigen script steht:

das ergibt keinen Sinn.

kleiner minus null komma fünf bedeutet der Zahlenwert wird größer. -0,6 ist z.B. kleiner -0,5.

Ich hab dich hier:

Ich gehe mal davon aus, dass du mit
Zitat Zitat von michl Beitrag anzeigen
wenn jedoch eine Negative Errechnung rauskommt die kleiner als -0,5 ist, wird jedoch keine Null geschrieben
eigentlich größer als -0,5 meinst.

schonmal drauf hingewiesen, da bist du nicht drauf eingegangen. Schreib einmal vernüftig auf, was das Script machen soll, Also das komplette, nicht nur Brcuhstücke die dann falsch zusammengewürfelt werden. Oder evtl. versteht dich ja jemand anders hier besser. Ich helfe dir gerne bei dem Script, macht spaß und man bekommt selbst Übung, aber diese ratespielchen sind etwas mühselig :frowning:

Edit: mir war Langweilig:


<?


/*
Das Script berechnet das Delta aus Vorlauf und Rücklauftemperatur und prüft dann ob dieses Delta T zwischen +0,5 und -0,5 ist.
Ausserdem wird geprüft ob der Durchfluss kleiner gleich 1 ist.
Trifft eine der beiden bedingungen zu, wird in 3 Variablen (33361, 41091, 21250) eine 0 geschrieben und Das Script abgebrochen.
Trifft keine der Berdingungen zu wird $waerme berechnet.
Wenn $waerme unter 0 ist wird der Betrag von $waerme umgerechnet /1000 in Variable 21250 und /60000 in 56052 geschrieben. 41091 wird 0 gesetzt.
Wenn $waerme größer gleich 0 ist wird $waerme umgerechnet /1000 in Variable 41091 und /60000 in 41161 geschrieben. 21250 wird 0 gesetzt.
*/

$Durchfluss = GetValueFloat(17461 /*[Hardware IPS\EKM-868 Volumenstrom Heizung\Durchfluss]*/);
$Heizenergie = GetValueFloat(41161 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme Kälteenergie Gesamt\Heizenergie]*/);
$Kühlenergie = GetValueFloat(56052 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme Kälteenergie Gesamt\Kühlenergie]*/);
$Vorlauf = GetValueFloat(20059 /*[Hardware IPS\JKM-868 (ThermoJET)\VL Fubo + Boilerladung]*/);
$Ruecklauf = GetValueFloat(59719 /*[Hardware IPS\JKM-868 (ThermoJET)\RL Fussbodenheizung]*/);
$c = 4182; // Wasser

// Berechnung der Wärmeleistung
$delta_T = $Vorlauf - $Ruecklauf; 
 
// Script verlassen, wenn kein Durchfluss oder bei Errechnung Delta_T kleiner als 0,5 ist oder größer als -0,5
if ($Durchfluss <= 1 || ($delta_T <0.5 && $delta_T >-0.5)) //hier stand vorher "==0", das script hat im Bereich 0-1 aber nichts gemacht (alles was danach kam war verpackt in "if $Durchfluss >1", deshalb gleich hier schon bei <=1 aussteigen.
{
 		SetValueFloat(33361, 0);
 		SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie aktuell]*/, 0);
 		SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie aktuell]*/, 0);
 		Return;
}
// hier hast du $Menge deklariert und ihr $Durchfluss zugewiesen. Warum nicht gleich mit $Durchfluss weiterarbeiten ?
$waerme = ($c * $Durchfluss * $delta_T) / 3600; // Wh

if ($waerme <0)
{ 
        $waerme=abs($waerme);
		$Kühlenergie = ($Kühlenergie + ($waerme / 60 / 1000)); //Kwh
        SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie aktuell]*/, ($waerme/1000)); 
        SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie aktuell]*/,0);
        SetValueFloat (56052 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme Kälteenergie Gesamt\Kühlenergie]*/, ($Kühlenergie));
        
} else
{ 
        $Heizenergie = ($Heizenergie + ($waerme / 60 / 1000)); //Kwh 
      	SetValueFloat(41091 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärmeenergie aktuell]*/, ($waerme/1000));
       	SetValueFloat(21250 /*[Wärme - Kälteenergie Verbrauch Akuell\Kälteenergie aktuell]*/,0);
       	SetValueFloat (41161 /*[Wärme - Kälteenergie Verbrauch Akuell\Wärme Kälteenergie Gesamt\Heizenergie]*/, $Heizenergie);
}  
	
?>

Das ding sollte jetzt glaube ich das machen was du vorhattest, ohne gewähr deinen code richtig interpretiert zu haben. Ob die Formeln stimmen hab ich nicht geprüft, nur kopiert.

Hallo Inspra!

Danke für das überarbeitete Skript von dir!!!
Genau so wie du es am Anfang des Skriptes geschrieben hast, wollte ich die Berechnung durchführen lassen.

Ich wusste nicht wie ich dem Skript sagen soll, das es bei Delta_T wenn ein Ergebniss zwischen -0,5 und +0,5 errechnet wird eine 0 Schreibt. :rolleyes:

Vielen Dank!!

Das freut mich zu hören, klappt denn alles jetzt wies soll? Ich kann das bei mir ja so nicht testen weil die Variablen fehlen.

Ja,
Läuft wie es soll :slight_smile: aktuell keine Fehler.
Danke dir nochmals!!!