NEWS
Einfache Heizungsreglung
-
@pi-ter Den Zustand des DP muss das Skript bei ioBroker anfragen - die lokale Variable ist ihm auf kurzem Dienstweg zugänglich ...
Ich würde vermuten, ersteres ist mehr Aufwand, kann es aber nicht mit Sicherheit sagen... -
@martinp sagte in Einfache Heizungsreglung:
@pi-ter Den Zustand des DP muss das Skript bei ioBroker anfragen - die lokale Variable ist ihm auf kurzem Dienstweg zugänglich ...
Ich würde vermuten, ersteres ist mehr Aufwand, kann es aber nicht mit Sicherheit sagen...Ja, stimmt. Das ist das, was ich mit "DP abfragen" in Edit2 im Sinn hatte. Du hast es aber korrekter formuliert.
Zeitlich gesehen dürfte der Zugriff auf die vordefinierte Variable effektiver sein, wenn gleich das in diesem Kontext vlt. eine untergeordnete Rolle spielt.Wieder was gelernt
VG Peter
-
@pi-ter Noch ein Gedanke zur Heizungsregelung per ioBroker: Damit wird der ioBroker zu einem Gerät mit "Missionskritischer" Zuverlässigkeit. Da habe ich mich noch nicht so ganz drangetraut, und lasse die Thermostat-Regelschleifen lokal auf einem kleinen ESP8266 rechnen. Wenn mal wirklich ein sehr strenger Frost kommt, und man ist tagelang nicht zu Hause, während der ioBroker einfriert, kann da viel kaputtgehen
ioBroker ist bei mir bzgl Heizung nur für Protokollierung, Überwachung und Nachtabsenkung zuständig ...Hat sich aber im Nachhinein herausgestellt, dass die ESP8266 Hardware instabiler ist, als der ioBroker, und deshalb der ioBroker sehr viel zuverlässiger läuft, als der ESP8266...
-
@martinp
Die einzige "kritische Infrastruktur" wäre bei mir in der Tat nur das "Palmenhaus" (Umhausung für eine eingepflanzte Palme im Winter). Da die Palme nun ca. 40 Jahre alt ist, wäre es echt schade drum.
Über Redundanz habe ich mir daher auch schon Gedanken gemacht, sie aber angesichts der eher milden Witterung noch nicht umgesetzt.Zur Temperaturmessung ist ein ESP8266 D1mini im Einsatz, geschaltet wird ein Sonoff TH16, auf dem noch die Originalsoftware läuft. Dort steckt auch der Temperaturfühler dran. Angebunden ist der TH16 an ioBroker über den HAM-Adapter und eweLink-Modul.
Die Überlegung war, den TH-16 autonom als Thermostat einzusetzen und bei Unterschreitung einer zweiten Minimumtemperatur den Lüfter einzuschalten.
Nächste Überlegung war: Was ist, wenn der kleine Heizlüfter den Geist aufgibt?
Hier könnte ich über eine P11 mit Tasmota einen zweiten Heizlüfter in Reserve halten, der dann z.B. bei unter 2.5°C scriptgesteuert einspringt.Aber was immer wir auch tun: Ohne Stromnetz und ohne WLAN, WAN, what ever nutzt uns die ganze schöne Redundanz nix. Ohne Strom auch keine Heizung...
Die einzige Sicherheit, die ich mir bei Abwesenheit noch gönne, ist ein VPN ins häusliche Netz. Da kann ich wenigstens nachsehen, ob alles passt und ggfls. aktiv werden - und zur Not die Nachbarn/Freunde alarmieren
Bei mir läuft der raspi4 4GB mit ioBroker ebenfalls total stabil und ich würde auf den auch eher setzen, als auf die D1mini, was ich aber auch noch nie getestet habe ;-).
-
@pi-ter said in Einfache Heizungsreglung:
Bei mir läuft der raspi4 4GB mit ioBroker ebenfalls total stabil und ich würde auf den auch eher setzen, als auf die D1mini, was ich aber auch noch nie getestet habe ;-).
Damals war meine Überlegung, dass der D1 Mini oder ein ähnliches vorgelagertes Kästchen eh gebraucht wird, um die Thermosensoren, Ventile usw. anzusteuern/abzufragen.
Wenn dann ohne den ioBroker nicht wenigstens ein Notbetrieb möglich ist, hat man keinen Single Point of Failure, sondern gleich zwei davonDer Thermostat ist aber per MQTT ansteuerbar - vielleicht braucht man auf irgendeinem alten Linux-PC einen "Not" ioBroker, wenn denn doch irgendwas geschrottet wird beim Rumbasteln mit dem "Haupt" ioBroker ...
-
Moin,
gibt es einen Grund, warum Du im oberen Zweig Deines Blockly mit doppelter Negation arbeitest?
Ich habe das mal nachempfunden und komme letztlich zum selben Ergebnis.
In beiden Fällen funktioniert die UND-Verknüpfung von temperatur und Zustand heizung; der if-Zweig wird korrekt ausgewertetvar temperatur, heizung; temperatur = 9; heizung = false; if (temperatur < 10 && !heizung) { window.alert('doppelte Verneinung'); } if (temperatur < 10 && heizung == false) { window.alert('einfache abfrage'); }
Aber müsste Blockly nicht auch ein
heizung === false
generieren? Beide Werte sind ja von gleichem Typ
-
@pi-ter Mit JS kenne ich mich leider absolut nicht aus, aber @paul53 hat ja schon geschrieben dass doppeltes "steuern" in meinem Skript viel Ressourcen braucht.
Daher lieber so:
-
@pi-ter sagte in Einfache Heizungsreglung:
doppelter Negation
Hilf mir mal auf die Sprünge:
Wo siehst Du da eine doppelte Negierung (Negation) ???Doppelpost?
-
@djmarc75 sagte: lieber so:
Die beiden "und" sind überflüssig.
-
@codierknecht
Doppelpost habe ich schon zum Löschen gemeldet.Die Variable "heizung" ist zunächst auf "falsch" gesetzt.
"nicht heizung" heißt dann doch "nicht falsch" - also wahr.Geprüft weden soll doch aber auf "heizung gleich falsch", damit die UND-Verknüpfung
"Temperatur zu gering && Heizung aus" zum Einschalten führt.&& !heizung
Wo ist da mein Denkfehler?
-
@paul53 sagte in Einfache Heizungsreglung:
Die beiden "und" sind überflüssig
korrekt, wieder was gelernt
-
@pi-ter sagte: Geprüft weden soll doch aber auf "heizung gleich falsch"
"nicht heizung" entspricht "heizung gleich falsch".
-
@paul53
Danke.Gut, ich nehm das mal so hin, weil es wohl richtig ist.
Das sieht dann aber für mich so aus, als wenn auf die Variable und nicht deren Wert geprüft wird.
Es erklärt dann aber zumindest, warum die wirkliche (?) Prüfung auf Wert - also "heizung === False" (Wert === false) auch funktioniert.Ich komme aus der php-Ecke und ich bin mir nicht sicher, ob das da auch so gehen würde. JS war bislang nie so mein Ding.
-
@pi-ter
Die "variable" wird beim Start des Script initialisiert.
Nach dem Start des Script ist sie zunächst "falsch" - da hast Du schon Recht.
Aber zur Laufzeit wird die ja auch mal "wahr". Dann wird damit unnötiges Senden verhindert. -
@codierknecht Danke für Deine Mühe, aber das war ja gar nicht das Problem.
Hier nochmal das komplette Blockly:
Die Wertzuweisung für die Variable "heizung"am Anfang ist klar.
Dann läuft das Script in die erste if-Abfrage.
Nur wenn beide Teilausdrücke - Temperatur <3.1, Wert der Variablen gleich "falsch" - "wahr" ergeben (UND-Verknüpfung), erfolgt die Steuerung des Relais.Laut Blockly und auch im Code wird aber auf "nicht falsch" (!heizung) - also "wahr"geprüft.
if ((obj.state ? obj.state.val : "") < 3.1 && !heizung)
Dass dann irgendwann die Variable auf "wahr" gesetzt wird, ist an dieser Stelle zunächst nicht relevant
Wo also mache ich hier einen Denkfehler? Mir erschließt sich dieses "nicht heizung" nicht. Aber vlt. ist das ja eine Besonderheit von Blockly.
-
@pi-ter sagte: Mir erschließt sich dieses "nicht heizung" nicht.
Der nicht-Operator (Ausrufezeichen) negiert den Wert: false wird true und true wird false.
-
@pi-ter
"nicht heizung" ist semantisch das Gleiche wie "heizung = falsch".Wenn die variable "heizung" mal ein "wahr" enthält, wird der Ausdruck "nicht heizung" zu "falsch" und im ersten Block passiert ... nix.
-
@paul53 sagte in Einfache Heizungsreglung:
@pi-ter sagte: Mir erschließt sich dieses "nicht heizung" nicht.
Der nicht-Operator (Ausrufezeichen) negiert den Wert: false wird true und true wird false.
Naja, das weiß ich. Durch php bin ich ja nicht ganz unbewandert in diesen Dingen. Immerhin läuft mein selbstgestricktes Blog schon seit Jahren.
Aber genau das ist ja mein Problem
Wenn der Wert der Variablen "falsch" ist, und ich prüfen will ob "heizung" diesen Wert hat, wieso negiere ich dann die Abfrage?
Wäre dann nicht if ( heizung === falsch) { tue was; } die richtige Wahl?Was übershe ich?
-
@codierknecht sagte in Einfache Heizungsreglung:
@pi-ter
"nicht heizung" ist semantisch das Gleiche wie "heizung = falsch".Und dann ist "heizung" das Gleiche wie "heizung =wahr"?
Dann ist die Zuweisung am Scriptanfang falsch:heizung = falsch;
Wenn die variable "heizung" mal ein "wahr" enthält, wird der Ausdruck "nicht heizung" zu "falsch" und im ersten Block passiert ... nix.
Ähm, also im ersten if-Zweig wird geprüft, ob die Variable den Wert "falsch" hat. An dieser Stelle ist ein "wahr" noch nicht in Sicht und darauf wird im ersten Zweig auch nicht geprüft.
Ausdruck "nicht heizung" zu "falsch" und im ersten Block passiert ... nix.
Das wäre aber ziemlich blöd. Die Heizung würde nicht eingeschaltet.
-
@pi-ter
Du musst da zwei Dinge unterscheiden:
Die erste Zuweisung passiert ja nur 1x - beim Start des Script.
Damit wird die Variable einfach nur auf einen definierten Startwert gesetzt.Das mit "im ersten Block passiert ... nix" habe ich vielleicht etwas unglücklich formuliert.
Es passiert dann nix, wenn dieser Block zum zweiten (oder weiteren) Mal erreicht wird. Wenn also der Trigger bereits einmal ausgelöst hat. Deswegen heißt das Ding ja auch "Sperrvariable".
Darum wird die auch beim Start auf "false" gesetzt.Vielleicht würde ein anderer Name das klarer machen: "heizungIstAn".