Tradfri: Farbtemperatur ändern, ohne das Licht einzuschalten

Begonnen von Yokohama, 19 Juni 2019, 11:53:02

Vorheriges Thema - Nächstes Thema

Yokohama

Hallo Leute,

ich bin dabei, eine zirkadiane Lichtsteuerung umzusetzen. Hierzu verwende ich die tunable-white-Leuchtmittel von IKEA.

Mittels einer "at"-Anweisung unter Nutzung der Astro-Funktion wechsle ich morgens und abends die Farbtemperatur ausgewählter Lampen. Dummerweise bewirkt der FHEM-Befehl "set Lampe color xxxx" nicht nur, dass die Farbtemperatur geändert wird, sondern auch, dass die Lampe angeht, sofern sie vorher aus war. Das soll sie aber nicht. Sie soll lediglich wissen, mit welcher Farbtemperatur sie zu leuchten hat, sobald sie eingeschaltet wird.

Liegt das an den Tradfri-Leuchtmitteln oder an FHEM? Gibt es eine einfache Lösung?

Mein erster Ansatz war: Schau vor der Farbänderung, ob die Lampe aus war, falls ja, schicke dem "set Lampe color xxxx" ein "set Lampe off" hinterher. Das Problem hierbei ist, dass ich die beiden Befehle nicht einfach hintereinander abschicken darf, weil sonst der zweite zu früh kommt, d.h. der erste ist noch nicht abgearbeitet, womit das Ausschalten ins Leere läuft. Ich habe das Problem in den Griff bekommen, indem ich dem "set Lampe color xxxx" mehrfach ein "sleep 0.1; set Lampe off" hinterherschicke, aber elegant erscheint mir das programmtechnisch nicht, zumal die Lampe dabei sichtbar an- und wieder ausgeht.

Ein zweiter Ansatz wäre, der Lampe erst beim Einschalten mitzuteilen, welche Farbtemperatur sie nutzen soll. In dem Fall müsste allerdings sichergestellt werden, dass eine längere Zeit eingeschaltete Lampe trotzdem mitbekommt, wenn es gilt, die Farbtemperatur anzupassen. Also: Via "at"-Routine den eingeschalteten Lampen ein "set Lampe color xxxx" zu schicken und ansonsten beim Einschalten schauen, ob die Farbtemperatur geändert werden muss.

Hat sonst noch jemand eine Idee?

Danke für hilfreiche Vorschläge im Vorhinein

justme1968

falls du meine tradfri version verwendest (mit HUEDevice als client):
HUEDevice schaltet explizit ein falls die lampen aus sind. wenn du das nicht möchtest: im gleichen set noch ein
: off
anhängen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Yokohama

Zitatfalls du meine tradfri version verwendest (mit HUEDevice als client):

Danach sieht es aus, die "Internats" der Lampe weisen deren "TYPE" als "HUEDevice" aus und die "modelid" als "TRADFRI bulb E27 WS opal 980lm"

Zitatwenn du das nicht möchtest: im gleichen set noch ein
: off
anhängen.

Wie sähe das aus?

"set Lampe color xxxx : off" tut gar nichts, auch nicht mit dem ": off" in einer neuen Zeile.
"set Lampe color xxxx : set Lampe off" führt die Änderung der Farbtemperatur durch, lässt die Lampe aber an, ignoriert den zweiten Befehl also.

Die Aufrufe erfolgen bei mir übrigens in einer eigenen Funktion in der 99_myUtils.pm à la:

sub sdc($$) {                  # set device color
  my ($device,$color) = @_;
  if (Value($device) eq "off") {
    fhem("
      set $device color $color
      : set $device off;
   ");
  } else {
    fhem("set $device color $color");
  };
}

justme1968

set Lampe color xxxx : off

alles in einem kommando auf einer zeile.

schau mal mit verbose 4 was genau an das gateway geschickt wird.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Yokohama

Zitatschau mal mit verbose 4 was genau an das gateway geschickt wird.

Das sieht so aus:


Connection closed for WEB_192.168.xxx.xxx_61977: EOF
WEB_192.168.xxx.xxx_61978 POST /fhem&fw_id=53&fwcsrf=xxx&cmd=set+Lampe+color+2200+%3A+off; BUFLEN:0
using HttpUtils_NonblockingGet: PUT lights/1/state
http://192.168.xxx.xxx/api/FA26D565F2/lights/1/state: HTTP response code 200
using HttpUtils_NonblockingGet: GET lights/1
http://192.168.xxx.xxx/api/FA26D565F2/lights/1: HTTP response code 200
parse status message for Lampe
WEB_192.168.xxx.xxx_62004 GET /fhem?fw_id=53; BUFLEN:0
WEB: /fhem?fw_id=53 / RL:1390 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
[...]
WEB_192.168.xxx.xxx_62005 GET /fhem?XHR=1&inform=type=status;filter=;since=1561027984;fmt=JSON&fw_id=53×tamp=1561027985651; BUFLEN:0
Connection closed for WEB_192.168.xxx.xxx_62005: EOF
WEB_192.168.xxx.xxx_62004 GET /fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2019-06.log; BUFLEN:0


Alles innerhalb von 5 Sekunden.

juemuc

#5
Hallo,

ein "set HUEDevice10 rgb FFCD78 : off" liefert folgende Eventlog-Einträge:

2019-06-20 18:22:25 HUEBridge Philips_HUE lastError: parameter, xy, is not modifiable. Device is set to off.
2019-06-20 18:22:25 HUEDevice HUEDevice10 rgb FFCD78 : off

set HUEDevice10 rgb FFCD78 funktioniert problemlos, aber die Lampe geht an.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Yokohama

#6
Hallo Jürgen,

Zitatein "set HUEDevice10 rgb FFCD78 : off" liefert folgende Eventlog-Einträge:

2019-06-20 18:22:25 HUEBridge Philips_HUE lastError: parameter, xy, is not modifiable. Device is set to off.
2019-06-20 18:22:25 HUEDevice HUEDevice10 rgb FFCD78 : off

Ich erhalte zwar nicht Deine Fehlermeldung, aber der Effekt bei mir ist der gleiche: Es passiert nichts. Im Event Monitor findet sich lediglich folgender Eintrag:

HUEDevice Lampe reachable: 1

Zitatset HUEDevice10 rgb FFCD78 funktioniert problemlos, aber die Lampe geht an.

Dito bei mir.


Nachtrag: Wenn die Lampe bereits an war, ist das Ergebnis von "set Lampe rgb FFCD78 : off"wechselnd, mal zeigt der Event Monitor ein "HUEDevice Lampe on" gefolgt von einem "HUEDevice Lampe off", mal nur ein "HUEDevice Lampe off", ein Wechsel der Farbe unterbleibt aber stets. Ich gehe von einer Race Condition aus mit umkalkulierbarem Ausgang.