IPS_GetVariable "VariableChanged" in Verbindung mit EIB Shutter fehlerhaft?

Hallo,

mir scheint als gebe es einen Bug bei IPS_GetVariable in Verbindung mit dem Modul EIB Shutter.

Wenn ich das Modul EIB Shutter und dessen Status-Variable „Position“ verwende, liefert mir IPS_GetVariable einen falschen Wert für den Key „VariableChanged“. Hier wird immer ein Timestamp geliefert, bei dem die Sekunden 0 sind. Der Rest stimmt.
Verwende ich hingegen den Key „VariableUpdated“, enthält dieser den korrekten Timestamp, wie ich ihn bei „VariableChanged“ erwartet hätte.

Bei anderen Status-Variablen enthält „VariableChanged“ immer den korrekten Wert.

Kann mir hier jemand weiterhelfen?
Habe lange gesucht, bis ich herausgefunden habe, dass ein Skript deshalb nicht korrekt arbeitet.

Wie bekomme ich den korrekten Timestamp für o.g. Variable ohne die Krücke über „VariableUpdated“?

Gruß
Slummi

Kannst du mal eine Ausgabe von print_r(IPS_GetVariable($id)); hier rein kopieren? Kann mir gerade nicht vorstellen, wo dort ein Fehler sein soll/kann.

paresy

Hi paresy,

mir kam das auch irgendwie merkwürdig vor. Deswegen habe ich noch mal eine Zeit lang drüber nachgedacht und etwas getestet und habe das Problem gefunden.

Die Werte, die IPS_GetVariable liefert stimmen tatsächlich. Das Problem ist die Laufzeit der Rollladen.
Der Aktor meldet die Position logischerweise erst zurück, wenn diese auch erreicht ist.

Ändere ich die Position z.B. mittels EIB_Move(), dann stimmt „VariableChanged“ der Status-Variablen „Position“, da diese erst dann über die Rückmelde-Adresse geändert wird, wenn die Rollladen tatsächlich die Position erreicht haben.

Ändere ich hingegen die Position über EIB_Position(), so wird die Status-Variable im Moment des Absendens geändert, was zufällig immer eine volle Minute ist. Haben die Rollladen nach x Sekunden ihre Position erreicht, meldet der Aktor diese zurück und „VariableUpdated“ ändert sich, da der Variablen-Wert bereits zuvor auf den zurückgemeldeten Wert gesetzt wurde. Ausnahme: Die Rollladen erreichen nicht exakt die gewünschte Position und der Rückmeldewert weicht leicht vom gesendeten Wert ab.

Auf manche Dinge kommt man auch erst nach Tagen. :frowning:
Da ich in dem konkreten Anwendungsfall den genauen Wert benötige, wann die Position erreicht wurde, funktierte das Skript nicht wie gewünscht, sondern nur in den Fällen, wo die Variable nicht direkt durch den Befehl EIB_Move() geändert wurde.

Trotzdem danke für die Unterstützung, auch wenn es nur zum nochmaligen Nachdenken angeregt hat!

Slummi