NEWS
[gelöst]Brennerfreigabe nach Wärmebedarfsanforderung
-
Hallo,
Leider bin ich nicht in der Lage hier ein Script zu finden für meine Anwendung, wobei ich mir absolut sicher bin, dass jemand schon eine solche Steuerung gebaut hat. Ich nutze IoBroker plus HomeMatic RPC plus Wolf (Heizung) und möchte, sobald mindestens ein Ventil mehr als 20 Prozent geöffnet ist, den Brenner der Therme zum heizen freigeben. Dazu habe ich einmal die Ventile mit dem VALVE_STATE und als Schalter eine kleine Platine, die mit STATE die Brennerfreigabe simuliert.
PS: Der Grund ist es, ich möchte unnötige Brennerstarts vermeiden gegen geschlossene Ventile.
Für jede Hilfe bin ich äußerst dankbar, da es mir doch sehr schwer fällt hier Fuß zu fassen,
Ingo
HomeMatic-Ventile:
hm-rpc.0.MEQ0575574.4.VALVE_STATE
hm-rpc.0.MEQ0575593.4.VALVE_STATE
HomeMatic-Schalter:
hm-rpc.0.NEQ1631642.1.STATE
-
Hallo Kulturfolger,
nicht für jedes Problem gibt es ein fertiges Skript. Aber warum verschwendest Du überhaupt die Zeit, ein solches zu suchen.Selber machen ist bei so einer kleinen Aufgabenstellung angesagt.
Am besten machen wir das jetzt mal zusammen. Dazu tun wir das ganze in eine Funktion. Wie soll sie heißen? Ich würde vorschlagen, wir nehmen den Namen aus Deiner Überschrift. Der Rumpf einer solchen Funktion würde dann lauten:
function Brennerfreigabe() { }
Was soll die Funktion machen?
wenn hm-rpc.0.MEQ0575574.4.VALVE_STATE>20 oder hm-rpc.0.MEQ0575593.4.VALVE_STATE > 20
dann Brenner freigeben, sonst Brenner sperren
Also können wir das mal eben in Code umsetzen:
function Brennerfreigabe() { if ((getState("hm-rpc.0.MEQ0575574.4.VALVE_STATE").val>20) || (getState("hm-rpc.0.MEQ0575574.4.VALVE_STATE").val>20)) { setState("hm-rpc.0.NEQ1631642.1.STATE",true); } else { setState("hm-rpc.0.NEQ1631642.1.STATE",false); } }
So wars das? Nö. Die Funktion wird ja nie aufgerufen. Du könntest nun außerhalb der Funktion die Funktion mit
Brennerfreigabe();
Glücklich machen wird Dich das auch nicht, da die Funktion genau 1x ausgeführt wird. Man könnte jetzt mittels Timers die Funktion immer wieder aufrufen. Es geht aber auch eleganter. Eigentlich willst Du die Funktion nur dann aufrufen, wenn sich der Ventilstatus geändert hat. Das kannst du mit einem Eventhandler machen:
on("hm-rpc.0.MEQ0575574.4.VALVE_STATE", function (obj) { Brennerfreigabe(); }
Jedesmal wenn sich der Status des Ventils ändert, wird die Funktion Brennerfreigabe aufgerufen. Natürlich musst Du das für das andere Ventil auch machen.
Das fertige Skript sollte dann so aussehen:
function Brennerfreigabe() { if ((getState("hm-rpc.0.MEQ0575574.4.VALVE_STATE").val>20) || (getState("hm-rpc.0.MEQ0575574.4.VALVE_STATE").val>20)) { setState("hm-rpc.0.NEQ1631642.1.STATE",true); } else { setState("hm-rpc.0.NEQ1631642.1.STATE",false); } } Brennerfreigabe(); on("hm-rpc.0.MEQ0575574.4.VALVE_STATE", function (obj) { Brennerfreigabe(); } on("hm-rpc.0\. MEQ0575593.4.VALVE_STATE", function (obj) { Brennerfreigabe(); }
Hier noch ein Hinweis: Die Funktion Brennerfreigabe wird bewusst einmal bei Start des Skripts aufgerufen, damit sichergestellt wird, das wenn bei Start des Skripts die Heizung angeht, wenn beide Ventile schon über 20% geöffnet sind.
Das Skript habe ich nicht getestet. Ich habe hoffentlich keine Tipp-Fehler eingebaut. Wie Du siehst, es ist nicht schwer ein Progrämmchen zu zaubern. Wichtiger und schwieriger ist es sich über die Logik im Klaren zu werden.
Nächstes Mal ist hoffentlich selber machen angesagt.
-
Hallo gst666,
Du glaubst nicht wie unendlich dankbar ich dir bin. Was Du schreibst ist exakt was ich benötige, aber mir in Java-Script nicht erdenken konnte. Es klappte leider nur beim Start vom Script einmal, denke es liegt daran das der Eventhandler ein True/False erwartet, die Ventile arbeiten allerdings Stufenlos von 0-100%.
Im folgenden habe ich versucht es so anzupassen, dass nur die Heizung geschaltet wird, wenn der Zustand zum vorherigen abweicht.
createState('Brennerfreigabe.status', 0); schedule("* * * * *", function () { if ((getState("hm-rpc.0.MEQ0575574.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.MEQ0575593.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.NEQ0882643.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.NEQ0882653.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.NEQ0882704.4.VALVE_STATE").val>30)) { if ((getState("hm-rpc.0.NEQ1631642.1.STATE").val===false)) { setState("hm-rpc.0.NEQ1631642.1.STATE",true); setState("Brennerfreigabe.status", true); } } else { if ((getState("hm-rpc.0.NEQ1631642.1.STATE").val===true)) { setState("hm-rpc.0.NEQ1631642.1.STATE",false); setState("Brennerfreigabe.status", false); } } } );
-
Grundsätzlich solltest Du überlegen, was Du mit der Anlage machst. Kann man die Leistung vielleicht herabrüsten? Alternativ kommt natürlich eine andere Therme in Betracht. Vielleicht ist ein großer Wärmespeicher eine Option. So wie das für mich aussieht, kommst Du nicht wirklich auf einen grünen Zweig. Zu häufige Heizungsstarts führen zu Energieverlusten.
-
Tja, wem sagst Du das. Mein Vermieter hat die ausgesucht und eingebaut, nachdem das Vorgängergerät vom 1996 kaputt ging. Diese Wolf-Therme war angeben auf 20 Prozent zu modulieren, aber ist von der Firmware auf 26 Prozent begrenzt. Weniger geht nicht. In Foren munkelt man wohl würde die Therme durchbrennen, da bei so geringem Luftdurchsatz der Brennraumdeckel durchschmort.
Wenn es mein Haus wäre, dann hätte ich da eine 5KW Therme eingebaut und zum duschen den kleinsten Schichtspeicher eingebaut den es gibt. Das ist von Anfang an ein Baufehler gewesen auf Kombitherme ohne Speicher zu setzen , das Haus hat 75qm auf zwei Etagen und ist extrem gut gedämmt, bis auf die Mäuselöcher in der Zwischendecke.
Ich bin grad dabei das Kabel an den Steuereingang anzuschließen, dabei bin ich durch das Menü und seit dem 5 Dezember 2015 hat die Kiste über 40.000 Brennerstarts durchgeführt. Dabei bin ich schon dran gewesen und habe selber im Fachmannbereich alles auf minimale Leistung im Heizbetrieb gestellt sowie die Default Taktsperre von 7 Minuten auf 25 Minuten verlängert. Durch komplette Innendämmung in beiden Etagen (Biegeweiche Vorsatzschalung) kann die Wohnung keine Energie speichern und so schwankt die Innentemperatur direkt mit der Temperatur der Heizkörper.
== UPDATE 1 ==
Tja, was soll ich sagen, die Wolf Therme reagiert auf den Impuls nicht. Er wird am Eingang E1 erkannt, aber im Betriebsmodus BOB Betrieb ohne Brenner wird trotzdem gezündet.
Also das ganze nun über die Busschnittstelle ISM8 … nur da holpert der Code ein wenig. Kulturfolger können kein Java...
schedule("* * * * *", function () { if ((getState("hm-rpc.0.MEQ0575574.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.MEQ0575593.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.NEQ0882643.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.NEQ0882653.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.NEQ0882704.4.VALVE_STATE").val>30)) { if ((getState("wolf.0.bm1.57")!="Heizbetrieb")) { setState("wolf.0.bm1.57", "Heizbetrieb"); setState("Brennerfreigabe.status", 1); log('Heizung an'); } } else { if ((getState("wolf.0.bm1.57")!="Standby")) { setState("wolf.0.bm1.57", "Standby"); setState("Brennerfreigabe.status", 0); log('Heizung aus'); } } } );
Ein Fehler kommt im Log:
Wrong type of wolf.0.bm1.57: "string". Please fix, while deprecated and will not work in next versions.
== UPDATE2 ==
Es klappt besser als ich gedacht habe, im ersten Bild sieht man wie ab 30 Prozent eingeschaltet wird. Im zweiten Bild wie dieser Prozess sich immer wiederholt die Nacht hindurch. Im dritten Bild sieht man die daraus resultierende Temperatur am Wandthermometer, die der Ventilstellung nun folgt. Kein Vergleich zu vorher.
Okay, was versuche ich jetzt umzusetzen?
Danke nochmal an die schnelle Hilfe,