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 != 50wenn 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 != 50Hast 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; }
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden