NEWS
Denkfehler beim Ausführen von "Falls-mache"
-
Hey zusammen,
ich benötige einmal Eure Hilfe. Ich bin mir ziemlich sicher, dass es sich nur um einen Denkfehler meinerseits handelt aufgrund von meiner Unerfahrenheit.
Kurz zur Erklärung was ich erreichen möchte:
Ich möchte beim Ändern von der DWD-Warnstufe zum einen eine Warnung auf meiner LaMetric Time ausgeben und zum anderen einen Lightstrip entsprechend der Warnstufe in bestimmten Farben leuchten lassen.
Folgende Problematiken habe ich festgestellt, warum der einfache Weg nicht geklappt hat: Wenn ich z.B. bei Warnstufe 1 über einen Fake-Schalter die Farbe gelb ausgeben möchte, sich dann die Warnstufe auf 2 erhöht, sind dann zwei Schalter gleichzeitig eingeschaltet, und der Lightstrip kommt durcheinander. Deswegen habe ich versucht bei der nächsten Warnstufe (welche sich ja nach oben und nach unten bewegen kann) den ersten Schalter auszuschalten um dann den nächsten zutreffenden Schalter zu schalten.
Ich habe mehrere Wege ausprobiert, komme aber nicht mehr weiter. Folgend meinen aktuellen (nicht funktionierenden) Code:on({id: "dwd.0.warning.severity"/*Warning severity*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (true && getState("dwd.0.warning.severity").val == 1) { setState("ham.0.DWD-aus.DWD-aus.On"/*On*/, false); setState("ham.0.DWD-orange.DWD-orange.On"/*On*/, false); setState("ham.0.DWD-rot.DWD-rot.On"/*On*/, false); setState("ham.0.DWD-lila.DWD-lila.On"/*On*/, false); setState("ham.0.DWD-gelb.DWD-gelb.On"/*On*/, true); sendTo("lametric", "notification", {priority: "warning",iconType: "none",sound: "thunder",lifeTime: 10000,icon: 'i9537',text: 'DWD Warnung - Stufe 1',cycles: 5});} }); on({id: "dwd.0.warning.severity"/*Warning severity*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (true && getState("dwd.0.warning.severity").val == 2) { setStateDelayed("ham.0.DWD-aus.DWD-aus.On"/*On*/, false, 1000, false); setStateDelayed("ham.0.DWD-gelb.DWD-gelb.On"/*On*/, false, 1000, false); setStateDelayed("ham.0.DWD-rot.DWD-rot.On"/*On*/, false, 1000, false); setStateDelayed("ham.0.DWD-lila.DWD-lila.On"/*On*/, false, 1000, false); setState("ham.0.DWD-orange.DWD-orange.On"/*On*/, true); sendTo("lametric", "notification", {priority: "warning",iconType: "none",sound: "thunder",lifeTime: 10000,icon: 'i9538',text: 'DWD Warnung - Stufe 2',cycles: 5});} }); on({id: "dwd.0.warning.severity"/*Warning severity*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (true && getState("dwd.0.warning.severity").val == 3) { setState("ham.0.DWD-aus.DWD-aus.On"/*On*/, false); setState("ham.0.DWD-gelb.DWD-gelb.On"/*On*/, false); setState("ham.0.DWD-orange.DWD-orange.On"/*On*/, false); setState("ham.0.DWD-lila.DWD-lila.On"/*On*/, false); setState("ham.0.DWD-rot.DWD-rot.On"/*On*/, true); sendTo("lametric", "notification", {priority: "warning",iconType: "none",sound: "thunder",lifeTime: 10000,icon: 'i9539',text: 'DWD Warnung - Stufe 3',cycles: 5});} }); on({id: "dwd.0.warning.severity"/*Warning severity*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (true && getState("dwd.0.warning.severity").val == 4) { setState("ham.0.DWD-aus.DWD-aus.On"/*On*/, false); setState("ham.0.DWD-gelb.DWD-gelb.On"/*On*/, false); setState("ham.0.DWD-orange.DWD-orange.On"/*On*/, false); setState("ham.0.DWD-rot.DWD-rot.On"/*On*/, false); setState("ham.0.DWD-lila.DWD-lila.On"/*On*/, true); sendTo("lametric", "notification", {priority: "warning",iconType: "alert",sound: "alarm1",lifeTime: 10000,icon: 'i45966',text: 'DWD Warnung - Stufe 4',cycles: 10});} }); on({id: "dwd.0.warning.severity"/*Warning severity*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("dwd.0.warning.severity").val == 0) { setState("ham.0.DWD-aus.DWD-aus.On"/*On*/, true); } setState("ham.0.DWD-gelb.DWD-gelb.On"/*On*/, false); setState("ham.0.DWD-orange.DWD-orange.On"/*On*/, false); setState("ham.0.DWD-rot.DWD-rot.On"/*On*/, false); setState("ham.0.DWD-lila.DWD-lila.On"/*On*/, false); });
Vielen Dank für Euren Input!
VG sometime
-
@sometime
Ich sehe einen "echten" Fehler in deinem Konstrukt:der letzte Trigger feuert immer mit, aber schaltet bis auf dvd-aus.On alle states aus - Unabhängig davon welchen Wert die Wetterwarnung hat.
Trotzdem ist dein Konstrukt unnötig kompliziert. Es lässt sich auf das folgende herunter brechen:
on({id: "dwd.0.warning.severity"/*Warning severity*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val setState("ham.0.DWD-aus.DWD-aus.On"/*On*/, value==0); setState("ham.0.DWD-gelb.DWD-gelb.On"/*On*/, value==1); setState("ham.0.DWD-orange.DWD-orange.On"/*On*/, value==2); setState("ham.0.DWD-rot.DWD-rot.On"/*On*/, value==3); setState("ham.0.DWD-lila.DWD-lila.On"/*On*/, value==4); let iconId = 9537+value; if (value == 4) { sendTo("lametric", "notification", {priority: "warning",iconType: "alert",sound: "alarm1",lifeTime: 10000,icon: 'i45966',text: 'DWD Warnung - Stufe 4',cycles: 10}); } else if (value > 0) { sendTo("lametric", "notification", {priority: "warning",iconType: "alert",sound: "thunder",lifeTime: 10000,icon: 'i'+iconId,text: 'DWD Warnung - Stufe '+ value,cycles: 5}); } });
A.
Nachtrag: In blocky so:
Natürlich musst du die Datenpunkte und Instanzen für sendTo anpassen - da hab ich vieles nicht.
Der Baustein "Wert" stammt im übrigen aus dem "Trigger" Bereich, und ist da mit "ObjektID" vordefiniert.
A.
-
@asgothian said in Denkfehler beim Ausführen von "Falls-mache":
@sometime
Ich sehe einen "echten" Fehler in deinem Konstrukt:der letzte Trigger feuert immer mit, aber schaltet bis auf dvd-aus.On alle states aus - Unabhängig davon welchen Wert die Wetterwarnung hat.
Trotzdem ist dein Konstrukt unnötig kompliziert. Es lässt sich auf das folgende herunter brechen:
on({id: "dwd.0.warning.severity"/*Warning severity*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val setState("ham.0.DWD-aus.DWD-aus.On"/*On*/, value==0); setState("ham.0.DWD-gelb.DWD-gelb.On"/*On*/, value==1); setState("ham.0.DWD-orange.DWD-orange.On"/*On*/, value==2); setState("ham.0.DWD-rot.DWD-rot.On"/*On*/, value==3); setState("ham.0.DWD-lila.DWD-lila.On"/*On*/, value==4); let iconId = 9537+value; if (value == 4) { sendTo("lametric", "notification", {priority: "warning",iconType: "alert",sound: "alarm1",lifeTime: 10000,icon: 'i45966',text: 'DWD Warnung - Stufe 4',cycles: 10}); } else if (value > 0) { sendTo("lametric", "notification", {priority: "warning",iconType: "alert",sound: "thunder",lifeTime: 10000,icon: 'i'+iconId,text: 'DWD Warnung - Stufe '+ value,cycles: 5}); } });
A.
Nachtrag: In blocky so:
Natürlich musst du die Datenpunkte und Instanzen für sendTo anpassen - da hab ich vieles nicht.
Der Baustein "Wert" stammt im übrigen aus dem "Trigger" Bereich, und ist da mit "ObjektID" vordefiniert.
A.
Hi,
in der Tat sieht deine Version deutlich aufgeräumter und schlanker aus als meine.
Ich übe ja noch und versuche mich ins Thema reinzufinden.
Vielen Dank für Deinen Input! Ich schaue es mir in Ruhe an und teste mal noch ein wenig. Sollte ich noch Rückfragen haben, würde ich mich nochmal bei Dir melden - sofern okay für DichLG sometime