NEWS
Fernsehautomatik (Licht dimmen)
-
Hi,
ich versuche folgendes CCU-Programm auf den ioBroker zu transferieren
Was soll erreicht werden? Wenn TV an ist und ich schalte meinen Dimmer ein soll er automatisch auf 50% leveln. Sobald ich den TV wieder ausschalte soll er wieder auf 100% leveln. Ist die Reihenfolge unterschiedlich ist (erst Licht anschließend TV) soll das ebenfalls funktionieren. Dabei habe dabei folgendes Ansatz unternommen:var night = false; // ab Sonnenuntergang bis Sonnenaufgang var dimmen = false; // Dimmen var fernseh = false; // Fernseher Aus/Ein function lampe() { if (night) { if(dimmen && fernseh)) { log("Licht nachts bei TV an dimmen"); setState("hm-rpc.0.ABCDEFGHI.1.LEVEL", 50); //Lampe dimmen } else { log("Licht nachts bei TV aus erhöhen"); setState("hm-rpc.0.ABCDEFGHI.1.LEVEL", 100); //Lampe dimmen auf 100% } } } schedule({astro:"sunset"}, function () { night = true; lampe(); }); schedule({astro:"sunrise"}, function () { night = false; lampe(); }); on("hm-rpc.0.ABCDEFGHI.1.LEVEL", function(obj) { if (obj.newState.val > 99 && obj.newState.val != 50) dimmen = true; else dimmen = false; lampe(); }); on("hm-rpc.0.XYZ7654321.2.POWER", function(obj) { if (obj.newState.val > 3) fernseh = true; else fernseh = false; lampe(); });
Ist das der richtige Ansatz oder geht das viel einfacher? Würde es gerne über Skript abbilden und nicht per Szene-Adapter.
Zusatzinfo: Skript ist nur ein Ansatz ohne jegliche Prüfung auf Funktion. Teste ich aber noch.
mfg
Falk
-
Sieht auf den ersten Blick gut und logisch sauber aus.
Das einzige Problem könnte bei einem Neustart des Skripts, Adapters, ioBroker auftreten. Da die Nacht-Variable nirgends gespeichert ist, weiß das Skript bis zum nächsten Nachtbeginn nicht, dass es Nacht ist. Wenn du diesen Trigger + Variable durch einen Vergleich der Uhrzeit in Licht() ersetzt, kannst du das Problem umgehen.
==> https://github.com/iobroker/iobroker.ja … omparetime
Das gleiche gilt natürlich auch für die anderen States, wobei die schneller aktualisiert werden. Mit getState in Licht() den aktuellen Wert zu prüfen, macht das ganze Skript zuverlässiger.
Edit: Diese Abfrage ist irgendwie quatsch:
obj.newState.val > 99 && obj.newState.val != 50
wenn val > 99, dann gilt immer val != 50
-
Danke erstmal für die rasche Rückmeldung. Dann bin ich erstmal nicht soweit entfernt
Edit: Diese Abfrage ist irgendwie quatsch: Code: obj.newState.val > 99 && obj.newState.val != 50
Hast Du vollkommen recht. Wollte damit nur abbilden, dass wenn man den Fernseher wieder ausschaltet die Lampe wieder auf 100% levelt. Geht eventuell auch so etwas, welche den Workaround einfacher gestalten?
on({id: "hm-rpc.0.XYZ7654321.2.POWER", valLt: 3, oldValGe: 50}, function() { setState("hm-rpc.0.ABCDEFGHI.1.LEVEL", 100); //Lampe dimmen auf 100% fernseh = false; } on({id: "hm-rpc.0.ABCDEFGHI.1.LEVEL", valLt: 100, oldValGe: 0}, function() { if (night && fernseh) setState("hm-rpc.0.ABCDEFGHI.1.LEVEL", 50); //Lampe dimmen auf 50% dimmen = false; }