[Gelöst] 31_HueDevice.pm - Feature Request: Setzen von startup mode

Begonnen von Jensc, 23 Januar 2022, 17:29:59

Vorheriges Thema - Nächstes Thema

Jensc

Ich habe einen Vorschlag für ein neues Kommando an das HUEDevice. Wäre cool, wenn Ihr es einbauen könntet.

Vorschlag:
Ein neuer Befehl
set <HUEDevice> startup [safety|powerfail|lastonstate|custom:<rgb>]
mit dem man das Startup-Verhalten der Hue Lampen einstellen kann, entsprechend dem Menü "Lampeneinstellung" in der Hue App.

Use Case: Um den Standupverbrauch der Lampen zu reduzieren, schalte ich sie über HomeMatic Schalter an und aus (0,5 W statt 4 W, spart 28kWh/a bei 2h Betriebszeit pro Tag). Um zu verhindern, dass man morgens von einem Flak-Scheinwerfer geweckt wird, soll das  Startup-Verhalten der Hue Nachts anders sein, als tagsüber.

Alternative: Eigentlich würde es ausreichen, wenn man einen beliebigen JSON an die Lampe senden könnte, das geht aber leider nur bei Sensoren (warum eigentlich?). Würde set <HUEDevice> json ... auch für lights funktionieren, könnte man sich dieses Feature relativ einfach selbst bauen.


Update: Funktionsfähige Lösung
Damit man nicht den ganzen Thread durcharbeiten muss, hier die Lösung, die justme1968 dankenswerter Weise sehr schnell ermöglicht hat:

Um das Verhalten von Lampen beim Einschalten der Spannung zu verändern, steht beim Device HUEBridge jetzt set <bridge> configlight <id> <json> zur Verfügung. Wenn die Lampe das unterstützt, sind damit alle Einstellungen möglich, die die Hue App unter "Lampeneinstellungen/PowerOn" anbietet:

  • Standard: 100% bei 2700K set <bridge> configlight <id> {"startup": {"mode":"safety"}}
  • Zuletzt ein: Einstellungen beim Ausschalten wiederherstellen. Wenn das Licht beim Ausschalten auf "off" war, bleibt es aus set <bridge> configlight <id> {"startup": {"mode":"powerfail"}}
  • Wiedereinschalten nach...: Einstellungen beim Ausschalten wiederherstellen. Wenn das Licht beim Ausschalten auf "off" war, geht es auf die letzte Einstellung mit Helligkeit > 0 set <bridge> configlight <id> {"startup": {"mode":"lastonstate"}}
  • Nach Maß: Farbe und Helligkeit frei wählbar set Hue_Bridge configlight <id> {"startup": {"mode":"custom","customsettings" :{"bri": <bri>},{"ct": <ct>}}}

Im folgenden Beispiel sieht man das Zusammenspiel eines HomeMatic Lichtschalters mit einer Hue Lampe im Schlafzimmer. Hier ist das Ziel, einen Tag- und einen Nachtbetrieb für die Lampe einzustellen. Im "GotoSleep"  Makro wird dafür der Nachtbetrieb gestartet, d.h. die Lampe wird mit einer netten Ins-Bett-Geh-Einstellung angeschaltet und das Startverhalten umgestellt. Der Ausschnitt aus dem zugehörigen Perl Code sieht dann so aus:

        ...
        fhem("set HM_Schlafzimmer_Tuerschalter:FILTER=state=off on");
fhem("sleep HUEDevice2:reachable:.1;set HUEDevice2 on : color 2000 : bri 64");
fhem('sleep HUEDevice2:reachable:.1;set Hue_Bridge configlight 2 {"startup": {"mode":"custom","customsettings" :{"bri": 5}}}');
        ...

Die sleep Anweisungen sind notwendig, damit die Lampe erst angesprochen wird, wenn sie nach dem Anschalten für die Hue Bridge auch erreichbar ist. Zu beachten sind auch die richtigen Anführungszeichen, damit sich Perl und JSON nicht ins Gehege kommen.

Im Weckermakro des RESIDENTS Pakets kann man dann wieder auf Tagesbetrieb umstellen - zum Beispiel nachdem man ein schönes Wakeuplight gestartet hat

        ...
        fhem("define -temporary atTmp_03_$NAME at +00:40:00 set HM_Schlafzimmer_Tuerschalter:FILTER=state=off on");
        fhem("sleep HUEDevice2:reachable:.1;set HUEDevice2 pct 30 : ct 2000 : transitiontime 9600");
fhem('sleep HUEDevice2:reachable:.1;set Hue_Bridge configlight 2 {"startup": {"mode":"custom","customsettings" :{"bri": 100}}}');
        ...

Statt der hartcodierten 2 kann man die Lampen-Id natürlich auch mit InternalVal("HUEDevice2","ID",0) abfragen, wenn einem das lieber ist:

fhem('sleep HUEDevice2:reachable:.1;set Hue_Bridge configlight ' . InternalVal("HUEDevice2","ID",0) . ' {"startup": {"mode":"custom","customsettings" :{"bri": 100}}}');


justme1968

seit dezember kannst du direkt json in einem set kommando und auch für lampen verwenden. beschreibung siehe hier: https://forum.fhem.de/index.php/topic,11020.msg1193500.html#msg1193500 und https://forum.fhem.de/index.php/topic,11020.msg1193583.html#msg1193583.

nur eine setList um selber ein kommando draus zu machen gibt es aktuell (noch ?) nicht. sollte sich aber auch über cmdalias umsetzen lassen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Jensc

Cool, danke für die Antwort. Ich probier es vermutlich am Wochenende aus und melde mich, ob es geklappt hat

Jensc

Das hat ein wenig gebraucht, aber jetzt konnte ich es ausprobieren. Was gut funktioniert ist:

set HUEDevice9 {"hue": 50000, "on": true, "bri": 200 }

Was aber bei der Lampe nicht ankommt ist

set HUEDevice9 {"config": {"startup": {"mode":"safety"}}}

oder

set HUEDevice9 { "config": {"startup": {"mode":"custom","customsettings" :{"bri": 5}}}}

Kann es sein, dass es da noch ein Problem mit geschachtelten JSONs gibt? Oder habe ich noch einen Fehler gemacht? (Die Lampe unterstützt verschiedene Startup Einstellungen. Aus der HUE App lässt sich das problemlos einstellen)

justme1968

mein denkfehler...

alle set kommandos vom device gehen direkt auf den state knoten im api. config ist aber auf gleicher ebene und nicht unterhalb von state.

ab morgen gibt es im bridge device ein configlight kommando set <bridge> configlight <id> <json>.

damit geht dann z.b. set <bridge> configlight <id> {"startup": {"mode":"safety"}}
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Jensc

Hallo Andre,

ich schulde Dir noch eine Antwort: Erstmal herzlichen Dank für die schnelle Unterstützung! Mit Hilfe Deiner Änderung klappt es jetzt und ich kann alles machen. Ich bin offen gestanden begeistert von Deiner schnellen Reaktion!

Darf ich mir noch eine ästhetische Anmerkung zur Lösung erlauben? Aus Anwendersicht fände ich es tatsächlich schöner, das nicht über die Bridge machen zu müssen (wobei ich mir erstmal die id vom Licht holen muss), sondern einen direkten Aufruf set <light> config <json> zu haben. Das kann dann ja gerne intern an die Bridge weitergeleitet werden. Aber wie gesagt, das ist eine Geschmacksfrage, ich kann mit der jetzigen Lösung auch wunderbar leben.

Nachdem die Lösung noch nicht in der Doku zur HUEBridge drin ist, hier als kleines Dankeschön ein Vorschlag zur Doku zum Copy&Paste in das Modul, falls Du es nicht nur als "undocumented feature" belassen möchtest ( ich hoffe, die HTML Syntax passt so):


   <a id="HUEBridge-set-configlight"></a><li>configlight &lt;id&gt; &lt;json&gt;<br>
      Sends the specified json string as configuration to the light id. You can use this e.g. to modify the startup behaviour of a light. For a full list of available options see <a href="https://developers.meethue.com/develop/hue-api/supported-devices/#archetype">https%3A%2F%2Fdevelopers.meethue.com%2Fdevelop%2Fhue-api%2Fsupported-devices%2F#archetype (free Hue developer account needed, use wisely)</li>


justme1968

jaja, sowas hab ich mir schon gedacht :)

probier mal die angehängte version.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968