Modul: fhem backend für AnyEvent

Begonnen von geek, 05 Januar 2015, 23:21:59

Vorheriges Thema - Nächstes Thema

geek

Hallo,

Problem bei den meisten "normalen" CPAN Modulen ist, daß sie für non-blocking Einsatz wie in fhem nicht taugen. Mit  Aufwand kann man die Problem zwar vermeiden oder Umschiffen (wie zb: mit BlockingCall) - es geht aber auch eleganter:

AnyEvent ist ein universeller Adapter um Module auf einer beliebigen Event Loop laufen zu lassen:
http://search.cpan.org/~mlehmann/AnyEvent-7.08/lib/AnyEvent.pm

Module für AnyEvent sind in der Regel non-blocking. AnyEvent bringt auch viele Helferlein (AnyEvent::Handle) mit, die es sehr einfach machen neue Protokolle non-blocking anzubinden. Das erspart einem, das Rad immer wieder (ggf. nur für fhem) neu erfinden zu müssen.  Für diverse Protokolle gibt es fertige Module die AnyEvent nutzen (HTTP, MQTT, Websocket, IRC, XMPP, SNMP, Ping, FTP, Twitter, SMTP, SSH, DBI,  ...). Auch "moderne" Arbeitserleichterungen wie Promises http://search.cpan.org/dist/Promises/lib/Promises.pm oder Future http://search.cpan.org/dist/AnyEvent-Future/lib/AnyEvent/Future.pm können auf AnyEvent aufsetzen.

Das angehängte Module dient als Backend für AnyEvent in fhem. Damit können auf  AnyEvent basierende Module auch in fhem genutzt werden. Das hat auch den Vorteil das ggf. neu geschriebende AnyEvent Module auch ausserhalb von fhem genutzt werden können.

Ich nutze das für

  • die Integration einiger selbst geschriebender daemon
  • lircrc freiem lirc (um long und short press unterscheiden zu können)
  • mit AnyEvent::OWNet für onewire (da OWServer mit dem "normalen" OWNet prinzipbedingt blocken muss und OWX in meinem Fall nicht passt)

Die Verwendung ist im Modul als POD beschrieben - ebenso wie die Grenzen der Implementierung.

Rainer

geek

Hi,

sorry für die lange Pause.

Anbei findet sich eine Version mit kleineren Korrekturen.

ACHTUNG: Das ist nicht mit einem aktuellen fhem getestet! Meiner läuft leider noch auf nem Stand vom Frühling... also... Vorsicht!

Rainer