Selbst entwickeltes HM485 Modul einbinden

Hallo liebes Forum,

Ich habe eine CCU2 und möchte gerne auf eine “freie” Softwareschnittstelle zu den angebundenen Geräten wechseln. Dabei bin ich über Homegear gestolpert und finde den Ansatz total genial (Daumen hoch!)
Für die CCU2 bin ich gerade dabei eigene HM Wired Module zu entwickeln. In der CCU2 muss man für die neuen Module eine XML-Datei, die beschreibt wo sich die Konfigurationsparameter im Modul-EEProm befinden, welche Frames mit dem Modul ausgetauscht werden können/sollen usw. erstellen. Das Verfahren klappt recht gut, auch bei selbst entwickelten Modulen wenn man versteht wie diese XML-Dateien aufzubauen sind (siehe HM485-LIB im github).
Wie ist das mit dem Homegear realisiert? Wo wird hier eine Beschreibung der Hardware abgelegt? Gibt es eine “zentrale Datei” wo die Module beschrieben werden? Muss dazu das Coding geändert werden?

Vielen Dank,

Artur

Hallo Artur,

Homegear nutzt aktuell quasi diegleichen XML-Dateien (zu finden in /etc/homegear/devices). Für HomeMatic Wired müssen diese leicht angepasst werden.

Hier ein Auszug aus der Patch-Datei, der die Änderungen zeigt:

diff -Naur Original/hmw_io_12_fm.xml Patched/hmw_io_12_fm.xml
--- Original/hmw_io_12_fm.xml	2015-03-10 11:27:27.999317500 +0100
+++ Patched/hmw_io_12_fm.xml	2015-03-10 11:27:33.619317400 +0100
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0"?>
 <device eep_size="1024" version="7">
   <supported_types>
     <type id="HMW-IO-12-FM" name="RS485 I/O module 12-channel (flush-mount)" priority="2">
@@ -28,6 +28,14 @@
       </physical>
     </parameter>
     <enforce id="DIRECT_LINK_DEACTIVATE" value="true"/>
+    <parameter id="POLLING" ui_flags="internal">
+      <logical type="boolean" default="false"/>
+      <physical type="integer" interface="store"/>
+    </parameter>
+    <parameter id="POLLING_INTERVAL" ui_flags="internal">
+      <logical type="integer" min="10" max="1440" default="60" unit="min"/>
+      <physical type="integer" interface="store"/>
+    </parameter>
   </paramset>
   <frames>
     <frame channel_field="10" direction="to_device" id="LEVEL_SET" type="#x">
@@ -77,6 +85,13 @@
           <logical type="boolean"/>
           <physical interface="internal" type="integer" value_id="CONFIG_PENDING"/>
         </parameter>
+        <parameter id="CENTRAL_ADDRESS_SPOOFED" operations="read,write,event" ui_flags="service,sticky" control="NONE">
+          <logical type="option">
+            <option id="UNSET" index="0" default="true"/>
+            <option id="CENTRAL_ADDRESS_SPOOFED" index="1"/>
+          </logical>
+          <physical type="integer" interface="internal" value_id="CENTRAL_ADDRESS_SPOOFED"/>
+        </parameter>
       </paramset>
     </channel>
     <channel count="12" index="1" physical_index_offset="-1" type="INPUT_OUTPUT">
@@ -124,25 +139,7 @@
           <physical interface="internal" type="integer" value_id="BEHAVIOUR"/>
         </parameter>
       </paramset>
-      <paramset address_start="0x349" address_step="6" channel_param="CHANNEL" count="30" id="hmw_input_ch_link" peer_param="ACTUATOR" type="LINK">
-        <parameter hidden="true" id="CHANNEL" operations="none">
-          <logical default="255" max="255" min="0" type="integer"/>
-          <physical interface="eeprom" size="1.0" type="integer">
-            <address index="+0"/>
-          </physical>
-        </parameter>
-        <parameter hidden="true" id="ACTUATOR" operations="none">
-          <logical type="address"/>
-          <physical type="array">
-            <physical interface="eeprom" size="4.0" type="integer">
-              <address index="+1"/>
-            </physical>
-            <physical interface="eeprom" size="1.0" type="integer">
-              <address index="+5"/>
-            </physical>
-          </physical>
-        </parameter>
-      </paramset>
+      <paramset address_start="0x349" address_step="6" count="30" id="hmw_input_ch_link" type="LINK" channel_offset="0" peer_address_offset="1" peer_channel_offset="5"> </paramset>
       <paramset id="hmw_input_ch_values" type="VALUES">
         <parameter control="BUTTON.SHORT" id="PRESS_SHORT" operations="event,write" loopback="true">
           <logical type="action"/>
@@ -190,28 +187,11 @@
             <physical interface="internal" type="integer" value_id="BEHAVIOUR"/>
           </parameter>
         </paramset>
-        <paramset address_start="0x39" address_step="28" channel_param="CHANNEL" count="28" id="hmw_switch_ch_link" peer_param="SENSOR" type="LINK">
+        <paramset address_start="0x39" address_step="28" count="28" id="hmw_switch_ch_link" type="LINK" channel_offset="5" peer_address_offset="0" peer_channel_offset="4">
           <parameter id="UI_HINT">
             <logical default="" type="string" use_default_on_failure="true"/>
             <physical id="UI_HINT" interface="store" save_on_change="true" type="string"/>
           </parameter>
-          <parameter hidden="true" id="SENSOR" operations="none">
-            <logical type="address"/>
-            <physical type="array">
-              <physical interface="eeprom" size="4.0" type="integer">
-                <address index="+0"/>
-              </physical>
-              <physical interface="eeprom" size="1.0" type="integer">
-                <address index="+4"/>
-              </physical>
-            </physical>
-          </parameter>
-          <parameter hidden="true" id="CHANNEL" operations="none">
-            <logical default="255" max="255" min="0" type="integer"/>
-            <physical interface="eeprom" size="1.0" type="integer">
-              <address index="+5"/>
-            </physical>
-          </parameter>
           <parameter id="SHORT_ON_TIME_MODE">
             <logical type="option">
               <option id="MINIMAL"/>

Im Prinzip haben wir wegen des unlogischen Aufbaus nur die Adress-Parameter entfernt und stattdessen die drei Attribute “channel_offset”, “peer_address_offset” und “peer_channel_offset” eingefügt.

In Homegear Version 0.6 werden wir aber ein komplett neues XML-Schema verwenden (aus urheberrechtlichen Gründen - eQ3 sagt, ihr XML-Schema sei urheberrechtlich geschützt). Es wird aber einen Converter geben und vielleicht auch ein Tool zum leichten Erstellen von XML-Dateien.

Liebe Grüße

Sathya

Super vielen Dank für die Info.

Mittlerweile habe ich auch ein wenig rumprobiert und mir die Logdateien angesehen. Ich werde mal versuchen meine erstellten XML-Dateien für Homegear anzupassen.

Bin echt an die Version 0.6 interessiert.

Viele Grüße,

Artur

Kurzer Status zur Eigenentwicklung von HMRS485 Modulen:

Ich habe eine XML-Datei für Homegear zusammen gebaut - Ich muss schon sagen das die XML-Dateien für Homegear viel strukturierter sind als für die CCU. Also nochmals Daumen hoch für die geniale Arbeit! Mein selbst entwickeltes Modul kommuniziert nun auch mit Homegear (zumindest wird z.B. ein kurzer oder langer Tastendruck erkannt und auch in den log-Dateien aufgelistet. Zusätzlich versucht Homegear diese “Events” über die RPC Schnittstelle anderen Systemen mitzuteilen… ich bin begeistert!
Als nächstes werde ich die Gegenrichtung, also mit Homegear z.B. einen Aktor setzen, testen.

Artur