HMRPC.txt 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. HMRPC - xmlrpc-basierte Homematic-Integration fuer fhem
  2. =======================================================
  3. Von Oliver Wagner <owagner@vapor.com>
  4. V0.5
  5. Uebersicht
  6. ----------
  7. HMRPC ist ein Modul zur Integration des Homematic-Systems der Firma EQ-3
  8. mit fhem. Es verfolgt im Gegensatz zu den bereits vorhandenen CUL_HM/HMLAN-
  9. Modulen einen anderen Ansatz: Statt direkt mit der Funk-Hardware zu
  10. kommunizieren, verwendet es die offizielle bereitgestellte xmlrpc-basierte
  11. API der EQ-3-Software (siehe [1]). Daraus ergeben sich Vorteile und
  12. Nachteile: So sind implizit alle derzeitigen und auch zukuenftigen Geraete
  13. vollumfaenglich unterstuetzt, auch die RS485 Wired-Module.
  14. Der wesentliche Nachteil, oder zumindestens eine Vorraussetzung, ist, dass
  15. man eine Instanz der xmlrpc-Server benoetigt. Dazu gibt es aktuell drei
  16. Moeglichkeiten:
  17. 1) auf der CCU1 selbst laufen "rfd" fuer die Funkkommunikation und
  18. "hs485d" fuer die Wired-Kommunikaiton.
  19. Eine Uebersicht der Softwarearchitektur der CCU1 findet sich unter [2]
  20. 2) als Teil der Verwaltungssoftware fuer den HM-LAN-Aadapter (siehe [3]) gibt
  21. es einen xmlrpc-Dienst fuer Funkkommunikation als Windows-Service. Dieser
  22. entspricht dem "rfd" auf der CCU1.
  23. 3) Nutzung des "rfd" aus einem CCU1-Firmware-Image mittels "qemu-arm"
  24. Es ist aber nicht auszuschliessen, das EQ-3 in Zukunft z.B. einen rfd fuer
  25. Linux/x86 veroeffentlicht.
  26. Geschichte und Status
  27. ---------------------
  28. Diese Module sind aus der Middleware "HMCompanion" [4] entstanden, die ich mir
  29. fuer die HM-Integration in meinen Haussteuerungswildwuchs geschrieben habe.
  30. HMRPC hat aktuell eher experimentellen Charakter. Ohne genaue Kenntnisse
  31. von fhem, perl und HM-Internas haben die Module nur eingeschraenkten Nutzwert,
  32. die Veroeffentlichung dient erstmal nur dazu, fruehes Feedback zur
  33. Implementierung zu bekommen.
  34. Das ist im iebrigen mein erstes nicht komplett triviales Stueck perl-code --
  35. ueber Hinweise diesbezueglich wuerde ich mich ebenso freuen wie ueber allgemeines
  36. Feedback zu HMRPC.
  37. Benutzung
  38. ---------
  39. Es gibt zwei Module:
  40. 00_HMRPC.pm ist der Provider fuer die Kommunikation mit eineml
  41. xmlrpc-Service
  42. 01_HMDEV.pm ist jeweils die Abstraktion eines einzelnen Devices
  43. Beispielkonfiguration fuer fhem:
  44. # Wired-Schnittstelle auf einer CCU1 mit IP 192.168.5.2)
  45. define hmw HMRPC 192.168.5.2 2000
  46. # Ein Kanal eines Wired-Aktors
  47. define light_buero_olli HMDEV GEQ0009019:3
  48. Nutzung dann z.B. mit
  49. set light_buero_olli STATE false
  50. Ein putParamset (Konfigurationsupdate) wird dann durch zusätzliche Angabe
  51. der Paramset-ID generiert:
  52. set light_buero_olli MASTER LOGGING 0
  53. Die Attribute eines Geraetes entsprechen den in dem Dokument unter [1]
  54. "HomeMatic-Script Dokumentation: Teil 4 - Datenpunkte" beschriebenen.
  55. Die Inhalte der Paramsets sind aktuell nicht dokumentiert, man muss diese
  56. anhand des xmlrpc-Requests getParamsetDescription oder durch Browsen der
  57. XML-Beschreibungen im /firmware-Verzeichnis der CCU-Software
  58. ermitteln.
  59. Über die set-Methode des HMRPC-Devices lassen sich auch andere weitere
  60. Operationen durchführen:
  61. set <hmlrpc-device> req <xmlrpc-request> <parameter>
  62. generiert einen direkten XMLRPC-Request und gibt das Ergebnis in Textform
  63. zurück. Das dient im wesentlichen Diagnose/Entwicklungszwecken. Beispiel:
  64. set hmw req getDeviceDescription IEQ0208603
  65. Der get-Aufruf ist ebenfalls implementiert und fuehrt einen synchronen
  66. "getValue()"-Aufruf durch:
  67. get light_buero_olli STATE
  68. Design
  69. ------
  70. Ich habe ueberlegt, ob HMRPC als Provider für CUL_HM dienen koennte, habe aber
  71. keine praktikable Loesung dafür gefunden -- HMDEV ist aktuell im Vergleich zu
  72. CUL_HM sehr dumm und dient mehr oder weniger nur als Cache für Adresse und
  73. Readings.
  74. HMRPC meldet sich beim jeweiligen Service per "init" an und erhält dann per
  75. xmlrpc-Callback Mitteilungen über Zustandsaenderungen. Wird der Service neu
  76. gestartet (CCU Reboot o.ae.), ist diese Anmeldung hinfaellig. Es gibt aktuell
  77. keine gute Methode, dies festzustelle -- als Workaround meldet sich HMRPC
  78. 15 Minuten nach dem letzten empfangenen Callback neu an. Je nach Art der
  79. verwendeten Aktoren in einer Installation kann diese Zeit sehr kurz sein
  80. und daher unnoetige re-inits verursachen. Diese scheinen aber grundsaetzlich kein
  81. Problem auf der Service-Seite darzustellen.
  82. Aenderungen
  83. -----------
  84. V0.3 - get-Methoden implementiert, als Aufruf von XML-RPC getValue()
  85. - bei Boolean-Werten wurde bei false bei jedem event-Empfang
  86. faelschlicherweise eine Notification ausgeloest
  87. V0.4 - HMRPC: Fehlermeldung statt Abbruch, wenn eine Testverbindung zum
  88. entsprechenden Daemon nicht moeglich ist
  89. HMRPC: Beim Abmelden wird nun korrekterweise kein Callback-Parameter
  90. uebergeben
  91. HMRPC: Das Default-Timeout fuer eingehende Requests ist nun auf 20s
  92. gesetzt, da die 3s bei sehr grossen eingehenden Requests offenbar
  93. zu kurz war und so z.B. der initiale newDevices-Aufruf nach dem init
  94. abgebrochen wurde, was zu einem Absturz des rfd fuehrt
  95. HMRPC: Ist ein Channel unbekannt, wird nun der Event an das entsprechende
  96. Device delegiert, fuer Channel != 0 dann mit dem Suffix _ChannelID
  97. (z.B. STATE_1)
  98. HMRPC: PRESS_ loest nun wirklich jedesmal ein changed aus.
  99. import_webui: Pattern korrigiert, so dass nun auch die virtuellen
  100. Taster erkannt werden
  101. V0.5 - HMDEV: Es wird nun STATE sinnvoll gesetzt, als Zusammenfasung aller
  102. READINGS
  103. HMRPC: Der newDevices-Aufruf wird nun ausgewertet und die uebermittelten
  104. Device/Channel-Informationen werden an die HMDEV-Objekte gehanden, als
  105. "hmdevinfo"; gleichzeitig wird "hmdevtype" auf den HM-Devicetyp
  106. Anhang
  107. ------
  108. [1] http://www.homematic.com/index.php?id=156
  109. [2] http://www.homematic-wiki.info/mw/index.php/HomeMatic_Software
  110. [3] http://www.homematic.com/index.php?id=644
  111. [4] http://www.fhz-forum.de/viewtopic.php?f=26&t=4639