Guten Tag,
ich habe an meiner Gastherme einen Shelly angebracht, der die Gastherme (Brenner des Heizungswassers und Pumpe) ausschaltet, sobald die gemessene Temperatur an 3 MAX Wandthermostaten höher ist, als die eingestellte Temperatur. Zusätzlich soll bei einer Außentemperatur über 20°C der Brenner dauerhaft aus sein, bzw bei einer Außentemperatur unter 5°C dauerhaft an.
Momentan läuft dieses Skript noch über Node-Red, also Node-Red gibt die jeweiligen on/off Befehle für den Shelly an FHEM weiter.
Das Ganze möchte ich nun aber ohne Node-Red verwirklichen. Allerdings verhält sich FHEM nicht wie gewünscht. FHEM erkennt die Logik mit der Außentemperatur, aber es scheitert irgendwie immer an "wenn desiredTemperatur kleiner/gleich Temperatur des Wandthermostats". Ist mein erstes "größeres" Skript mit FHEM, bin leider noch nicht so bewandet mit Perl :P
folgendes steht in der DEF:
+*00:00:10 {
if(ReadingsVal('Wetter', 'temperature', '') < 5) {
fhem('set Shelly_Gastherme on')
}
elsif((ReadingsVal('Wetter', 'temperature', '') >= 5 ) && (ReadingsVal('Wetter', 'temperature', '') <= 20 )) {
if( (ReadingsVal('MAX_1c2044', 'desiredTemperature', '') <= ReadingsVal('Max_1c2044', 'temperature', '')) &&
(ReadingsVal('MAX_1c1eb6', 'desiredTemperature', '') <= ReadingsVal('MAX_1c1eb6', 'temperature', '')) &&
(ReadingsVal('MAX_1c1eae', 'desiredTemperature', '') <= ReadingsVal('MAX_1c1eae', 'temperature', ''))
) {
fhem('set Shelly_Gastherme off')
}
else{
fhem('set Shelly_Gastherme on')
}
}
elsif(ReadingsVal('Wetter', 'temperature', '') > 20) {
fhem('set Shelly_Gastherme off')
}
else{
fhem('set Shelly_Gastherme on')
}
}
Kann mir jemand sagen, was ich falsch mache?
LG
Eric
Ich wuerde groessere Skripte als Funktion in 99_MyUtils.pm einbauen, zum Testen kann man sie in der Kommandzeile aufrufen per { meineFunktion() }
Dann im FHEM-Log schauen, ob es beim Aufruf keine Probleme gibt.
ReadingsVal ist nicht optimal fuer Zahlenvergleiche: es gibt Aerger, wenn an dem Temperatur-Reading die Einheit haengt. ReadingsNum sollte dieses Problem loesen.
Weiterhin wuerde ich (solange ich entwickele), alle verwendeten oder berechneten Werte mit der Log Funktion ausgeben.
ReadingsNum statt ReadingsVal, ob, vielen Dank, wieder etwas dazu gelernt :) Vielen Dank!
Das es irgendwie zu "Ärger" kommt, hatte ich schon vermutet, da if-Befehle mit nur einem ReadingsVal funktioniert haben. Bei 2 ReadingsVal hat es nicht funktioniert.
Nebenbei noch ein großes Lob für FHEM, habe vorher ioBroker, Node-Red, OpenHAB, Node-Blue ausprobiert, keines läuft aber so stabil wie FHEM. Lediglich das Regeln erstellen, ist ein bisschen "tricky", aber auch das ist zu schaffen.