HMRPC -- XML-RPC-basiertes fhem-Modul

Nutzung von XML RPC, Remote Script, JSON RPC, XMLAPI

Moderator: Co-Administratoren

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von owagner » 05.10.2011, 00:13

HMRPC - xmlrpc-basierte Homematic-Integration fuer fhem
=======================================================
Von Oliver Wagner <owagner@vapor.com>

V0.1

Uebersicht
----------
HMRPC ist ein Modul zur Integration des Homematic-Systems der Firma EQ-3
mit fhem. Es verfolgt im Gegensatz zu den bereits vorhandenen CUL_HM/HMLAN-
Modulen einen anderen Ansatz: Statt direkt mit der Funk-Hardware zu
kommunizieren, verwendet es die offizielle bereitgestellte xmlrpc-basierte
API der EQ-3-Software (siehe [1]). Daraus ergeben sich Vorteile und
Nachteile: So sind implizit alle derzeitigen und auch zukuenftigen Geraete
vollumfaenglich unterstuetzt, auch die RS485 Wired-Module.

Der wesentliche Nachteil, oder zumindestens eine Vorraussetzung, ist, dass
man eine Instanz der xmlrpc-Server benoetigt. Dazu gibt es aktuell zwei
Moeglichkeiten:

1) auf der CCU1 selbst laufen "rfd" fuer die Funkkommunikation und
"hs485d" fuer die Wired-Kommunikaiton.

Eine Uebersicht der Softwarearchitektur der CCU1 findet sich unter [2]

2) als Teil der Verwaltungssoftware fuer den HM-LAN-Aadapter (siehe [3]) gibt
es einen xmlrpc-Dienst fuer Funkkommunikation als Windows-Service. Dieser
entspricht dem "rfd" auf der CCU1.

Es ist aber nicht auszuschliessen, das EQ-3 in Zukunft z.B. einen rfd fuer
Linux veroeffentlicht.


Geschichte und Status
---------------------
Diese Module sind aus der Middleware "HMCompanion" [4] entstanden, die ich mir
fuer die HM-Integration in meinen Haussteuerungswildwuchs geschrieben habe.

HMRPC hat aktuell eher experimentellen Charakter. Ohne genaue Kenntnisse
von fhem, perl und HM-Internas haben die Module nur eingeschraenkten Nutzwert,
die Veroeffentlichung dient erstmal nur dazu, fruehes Feedback zur
Implementierung zu bekommen.

Das ist im übrigen mein erstes nicht komplett triviales Stück perl-code -- über
Hinweise diesbezüglich würde ich mich ebenso freuen wie über allgemeines
Feedback zu HMRPC.


Benutzung
---------
Es gibt zwei Module:

00_HMRPC.pm ist der Provider fuer die Kommunikation mit eineml
xmlrpc-Service

01_HMDEV.pm ist jeweils die Abstraktion eines einzelnen Devices

Beispielkonfiguration fuer fhem:

# Wired-Schnittstelle auf einer CCU1 mit IP 192.168.5.2)
define hmw HMRPC 192.168.5.2 2000
# Ein Kanal eines Wired-Aktors
define light_buero_olli HMDEV GEQ0009019:3

Nutzung dann z.B. mit

set light_buero_olli STATE false

Ein putParamset (Konfigurationsupdate) wird dann durch zusätzliche Angabe
der Paramset-ID generiert:

set light_buero_olli MASTER LOGGING 0

Die Attribute eines Geraetes entsprechen den in dem Dokument unter [1]
"HomeMatic-Script Dokumentation: Teil 4 - Datenpunkte" beschriebenen.
Die Inhalte der Paramsets sind aktuell nicht dokumentiert, man muss diese
anhand des xmlrpc-Requests getParamsetDescription oder durch Browsen der
XML-Beschreibungen im /firmware-Verzeichnis der CCU-Software
ermitteln.

Weitergehende Funktionen wie synchrones Abfragen von Werten oder Paramsets
oder Statii des jeweiligen Service (Meldungen etc.) sind geplant, aber noch
nicht implementiert.


Design
------
Ich habe überlegt, ob HMRPC als Provider für CUL_HM dienen könnte, habe aber
keine praktikable Lösung dafür gefunden -- HMDEV ist aktuell im Vergleich zu
CUL_HM sehr dumm und dient mehr oder weniger nur als Cache für Adresse und
Readings.

HMRPC meldet sich beim jeweiligen Service per "init" an und erhält dann per
xmlrpc-Callback Mitteilungen über Zustandsänderungen. Wird der Service neu
gestartet (CCU Reboot o.ä.), ist diese Anmeldung hinfällig. Es gibt aktuell
keine gute Methode, dies festzustelle -- als Workaround meldet sich HMRPC
15 Minuten nach dem letzten empfangenen Callback neu an. Je nach Art der
verwendeten Aktoren in einer Installation kann diese Zeit sehr kurz sein
und daher unnötige re-inits verursachen. Diese scheinen aber grundsätzlich kein
Problem auf der Service-Seite darzustellen.


Anhang
------

[1] http://www.homematic.com/index.php?id=156
[2] http://www.homematic-wiki.info/mw/index ... c_Software
[3] http://www.homematic.com/index.php?id=644
[4] http://homematic-forum.de/forum/viewtop ... =26&t=4639

=========

Hinweis: Dateianhang entfernt, aktuelle Version ist jeweils im "Nightly CVS"-Tarball des fhem-Paketes enthalten, siehe http://fhem.de/fhem.html unter "Download"
Zuletzt geändert von owagner am 10.10.2011, 10:25, insgesamt 1-mal geändert.

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

Re: HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von owagner » 10.10.2011, 00:08

Das Modul ist jetzt im fhem-CVS-Baum (unter contrib/HMRPC) enthalten.

ChrisL
Beiträge: 344
Registriert: 25.05.2011, 08:31

Re: HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von ChrisL » 10.10.2011, 10:11

Hallo owagner,

ich habe das Modul mal installiert und fhem gestartet. Leider bekomme ich keine Verbindung zu einem Gerät. Die Konfig habe ich wie folgt angepasst:

Code: Alles auswählen

# cat fhem.cfg
#
# pgm2 / autocreate configfile. Take a look at the other examples for more.
#
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .                  # where our FHEM directory is
attr global port 7072 global           # our TCP/IP port
attr global statefile ./log/fhem.save   # where to save the state of the devices
attr global verbose 3                  # "normal" verbosity (min 1, max 5)

#define CUL CUL /dev/ttyACM0 1234
#define FHZ FHZ /dev/USB0

define WEB FHEMWEB 8083 global

define WEBphone FHEMWEB 8084 global
attr WEBphone smallscreen

define WEBtablet FHEMWEB 8085 global
attr WEBtablet touchpad

# Fake logfile, to access the global log
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog

define autocreate autocreate
attr autocreate autosave
attr autocreate device_room %TYPE
attr autocreate filelog ./log/%NAME-%Y.log
attr autocreate weblink
attr autocreate weblink_room Plots

# Wireless-Schnittstelle auf einer CCU1 mit IP 192.168.x.x)
define hmw HMRPC 192.168.x.x 2001
# Einliegerwohnung Kueche Kanal
define light_einliegerwohnung_kueche HMDEV IEQ0000881:1

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

Re: HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von owagner » 10.10.2011, 10:22

Was steht denn so im Log?
2011.10.10 10:21:49 5: Loading /usr/share/fhem/FHEM/00_HMRPC.pm
2011.10.10 10:21:49 2: HMRPC callback listening on http://192.168.5.1:7400/fhemhmrpc
2011.10.10 10:21:52 2: HMRPC callback initialized

ChrisL
Beiträge: 344
Registriert: 25.05.2011, 08:31

Re: HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von ChrisL » 10.10.2011, 10:32

Hier mal das Log:

Code: Alles auswählen

2011.10.10 10:31:20 2: FHEMWEB port 8083 opened
2011.10.10 10:31:20 2: FHEMWEB port 8084 opened
2011.10.10 10:31:20 2: FHEMWEB port 8085 opened
2011.10.10 10:31:20 1: reload: Error:Modul 00_HMRPC deactivated:
 Can't locate RPC/XML/Server.pm in @INC (@INC contains: /var/InternerSpeicher/SanDisk-Cruzer-01/fhem/lib/perl5/5.10 /usr/lib/perl5/5.10 .) at ./FHEM/00_HMRPC.pm line 24, <$fh> line 32.
BEGIN failed--compilation aborted at ./FHEM/00_HMRPC.pm line 24, <$fh> line 32.

2011.10.10 10:31:20 3: No I/O device found for light_einliegerwohnung_kueche
2011.10.10 10:31:20 1: configfile: Unknown module HMRPC, choose one of ALL3076 ALL4000T ALL4027 BS CM11 CUL CUL_EM CUL_FHTTK CUL_HM CUL_HOERMANN CUL_RFR CUL_TX CUL_WS ECMD ECMDDevice EIB EM EMEM EMGZ EMWZ ESA2000 EnOcean FHEM2FHEM FHEMWEB FHT FHT8V FHZ FS20 FileLog HMDEV HMLAN HMS IPWE KM271 KS300 LGTV LIRC M232 M232Counter M232Voltage OREGON OWFS OWTEMP PID PachLog RFXCOM RFXELSE RFXMETER RFXX10REC SCIVT SISPM SIS_PMS SVG TCM TCM120 TUL USBWX USF1000 VantagePro2 WEBIO WEBIO_12DIGITAL WEBTHERM WS2000 WS300 WS3600 Weather X10 at autocreate dummy holiday notify sequence structure watchdog weblink xxLG7000
2011.10.10 10:31:20 0: Server started (version 5.1 from 2011-07-08 ($Id: fhem.pl,v 1.150 2011-08-16 18:06:38 rudolfkoenig Exp $), pid 2855)
2011.10.10 10:31:21 1: Can't locate Compress/Zlib.pm in @INC (@INC contains: /var/InternerSpeicher/SanDisk-Cruzer-01/fhem/lib/perl5/5.10 /usr/lib/perl5/5.10 .) at ./FHEM/01_FHEMWEB.pm line 214.

2011.10.10 10:31:21 1: WEB: Can't load Compress::Zlib, deactivating compression

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

Re: HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von owagner » 10.10.2011, 11:01

Ah, Du musst das XML-RPC-Modul installieren (CPAN o.ä.)

ChrisL
Beiträge: 344
Registriert: 25.05.2011, 08:31

Re: HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von ChrisL » 10.10.2011, 11:05

Hmm.
Ist das nicht dieses Firmware-Patch-Addon? Hast du mir evt. einen Link?
Danke dir.

Edit: Ich habe FHEM auf der Fritzbox am Laufen..

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

Re: HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von owagner » 10.10.2011, 11:11

Es geht um das folgende Perl-Modul: http://www.blackperl.com/RPC::XML/

Sorry, zum Thema Perl-auf-Fritzbox kann ich leider gar nicht helfen...

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

Re: HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von owagner » 11.10.2011, 01:09

Hi,

es gibt nun zusätzlich ein Script "contrib/HMRPC/import_from_webui.bsh",
welches per TCL-API aus dem WebUI (ReGaHSS) einer laufenden CCU die
zugewiesenen Device- und Channelnamen abfragt und auf dieser Basis ein
Config-Fragment für fhem generiert.

Es werden automatisch die IODev "hmw" für Wired-Geräte und "hmrf" für
RF-Geräte zugewiesen. Desweiteren wird auch das "room"-Attribut
automatisch anhand der ReGaHSS-Namen gesetzt.

Zur Namensumwandlung werden alle Umlaute und einige Sonderzeichen
umgesetzt und der ReGaHSS-Name in Kleinbuchstaben gewandelt. Da im
ReGaHSS-Namensraum ein Device und ein Channel denselben Namen haben
können, generiert das Script bei Namensgleichheit den Device-Namen mit
dem Suffix "_dev". Bei den Room-Namen werden nur Leerzeichen entfernt.

Viele Grüße,
Olli

Benutzeravatar
owagner
(verstorben)
Beiträge: 1193
Registriert: 13.05.2008, 19:49
Danksagung erhalten: 1 Mal

Re: HMRPC -- XML-RPC-basiertes fhem-Modul

Beitrag von owagner » 13.11.2011, 21:01

Gerade in SVN eingecheckt:

V0.4 - HMRPC: Fehlermeldung statt Abbruch, wenn eine Testverbindung zum
entsprechenden Daemon nicht moeglich ist
HMRPC: Beim Abmelden wird nun korrekterweise kein Callback-Parameter
uebergeben
HMRPC: Das Default-Timeout fuer eingehende Requests ist nun auf 20s
gesetzt, da die 3s bei sehr grossen eingehenden Requests offenbar
zu kurz war und so z.B. der initiale newDevices-Aufruf nach dem init
abgebrochen wurde, was zu einem Absturz des rfd fuehrt
HMRPC: Ist ein Channel unbekannt, wird nun der Event an das entsprechende
Device delegiert, fuer Channel != 0 dann mit dem Suffix _ChannelID
(z.B. STATE_1)
HMRPC: PRESS_ loest nun wirklich jedesmal ein changed aus.
import_webui: Pattern korrigiert, so dass nun auch die virtuellen
Taster erkannt werden

Antworten

Zurück zu „Softwareentwicklung von externen Applikationen“