danielperna84 / hahomematic

Python 3 Interface for Home Assistant to interact with HomeMatic devices
MIT License
130 stars 22 forks source link

HMIP-RGBW: Mehr Probleme mit Transition-Zeiten #1580

Closed sleiner closed 3 months ago

sleiner commented 3 months ago

I agree to the following

The problem

Nach etwas rumspielen mit einem HMIP-RGBW habe ich zwei Probleme festgestellt, wenn das Licht über Home Assistant geschaltet und transition gesetzt ist:

  1. light.turn_off funktioniert nicht, wenn transition gesetzt ist. Das Debug-Log zeigt:

    2024-06-01 14:43:08.485 DEBUG (MainThread) [hahomematic.client] PUT_PARAMSET: 0033E0C9923CA1:1, VALUES, {'RAMP_TIME_TO_OFF_VALUE': 5, 'LEVEL': 0.0}
    2024-06-01 14:43:08.486 DEBUG (MainThread) [hahomematic.client.xml_rpc] __ASYNC_REQUEST: ('putParamset', ('0033E0C9923CA1:1', 'VALUES', {'RAMP_TIME_TO_OFF_VALUE': 5, 'LEVEL': 0.0}))
    2024-06-01 14:43:08.500 WARNING (MainThread) [hahomematic.client] PUT_PARAMSET failed: ClientException [XMLRPC Fault from backend: -1 Generic error (MISSING_NON_OPTIONAL_PARAMETER)] 0033E0C9923CA1:1, VALUES, {'RAMP_TIME_TO_OFF_VALUE': 5, 'LEVEL': 0.0}

    Vermutlich liegt dem das gleiche Problem wie #1351 zugrunde und man muss die on-time setzen (auch beim Ausschalten, merkwürdigerweise). Wenn ich in der CCU-WebUI ein Programm erstelle, welches das Licht per Kanalaktion über eine Zeit von 5 Sekunden ausschaltet, kommen folgende Parameter raus: L=0,OT=111600,RT=5,H=0,SAT=100,RTTOV=0,RTTOU=0,TC=0 Danach dimmt das Licht ca. 5 Sekunden lang unter und ist danach aus. Mit OT scheint es aber noch ein weiteres Problem zu geben, siehe den zweiten Punkt:

  2. Ich habe das Licht die letzten Tage über öfter über Home Assistant mit einer transition-Zeit von 5 Sekunden angeschaltet. Hin und wieder ging das Licht einige Zeit später von alleine aus. Ich habe jetzt nochmal das Log gecheckt und tatsächlich geht das Licht immer nach genau 13301 Sekunden (also ca. 3 Stunden und 42 Minuten) aus.

    Ich habe das Licht vor ein paar Minuten nochmal direkt über ein CCU-Programm mit Kanalaktion L=100,OT=111600,RT=5,H=0,SAT=100,RTTOV=0,RTTOU=3,TC=0 angeschaltet und beobachte mal, ob das Licht auch in ein paar Stunden wieder ausgeht.

What version of HomematicIP (local) has the issue?

1.62.0

What was the last working version of HomematicIP (local)?

No response

What type of installation are you running?

Home Assistant OS

What type of installation are you running for your homematic backend?

RaspberryMatic Standalone

Which version of your homematic backend are you running?

3.75.7.20240420

What hardware are you running for your system?

CCU3

Which config details do you use

Which interfaces do you use?

Diagnostics information (no logs here)

No response

Log file extract. Anything in the logs that might be useful for us? The log (Setting/System/Logs -> load full log) is the best source to support trouble shooting!

No response

Additional information

No response

SukramJ commented 3 months ago

Versuch bitte mal, ob folgende paramsets gesendet werden können:

service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  paramset:
    HUE: 44,
    SATURATION: 0.66,
    DURATION_VALUE: 111600,
    RAMP_TIME_UNIT: 0,
    RAMP_TIME_VALUE: 5,
    LEVEL: 1.0,
  device_address: XXX
  channel: 1
service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  paramset:
    RAMP_TIME_TO_OFF_UNIT: 0,
    RAMP_TIME_TO_OFF_VALUE: 5,
    LEVEL: 0.0,
  device_address: XXX
  channel: 1
service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  device_address: XXX
  channel: 1
  paramset:
    HUE: 44,
    SATURATION: 0.66,
    RAMP_TIME_UNIT: 0,
    RAMP_TIME_VALUE: 5,
    DURATION_UNIT: 0,
    DURATION_VALUE: 8760,
    LEVEL: 1
sleiner commented 3 months ago

Hi 👋

ich habe die drei Paramsets ausprobiert (allerdings ohne die Kommas, ich gehe davon aus, dass die nicht beabsichtigt waren 😅)

service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  paramset:
    HUE: 44
    SATURATION: 0.66
    DURATION_VALUE: 111600
    RAMP_TIME_UNIT: 0
    RAMP_TIME_VALUE: 5
    LEVEL: 1.0
  device_address: XXX
  channel: 1

Funktioniert, das Licht geht über 5 Sekunden an 👍🏻


service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  paramset:
    RAMP_TIME_TO_OFF_UNIT: 0
    RAMP_TIME_TO_OFF_VALUE: 5
    LEVEL: 0.0
  device_address: XXX
  channel: 1

Funktioniert nicht - das Licht wird nicht ausgeschaltet. Das Log sagt:

2024-06-02 17:48:15.769 WARNING (MainThread) [hahomematic.client] PUT_PARAMSET failed: ClientException [XMLRPC Fault from backend: -1 Generic error (MISSING_NON_OPTIONAL_PARAMETER)] 0033E0C9923CA1:1, VALUES, {'RAMP_TIME_TO_OFF_UNIT': 0, 'RAMP_TIME_TO_OFF_VALUE': 5, 'LEVEL': 0}

service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  device_address: XXX
  channel: 1
  paramset:
    HUE: 44
    SATURATION: 0.66
    RAMP_TIME_UNIT: 0,
    RAMP_TIME_VALUE: 5
    DURATION_UNIT: 0
    DURATION_VALUE: 8760
    LEVEL: 1

Funktioniert auch: Das Licht geht über 5 Sekunden an 👍🏻


außerdem habe ich getestet:

service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  device_address: XXX
  channel: 1
  paramset:
    RAMP_TIME_UNIT: 0
    RAMP_TIME_VALUE: 5
    LEVEL: 0.0
    DURATION_VALUE: 111600

Funktioniert soweit, das Licht geht über 5 Sekunden aus. Ich habe allerdings nicht abgewartet, ob es nach 13301 Sekunden wieder angeht 😅

Aber apropos 13301 Sekunden: Ich habe mir mal die Paramset-Description genauer angeschaut. Dort ist ein Maximalwert für DURATION_VALUE angegeben, nämlich 16343. Auch wenn die API das zu akzeptieren scheint: Mit 111600 sind damit außerhalb der Spezifikation. Meine Theorie ist, dass wir hier also in eine Bitlängen-Begrenzung laufen: 16343 ist sehr nahe an 2^14. Wenn wir also davon ausgehen, dass 14 Bits für diese Zahl vorgesehen sind, und die höheren Bits einfach abgeschnitten werden, ergibt sich eine Anschaltdauer von 111600 mod (2^14) von 13296 Sekunden. Rechnet man noch die 5 Sekunden Übergangszeit dazu, die ich verwendet hatte, landet man genau bei den 13301 Sekunden aus dem ursprünglichen Bug Report. Das spricht sehr dafür, dass hier in der Tat ein Überlauf vorliegt.

Was sollte man also schicken, um das Licht dauerhaft anzuschalten? In der CCU-WebUI steht:

Zu beachten ist, dass die Einschaltdauer auf 30 Stunden begrenzt ist. Ein Wert von 31 Stunden bedeuted 'dauerhaft ein'.

Das erklärt auch die Zahl 111600: 31 60 60. Ich habe also mal folgendes Paramset gesendet:

service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  device_address: XXX
  channel: 1
  paramset:
    RAMP_TIME_VALUE: 5
    RAMP_TIME_UNIT: S
    LEVEL: 0.25
    DURATION_VALUE: 31
    DURATION_UNIT: H

Daraufhin hat das Licht über 5 Sekunden hochgedimmt und brennt seitdem unverändert. Sobald 31 Stunden vorbei sind, gebe ich bescheid, ob das Licht weiterhin brennt oder doch ausgegangen ist.

SukramJ commented 3 months ago

Danke fürs Testen. Dei 111600 kommt, auch ohne Unit, in deiner Kanalaktion vor:

L=0,OT=111600,RT=5,H=0,SAT=100,RTTOV=0,RTTOU=0,TC=0

Nur der Parameter TC sagt mir nichts.

Versuch bitte mal:

service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  paramset:
    RAMP_TIME_TO_OFF_UNIT: 0
    RAMP_TIME_TO_OFF_VALUE: 5
    LEVEL: 0.0
    DURATION_VALUE: 111600
  device_address: XXX
  channel: 1
sleiner commented 3 months ago

Versuch bitte mal:

service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  paramset:
    RAMP_TIME_TO_OFF_UNIT: 0
    RAMP_TIME_TO_OFF_VALUE: 5
    LEVEL: 0.0
    DURATION_VALUE: 111600
  device_address: XXX
  channel: 1

funktioniert nicht:

2024-06-02 18:58:19.622 WARNING (MainThread) [hahomematic.client] PUT_PARAMSET failed: ClientException [XMLRPC Fault from backend: -1 Generic error (MISSING_NON_OPTIONAL_PARAMETER)] 0033E0C9923CA1:1, VALUES, {'RAMP_TIME_TO_OFF_UNIT': 0, 'RAMP_TIME_TO_OFF_VALUE': 5, 'LEVEL': 0, 'DURATION_VALUE': 111600}

der Parameter TC

WebUI sagt: Das ist die Farbtemperatur in Kelvin :-)

SukramJ commented 3 months ago

funktioniert nicht:

Hatte ich befürchtet.

SukramJ commented 3 months ago

Bitte teste mal mit der 1.62.1b1. Bitte teste auch die sonstigen Grundfunktionen

sleiner commented 3 months ago

Die 1.62.1b1 sieht gut aus, ich konnte bisher in meinen Tests keine weiteren Probleme feststellen 👍🏻 Damit wäre das Ausschaltproblem gelöst 🙌

sleiner commented 3 months ago

Was mir noch aufgefallen ist: Zum Ausschalten funktioniert auch 0 als DURATION_VALUE, es braucht hier nicht den "magischen" Wert 111600. Nach Ablauf der Dauer geht das Licht wohl wirklich aus, nicht zurück in den vorigen Zustand.

sleiner commented 3 months ago

Und was das Einschaltproblem anbelangt:

Ich habe also mal folgendes Paramset gesendet:

service: homematicip_local.put_paramset
data:
  paramset_key: VALUES
  device_address: XXX
  channel: 1
  paramset:
    RAMP_TIME_VALUE: 5
    RAMP_TIME_UNIT: S
    LEVEL: 0.25
    DURATION_VALUE: 31
    DURATION_UNIT: H

Daraufhin hat das Licht über 5 Sekunden hochgedimmt und brennt seitdem unverändert. Sobald 31 Stunden vorbei sind, gebe ich bescheid, ob das Licht weiterhin brennt oder doch ausgegangen ist.

Die Zeit ist nun vorbei, nach genau 31 Stunden und 5 Sekunden ist das Licht wieder ausgegangen 🙈 Ich habe jetzt also mal an eQ-3 geschrieben und gefragt, was sie in dem Szenario empfehlen.

SukramJ commented 3 months ago

Danke für die Info.

    DURATION_VALUE: 31
    DURATION_UNIT: H

Hier ist auch nachvollziehbar, daß das Gerät ausschaltet.

111600 ist aber ein "special" Wert, der für "NOT_USED" steht. Siehehttps://homematic-forum.de/forum/viewtopic.php?f=31&t=63093&p=622655&hilit=111600#p622655

Eine Nachfrage bei eQ-3 finde ich sehr gut. Erwähne aber nicht, falls Du es nutzen solltest, Raspberrymatc.

Ich werde das Ticker erst mal schliessen. Melde dich bitte, wenn Du Antwort erhalten hast.