MilightDevice - Queue verklemmt sich ständig

Begonnen von Weichspueler, 29 September 2017, 21:40:04

Vorheriges Thema - Nächstes Thema

Weichspueler

Hallo zusammen,

FHEM läuft  bei mir eigentlich ziemlich zuverlässig. Nur meine Milight-LED-Lampen wollen nicht. Über die Android-App "Milight" klappt alles sofort, zuverlässig und ohne Verzögerung. Nur über MilightBridge und MilightDevice hängt der Schaltvorgang regelmäßig. Ich schalte drei Lampen auf hell/weiß... eine bleibt bei der alten Farbe, eine reagiert gar nicht und bei einer funktioniert es.

Ich habe mit "verbose" den Log-Level mal hochgedreht und habe den Eindruck, dass MilightDevice alle Licht-Veränderungen intern in einer Queue mit weichen Übergängen machen will. Und das klappt hier äußerst unzuverlässig.

Wenn das Einschalten mal funktioniert, sieht es im Log so aus:
2017.09.29 21:36:55.400 5: milight1 send: 490055@1506713815.40036; Queue Length: 39
2017.09.29 21:36:55.401 5: milight1_CmdQueue_Send: Remove timer at: 1506713815.14626
2017.09.29 21:36:55.501 5: milight1 send: c90055@1506713815.50182; Queue Length: 38
2017.09.29 21:36:55.502 5: milight1_CmdQueue_Send: Remove timer at: 1506713815.50145
2017.09.29 21:36:55.603 5: milight1 send: 4e0255@1506713815.60361; Queue Length: 37
[...]
2017.09.29 21:36:58.157 5: milight1_CmdQueue_Send: Remove timer at: 1506713818.1552
2017.09.29 21:36:58.258 5: milight1 send: c50055@1506713818.25882; Queue Length: 11
2017.09.29 21:36:58.260 5: milight1_CmdQueue_Send: Remove timer at: 1506713818.25811
2017.09.29 21:36:58.361 5: milight1 send: 4e1a55@1506713818.36098; Queue Length: 10
2017.09.29 21:36:58.362 5: milight1_CmdQueue_Send: Remove timer at: 1506713818.36049
2017.09.29 21:36:58.462 5: milight1 send: 450055@1506713818.46266; Queue Length: 9
2017.09.29 21:36:58.463 5: milight1_CmdQueue_Send: Remove timer at: 1506713818.46209
2017.09.29 21:36:58.566 5: milight1 send: c50055@1506713818.56657; Queue Length: 8
2017.09.29 21:36:58.567 5: milight1_CmdQueue_Send: Remove timer at: 1506713818.56367
2017.09.29 21:36:58.668 5: milight1 send: 4e1a55@1506713818.66816; Queue Length: 7
2017.09.29 21:36:58.669 5: milight1_CmdQueue_Send: Remove timer at: 1506713818.66774
2017.09.29 21:36:58.769 5: milight1 send: 470055@1506713818.76959; Queue Length: 6
2017.09.29 21:36:58.770 5: milight1_CmdQueue_Send: Remove timer at: 1506713818.76919
2017.09.29 21:36:58.871 5: milight1 send: c70055@1506713818.87135; Queue Length: 5
2017.09.29 21:36:58.872 5: milight1_CmdQueue_Send: Remove timer at: 1506713818.87074
2017.09.29 21:36:58.973 5: milight1 send: 4e1a55@1506713818.97346; Queue Length: 4
2017.09.29 21:36:58.974 5: milight1_CmdQueue_Send: Remove timer at: 1506713818.97281
2017.09.29 21:36:59.075 5: milight1 send: 470055@1506713819.0754; Queue Length: 3
2017.09.29 21:36:59.076 5: milight1_CmdQueue_Send: Remove timer at: 1506713819.07492
2017.09.29 21:36:59.177 5: milight1 send: c70055@1506713819.17715; Queue Length: 2
2017.09.29 21:36:59.178 5: milight1_CmdQueue_Send: Remove timer at: 1506713819.17672
2017.09.29 21:36:59.279 5: milight1 send: 4e1a55@1506713819.27936; Queue Length: 1

Und schon beim Ausschalten habe ich wieder einen Hänger:

2017.09.29 21:38:14.827 5: milight1 send: c90055@1506713894.82706; Queue Length: 23
2017.09.29 21:38:14.828 5: milight1_CmdQueue_Send: Remove timer at: 1506713894.82641
2017.09.29 21:38:14.929 5: milight1 send: 4e0255@1506713894.92934; Queue Length: 22
2017.09.29 21:38:14.930 5: milight1_CmdQueue_Send: Remove timer at: 1506713894.92863
2017.09.29 21:38:15.031 5: milight1 send: 490055@1506713895.03116; Queue Length: 21
2017.09.29 21:38:15.032 5: milight1_CmdQueue_Send: Remove timer at: 1506713895.03058
2017.09.29 21:38:15.133 5: milight1 send: c90055@1506713895.13298; Queue Length: 20
2017.09.29 21:38:15.134 5: milight1_CmdQueue_Send: Remove timer at: 1506713895.13252

Hier müsste vermutlich die Queue-Length weiter herunterzählen, aber sie bleibt genau da stehen.

Ich hätte auch statt dem smoothen Effekt viel lieber zuverlässiges "hartes" Schalten. Ich habe auch gar keine "q" oder "ramp" oder so etwas eingestellt. Das Modul hat sich wohl von sich aus überlegt, dass ich das gerne hätte.

Kennt jemanden diesen Effekt? Vielleicht sogar einen Workaround?

UPDATE: Mit WifiLight klappen die Schaltvorgänge soweit zuverlässig. Nur Milight* ist da bockig.

Gruß,
Christoph

Weichspueler

Ich bin der Ursache etwas näher gekommen.

In der Funktion "sub MilightDevice_RGBW_Off" wird beim Ausschalten einer Milight-Lampe dieser Code ausgeführt:

    # Dim down to min brightness then send off command (avoid flicker on turn on)
    MilightDevice_RGBW_Dim($hash, MilightDevice_roundfunc(100/MilightDevice_DimSteps($hash)), $ramp, $flags);
    return MilightDevice_RGBW_Dim($hash, 0, 0, 'qP');

Der erste Aufruf von "MilightDevice_RGBW_Dim" scheint das Problem zu sein. Wenn ich diese Zeile auskommentiere, funktioniert das Ausschalten zuverlässig. Dann sehe ich beim Einschalten allerdings den Effekt, den der Autor zu vermeiden versucht - dass die Lampe kurz auf dem vorigen Stand eingeschaltet wird - im unangenehmen Fall war das weiß mit 100% Helligkeit.

Ich bin das Modul 31_MilightDevice.pm ziemlich komplett durchgegangen, um es halbwegs zu verstehen. Aber ich bin mir trotzdem nicht sicher, wie ein Patch aussehen müsste. Im Wiki finde ich leider keine Hinweise, wie man Bug-Reports einreicht oder wie man die Entwickler erreicht. Hat jemand eine Idee?

viegener

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können