NEWS
Idee Scene Adapter
-
Der Scene Adapter kann echt praktisch sein und viele Skripte ersetzen. Allerdings ist mir bei der Nutzung eine Situation aufgefallen, welcher regelmäßig dazu führt, dass ich doch ein Skript schreiben muss.
Ich hatte schon häufiger den Fall, dass ich bei Szenen und Gruppen, je nach Situation, nicht alle Zustände schalten möchte.
Beispiel:
Ich habe eine virtuelle Gruppe mit allen Wohnzimmerlampen, um diese gleichzeitig dimmen zu können. Nun möchte ich aber, dass dies nur auf Lampen angewendet wird, welche schon eingeschaltet sind. Lampen die aus sind, sollen auch aus bleiben.
Idee:
Man kann für jeden Datenpunkt eine Vorbedingung definieren. Der Zustand wird dann nur erfüllt, wenn diese Bedingung erfüllt ist. Bei dem Beispiel wäre das dann: lampe.level > 0 (ID Bedingung Wert)
bzw. bei aktiviertem "set on false":
Problem:
Jetzt gibt es natürlich den Fall, dass keine Lampe an ist (Gruppenzustand 0). In diesem Fall wäre es toll, wenn wieder alle Lampen angesteuert würden, es würde aber keine Lampe angesteuert. Man müsste also Bedingungen verketten können, das gilt allerdings auch schon für die trigger zum Starten und Stoppen der Szenen, wo ich manchmal gerne mehr als eine Bedingung verwenden würde.
-
Jetzt habe dein Einsatz verstanden.
Da jetzt SzenenAdapter sowieso zu Komplex ist, da muss man was an der Bedienung machen.
Und wenn man noch jetzt mit so eine Einstellung kommt, dann wird man komplett verloren.
Das ist meine Meinung. Du bist aber selbst ein guter Programmierer. Mach mal ein gutes Bedienkonzept
Mit Pull Request :lol:
-
Hallo pman, Hallo Bluefox,
Ich bin zwar so gar kein Programmierer, nutze aber dennoch den Szenenadapter sehr intensiv und kann das Problem von pman sehr gut nachvollziehen. Daher würde ich gerne ein paar Gedanken einstreuen.
Zum Hintergrund. Bei mir laufen derzeit zwei Instanzen des Adapters je für:
Lichtsteuerung (~35 Hue Leuchten)
und (mangels funktionierendem occ Adapter)
Heizungssteuerung(~ 10 Zimmersteuerungen mit je Wandthermostat und zugehörigen Heizkörperthermostaten in Gruppen zusammengefasst) Die Szenen werden über cron-Trigger abgearbeitet.
Entscheidungen, wie sie pman beschreibt, treffen zu können wäre schlichtweg genial.
Ich sehe hier drei Szenarien:
Entscheidungen, die VOR dem Ausführen einer Szene entscheiden, ob überhaupt und wenn ja welche Szene gestartet werden soll
Entscheidungen INNERHALB einer Szene
Entscheidungen NACH dem Abarbeiten einer Szene oder einer (auch im Fehlerfall) nicht ausgeführten Szene getroffen werden.
Kurzum. Ich würde gerne meine Mitarbeit bei der Sache anbieten.
-
Ich habe auch noch solch einer Lösung gesucht und wollte kurz mein Workaround hierfür mit euch teilen:
Mein Beamer ist nicht "smart", daher steuer ich diesen mit einer Broadlink Fernbedienung. Das Problem ist, dass um ihn auszuschalten man die Power-Taste zwei mal drücken muss. Das bedeutet, dass wenn der Beamer gerade gar nicht an ist, zwei mal die Power-Taste den Beamer anschalten würde (anstatt ihn ausgeschaltet zu lassen).
Den obigen Vorschlag hätte ich daher hierfür nutzen können. In einer Variable speichere ich ob der Beamer an ist (wenn ich den Beamer mit einer Scene starte). Starte ich nun die Szene die den Beamer ausschalten soll, setze ich für die Ausschalt-Aktion die Bedingung, dass der Beamer nur ausgeschaltet werden soll wenn das System meint das er überhaupt an ist.
Da es diese Funktion (noch) nicht gibt, habe ich mir ein Script geschrieben, dass dies für mich überprüft:
const root = "javascript." + instance + ".myObjects."; const beamerIsOn = root + "beamerIsOn"; const beamerTurnOff = root + "beamerTurnOff"; const beamerPowerButton = "broadlink.0.learnedSignals.CODE_..."; on(beamerTurnOff, function (obj) { if (!obj.state.ack && obj.state.val) { turnOffBeanerIfNotOn(); } }); function turnOffBeanerIfNotOn() { if (!getState(beamerIsOn).val) { // beamer is not on return; } // press power button twice to turn off setState(beamerPowerButton, true); setTimeout(function() { setState(beamerPowerButton, true); }, 2000); setState(beamerIsOn, false); setState(beamerTurnOff, false); }
In meiner Szene starte ich nun dieses Script (anstatt den Beamer direkt auszuschalten) indem ich den "beamerTurnOff"-Wert auf true setze.
Hoffe das bietet Leuten mit ähnlichen Anforderungen einen Gedanken-Anstoß.