Hallo liebe Leute,
ich habe ein Problem mit einem Userreading.
Bei einer bestimmten Bedingung soll eine 1 gesetzt werden, und wenn eine andere Bedingung erfüllt ist soll eine 0 gesetzt werden.
Jetzt ist es aber so, dass wenn keines von beiden erfüllt ist, dann bleibt das Reading nicht bestehen und ist leer, also wenn die Temp zwischen der Bedingung 1 und der Bedingung 2 ist.
Es soll aber das zuvor geschriebene (1 oder 0) drin bleiben....
Hat da jemand eine Idee zu?
Hier das Userreading dazu:
Heizanforderung {if ((ReadingsVal("Temp_kp","temperature",0) <= (ReadingsVal("Temp_kp","dewpoint_on",0)))) {return 1} elsif ((ReadingsVal("Temp_kp","temperature",0) >= (ReadingsVal("Temp_kp","dewpoint_off",0)))) {return 0}}
Vielen Dank für Unterstützung.
Bis denn
SouzA
Abgesehen davon, dass Du gefühlt 50 Klammern zuviel verwendest, fehlt in Deiner Logik irgendwo ein abschließender "else" Zweig.
Außerdem ist Deine Logik dahingehend falsch, dass Du sowohl auf <= als auch >= prüfst - das = sollte man nicht zweimal verwenden.
Heizanforderung {
return 1 if ReadingsNum("Temp_kp","temperature",0) <= ReadingsNum("Temp_kp","dewpoint_on",0);
return 0 if ReadingsNum("Temp_kp","temperature",0) > ReadingsNum("Temp_kp","dewpoint_off",0);
return <hier musst Du noch eintragen, welchen Wert Du als dritte Alternative haben möchtest>;
}
Hallo,
vielen Dank für deinen Beitrag.
Dewpoint_on (z.B. 13°C )und Dewpoint_off (z.B. 15°C) sind unterschiedliche Werte. Das passt doch eigentlich mit dem =....
Das ganze Konstrukt kann man wie eine Hysterese sehen.
Da kann ich keine Alternative eintragen ohne, dass diese an einer Stelle falsch wäre. Je nachdem ob die Heizanforderung gesetzt wurde oder nicht.
Also sprich, ist es richtig, dass dann im Reading leere herrscht?
Habe deine Schreibweise mal übernommen. Ist übersichtlicher.
Danke dafür.
Bis denn
SouzA
Zitat von: SouzA am 13 März 2023, 13:09:06
Dewpoint_on (z.B. 13°C )und Dewpoint_off (z.B. 15°C) sind unterschiedliche Werte. Das passt doch eigentlich mit dem =....
Ja, stimmt, das ist mir dann im Nachgang, als ich mein Codeschnipsel angeschaut habe, auch aufgefallen :)
Zitat von: SouzA am 13 März 2023, 13:09:06
Also sprich, ist es richtig, dass dann im Reading leere herrscht?
Das muss nicht so sein. Du kannst doch als dritte Alternative einfach den vorhandenen Wert zurückliefern.
Heizanforderung {
return 1 if ReadingsNum("Temp_kp","temperature",0) <= ReadingsNum("Temp_kp","dewpoint_on",0);
return 0 if ReadingsNum("Temp_kp","temperature",0) >= ReadingsNum("Temp_kp","dewpoint_off",0);
return ReadingsNum(<device>,<vorhandenes reading>,-1);
}
--
Zitat von: betateilchen am 13 März 2023, 13:14:57
Ja, stimmt, das ist mir dann im Nachgang, als ich mein Codeschnipsel angeschaut habe, auch aufgefallen :)
Das muss nicht so sein. Du kannst doch als dritte Alternative einfach den vorhandenen Wert zurückliefern.
Heizanforderung {
return 1 if ReadingsNum("Temp_kp","temperature",0) <= ReadingsNum("Temp_kp","dewpoint_on",0);
return 0 if ReadingsNum("Temp_kp","temperature",0) >= ReadingsNum("Temp_kp","dewpoint_off",0);
return ReadingsNum(<device>,<vorhandenes reading>,-1);
}
--
Supergeil,
oftmals ist es doch sooo einfach!
Funktioniert und gut.
Vielen Dank betateilchen!
Thx und bis denn
SouzA