FGR-222 - Aktuelle Position in Perl abfragen

Begonnen von throbin, 29 September 2016, 07:04:08

Vorheriges Thema - Nächstes Thema

throbin

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

Bartimaus

Moin,

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

LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

rudolfkoenig

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.