NEWS
Blockly Schleife bis Zustand erreicht ? (Stromausfall)
-
Hallo,
ich hab ein Problem. Nach einem Stromausfall ( IOB läuft weiter dicke USV ) will ich ein teil der Geräte prüfen ob diese an sind.
checke nun ob das Objekt unwahr ist .. und schalte es ein... das shilft nur nichts wenn Strom weg schickt das Gerät ja auch nichts. Ob er seinen state nun nochmal schickt ist ungewiss...Hat jemand eine Vorlage oder Idee das umzusetzen ?
Stromausfall = true
Dann soll nach stromausfall= false eine Schleife laufen wo Geräte Status gesetzt bekommen.
Jedes Gerät soll so lange "geprüft" werden bis es den Status erreicht hat.Brauche da echt ein paar Ideen .. doof wenn der Kühlschrank aus bleibt wenn der Strom wieder da ist g
-
-
ja das erstelle ich indem ich die USV Überwache.
ALso einfach auf Tigger Gerät unwahr im State und dann direkt das Objekt wieder einschalten klappt nicht auch nach 3 Sekunden verzögerung ..
Schwer daher die mehrfachen Versuche. Mit schleifen hab ich bisher aber noch nichts gemacht -
@ChrisXY Ich mache es so: Merke den Sollzustand in Datenpunkten oder Variablen und bei Netzspannungswiederkehr wird verzögert gesendet, wenn der Sollzustand "ein" ist.
"Heizventil" enthält den Sollzustand.
// Heizaktor für Auf-/Zu-Ventil ansteuern // no = Ventil stromlos offen var no = false; // Raumkurzname am Anfang des Datenpunktnamen und als JS-Gruppenname var raum = name.split(".")[2]; var actid = getIdByName(raum + ".Heizaktor-Ein"); var ventid = getIdByName(raum + ".Heizventil"); var netid = getIdByName("USV.Netz"); var net = getState(netid).val; var vent = getState(ventid).val; var act = getState(actid).val; var timer1 = null; var timer5 = null; function actor() { var y = vent; if(no) y = !vent; if(act === y) { // Ist == Soll if(timer1) clearTimeout(timer1); if(timer5) clearTimeout(timer5); } else if(net) { // Ist != Soll und Netz vorhanden setState(actid, y); timer1 = setTimeout(function() {setState(actid, y);}, 1000); timer5 = setTimeout(function() {setState(actid, y);}, 5000); } } actor(); // script start on(ventid, function(dp) { vent = dp.state.val; actor(); }); on(netid, function(dp) { net = dp.state.val; act = false; // Aktor ist nach Netzausfall aus if(net) setTimeout(actor, 10000); // Netzwiederkehr }); on({id: actid, ack: true}, function(dp) { // Aktor-Zustand bestätigt act = dp.state.val; // Ist actor(); });