NEWS
Mehrere Und-Abfragen
-
Nehme folgendes Script:
//Variablen var idPumpe = "xxx" //Trigger on({id: idPumpe, change: "ne", val: true}, function(){ // Pumpe wurde ein geschaltet var idKreislauf1 = getState("...").val; var idKreislauf2 = getState("...").val; var idKreislauf3 = getState("...").val; var idKreislauf4 = getState("...").val; if (idKreislauf1 == false && idKreislauf2 == false && idKreislauf3 == false && idKreislauf4 == false) { setTimeout(function() { setState(idPumpe, false); }, 900000); } });
Voraussetzung für das Script:
Deine Pumpe zeigt true wenn sie an ist.
Die Kreisläufe zeigen true wenn sie an sind; bzw. false wenn sie aus sind.mfg
-
Passt für ihn bis auf ne fehlende if Abfrage ob die Automationssystem und läuft Erklärung was wofür ist
Btw auch der time-out hat die falsche Zeit und wir nicht angehalten wen er bereits läuft da können sich Sachen überschlagen da muss im Script noch was ergänzt werden
-
@Dutchman sagte in Mehrere Und-Abfragen:
time-out hat die falsche Zeit
wieso?
900000 = 15 Minuten
was soll da falsch sein ?@Dutchman sagte in Mehrere Und-Abfragen:
nicht angehalten wen er bereits läuft
stimmt
-
-
@Dutchman sagte in Mehrere Und-Abfragen:
@bahnuhr sagte in Mehrere Und-Abfragen:
900000 = 15 Minuten
ich brauche mehr Kaffee heute
hab ich auch gerade geholt, es hilft !!
-
@bahnuhr
Interessanter Vorschlag. Ich würde es systematisch anders lösen:Dabei ist wichtig das alles in EINEM Blockly Skript liegt, sprich dieser Block muss im gleichen Script mit drin sein.
Dann kannst du im eigentlichen Script einfach die Variable "PathInUse" abfragen. Wenn die >1 ist dann ist mindestens ein Kreislauf aktiv.
Warum so - damit ich nicht jedes mal wenn die Pumpe geschaltet wird die Datenpunkte aller Kreisläufe abgefragt werden.
Alternativ gibt es noch eine elegante Lösung:
Du kannst bei dem trigger auf das einschalten der Pumpe testen wer das ausgelöst hat - es gibt dazu den "origin of value" Baustein (sorry, ich weiss nicht wie der auf deutsch heisst). Wenn das Pumpenscript die Pumpe schaltet, dann beinhaltet der origin "javascript.0". Wenn du ihn manuell schaltest, oder die Pumpe sogar extern geschaltet wird gibt es da einen anderen Eintrag.
A.
-
erst einmal vielen Dank für die Hilfe.
Ich hab das Skript von @bahnuhr einmal auf mich angepasst.(da ich nicht so viel Ahnung habe, hoffentlich richtig)
//Variablen var idPumpe = "sonoff.0.Sonoff Pumpe.POWER" //Trigger on({id: idPumpe, change: "ne", val: true}, function(){ // Pumpe wurde ein geschaltet var idKreislauf1 = getState("0_userdata.0.Wasser_20_10_10_10").val; var idKreislauf2 = getState("0_userdata.0.Wasser_30_10_10").val; var idKreislauf3 = getState("0_userdata.0.Wasser_30_o_4").val; var idKreislauf4 = getState("0_userdata.0.testbutton").val; var idKreislauf5 = getState("0_userdata.0.Wasser1_20min").val; var idKreislauf6 = getState("0_userdata.0.Wasser1_30min").val; if (idKreislauf1 == false && idKreislauf2 == false && idKreislauf3 == false && idKreislauf4 == false && idKreislauf5 == false && idKreislauf6 == false) { setTimeout(function() { setState(idPumpe, false); }, 5000); } });
Die 5000 habe ich nur zu Testzwecken verringert. Scheint soweit zu funktionieren. Werde ich jetzt die Tage mal im Alltag testen.
-
@Torsten-K sagte in Mehrere Und-Abfragen:
Die 5000 habe ich nur zu Testzwecken verringert. Scheint soweit zu funktionieren. Werde ich jetzt die Tage mal im Alltag testen.
Wichtig noch das du den time-out anhältst oder anderweitig dafür sorgst das er nicht doppelt starten kan
-
@RappiRN Falls lange Kaskaden von UND oder ODER Blöcken nerven. Packs in JS.
Beispiel 8fach UND
return I1 && I2 && I3 && I4 && I5 && I6 && I7 && I8;
-
@ITCrowd
Hat mich bisher nicht genervt, aber danke für die Info, werde ich mal ausprobieren.Enrico
-
Zum Thema mehrere und Abragen. Es gibt auf GitHub etwas interessantes dazu (habe ich aber selbst noch nicht probiert.)
Blockly-plus