FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: henryk am 14 September 2015, 00:36:49

Titel: Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: henryk am 14 September 2015, 00:36:49
Moin,

für die Koppelung einer Homematic CCU an FHEM per XML-RPC (die mitgelieferte API) habe ich basierend auf den existierenden Codestücken in contrib/HMRPC ein funktionierendes Modul gebaut. Der existierende Code in contrib funktionierte aus mehreren Gründen nicht (unter anderem weil einkommende XML-RPC-Requests FHEM für mindestens 20 Sekunden blockieren, eher länger, wenn es mehrere Updates von der CCU gibt), und ich habe diese Aspekte erst einmal repariert. Es fühlt sich zwar immernoch wie ein Fremdkörper an, tut aber zumindest erstmal ein bisschen.

Vorteile:

Code hier: https://github.com/henryk/fhem-HMRPC

Dokumentation habe ich noch keine, es gilt der größte Teil von contrib/HMRPC/HMRPC.txt weiterhin.

Technisch habe ich das so verbessert dass die Callbacks der CCU nicht mehr über einen eigenen Socket reinkommen (was durch die Inflexibilität von RPC::XML::Server dann notwendigerweise dazu führt, dass ein timeout abgewartet wird) sondern von FHEMWEB angenommen werden. Dazu waren zwei Patches an FHEMWEB nötig, die Rudolf bereits eingespielt hat, also dann irgendwann auftauchen wenn man ein Entwicklungszweig-FHEM hat. Andernfalls kann man sie aus http://forum.fhem.de/index.php/topic,41030.msg332339.html#msg332339 und http://forum.fhem.de/index.php/topic,41034.msg332383.html#msg332383 direkt beziehen.

Installation:
update force https://raw.githubusercontent.com/henryk/fhem-HMRPC/master/controls_HMRPC.txt
shutdown restart


CCU definieren:
define hmrf HMRPC I.P.der.CCU 2001

Zur Zeit ist der Port unter der FHEMWEB zu erreichen ist auf 8083 hartkodiert, kann aber über ein Attribut geändert werden:
attr hmrf callback_base http://I.P.von.FHEMWEB:port/fhem (Es muss der gesamte Basis-URL der FHEMWEB-Instanz inklusive Port und "/fhem" angegeben werden.)

Danach meldet die CCU jede Attributänderung selbsttätig an FHEM. Wenn autocreate aktiv ist, werden entsprechende HMDEV-Devices angelegt. Obacht: Ich weiss nicht warum, aber das funktioniert nur, wenn bereits ein HMDEV-Device existiert. Daher muss man nach der Installation einmalig define foo HMDEV foo
delete foo
machen.


Grade akute Fragen an erfahrenere FHEM-Entwickler:
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 21 September 2015, 13:38:16
Danke für Deine Weiterentwicklung.

Vor Installation ist ein


cpan -i RPC::XML::Server


notwendig.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 21 September 2015, 14:33:03
Ich habe einige Fragen / Anmerkungen zur neuen Version:

- Die alte Version von HMRPC hat keine Bestätigungen für die Callbacks an die CCU geschickt. Das hat zu massiven Fehlermeldungen im Systemlog der CCU geführt. Geht das jetzt?
- Das mit den Timeouts verstehe ich nicht. Ich habe zum Testen einen simplen RPC Server mit Prozess-Forks für das Connection-Handling in C++ geschrieben. Das funktioniert bestens. Nur eben in FHEM nicht.

Habe mein Modul HMCCU "aus der Not heraus" geschrieben, weil ich HMRPC nicht stabil zum Laufen bekommen habe. Grundsätzlich ist RPC die bessere Variante, weil die Info von der CCU kommt. Wenn das ganze stabil ist und ohne FHEM Patch auskommt, werde ich es nochmal testen.

Wobei für meinen persönlichen Usecase eigentlich die Richtung FHEM -> CCU ausreicht.


Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 21 September 2015, 15:08:48
Ich hätte noch gaaaanz kleine Kleinigkeiten:

Für die definierte CCU(2) könnten folgende Readings noch von Interesse sein, die irgendwo bei einem list ... auch mitkommen:

FIRMWARE   2.15.2
INTERFACE  LEQ ......
RF_ADDRESS 11343442

wobei INTERFACE ja Seriennummer ist und RF_ADDRESS hexadezimal als HMID der Zentrale dargestellt werden sollte.

Ansonsten werde ich das Modul mal in meiner Produktivumgebung aufnehmen und erst mal zwei-drei Devices "umziehen".
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 21 September 2015, 15:29:37
Zitat von: henryk am 14 September 2015, 00:36:49

Ich habe Port 8083 und Basis "/fhem" hartgecoded (kann man halt mit dem Attribut überschreiben). Kann ich irgendwie dynamisch die Kontaktdaten einer aktiven FHEMWEB-Instanz rausfinden und benutzen?[/li][/list]

Man kann doch mit AttrVal() auf Attribut-Werte zugreifen ...
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: henryk am 21 September 2015, 17:29:09
Moin,

Zitat von: zap am 21 September 2015, 14:33:03
- Die alte Version von HMRPC hat keine Bestätigungen für die Callbacks an die CCU geschickt. Das hat zu massiven Fehlermeldungen im Systemlog der CCU geführt. Geht das jetzt?

Das hast du anderswo schonmal geschrieben, ich kann das nicht nachvollziehen. Ich habe mittlerweile die komplette Spezifikation zur HomeMatic-XML-RPC-Schnittstelle durchgelesen und kann nichts derartiges finden. Events werden über ein Callback an eine Methode event() geliefert, deren Rückgabetyp void ist. Es gibt keine Bestätigung (also, ausser dass halt die Funktion zurückkehren muss). Ich habe mit dem neuen Modul auch keine Fehlermeldungen im CCU-Log.

Zitat von: zap am 21 September 2015, 14:33:03
- Das mit den Timeouts verstehe ich nicht. Ich habe zum Testen einen simplen RPC Server mit Prozess-Forks für das Connection-Handling in C++ geschrieben. Das funktioniert bestens. Nur eben in FHEM nicht.

Ja, eben. FHEM ist im wesentlichen eine große Event-Loop in einem Thread in einem Prozess. Wenn du forkst, kannst du nicht mehr auf die Attribute im originalen Prozess zugreifen, um die Ereignisse, von denen du per Callback gelernt hast, weiterzugeben. Das Modul Blocking.pm verwendet einen kruden Trick: Es forkt, und meldet dann das Ergebnis der Ausführung über die (dafür aktiviert sein müssende) Telnet-Schnittstelle zurück. Einen ähnlichen Trick könnte man auch verwenden, um Ereignisse aus einem XML-RPC-Server in einem eigenen Prozess in FHEM zu kriegen, aber ... Holy complexity, batman.
FHEM ist auch überhaupt nicht multi-thread-sicher, d.h. der Ansatz, einen blockierenden XML-RPC-Server in einem eigenen Thread zu haben, scheidet auch weitgehend aus.

Und wie gesagt, XML::RPC::Server ist nicht event-loop-kompatibel, das blockiert einfach mal so x Sekunden während es auf neue Requests wartet.

Zitat von: Ralli am 21 September 2015, 15:08:48
Für die definierte CCU(2) könnten folgende Readings noch von Interesse sein, die irgendwo bei einem list ... auch mitkommen:

FIRMWARE   2.15.2
INTERFACE  LEQ ......
RF_ADDRESS 11343442

Ja, ich muss mal gucken. Zur Zeit wird einfach nur als Reading verzeichnet, was in einem Event kam und daher relativ garantierten Aktualitätswert hat. Diese Dinge die du zitierst muss man initiativ bei der CCU abfragen, ich schau' mal, ob ich das zufriedenstellend einpflegen kann. (Dieses Designschema, was bei HM in FHEM generell vorhanden zu sein scheint, dass Dinge angezeigt werden, die keine Relation zur Wirklichkeit haben, sondern ein set getConfig o.ä. erfordern, kann ich nicht ausstehen.)

Zitat von: Ralli am 21 September 2015, 15:08:48
Ansonsten werde ich das Modul mal in meiner Produktivumgebung aufnehmen und erst mal zwei-drei Devices "umziehen".

Ich hab' bei mir zu Hause seit 'ner knappen Woche einen Fenstersensor und ein HM-CC-TC per HMRPC in FHEM, soweit ohne klagen. Seit letzter Nacht geht auch das passende set SETPOINT_2. Ein HM-TC-IT-WM-W-EU hab' ich auch noch, aber das ist eine Komplexitätsstufe für sich: In der CCU ist das Heizungsteam als virtuelles Gerät INT0...01 repräsentiert, das wird aber über Port 2001 nicht exportiert. Ich hab' gelernt, dass es auf Port 9292 unter /groups noch einen XML-RPC-Endpunkt gibt, der dann diese internen Gruppen darstellt, daran fummele ich derzeit noch.

Zitat von: zap am 21 September 2015, 15:29:37
Man kann doch mit AttrVal() auf Attribut-Werte zugreifen ...

Ja, wenn man den Namen der Instanz kennt. Ich wollte nicht "WEB" hartcoden, weil das genauso schlimm wäre. Ich bin es halt aus anderen Projekten eher gewöhnt, dass es eine ordentliche API für solche Fragen gibt. Mittlerweile habe ich aber gelernt, dass es wohl Usus zu sein scheint, einfach selber in $defs herumzusuchen bis man ein FHEMWEB findet, grusel. Aber ok, mach' ich demnächst.

--
Henryk Plötz
Grüße aus Berlin
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 21 September 2015, 17:52:35
Hallo Henryk,

in meiner Produktivumgebung scheitert's zunächst daran, dass ich mein Standard-Webfrontend auf 8083 (ohne SSL) mit Nutzer/Passwort "abgesichert" habe. So kann das Modul bzw. die CCU2 offensichtlich kein RPC-Callback etablieren.

Edit:

Und das führt dazu, dass die CCU2 in ihrem Webfrontend nicht mehr wirklich funktioniert - zumindest dann, wenn man zB die Geräteübersicht aufruft.

Edit2:

Es wäre sinnvoll, die definierte CCU disablen zu können mit attr CCU2 disable 1.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 21 September 2015, 18:13:01
Das mit dem Beantworten der Events steht so nicht in der Spezifikation. Allerdings habe ich es an verschiedenen Stellen und in diversen Beispielprogrammen schon gesehen. Die CCU erwartet (so das Gerücht) ein Leermeldung zurück:

<?xml version="1.0"?>
<methodResponse>
   <params>
      <param><value></value></param>
   </params>
</methodResponse>


Hier steht schon mal was darüber (im 1. Post):

http://homematic-forum.de/forum/viewtopic.php?t=4827

Oder hier ein Zitat: "I have read about this issue/function on the CCU2. After 10 messages from the CCU2 without a right answer from the client, the CCU stop sending messages to the client and delete the client from the list.
A workaround to fix this problem is re-init after 10 messages."

Ich such nochmal weiter ... aber andererseits: wenn es mit dem neuen Modul keine Fehler mehr in /var/log/messages gibt ist ja alles gut.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: henryk am 21 September 2015, 22:13:34
Moin,

Zitat von: zap am 21 September 2015, 18:13:01
Das mit dem Beantworten der Events steht so nicht in der Spezifikation. Allerdings habe ich es an verschiedenen Stellen und in diversen Beispielprogrammen schon gesehen. Die CCU erwartet (so das Gerücht) ein Leermeldung zurück

Achso, ja, natürlich. Das ist einfach Teil des XML-RPC-Aufrufs, es muss (mit void) zurückkehren. Das kann man aber auch gar nicht falsch machen, wenn man sich die XML-RPC-Implementierung nicht selber bastelt (und dabei schludert), und das hat der Perl-Code auch von Anfang an richtig gemacht. Genauer gesagt, richtig machen gewollt. Es kehrt grade immer mit dem aktuellen Timestamp zurück, weil Perl implizit den letzten Ausdruck als Return-Wert verwendet (grr). Das ignoriert die CCU zum Glück, sie erwartet ja sogar nur void.

Zitat von: Ralli am 21 September 2015, 17:52:35
in meiner Produktivumgebung scheitert's zunächst daran, dass ich mein Standard-Webfrontend auf 8083 (ohne SSL) mit Nutzer/Passwort "abgesichert" habe. So kann das Modul bzw. die CCU2 offensichtlich kein RPC-Callback etablieren.

Hast du mal ausprobiert, ob attr hmrf callback_base http://username:password@I.P.von.FHEMWEB:port/fhem funktioniert?

Zitat von: Ralli am 21 September 2015, 17:52:35
Und das führt dazu, dass die CCU2 in ihrem Webfrontend nicht mehr wirklich funktioniert - zumindest dann, wenn man zB die Geräteübersicht aufruft.

Huch, wait, what? Das sollte in keinem Fall passieren. Mal gucken, ob ich das replizieren kann.

Perspektivisch bin ich aber jetzt so weit, wahrscheinlich doch einen eigenen Port aufzumachen. Ich hatte gehofft, durch Verwendung von FHEMWEB auf unkomplizierte Weise einen soliden existierenden HTTP-Server zu kriegen. *hust* Das kann ich glaub' ich besser, wenn ich's von Hand mache.

--
Henryk Plötz
Grüße aus Berlin
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 22 September 2015, 05:37:39
Zitat von: henryk am 21 September 2015, 22:13:34
Hast du mal ausprobiert, ob attr hmrf callback_base http://username:password@I.P.von.FHEMWEB:port/fhem funktioniert?

::) 8) ;D hätte ich ja auch selbst mal drauf kommen sollen. Das klappt. Ist nur etwas unschön, da dadurch User/Pass im Klartext in der Config (und im Log) stehen.

Zitat
Huch, wait, what? Das sollte in keinem Fall passieren. Mal gucken, ob ich das replizieren kann.

Ist bei mir zuverlässig jedes mal so gewesen.

Nach Umzug in meine Produktivumgebung lediglich folgende Informationen entgegen allem möglichen in der Testumgebung:


Internals:
   CFGFN
   DEF        10.0.0.64 2001
   NAME       CCU2
   NR         1260
   STATE      Registered
   TYPE       HMRPC
   callbackpath /HMRPC_CCU2
   callbackurl http://x:y@10.0.0.30:8083/fhem/HMRPC_CCU2/request
   serveraddr 10.0.0.64
   serverport 2001
   Helper:
Attributes:
   callback_base http://x:y@10.0.0.30:8083/fhem
   group      Schnittstellen
   icon       hm_ccu
   room       System


... und keine Events kommen an, damit auch kein Autocreate usw.

Btw noch eine Frage: Macht Dein Modul beim Restart von fhem eigentlich eine Status-Abfrage aller HMDEV bei der definierten CCU2?

Und ebenfalls btw: Respekt für http://blog.ploetzli.ch/2015/on-the-security-of-aes-in-homematic/ !
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 25 September 2015, 10:14:46
Zitat von: henryk am 21 September 2015, 17:29:09
Ja, eben. FHEM ist im wesentlichen eine große Event-Loop in einem Thread in einem Prozess. Wenn du forkst, kannst du nicht mehr auf die Attribute im originalen Prozess zugreifen, um die Ereignisse, von denen du per Callback gelernt hast, weiterzugeben. Das Modul Blocking.pm verwendet einen kruden Trick: Es forkt, und meldet dann das Ergebnis der Ausführung über die (dafür aktiviert sein müssende) Telnet-Schnittstelle zurück. Einen ähnlichen Trick könnte man auch verwenden, um Ereignisse aus einem XML-RPC-Server in einem eigenen Prozess in FHEM zu kriegen, aber ... Holy complexity, batman.
FHEM ist auch überhaupt nicht multi-thread-sicher, d.h. der Ansatz, einen blockierenden XML-RPC-Server in einem eigenen Thread zu haben, scheidet auch weitgehend aus.

Ich habe in den vergangenen Tagen mal ein bisschen rumprobiert in Richtung generischer TCP Server in FHEM implementieren. Inzwischen habe ich aufgegeben. Wenn ich einen separaten Prozess für jede Verbindung forke, hab ich das von Dir beschriebene Problem mit dem Zugriff auf die FHEM Daten. Wenn ich einen iterativen Ansatz verwende, steht FHEM logischerweise während eine Anfrage bearbeitet wird.
Eine Lösung wäre m.E. nur möglich, wenn sich die Architektur von FHEM in Richtung Multi-Processing ändern würde. Daran glaube ich nicht (enormer Aufwand).
Alternative: Solche Schnittstellen wie z.B. RPC-Server werden in einem externen Programm implementiert und kommunizieren mit FHEM. Das halte ich schon eher für realisierbar. Habe speziell für die RPC Geschichte auch schon mal überlegt, einfach einen Apache mit XML-RPC zu installieren.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 27 September 2015, 17:00:49
Hi Henryk,
klasse Sache mit dem RPC Modul. Ich hatte das alte Modul vor einem halben Jahr mal getestet und bin kläglich gescheitert.
Diesmal läuft es definitiv besser. Testraum mit MAX Wandthermostat, Heizungsregler und 2 Fenstersensoren über Homegear an FHEM läuft soweit ganz gut.
Beim HMDEV vermisse ich ein paar Sachen wie z.B. stateFormat, dass lässt sich aber über das Modul Readingsgroup lösen.
Allerdings ist mir ein Fehler im Zusammenhang mit dem Wochenprogramm des Wandthermostaten aufgefallen. Wenn ich das Wochenprogramm über Homegear oder den hm-manager ändere, wird nach einer Error Routine bei FHEM über Port 8083 gesucht...

09/27/15 10:29:33.093 Module MAX: Info: Parameter ENDTIME_FRIDAY_1 of peer 12 and channel 0 was set to 0x56.
09/27/15 10:29:33.108 Info: Calling RPC method "system.multicall" on server 127.0.0.1.
09/27/15 10:29:33.110 Info: Connecting to host 127.0.0.1 on port 2015...
09/27/15 10:29:33.119 Info: Connected to host 127.0.0.1 on port 2015. Client number is: 29409
09/27/15 10:29:33.131 Info: Calling RPC method "system.multicall" on server 127.0.0.1.
09/27/15 10:29:33.143 Info: Connecting to host 127.0.0.1 on port 8083...
09/27/15 10:29:33.160 Info: Connected to host 127.0.0.1 on port 8083. Client number is: 29410
09/27/15 10:29:33.255 Module MAX: CUL "My-MAX-CUL": Info: Sending (My-MAX-CUL, WOR: yes): 1916001006A62303178D00064456546B44CC5514452045204520
09/27/15 10:29:33.295 Info: Calling RPC method "updateDevice" on server 127.0.0.1.
09/27/15 10:29:33.296 Info: Connecting to host 127.0.0.1 on port 8083...
09/27/15 10:29:33.299 Info: Connected to host 127.0.0.1 on port 8083. Client number is: 29411
09/27/15 10:29:33.347 RPC Server (Port 2001): Info: Connection from 127.0.0.1:44174 accepted. Client number: 29412
09/27/15 10:29:33.360 RPC Server (Port 2001): Info: Client number 29412 is calling RPC method: getServiceMessages Parameters:
09/27/15 10:29:33.366 Error in RPC response from 127.0.0.1. faultCode: 200 faultString: Method lookup error: No method 'Unknown method: updateDevice' on server
09/27/15 10:29:33.372 Info: Calling RPC method "error" on server 127.0.0.1.
09/27/15 10:29:33.375 Info: Connecting to host 127.0.0.1 on port 8083...
09/27/15 10:29:33.386 Info: Connected to host 127.0.0.1 on port 8083. Client number is: 29413
09/27/15 10:29:33.419 Error in RPC response from 127.0.0.1. faultCode: 200 faultString: Method lookup error: No method 'Unknown method: error' on server
09/27/15 10:29:33.420 Info: Calling RPC method "error" on server 127.0.0.1.
09/27/15 10:29:33.421 Info: Connecting to host 127.0.0.1 on port 8083...
09/27/15 10:29:33.423 Info: Connected to host 127.0.0.1 on port 8083. Client number is: 29414
09/27/15 10:29:33.485 Error in RPC response from 127.0.0.1. faultCode: 200 faultString: Method lookup error: No method 'Unknown method: error' on server


Sagt Dir das was?

Viele Grüße
Horst
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: henryk am 28 September 2015, 00:37:49
Moin,

Zitat von: trilu am 27 September 2015, 17:00:49
Beim HMDEV vermisse ich ein paar Sachen wie z.B. stateFormat, dass lässt sich aber über das Modul Readingsgroup lösen.

Ich nehme auch pull-requests auf github an :)

Zitat von: trilu am 27 September 2015, 17:00:49

09/27/15 10:29:33.295 Info: Calling RPC method "updateDevice" on server 127.0.0.1.
09/27/15 10:29:33.296 Info: Connecting to host 127.0.0.1 on port 8083...
...snip...
09/27/15 10:29:33.366 Error in RPC response from 127.0.0.1. faultCode: 200 faultString: Method lookup error: No method 'Unknown method: updateDevice' on server
09/27/15 10:29:33.372 Info: Calling RPC method "error" on server 127.0.0.1.
09/27/15 10:29:33.375 Info: Connecting to host 127.0.0.1 on port 8083...
...snip...
09/27/15 10:29:33.419 Error in RPC response from 127.0.0.1. faultCode: 200 faultString: Method lookup error: No method 'Unknown method: error' on server


Das ist ein Bug in Homegear. Die "Spezifikation" für das XML-RPC-Interface von eQ-3 spezifiziert das zwar leider nicht, aber sowohl die defacto-Implementierung der Original-CCU als auch Homegear's eigene Dokumentation (https://www.homegear.eu/index.php/XML_RPC_Method_Reference#XML_RPC_Client_Functions (https://www.homegear.eu/index.php/XML_RPC_Method_Reference#XML_RPC_Client_Functions)) stimmen überein: Ein XML-RPC-Client muss nicht alle Callbacks implementieren, stattdessen wird bei Registrierung über system.listMethods() abgefragt, welche existieren, und dann nur diese verwendet. Das HMRPC-Modul hat zur Zeit nur newDevices() (Callback das Informationen über neue Geräte bekommt) und event() (Callback über das alle Events eingekippt werden), sowie einen Dummy für listDevices() der immer behauptet, wir würden gar keine Geräte kennen.

In deinen Logs versucht Homegear updateDevice() (eine Gerätekonfiguration wurde geändert) aufzurufen. Da das nicht klappt, kommt es zu einem Fehler, und einem doppelten: Homegear versucht jetzt den Fehler über error() (ein Fehler in Homegear ist aufgetreten, das ist übrigens gar nicht Teil der eQ-3-XML-RPC-Spezifikation) zu melden.

Kannst du den Bug bei Homegear melden? https://github.com/Homegear/Homegear/issues

--
Henryk Plötz
Grüße aus Berlin
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 03 Oktober 2015, 08:45:34
Zitat von: Ralli am 22 September 2015, 05:37:39
Nach Umzug in meine Produktivumgebung lediglich folgende Informationen entgegen allem möglichen in der Testumgebung:


Internals:
   CFGFN
   DEF        10.0.0.64 2001
   NAME       CCU2
   NR         1260
   STATE      Registered
   TYPE       HMRPC
   callbackpath /HMRPC_CCU2
   callbackurl http://x:y@10.0.0.30:8083/fhem/HMRPC_CCU2/request
   serveraddr 10.0.0.64
   serverport 2001
   Helper:
Attributes:
   callback_base http://x:y@10.0.0.30:8083/fhem
   group      Schnittstellen
   icon       hm_ccu
   room       System


... und keine Events kommen an, damit auch kein Autocreate usw.

Btw noch eine Frage: Macht Dein Modul beim Restart von fhem eigentlich eine Status-Abfrage aller HMDEV bei der definierten CCU2?

Und ebenfalls btw: Respekt für http://blog.ploetzli.ch/2015/on-the-security-of-aes-in-homematic/ !

Hallo Henryk,

hast Du hier eine Idee? Ich komme nicht weiter.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 03 Oktober 2015, 10:56:05
Vielen Dank!
Bug ist gemeldet...

Ich habe die 61_HMDEV.pm mal um die FN Attribute erweitert. Lässt sich auch alles schön auswählen, aber bei den Events werden die FN Attribute nicht immer berücksichtigt.

sub
HMDEV_Initialize($)
{
  my ($hash) = @_;

  $hash->{Match}     = "^HMDEV .* .* .*";
  $hash->{DefFn}     = "HMDEV_Define";
  $hash->{ParseFn}   = "HMDEV_Parse";
  $hash->{SetFn}     = "HMDEV_Set";
  $hash->{GetFn}     = "HMDEV_Get";
  $hash->{AttrList}  = "IODev do_not_notify:0,1".
                        $readingFnAttributes;
}
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 04 Oktober 2015, 11:10:57
Zitat von: Ralli am 03 Oktober 2015, 08:45:34
ast Du hier eine Idee? Ich komme nicht weiter.

Ich habe es jetzt zunächst so gelöst, dass ich eine weitere WEB-Instanz ohne Authentifizierung eröffne und auf die IP von der CCU2 beschränke. Damit klappt die Integration einwandfrei.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: henryk am 05 Oktober 2015, 00:05:33
Moin,

Zitat von: trilu am 03 Oktober 2015, 10:56:05
Ich habe die 61_HMDEV.pm mal um die FN Attribute erweitert. Lässt sich auch alles schön auswählen, aber bei den Events werden die FN Attribute nicht immer berücksichtigt.

Ja, den Code der die Readings setzte hatte ich nicht angefasst und der war noch aus der Zeit vor readingsSingleUpdate()/readingsBulkUpdate(). Der hat einige special cases selbst behandelt, aber kannte natürlich $readingFnAttributes noch nicht. Ich hab das mal ersetzt jetzt, müsste nun alles gehen.

Zitat von: Ralli am 04 Oktober 2015, 11:10:57
Ich habe es jetzt zunächst so gelöst, dass ich eine weitere WEB-Instanz ohne Authentifizierung eröffne und auf die IP von der CCU2 beschränke. Damit klappt die Integration einwandfrei.

Ok, schade, aber danke für das Feedback. Ich bin mittlerweile auch zu dem Schluss gekommen, dass die Benutzung von FHEMWEB nur ein schlechter Hack ist, und ich das nochmal richtig[tm] machen muss, falls ich dazu komme. Was man halt bauen will ist eine wiederbenutzbare HTTP-Server-Komponente (die dann auch gleich die Basis von FHEMWEB sein kann).

--
Henryk Plötz
Grüße aus Berlin
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 05 Oktober 2015, 09:42:46
prima, klappt gut!
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Raymund am 07 Oktober 2015, 15:48:46
Hallo,

klappt schon, aber der STATE (Internals) wird nach meiner Erfahrung nicht mehr gesetzt, weil es kein Attribute (Reading) "state" gibt. Habe die "alte Mimik" noch dazu gebaut und dann funktioniert es wieder wie vorher.

Gruß
Raymund
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: henryk am 07 Oktober 2015, 16:20:17
Moin,

Zitat von: Raymund am 07 Oktober 2015, 15:48:46
klappt schon, aber der STATE (Internals) wird nach meiner Erfahrung nicht mehr gesetzt, weil es kein Attribute (Reading) "state" gibt.

Das war größtenteils beabsichtigt, weil Benutzer jetzt mit sowas wie attr stateFormat ACTUAL_TEMPERATURE_2 °C ein beliebiges, für das jeweils Gerät passende spezifische Format für STATE setzen können. Korrigier' mich wenn ich falsch liege, aber deine Änderung überschreibt das jetzt wieder mit dem generischen "aller kram hier rein" (also für ein HM-TC-IT-WM-W-EU krieg' ich da insbesondere so sinnlose Readings wie PARTY_START_DAY_2, PARTY_START_MONTH_2, etc. importiert).

--
Henryk Plötz
Grüße aus Berlin
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Raymund am 07 Oktober 2015, 16:53:38
Da wirst Du Recht haben, wenn das so beabsichtigt ist. Ich habe ca. 20 HM-Devices in Betrieb und kann mit diesen Statuswerten ganz gut leben, weil ich entsprechende Regexe benutze. Aber ich versuche mal eine Abfrage, ob attr stateFormat gesetzt ist. Dann wäre die Sache abwärtskompatibel.

Gruß
Raymund
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Raymund am 07 Oktober 2015, 17:58:41
Hallo Henryk,

anbei eine abwärts kompatible Version, hoffentlich fehlerfrei soweit ;-)

Gruß
Raymund
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: EdgarM am 15 Oktober 2015, 10:27:10
Hallo ihr beiden,

könntet ihr einem noob mal einen Auszug aus der fhem.cfg zeigen, ich glaube, dass ich das noch nicht sauber habe und deswegen auch nicht damit zurecht komme.

Wäre echt super.
HM-TC-IT-WM-W-EU und HM-CC-RT-DN wären für mich super ;)

grüße
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 18 Oktober 2015, 17:38:57
Ich habe jetzt mal etwas mit dem Modul gespielt. Parallel dazu ein standalone Perl Programm mit den XML-RPC Funktionen aus dem Modul erstellt. Nun habe ich einen seltsamen Effekt: Die NewDevice Callbacks von der CCU kommen korrekt an, die Events jedoch nicht. Stattdessen gibt es in /var/log/messages auf der CCU haufenweise Fehlermeldungen in der Art:

XmlRpcClient error calling event({[methodName:"event",params:{"CB1","LEQ0598158:2","ACTUAL_TEMPERATURE",20.200000}],[methodName:"event",params:{"CB1","LEQ0598158:2","ACTUAL_HUMIDITY",52.000000}],[methodName:"event",params:{"CB1","

Die Meldung ist auch im messages File hinten abgeschnitten wie im Beispiel oben. Also entweder auf Server-Seite wird die Event Callback nicht aufgerufen, weil XML-RPC meint, die registrierten Methoden (Callbacks) passen nicht oder es liegt daran, dass die CCU bei ihrem Event-Call offensichtlich mehrere Events in einem Array übergibt (Feature system.multicall). Unterstützt RPC::XML system.multicall bzw. muss man es in irgendeiner Option erst aktivieren?


Wie gesagt: ich bekomme nur die Devices per NewDevice. Prinzipiell funktioniert also die Kommunikation. Nur die Events gehen nicht.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: henryk am 19 Oktober 2015, 15:42:43
Moin,

Zitat von: zap am 18 Oktober 2015, 17:38:57
Ich habe jetzt mal etwas mit dem Modul gespielt. Parallel dazu ein standalone Perl Programm mit den XML-RPC Funktionen aus dem Modul erstellt. Nun habe ich einen seltsamen Effekt: Die NewDevice Callbacks von der CCU kommen korrekt an, die Events jedoch nicht.

Zitat von: zap am 18 Oktober 2015, 17:38:57
Also entweder auf Server-Seite wird die Event Callback nicht aufgerufen, weil XML-RPC meint, die registrierten Methoden (Callbacks) passen nicht oder

Das hat nicht mit dem Modul zu tun. Auch kenne ich deinen Code nicht. Nimm halt wireshark und schau den Netzwerkverkehr an, um nachzugucken, was (oder was nicht) passiert.

--
Henryk Plötz
Grüße aus Berlin
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 19 Oktober 2015, 20:09:24
Danke für den Tipp. Ein tcpdump des Netzwerkverkehrs zwischen CCU und meinem Raspberry brachte die Erleuchtung. Ich hatte in der Callback Funktion für Events als letztes Statement einen print Befehl drin. Die Perl-Funktion hat den Wert des Print-Ausdrucks zurückgegeben und das hat durchgeschlagen bis zur CCU. Und die CCU hat das als Fehler gewertet.
Blöde Eigenart von Perl. Ich hasse diesen Interpreter-Mist fast noch mehr als Java. Jedenfalls läuft jetzt alles wie es soll.

BTW: Ich vermute, dass das Signature Attribut bei add_method() überhaupt keine Bedeutung hat. Der Methodname und die Referenz zum Callback Handler sind wichtig.

Was mich immer noch wundert: Vom Init der Schnittstelle bis zur Übertragung der NewDevice Meldungen von der CCU vergehen manchmal bis zu 3 Minuten. Hängt vermutlich mit irgendwelchen Rerfresh-Zyklen der CCU zusammen.

Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 30 Oktober 2015, 13:00:11
Hallo Henryk,

ich habe jetzt das von Dir überarbeitete Modul eine Zeit lang getestet. Ich habe eine CCU2 mit einigen Sensoren und Aktoren, beim Init erzählt sie was von 350 Spezifikationen.

Leider wird auch mit diesem Modul der in fhem integrierte Webserver überlastet, wenn bspw. durch die Thermostate ein gewisses Grundrauschen auf der RPC-Schnittstelle vorhanden ist. Nachvollziehbar bricht dann nach ca. 10-12 Minuten Dauerfeuer auf der Schnittstelle der Connect ab - ich kann mit netstat sehen, dass keine Callback-Verbindung mehr von der CCU2 zu fhem besteht. Nach dem Reconnect geht's dann so weiter. Während die Events noch ankommen, gönnt sich fhem auch sehr deutliche Wartezeiten beim Zugriff auf das Frontend - obwohl ich für die CCU2 eine exklusive Web-Instanz definiert habe.

Ich bin nun mal auf das Original-Modul, welches mal von Dirk gepatched wurde, zurückgegangen und habe dort für meinen Anwendungszweck minimale Änderungen in HMDEV.pm durchgeführt. Das Modul läuft bei mir ohne Verbindungsabbruch, dafür aber mit dem auch von Dir bereits festgestellten Ausbremsen des Gesamtsystems.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 01 November 2015, 15:08:03
Nochmal hallo Henryk,

ich habe in Dein 60_HMRPC.pm / 60_HMDEV.pm mal noch die Möglichkeit des statusRequest eingebaut.

Bei Aufruf von

set MeinFhemDef statusRequest

wird der in der CCU(2) bekannte Status von den bei mir genutzten Dimmern, Schaltern und Fenster-Sensoren und RTs geholt, und die entsprechenden Readings werden gesetzt. Ist vielleicht nicht schön programmiert, funktioniert aber.

Jedes HMDEV-Device hat bei mir ein userReading state, welches dann automatisch den state bzw. STATE entsprechend setzt.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 11 November 2015, 15:46:46
Neuer Sachstand:

Henryk's HMRPC-Modul mit der von mir eingebauten Ergänzung läuft nun einwandfrei.

Die von mir erwähnte Überlastung hatte seine Ursache darin, dass ab einer bestimmten Menge der RPC-Callbacks ohne ergänzende Einstellungen in den Devices einfach zu viele Events generiert wurden und so fhem in der Abarbeitung einerseits der RPC-Einwürfe und andererseits der Events nicht mehr hinterher kam - daraufhin hat dann die CCU regelmäßig die Bedienung des Clients (fhem) bis zum periodischen Re-Init eingestellt.

Es ist also ab einer nicht weiter einzugrenzenden Menge an Devices, die regelmäßige RPC-Callbacks von der CCU nach sich ziehen, unabdingbar, dass sinnvoll mit den Attributen event-on-change-reading sowie event-on-update-reading gearbeitet wird, um die Event-Generierung einzuschränken.

Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 13 November 2015, 07:44:17
Die RPC Request Geschichte hat mich jetzt echt Nerven gekostet. Habe in HMCCU die Abfrage aller Datenpunkte eines Kanals auf RPC getParamset umgestellt. Funktioniert auch, allerdings nur in einigen Fällen. Wenn jemand selbst damit experimentieren möchte, sollte er folgendes beachten:


Bin jetzt jedenfalls wieder zurück zu XML-API gewechselt. Mittelfristig werde ich auf die eingebaute JSON API umstellen, die zumindest CUxD unterstützt.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 13 November 2015, 07:53:29
Hallo zap,

danke.

getParamset funktioniert ja nur mit der Angabe, welches Paramset Du haben möchtest - und manche der Kanäle bieten nicht alle Paramsets. Der Thermostat bspw. hat das Paramset VALUES grds. nur auf Kanal 4.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 13 November 2015, 17:05:16
Zitat von: Ralli am 13 November 2015, 07:53:29
getParamset funktioniert ja nur mit der Angabe, welches Paramset Du haben möchtest - und manche der Kanäle bieten nicht alle Paramsets. Der Thermostat bspw. hat das Paramset VALUES grds. nur auf Kanal 4.

Der Wandthermostat HM-TC-IT-WM-W-EU hat in den Kanälen 0,1 und 2 jeweils das Paramset VALUES. Trotzdem arbeitet die Abfrage nur beim Kanal 1 korrekt. Bei 0 kommen falsche Werte, bei 2 kommt eine Fehlermeldung.

Ein Blick in /var/log/messages brachte jetzt aber etwas Licht ins Dunkel: "HSSParameter::GetValue() id=PARTY_MODE_SUBMIT failed getting physical value." Laut Doku kann RPC nur mit logischen Geräten. Ich vermute, hier liegt das Problem.

Fazit: RPC ist nur sehr eingeschränkt tauglich.

Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 23 November 2015, 11:03:38
Zitat von: Ralli am 01 November 2015, 15:08:03
Nochmal hallo Henryk,

ich habe in Dein 60_HMRPC.pm mal noch die Möglichkeit des statusRequest eingebaut.

Bei Aufruf von

set MeinFhemDef statusRequest

wird der in der CCU(2) bekannte Status von den bei mir genutzten Dimmern, Schaltern und Fenster-Sensoren und RTs geholt, und die entsprechenden Readings werden gesetzt. Ist vielleicht nicht schön programmiert, funktioniert aber.

Jedes HMDEV-Device hat bei mir ein userReading state, welches dann automatisch den state bzw. STATE entsprechend setzt.

Hi Ralli,
wollte gerade mal testen, aber irgendwie macht es keinen Unterschied.
Bekomme auf eine Anfrage zum Status nur sowas zurück: invalid set call HMDEV_JEQ0276495 statusRequest

Viele Grüße
Horst
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 23 November 2015, 12:03:09
Hallo Horst,

worauf setzt Du den statusRequest denn ab? Der muss auf ein definiertes Device vom Type HMDEV abgesetzt werden.

Was steht im Log?

Bei mir funktioniert das einwandfrei und wird täglich mehrfach genutzt.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 23 November 2015, 17:38:03
Ok, habs gefunden :-)
else {
Log 2,"HMRPC $a[0] statusRequest $a[1]: failed, don't know type $typ";
return undef;


2015.11.23 12:08:21 2: HMRPC hmrf statusRequest JEQ0276495: failed, don't know type BC-TC-C-WM-2
2015.11.23 12:22:32 2: HMRPC hmrf statusRequest JEQ0276495: failed, don't know type BC-TC-C-WM-2
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 23 November 2015, 17:43:38
Na, dann passt ja alles.

Der Status kann nur von den (mir) bekannten Devices ausgelesen, interpretiert und in die Readings umgewandelt werden.

Mach mal ein list von dem Device.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 23 November 2015, 18:22:08
fhem> list HMDEV_JEQ0276495

Internals:
   CHANGED
   DEF        JEQ0276495
   IODev      hmrf
   LASTInputDev hmrf
   MSGCNT     460
   NAME       HMDEV_JEQ0276495
   NR         370
   STATE      T: 19.2 °C, D: 19.0 °C
   TYPE       HMDEV
   hmaddr     JEQ0276495
   hmdevtype  BC-TC-C-WM-2
   hmrf_MSGCNT 460
   hmrf_TIME  2015-11-23 18:15:25
   Readings:
     2015-11-23 18:15:25   ACTUAL_TEMPERATURE_1 19.2
     2015-11-23 17:06:15   CONTROL_MODE_1  0
     2015-11-23 18:15:25   RSSI_DEVICE     -68
     2015-11-23 18:15:25   SET_TEMPERATURE_1 19
   Hmdevinfo:
     ADDRESS    JEQ0276495
     FAMILY     4
     FIRMWARE   1.3
     FLAGS      1
     ID         12
     INTERFACE  VMC3446724
     PARENT
     PHYSICAL_ADDRESS 202637
     RF_ADDRESS 202637
     ROAMING    0
     RX_MODE    2
     TYPE       BC-TC-C-WM-2
     TYPE_ID    768
     VERSION    1
     CHANNELS:
       0
       1
       4
     CHILDREN:
       JEQ0276495:0
       JEQ0276495:1
       JEQ0276495:4
     PARAMSETS:
       MASTER
Attributes:
   IODev      hmrf
   alias      Thermostat
   devStateStyle style="text-align:left"
   event-on-change-reading ACTUAL_TEMPERATURE_1,SET_TEMPERATURE_1,CONTROL_MODE_1
   group      Heizung
   room       31_Mansarde
   sortby     0
   stateFormat { sprintf("T: %0.1f °C, D: %0.1f °C", ReadingsVal( $name, 'ACTUAL_TEMPERATURE_1', 0 ), ReadingsVal( $name, 'SET_TEMPERATURE_1', 0 ) ) }




Hast du eine Ahnung wie ich an die weiteren Readings vom Device komme? Hinter JEQ0276495:1 verbirgt sich auch noch Einiges mehr
ACTUAL_TEMPERATURE      
AUTO_MODE   
BOOST_MODE
BOOST_TIME_PERIOD      
COMFORT_TEMPERATURE      
CONTROL_MODE         
ECO_TEMPERATURE      
MANU_MODE      
MAX_TEMPERATURE      
PARTY_STOP_DAY      
PARTY_STOP_MONTH      
PARTY_STOP_TIME      
PARTY_STOP_YEAR      
PARTY_TEMPERATURE      
SET_TEMPERATURE      
SHOW_SET_TEMPERATURE      
WINDOW_OPEN_TEMPERATURE
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 24 November 2015, 05:39:25
Vom Grundsatz her empfehle ich, das Device direkt mit JEQ0276495:1 zu definieren und darauf den statusRequest abzusetzen. Dann schaust Du, welchen Typ er dafür ermittelt/angibt.

Sodann nimmst Du Dir den Quelltext von 60_HMRPC.pm und modifizierst / ergänzt folgenden Block:


case "CLIMATECONTROL_RT_TRANSCEIVER" {
@readingslist=("SET_TEMPERATURE","ACTUAL_TEMPERATURE","VALVE_STATE","BATTERY_STATE");
}


um


case ["CLIMATECONTROL_RT_TRANSCEIVER","DEIN_ERMITTELTER_TYP"] {
@readingslist=("SET_TEMPERATURE","ACTUAL_TEMPERATURE","VALVE_STATE","BATTERY_STATE");
}


und in der @readingslist um die zusätzlichen Datenpunkte bzw. Readings, die bei einem statusRequest neu gesetzt werden sollen.

Wenn es wegen dem fehlenden VALVE_STATE bei diesem Device Probleme gibt, duplizierst statt modifizierst Du den Block, änderst CLIMATECONTROL_RT_TRANSCEIVER auf den von Dir ermittelten Typ und führst in der @readingslist (nur) die passenden Datenpunkte/Readings auf.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 24 November 2015, 12:03:02
Vielen Dank - brauche aber nochmal Hilfe :-)
Ich habe das Device jetzt mal mit Kanal angelegt, jetzt hat aber der Kanal noch zwei Listen (Paramsets) - Master and Value, wie komme ich da dran?
Internals:
   CFGFN
   DEF        JEQ0276495:0
   IODev      hmrf
   LASTInputDev hmrf
   MSGCNT     49
   NAME       HMDEV_JEQ0276495_0
   NR         9276
   STATE      ???
   TYPE       HMDEV
   hmaddr     JEQ0276495:0
   hmdevtype  MAINTENANCE
   hmrf_MSGCNT 49
   hmrf_TIME  2015-11-24 12:00:22
   Readings:
     2015-11-24 12:00:22   RSSI_DEVICE     -65
   Hmdevinfo:
     ADDRESS    JEQ0276495:0
     AES_ACTIVE 0
     CHANNEL    0
     DIRECTION  0
     FAMILY     4
     FLAGS      3
     ID         12
     INDEX      0
     LINK_SOURCE_ROLES
     LINK_TARGET_ROLES
     PARENT     JEQ0276495
     PARENT_TYPE BC-TC-C-WM-2
     TYPE       MAINTENANCE
     VERSION    1
     PARAMSETS:
       MASTER
       VALUES
Attributes:
   IODev      hmrf
   group      Thermostat
   room       31_Mansarde
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 24 November 2015, 16:36:00
:0 ist falsch. Bitte mit :1 definieren! Und das Paramset Value wird ja letztendlich beim statusRequest abgefragt und ausgewertet.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 24 November 2015, 17:42:15
ich verzweifle langsam :-)
Das mit 0 und 1 ist schon klar, in 0 steht nur auch das Wochenprogramm...

Irgendwie geht der statusRequest nicht mehr durch

Das schicke ich über Telnet oder Web
set HMDEV_JEQ0276495_1 statusRequest

und das bekomme ich zurück
invalid set call HMDEV_JEQ0276495_1 statusRequest

2015.11.24 17:34:58 4: FHEMWEB:192.168.6.2:14939 POST /fhem&room=Unsorted&cmd=set+HMDEV_JEQ0276495_1+statusRequest; BUFLEN:0
2015.11.24 17:34:58 4: name: /fhem&room=Unsorted&cmd=set+HMDEV_JEQ0276495_1+statusRequest / RL:1130 / text/html; charset=UTF-8 / Content-Encoding: gzip


kann es sein das der Syntax nicht stimmt?
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 25 November 2015, 06:28:27
Hallo Horst,

Asche auf mein Haupt. Es bedarf auch einer Änderung in 60_HMDEV.pm, die ich nicht mehr im Kopf hatte.

Bitte die Zeile 113


return "invalid set call @a" if(@a != 3 && @a != 4);


wie folgt modifizieren:


        return "invalid set call @a" if(@a != 3 && @a != 4 && $a[1] ne "statusRequest");
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Raymund am 27 November 2015, 10:27:12
Hallo,

das Folgende betrifft z.B. das Anhalten von Rollläden mit dem STOP-Befehl:

ich glaube festgestellt zu haben, dass es HM-seitig Unterschiede bei der Auswertung von booleschen Werten gibt, weshalb z.B. set <NAME> STATE_1 true geht, set <NAME> STOP_1 true aber nicht. Somit ließen sich Rollläden nicht anhalten.

Ich habe bei mir in der 60_HMRPC.pm eine entsprechende Anpassung gemacht nach der es nun klappt. Wenn das jemanden interessiert, dann sollten wir das abgestimmt einbauen und testen. Ich blicke gerade nicht mehr durch, welche Version aktuell ist  ;)

Gruß
Raymund

Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 27 November 2015, 11:54:27
Bei STATE Werten wird teilweise 0/1 und teilweise true/false verwendet. RPC Events verwenden z.B. immer 0/1. Wie es bei RPC Set Befehlen ist, weiß ich nicht. Deshalb im Zweifel HM-Script oder JSON-API statt RPC.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: masterray57 am 27 November 2015, 12:08:30
Zitat von: zap am 27 November 2015, 11:54:27
Bei STATE Werten wird teilweise 0/1 und teilweise true/false verwendet. RPC Events verwenden z.B. immer 0/1. Wie es bei RPC Set Befehlen ist, weiß ich nicht. Deshalb im Zweifel HM-Script oder JSON-API statt RPC.
Klappt hier mit gut 20 Devices ohne Zweifel seit einem Jahr. Jetzt eben auch mit STOP. :)
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 30 November 2015, 12:49:09
@Ralli - vielen Dank, jetzt klappt es.

Ich habe das Modul zusammen mit Homegear in Betrieb und für einfache Schaltaufgaben komme ich jetzt damit klar.
Interessant wird es bei komplexeren Sachen, wie Wochenprogramm für Thermostate

ENDTIME_FRIDAY_1
ENDTIME_FRIDAY_10
ENDTIME_FRIDAY_11
ENDTIME_FRIDAY_12
ENDTIME_FRIDAY_13
...
TEMPERATURE_FRIDAY_1
TEMPERATURE_FRIDAY_10
TEMPERATURE_FRIDAY_11
TEMPERATURE_FRIDAY_12
TEMPERATURE_FRIDAY_13
...


Im Normalfall werden diese Variablen gesetzt und mit einem putParamSet ans Device übertragen.
So wie ich das RPC Modul verstehe, wird hier jeder einzelne Wert mit setValue übertragen. Was ein sofortiges Update ans Device veranlasst.

Hast Du eine Idee wie man das lösen könnte?

Viele Grüße
Horst
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 30 November 2015, 13:16:43
Hallo Horst,

fein, dass es jetzt klappt.

... bisher nicht, da ich diese im Regelfall eher selten zu ändernden Dinge aus der CCU2 heraus mache. Ich fürchte, dafür wäre eine größere Modifikation notwendig.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Raymund am 30 November 2015, 18:57:36
@trilu

putParamSet ist wohl schon implementiert: https://groups.google.com/forum/#!topic/fhem-users/xKMH_4ZoMNA

Siehe auch in der 60_HMRPC, sub HMRPC_Set. Habe es aber noch nicht getestet.

Gruß
Raymund
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 30 November 2015, 19:44:54
Hatte ich auch entdeckt, bin gerade am testen
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 30 November 2015, 21:12:17
Also in henryks HMRPC Set gibt es zwar einen putparamset Call, allerdings setzt der nur einen Wert gleichzeitig.
Das müsste man noch ausbauen ...
Aber wie stellt Ihr Euch eigentlich den Aufruf eines solchen Set Befehls in FHEM vor?

Sowas in der Form:

set xy paramset Datapoint Value Datapoint Value ...

Nur so als Anregung für mich ;-)
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 01 Dezember 2015, 07:36:37
Zitat von: Raymund am 30 November 2015, 18:57:36
putParamSet ist wohl schon implementiert: https://groups.google.com/forum/#!topic/fhem-users/xKMH_4ZoMNA
Siehe auch in der 60_HMRPC, sub HMRPC_Set. Habe es aber noch nicht getestet.

Im Code ist nur (rudimentär) die Möglichkeit eingebaut, putParamset zu nutzen:


my $paramset={$a[3]=>$a[4]};

$ret=$hash->{client}->simple_request("putParamset",$a[1],$a[2],$paramset);


Eine komfortable Möglichkeit, wie sie wahrscheinlich Horst (trilu) vorschwebt, ist damit m.E. noch nicht realisierbar. Daher: um bspw. die gleiche Funktionalität wie im Modul CUL_HM einzubauen, dürften deutliche Modifikationen/Ergänzungen notwendig sein.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 01 Dezember 2015, 09:10:44
Zitat von: trilu am 30 November 2015, 12:49:09

ENDTIME_FRIDAY_1
ENDTIME_FRIDAY_10
ENDTIME_FRIDAY_11
ENDTIME_FRIDAY_12
ENDTIME_FRIDAY_13


Die Verwaltung der einzelnen Zeiten/Werte müsste hier im FHEM Modul erfolgen, da die Thermostate keine Datenpunkte dafür anbieten (und nur die können ja per setvalue/putparamset gesetzt werden.
Sehr aufwändig.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 01 Dezember 2015, 10:02:21
Klar bietet der Thermostat diese Datenpunkte, die sind nur nicht sichtbar, weil im Master Set. Das MDDEV liest derzeit aber nur VALUE nach Channel aus.
Ich bin mir noch nicht ganz sicher, wie ich es eigentlich gerne möchte - Man kann ja derzeit ein Gerät, oder eine Reihe von Geräten nach Channel definieren.

Also entweder etwas wie HMDEV_JEQ0276495
oder eine Geräteliste wie HMDEV_JEQ0276495:0, HMDEV_JEQ0276495:1 usw.

Von der Übersichtlichkeit auf erster Ebene würde sich die generelle Definition anbieten (HMDEV_JEQ0276495), es gibt nur ein Gerät mit allen Parametern im Bauch.
Allerdings wäre die Readingsliste bei einem Thermostat ziemlich lang und man müsste allen Readings ein Flag bzgl Kanal und MASTER/VALUES mitgeben.

Die Alternative, Geräte werden mit :0, :1, etc angelegt - damit wäre es auf erster Ebene unübersichtlicher, aber die Readingsliste würde sich in Grenzen halten und bräuchte nur das Flag bzgl MASTER/VALUE.

Was meint ihr?
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 01 Dezember 2015, 10:22:21
Hat beides sein Für und Wieder.

Ich habe mich entscheiden, auf den jeweiligen Channel zu gehen - der Übersichtlichkeit halber und weil die verschiedenen Channel teilweise auch verschiedenen Räumen zugeordnet werden.

Der für mich einzige Nachteil besteht darin, dass ein UNREACH auf :0 empfangen wird und so ins Leere läuft. Da überlege ich aber zur Zeit, ob ich diesen Spezialfall nicht im HMDEV-Code abfange und auf jeden Channel, welches zu dem entsprechenden Device gehört, gebe.

Die Thermostate sind ebenfalls recht spezielle Devices, bei denen die jeweiligen Kanäle (oder zumindest Teile daraus) m.E. durchaus in einem einzigen fhem-Device abgebildet sein sollten. Es kommt halt immer darauf an, was man für einen Ansatz wählt. Mein Ansatz besteht nicht darin, die Wochenprogramme zwingend über fhem ändern zu lassen.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 01 Dezember 2015, 10:34:04
Shit, jetzt bin ich so schlau wie vorher :-)

Derzeit stelle ich das Wochenprogramm auch nicht über FHEM, aber es hätte was, das über ein Modul der Tablet UI zu machen.
Da ist es dann aber egal, ob alles in ein Device oder mehrere geht. Momentan tendiere ich auch zu mehreren Devices.

Wozu brauchst Du den UNREACH in allen Kanälen?
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 01 Dezember 2015, 10:41:14
Stelle Dir einen Doppel-Schalter-Aktor vor. Der eine Kanal ist für das Licht in einem Raum, der andere Kanal für das Licht in einem anderen Raum. Also sind für mich grds. :1 und :2 interessant. Aber in :0 stehen für mich (in fhem) grds. keine interessanten Dinge drin - ausser, das Device ist nicht erreichbar. Aber nur dafür will ich nicht noch extra ein :0 in fhem definieren. Da gebe ich lieber dann, wenn das Problem auftritt, ein UNREACH in fhem an die Kanäle des betroffenen Devices weiter.

Bei einem Rolladen-Aktor ist es gleich. :1 ist interessant für mich, :0 normalerweise nicht - nur bei einem UNREACH.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 01 Dezember 2015, 11:17:00
ich schau mal was sich machen lässt. hat es eigentlich einen grund warum du die readings spezifizierst?
case ["SHUTTER_CONTACT","ROTARY_HANDLE_SENSOR"] {
@readingslist=("STATE","LOWBAT");
}


man könnte doch alle abfragen?

2015.12.01 11:27:05 0: HMRPC hmrf statusRequest JEQ0276495:0: TYPE is MAINTENANCE
2015.12.01 11:27:06 0: HMRPC hmrf $ret = {
         'CONFIG_PENDING' => 0,
         'RSSI_PEER' => '0',
         'BOOT' => 0,
         'RSSI_DEVICE' => '-69',
         'STICKY_UNREACH' => 0,
         'LOWBAT' => 0,
         'UNREACH' => 0
       };

2015.12.01 11:27:06 0: HMRPC hmrf got 7 keys, @keylist = (
             'CONFIG_PENDING',
             'RSSI_PEER',
             'BOOT',
             'RSSI_DEVICE',
             'STICKY_UNREACH',
             'LOWBAT',
             'UNREACH'
           );

2015.12.01 11:27:06 0: HMRPC hmrf statusRequest JEQ0276495:0: updating Reading CONFIG_PENDING to 0
2015.12.01 11:27:06 0: HMRPC hmrf statusRequest JEQ0276495:0: updating Reading RSSI_PEER to 0
2015.12.01 11:27:06 0: HMRPC hmrf statusRequest JEQ0276495:0: updating Reading BOOT to 0
2015.12.01 11:27:06 0: HMRPC hmrf statusRequest JEQ0276495:0: updating Reading RSSI_DEVICE to -69
2015.12.01 11:27:06 0: HMRPC hmrf statusRequest JEQ0276495:0: updating Reading STICKY_UNREACH to 0
2015.12.01 11:27:06 0: HMRPC hmrf statusRequest JEQ0276495:0: updating Reading LOWBAT to 0
2015.12.01 11:27:06 0: HMRPC hmrf statusRequest JEQ0276495:0: updating Reading UNREACH to 0
2015.12.01 11:27:06 0: HMRPC hmrf statusRequest JEQ0276495:0: succesful
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 01 Dezember 2015, 11:42:36
Mir ging es wirklich nur um einen statusRequest - und nicht um ein getConfig. Darum habe ich nur die für den Betrieb wesentlichen Datenpunkte/Readings hier abgefragt - wie gesagt, im Hinterkopf behalten, dass ich normalerweise kein :0 habe.

Bei einem getConfig würde ich hingegen tatsächlich immer das :0 mit allen Datenpunkten und alle verfügbaren Datenpunkte aller Channels abfragen und entsprechend in den Readings aktualisieren. Das habe ich aber bisher eben nicht implementiert, da ich keinen Anwendungszweck dafür habe ;).
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 01 Dezember 2015, 11:48:50
Du hast recht, ich baue gerade ein getConfig :-)
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 01 Dezember 2015, 14:18:16
Ich habe meine 60_HMDEV.pm bezüglich des thematisierten UNREACH auf alle Channels erweitert. Quick and dirty nach Zeile 83:


      if($msg =~ /HMDEV ([A-Z]{3}[0-9]{7}):[0-9]{1,2} UNREACH ([01])/) {
      fhem("setreading DEF=$1:..? unreachable $2");
      }


Edit: Funktioniert aber bewusst nur, wenn der Channel (also normalerweise :0), welcher UNREACH produziert, nicht definiert ist.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 02 Dezember 2015, 09:49:39
Ich habe jetzt einen getConfig eingebaut, der VALUES als auch MASTER ausließt. Der statusRequest sollte weiterhin funktionieren :-)
Ein Device sollte als Channel angelegt sein, also in der Form mit :0, :1

Danach in der Kommandozeile ein set HMDEV_<was auch immer> getConfig
danach sollte in den readings das komplette Channelset enthalten sein.

Ich werde mich die Tage mal an das putParamset machen.

Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 02 Dezember 2015, 10:04:07
Sehr schön - die Logging-Funktion müsste noch kosmetisch modifziert werden, damit klar ist, dass die Einträge während des getConfigs erfolgen.

Ich glaube, es ist an der Zeit, tatsächlich eine gemeinsame Weiterentwicklung über git oder besser noch hier in SF zu machen.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 02 Dezember 2015, 10:19:46
m.E. ist RPC (alleine) der falsche Weg. RPC macht Sinn wenn es darum geht, in FHEM automatisch Updates / Events von der CCU zu erhalten. Beim direkten Setzen/Auslesen von Werten hat es aber zu viele Einschränkungen:

- Es werden nur BidCos Devices unterstützt (kein CUxD etc).
- Bei einigen Kanälen/Datenpunkten liefert RPC getvalue / getparamset reproduzierbar falsche Werte
- Es können keine CCU Variablen ausgelesen / verändert werden
- Es können keine CCU Programme / Scripts ausgeführt werden

Als Alternative empfiehlt sich das in der CCU eingebaute JSON-API oder direkt HM-Script. Da auch JSON einige (wenige) Nachteile hat, ist HM-Script meine präferierte Schnittstelle.
Ich würde ggf. neben HM-Script JSON verwenden, um das Anlegen von Variablen in der CCU umzusetzen und ParamSets zu lesen / zu schreiben. Das wäre aber der einzige Anwendungsfall.
JSON bietet interessanterweise auch eine Möglichkeit an, Events mit Updates für Datenpunkte zu erhalten. Diese unterstützen angeblich auch nicht BidCos Devices (im Gegensatz zu RPC). Leider habe ich das bisher nicht zum Laufen bekommen.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 02 Dezember 2015, 10:41:42
Hallo zap,

wie Du weißt, finde ich, dass die Kombination - möglichst sogar in einem einzigen Modul vereint - den perfekten Kompromiss darstellt.

Wichtig ist mir, dass nur die offiziellen vom Hersteller bereitgestellten Schnittstellen genutzt werden - sodass ich letztendlich im Falle eines Falles einfach nur die CCU gegen eine andere austauschen muss, Backup zurückspielen und fertig. Bei der "Kommunikationsschnittstelle" mit rudimentärsten Automatismen, wofür ich die CCU nunmal ausschließlich einsetze, möchte ich nicht auf den Support von Dritten angewiesen sein. (also CCU2 macht bei mir die Kommunikation und steuert die OU-LEDs; Komfort nur im Sinne von Rollo anziehen, wenn Fenster auf Kipp und wieder runter, wenn zu; alles andere an Komfortfunktionen macht fhem.)

Nun habe ich allerdings meine komplette fhem-Installation zur Zeit bis auf wenige Ausnahmen auf HMRPC umgestellt und habe dabei darauf geachtet, dass die von mir maßgeblich verwendeten fhem-Befehle sowohl bei HMRPC den CUL_HM entsprechen.

Ich müsste nun nahezu alles umstellen, wenn ich auf HMCCU schwenke, da hier ein "anderer Dialekt" verwendet wird.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 02 Dezember 2015, 11:06:29
Und ich nutze keine CCU sondern Homegear, habe darin MAX Heizungsregler, Thermostate, etc gemischt mit HM Komponenten für Licht und Rollo.
Soweit ich gesehen habe, gibt es ja ein weiteres Modul wo der Ansatz der Json API für die CCU verfolgt wird. So wirklich rund läuft das aber wohl auch noch nicht.
Gemeinsame Weiterentwicklung fände ich auch gut. Ist allerdings auch die Frage was Henryk mit seinem Modul vor hat :-)

Um vielleicht mal ein wenig Werbung für Homegear zu machen - es ist klasse was das Ding schon kann. MAX, HM, PHILIPS, INSTEON, SONOS. Neue Funktionalitäten werden über eine XML Datei mit Script/PHP bereitgestellt. Interface zur Außenwelt über HMRPC oder mqqt. Was fehlt ist eine nette und resourcenschonende Oberfläche. Ich hatte Openhab und IO broker getestet, aber so wirklich hat mich keins überzeugt.

FHEM ist halt doch klasse, aber Homegear als Middleware ist auch nicht zu verachten.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 02 Dezember 2015, 11:10:26
Anscheinend nichts. Ich hatte ihn vor einiger Zeit mal angeschrieben und keine Reaktion bekommen. Und hier ist ja auch kein Lebenszeichen mehr von ihm.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 02 Dezember 2015, 11:28:39
wenn wir es weiterentwickeln wollen, müssen wir auch aufräumen :-)
und uns überlegen ob wir zwei module oder eins wollen und welche funktionen wo hinkommen

momentan ist es ein wenig spagetti....
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 02 Dezember 2015, 12:12:25
Also meines Wissens gibt es mittlerweile 4 Module / Entwicklungen in Sachen CCU Anbindung:

1. Das alte Modul HMRPC von Oliver Wagner. Status: wird nicht mehr weiter entwickelt.
2. Das neue Modul HMRPC von hendryk. Baut auf dem alten auf. Status: ?
3. Eure Modifikationen von HMRPC (2). Status: z.T. sehr individuelle Anpassungen für Einzelfälle
4. Mein Modul HMCCU. Status: wird weiter entwickelt, da ich es selbst benutze

Welche dieser Entwicklungen sollen nach Eurer Meinung zusammen gelegt werden?
@trilu: mir ist kein Modul bekannt, das JSON verwendet.

Nun zu den mehr oder weniger offiziellen Schnittstellen der CCU. Da gibt es:

1. RPC (offiziell, dokumentiert). Problem: Eingeschränkte Funktionalität. Im Prinzip auf Datenpunkte von BidCos-Devices beschränkt
2. JSON (offiziell, dokumentiert). Problem: Event-Subscription funktioniert nicht (zumindest habe ich bisher kein funktionierendes Beispiel gefunden)
3. HM-Script (dokumentiert, aber HTTP-Aufrufe der CCU sind "halb-offiziell"). Bietet mit kleinen Einschränkungen die größte Flexibilität.

Dann gibt es noch Middlewares:

1. MQTT (Entwicklung CCU seitig durch Oliver Wagner (s.o.), Modul für FHEM vorhanden). Das ist sehr viel versprechend. Wollte ich mir bei Gelegentheit mal anschauen, da man vermutlich nur konfigurieren, nicht programmieren müsste.
2. HMCompanion (ebenfalls Oliver Wagner). Status: Wurde durch MQTT abgelöst.
3. Homegear: eigentlich keine echte Middleware sondern CCU Alternative. Da müsste man dann auch andere Lösungen wie IPSymcon betrachten
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 13 März 2016, 13:36:38
Hallo,

ich habe das Modul mal weiter gepimpt.

Änderungen:

1) Es ist die Übermittlung von Paramsets mit mehreren Wertepaaren möglich
2) getConfig auf ein Device ist möglich
3) req listBidcosDevices wird ausgewertet

Zu 1)
Bislang war es nur möglich, z.B. ein


set Schalter STATE true


oder ein


set Schalter MASTER LOGGING 0


durchzuführen. Dabei wurde im ersten Fall intern ein setValue durchgeführt und im zweiten Fall ein putParamset, allerdings war das begrenzt auf ein Wertepaar (hier im Beispiel MASTER).

Nun ist es möglich, auch mehrere Wertepaare direkt zu übermitteln. Beispiel:


set Schalter VALUES ON_TIME 30.0 STATE true


Zu 2)
Dazu werden nun aus dem Paramset MASTER des Devices einige Informationen von der CCU abgeholt und in die Readings geschrieben. Hat man von einem Doppel-Schaltaktor bspw. einen Kanal unmittelbar als HMDEV-Device definiert, so wird bei dem "Vater" von diesem Device das Paramset MASTER ausgelesen.

Besonderheit für Dimmer:

Es ist nicht möglich, für einen Dimmer alle erforderlichen Werte auf einmal in einem putParamset zu übermitteln, so dass diese auch für die nächste Schaltaktion genutzt werden. Daher ist hier eine Besonderheit eingebaut:

Ein


set Dimmer dim-with-timer ON_TIME x RAMP_TIME y LEVEL z


wird intern auf die Übermittlung eines Paramsets für die ersten beiden Werte und auf ein setValue für den Dim-Level aufgesplittet. Die Reihenfolge der übergebenen Parameter ist bei diesem Befehl unbedingt einzuhalten! Als Werte für x un y sind Float zu nutzen (Einheit ist Sekunden also 300.0 für 300 Sekunden), als Wert für z ein Float, also 0.01 bis 1.0 (unbedingt mit Punkt und ggf. gefolgt von 0, Einheit ist Prozent - also 0.01 ist 1 Prozent, 1.0 ist 100 Prozent, 0.5 ist 50 Prozent).

Zu 3)
Sofern HM-CFG-LAN oder/und HM-LAN-Gateways als HMDEV-Device definiert sind, können bspw. durch periodische Abfrage auf die definierte CCU(2) mit set CCU2 req listBidcosInterfaces alle 10 Minuten die Readings für Duty Cycle aktualisiert werden; damit kann dann ein SVG erzeugt werden.

Wie immer gilt: Verwendung der modifizierten Module auf eigene Gefahr. Bei mir laufen sie einwandfrei.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 14 März 2016, 12:10:38
Hi Ralli,
hab mich auch die letzten Wochen ein bisschen mit dem Modul gespielt und wie es immer so ist, ein wenig den Fokus verloren.
Hatte irgendwann das Problem, das zu viele Devices in meiner Config waren und da XMLRPC nicht unbedingt schnell ist, ging die Systemlast hoch und FHEM kam nicht mehr hinterher mit der Verarbeitung. Deshalb habe ich angefangen das Modul auf RPCBIN umzuschreiben - schaus Dir mal an, bin aber noch nicht fertig...
Bisher ist das Devicehandling nur rudimentär implementiert. Hänge noch an der Schnittstelle zu Homegear.
Viele Grüße
Horst
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: zap am 14 März 2016, 12:47:11
Interessant (RPCBIN). Ich bräuchte noch sowas, um HMCCU and CUxD anzukoppeln, das leider nur RPCBIN spricht.

In Deinem Fall sieht die Kette so aus? CCU2 - Homegear - FHEM ??

Ich befürchte nur, schneller wird das auch nicht sein. Der lahme Webserver von FHEM ist hier der limitierende Faktor. Ich habe mittlerweile 45 Homematic Devices in FHEM. Ich denke, mit dem eingebauten Webserver geht da gar nichts mehr.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 14 März 2016, 13:02:46
@trilu

Hallo Horst,

das Problem ist nach meiner Meinung nicht die RPC-Schnittstelle - die ist auch bei meinen vielen Devices schnell genug. Das Problem ist, dass bei dem verwendeten Modul grundsätzlich jede Änderung eines Readings ja einen Event produziert, weil kein Default für ein event-on-change-reading oder ein event-on-update-reading existiert. Setzt man diese zwei Attribute konsequent und natürlich sinnvoll bei den eingebundenen Devices ein, gibt es absolut kein Problem mehr mit der Performanz.

Ich habe ca. 100 Devices eingebunden. Keine Probleme (mehr).

Ich habe am Wochenende noch was für rssiInfo und getServiceMessages eingebaut. Das teste ich aber noch intern.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 14 März 2016, 13:35:20
naja, ich hole mir von homegear auch noch die beschreibung der events :-)
bzw. die inhalte für die readings die auf listen basieren...

mir ist aufgefallen, dass ein listdevice für 30 geräte über xmlrpc mit dekodierung etwa 3 sekunden dauert, mach ich es über rpcbin bin ich im 0 komma bereich
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: trilu am 14 März 2016, 15:45:57
ZitatIn Deinem Fall sieht die Kette so aus? CCU2 - Homegear - FHEM ??

Ne, nicht ganz - Homegear an FHEM
und/oder Homegear an CCU2
Damit bekomme ich Sonos und MAX Geräte dargestellt als wären es Homematic Geräte

ZitatIch befürchte nur, schneller wird das auch nicht sein. Der lahme Webserver von FHEM ist hier der limitierende Faktor. Ich habe mittlerweile 45 Homematic Devices in FHEM. Ich denke, mit dem eingebauten Webserver geht da gar nichts mehr.

Ich nutze nicht den Webserver von FHEM, weil binary - ich nutze die Mechanik von Telnet, bzw halt die socket communication von Perl.

Das Ding ist um Welten schneller!
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 14 März 2016, 18:13:01
Der aktuelle Stand des HMRPC-Moduls anbei.

Änderungen zum vorherigen Post:

1) "req listBidcosInterfaces" wurde ersetzt durch den Befehl "updateBidcosInterfaces"
2) "rssiInfo" und "getServiceMessages" rudimentär eingebaut (noch ohne sinnvolle Funktion, wichtig war mir nur, den übermittelten HASH bzw. ARRAY korrekt abarbeiten zu können
3) Insgesamt wurde die Funktion HMRPC_Set überarbeitet

Zu 1):
Sofern ein (oder mehrere) HM-LAN-CFG, HM-LAN-GW oder die RF-Schnittstelle der CCU mit ihren Seriennummern als HMDEV-Devices in fhem definiert sind, werden die von der CCU abgeholten Informationen in den Readings dieser Devices aktualisiert. ACHTUNG: unbedingt bei den Interfaces event-on-update-reading und event-on-change-reading verwenden, da sonst immer für jedes aktualisierte RSSI-Reading ein Event in fhem generiert wird. Ich habe das extra nicht im Modul selbst deaktiviert, da es durchaus aus Benutzer-Sicht auch mal sinnvoll sein kann, auf entsprechende Events reagieren zu können.

NEU: darüber hinaus werden auch die RSSI-Informationen  der CCU ausgelesen und entsprechend auf die Interfaces als Readings verteilt.

Zu 1) und 2):
Die Kommandos werden unmittelbar auf die definierte CCU abgesetzt, ohne ein vorangestelltes "req".
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 24 März 2016, 10:06:16
Hallo zusammen,

anbei nun eine Version 0.6, die auch mit der RPC-XML API für HmIP zurecht kommt. Folgende Änderungen und Ergänzungen wurden vorgenommen:


Für eine CCU mit "normalen" Homematic-Komponenten ist wie gehabt die CCU mit

define CCU2 IP_MEINER_CCU 2001

zu definieren.

Für HmIP-Komponenten ist zusätzlich noch

define HMIP IP_MEINER_CCU 2010

zu definieren.

Bei der Definition von Devices ist dann darauf zu achten, dass das Attribut IODev auf die passende Schnittstelle verweist - also normale Homematic-Devices hier im Beispiel auf CCU2, HmIP-Devices auf HMIP.

Die weitere Definition einer weiteren Schnittstelle für HMW auf Port 2000 ist davon unberührt.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Raymund am 17 April 2016, 16:53:22
Hallo Ralli,

die Version 0.6 ist ein echter Fortschritt und ersetzt erfolgreich meine "Eigenentwicklung".

SetVar müllt allerdings ziemlich das Logfile zu. Ich kann das Modul gerne gelegentlich auf Log3 umstellen oder möchtest Du das selbst machen in einer eventuellen Weiterentwicklung?

Danke jedenfalls und Grüße
Raymund
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 17 April 2016, 19:42:54
Hallo Raymund,

freut mich.

Was genau meinst Du mit "SetVar müllt ziemlich das Logfile zu" ? Standard ist ja Loglevel 3 und wenn Du viel dieses Methode nutzt, dann ist jedes mal ein Eintrag im Log. Da wäre in Zeile 365 lediglich


Log 3,"HMRPC getVar URL=$url";


durch


Log 4,"HMRPC getVar URL=$url";


zu ersetzen. Oder was meinst Du?
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Raymund am 19 April 2016, 18:47:28
Hallo Ralli,

ja genau, das meine ich. Habe es auch schon auf 4 gesetzt, wie Du schreibst. Aber ich denke, es wäre sinnvoll, solche häufigen Info-Ausgaben generell auf 4 zu setzen um dann per verbose im HMRPC-Objekt einstellen zu können, ob man sie sehen will oder nicht. So ist nach meinem Verständnis Log3 ja gedacht!? Natürlich nur, wenn Du das Modul noch weiter entwickeln willst. Sonst wäre es ja mit der einmaligen Änderung (3->4) auch erledigt.

Ich habe eine ganze Reihe von HM-Teilen und das klappt so wunderbar und zuverlässig mit FHEM. Ich hatte quick and dirty kleine Korrekturen in das alte Modul eingebaut, speziell für die Rollladensteuerung. Aber jetzt mit der 0.6 geht das auch und es gibt sogar mehr Internals. Was will man(n) mehr ;-)

Grüße
Raymund
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 25 April 2016, 12:36:18
Hallo zusammen,

anbei nun eine Version 0.7, die speziell im Modul HMDEV weiter entwickelt wurde. Bspw. wurde ein grundsätzliches State-Handling eingebaut. Das Modul HMRPC wurde modifiziert, so dass der Status der RPC-XML-Schnittstelle nun als Reading zur Verfügung steht; damit sind Event-gesteuerte Maßnahmen möglich. Folgende Änderungen und Ergänzungen wurden vorgenommen:

Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 28 April 2016, 16:19:58
Kleine Änderung im Modul HMRPC:

- Beim statusRequest werden keine unmittelbaren Updates der Readings mehr durchgeführt, sondern stattdessen werden die abgefragten Werte durch das Modul HMDEV geparsed (state-handling).
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: mveltrup am 08 Mai 2016, 14:02:12
Hallo zusammen,

ich hab das HMRPC Modul aus dem Git Repo installiert und läuft prima.
Jetzt wollte ich die neuste Version installieren, und hab die beiden .pm Dateien ins FHEM reinkopiert,
jedoch sagt fhem dann:
2016.05.08 11:49:02 1: configfile: Cannot load module HMRPC
HMDEV_MEQ0058214: unknown IODev specified
...

Meine Config:
define hmrf HMRPC 192.168.2.11 2001

Mach ich da was falsch?
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 08 Mai 2016, 17:49:39
Das Modul HMDEV wird offensichtlich korrekt geladen, aber nicht das Modul HMRPC - und darum finden die HMDEVICES das IODev nicht. Warum das Modul HMRPC nicht geladen wird, ist aber aus Deinem Post nicht erkennbar, hier fehlen die wichtigen Infos aus dem Log.
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: mveltrup am 08 Mai 2016, 20:18:36
Ah im git repo heisst die 60_hmdev.pm  61_hmdev.pm und bleibt im FHEM verzeichnis.
Muss ich die vielleicht löschen?
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: hofer am 10 Mai 2016, 22:16:07
Ich bekomme folgende Fehlermeldung.

2016.05.10 21:52:43 1: reload: Error:Modul 60_HMRPC deactivated:
Type of arg 1 to keys must be hash or array (not private variable) at ./FHEM/60_HMRPC.pm line 396, near "$ret)

Was mache ich falsch?

Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 11 Mai 2016, 07:36:58
Kann ich nicht nachvollziehen, die Zeilennummer passt auch nicht mit der aktuellen Version zusammen.

Bitte immer beide Module austauschen. Und kein reload sondern ein shutdown restart machen!
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: mveltrup am 20 Mai 2016, 22:11:49
hm da fehlt ihm die switch.pm



2016.05.20 21:59:06 1: reload: Error:Modul 60_HMDEV deactivated:
Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/arm-linux-gnueabihf/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/60_HMDEV.pm line 19, <$fh> line 466.
BEGIN failed--compilation aborted at ./FHEM/60_HMDEV.pm line 19, <$fh> line 466.

2016.05.20 21:59:06 0: Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/arm-linux-gnueabihf/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/60_HMDEV.pm line 19, <$fh> line 466.
BEGIN failed--compilation aborted at ./FHEM/60_HMDEV.pm line 19, <$fh> line 466.

2016.05.20 21:59:07 1: Including ./log/fhem.save
2016.05.20 21:59:08 1: configfile: Cannot load module HMRPC
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: Ralli am 21 Mai 2016, 06:32:07
Was fehlt, muss man rein machen :-).

apt-get install libswitch-perl

oder

cpan -i Switch
Titel: Antw:Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn
Beitrag von: mveltrup am 21 Mai 2016, 14:36:07
Danke.
Dachte switch.pm wäre zur steuerung der HM Switches für das Modul.
Jetzt gibts nur noch ein warning beim start:

2016.05.21 14:31:13 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/60_HMDEV.pm line 227.

Jetzt werd ich erstmal testen. Danke.