FHEM Forum

FHEM - Hausautomations-Systeme => ZWave => Thema gestartet von: throbin am 29 September 2016, 07:04:08

Titel: FGR-222 - Aktuelle Position in Perl abfragen
Beitrag von: throbin am 29 September 2016, 07:04:08
Hi,

ich möchte die Rollos nur dann herunter/hochfahren, wenn die Position ungleich dim99 bzw. dim0 ist. Muss ich jedes Mal "get swmStatus" aufrufen oder kann ich mich darauf verlassen, dass unter normalen Umständen, die Position immer korrekt ist?

Wenn ich "get swmStatus" in einer Perl-Funktion verwende, bevor ich die Rollos starte, muss ich dann eine bestimmte Zeit in der Funktion warten - sprich ist der Aufruf aus perl heraus synchron oder asynchron?

Wenn der Call Asynchron ist, wie macht man es dann am "saubersten", Callback, eigenes Event oder Wait, oder gibt es bei FHEM sowas wie "wait for..."?

Vielen Dank im Voraus!
LG
Titel: Antw:FGR-222 - Aktuelle Position in Perl abfragen
Beitrag von: Bartimaus am 29 September 2016, 07:16:11
Moin,

bau Dir einen Timer mit dem DOIF-Modul. Darin kannst Du den Status der Rollos abfragen. Steht alles in der Commandref drin.

Titel: Antw:FGR-222 - Aktuelle Position in Perl abfragen
Beitrag von: rudolfkoenig am 30 September 2016, 18:13:29
ZitatMuss ich jedes Mal "get swmStatus" aufrufen oder kann ich mich darauf verlassen, dass unter normalen Umständen, die Position immer korrekt ist?
Das ZWave Modul setzt mW beim "set dim X" nur das state reading, was mit einem anderen set ueberschrieben werden kann. Mit einem notify oder userReading kann man in solchen Faellen aber einen bestimmten Reading setzen.
Ich weiss nicht genau, ob bzw. was dein Geraet bei einer manuellen Aenderung die Position zuverlaessig meldet, und je nach Meldung kann zwar FHEM auch state auf dim: XX setzen, aber auch andere Moeglichkeiten sind denkbar (swmBeginUp/swmEnd, usw). Falls die Position nicht zuverlaessig gemeldet wird, dann empfehle ich ein "get swmStatus".

get im ZWave ist asynchron. Bei der Eingabe ueber Frontends wird deren AsyncOutputFn mit dem Ergebnis aufgerufen, bei einem get aus einem notify/DOIF wird "nur" ein Event generiert.

"wait for..." gibts in FHEM nicht, man kann aber ein FHEM-sleep verwenden, der nicht blockierend ist.
Die korrekte Loesung ist notify (oder wenn es sein muss, DOIF), das auf das erzeugte Event reagiert.