Eigene XML für Hue Devices

Ich stehe gerade vor einem kleine Problem. Da das Openhab2-Hue Binding eher langsam und auch unzuverlässig ist, was die Updates des Schaltstatus der HUE-Lampen angeht, habe ich mich entschlossen Homegear im zusammenspiel mit dem Homematic-Binding zu nutzen.

Nun habe ich ein Gerät welches sich nicht anschalten lässt. Ich vermute der Grund liegt an dem nicht vorhandenen Brightnesswert (bri) im STATE-Package. Die vorhanden LCT.xml habe ich demnach kopiert, alle nicht vorhandenen Elemente wie HUE, XY, BRIGHTNESS … entfernt und ebenso das State-Package um das element bri verkleinert.
Egal was ich tue, dem Device wird aber nur der TYP “LCT001” zugeweisen. Auch wenn ich in der entsprechenden LCT.xml ein Device mit hinzugefügt hatte, wurde dieses nicht erkannt. Wie konfiguriert man die Devices xml jetzt so, das diese auch erkannt werden?

Bei der TypeNumber ist ja nur irgend eine freie zu wählen?

Homegear Version (Debian Repo)

root@x-hab:~# homegear -v Homegear version 0.6.7-1480 Copyright (c) 2013-2016 Sathya Laufer

hue/lights/deviceID:

{ "state":{ "on":false, "alert":"none", "reachable":true }, "type":"On/Off plug-in unit", "name":"On/Off plug-in unit 1"," modelid":"Plug 01"," manufacturername":"OSRAM", "uniqueid":"XX:XX:XX:XX:XX:XX:XX:XX-XX", "swversion":"V1.04.12" }

XML:

<homegearDevice version="1"> <supportedDevices> <device id="Plug 01"> <description>Osram Plug-in unit</description> <typeNumber>0x942</typeNumber> <minFirmwareVersion>0x0</minFirmwareVersion> </device> </supportedDevices> <properties/> <functions> <function channel="0" type="MAINTENANCE" channelCount="1"> <properties> <internal>true</internal> </properties> <configParameters>maint_ch_master--0</configParameters> <variables>maint_ch_values--0</variables> </function> <function channel="1" type="SWITCH" channelCount="1"> <properties/> <configParameters>config--1</configParameters> <variables>switch_valueset--1</variables> </function> </functions> <packets> <packet id="ALERT_SET"> <direction>fromCentral</direction> <type>0x2</type> <jsonPayload> <element> <key>on</key> <constValueBoolean>true</constValueBoolean> </element> <element> <key>alert</key> <parameterId>ALERT</parameterId> </element> </jsonPayload> </packet> <packet id="INFO"> <direction>toCentral</direction> <type>0x1</type> <channel>1</channel> <jsonPayload> <element> <key>state</key> <subkey>on</subkey> <parameterId>STATE</parameterId> </element> <element> <key>state</key> <subkey>alert</subkey> <parameterId>ALERT</parameterId> </element> <element> <key>state</key> <subkey>reachable</subkey> <parameterId>REACHABLE</parameterId> </element> </jsonPayload> </packet> <packet id="STATE_SET"> <direction>fromCentral</direction> <type>0x2</type> <jsonPayload> <element> <key>transitiontime</key> <parameterId>TRANSITION_TIME</parameterId> </element> <element> <key>on</key> <parameterId>STATE</parameterId> </element> </jsonPayload> </packet> <packet id="FAST_STATE_SET"> <direction>fromCentral</direction> <type>0x2</type> <jsonPayload> <element> <key>transitiontime</key> <constValueInteger>0</constValueInteger> </element> <element> <key>on</key> <parameterId>STATE</parameterId> </element> </jsonPayload> </packet> </packets> <parameterGroups> <configParameters id="config--1"/> <configParameters id="maint_ch_master--0"/> <variables id="maint_ch_values--0"> <parameter id="UNREACH"> <properties> <writeable>false</writeable> <service>true</service> </properties> <logicalBoolean/> <physicalInteger groupId="UNREACH"> <operationType>internal</operationType> </physicalInteger> </parameter> <parameter id="STICKY_UNREACH"> <properties> <service>true</service> <sticky>true</sticky> </properties> <logicalBoolean/> <physicalInteger groupId="STICKY_UNREACH"> <operationType>internal</operationType> </physicalInteger> </parameter> <parameter id="CONFIG_PENDING"> <properties> <writeable>false</writeable> <service>true</service> </properties> <logicalBoolean/> <physicalInteger groupId="CONFIG_PENDING"> <operationType>internal</operationType> </physicalInteger> </parameter> <parameter id="RSSI_DEVICE"> <properties> <writeable>false</writeable> </properties> <logicalInteger/> <physicalInteger groupId="RSSI_DEVICE"> <operationType>internal</operationType> </physicalInteger> </parameter> <parameter id="RSSI_PEER"> <properties> <writeable>false</writeable> </properties> <logicalInteger/> <physicalInteger groupId="RSSI_PEER"> <operationType>internal</operationType> </physicalInteger> </parameter> </variables> <variables id="switch_valueset--1"> <parameter id="STATE"> <properties> <casts> <rpcBinary/> </casts> </properties> <logicalBoolean/> <physicalInteger groupId="STATE"> <operationType>command</operationType> </physicalInteger> <packets> <packet id="STATE_SET"> <type>set</type> </packet> <packet id="INFO"> <type>event</type> </packet> </packets> </parameter> <parameter id="FAST_STATE"> <properties> <casts> <rpcBinary/> </casts> </properties> <logicalBoolean/> <physicalInteger groupId="STATE"> <operationType>command</operationType> </physicalInteger> <packets> <packet id="FAST_STATE_SET"> <type>set</type> </packet> <packet id="INFO"> <type>event</type> </packet> </packets> </parameter> <parameter id="TRANSITION_TIME"> <properties> <casts> <rpcBinary/> </casts> </properties> <logicalInteger> <defaultValue>5</defaultValue> <minimumValue>0</minimumValue> <maximumValue>65535</maximumValue> </logicalInteger> <physicalNone groupId="TRANSITION_TIME"> <operationType>store</operationType> </physicalNone> </parameter> <parameter id="ALERT"> <properties> <casts> <optionString/> <rpcBinary/> </casts> </properties> <logicalEnumeration> <defaultValue>0</defaultValue> <value> <id>none</id> <index>0</index> </value> <value> <id>select</id> <index>1</index> </value> <value> <id>lselect</id> <index>2</index> </value> </logicalEnumeration> <physicalString groupId="ALERT"> <operationType>command</operationType> </physicalString> <packets> <packet id="ALERT_SET"> <type>set</type> </packet> <packet id="INFO"> <type>event</type> </packet> </packets> </parameter> <parameter id="REACHABLE"> <properties> <writeable>false</writeable> <service>true</service> <casts> <rpcBinary/> </casts> </properties> <logicalBoolean/> <physicalInteger groupId="REACHABLE"> <operationType>command</operationType> </physicalInteger> <packets> <packet id="INFO"> <type>event</type> </packet> </packets> </parameter> </variables> </parameterGroups> </homegearDevice>

Gruß

P.S. (nicht ganz so wichtig nur FYI)

Openhab2 -> *-binding-homematic -> homegear Probleme mit Hue.

Dimmer:
Sendet immer einen Wert von 0-100 (Prozent) an den Dimmer Channel. Dieser wird als Integer interpretiert und ist im Homegear dann der absolute Brightnesswert, damit sind die Lampen derzeit nur 39% des Dimmers nutzbar.
Eine transformation in openhab2 habe ich versucht, aber bei dem Dimmer akzeptiert er auch im sendCommand() nur Werte von 1-100. Den Channel als Number auszuwerten akzeptiert er ebenfalls nicht, erkennt dies dann systemintern automatisch als Dimmer / Slider.
Gibt es hier eine Möglichkeit diese Verhalten via xml, script im homegear zu verändern?

Colorpicker:

2016-09-28 11:58:19.198 [ItemCommandEvent ] - Item 'light_lounge_ceiling_c' received command 306,27,50 2016-09-28 11:58:19.496 [ItemCommandEvent ] - Item 'light_lounge_ceiling_c' received command 358,61,50 2016-09-28 11:58:19.795 [ItemCommandEvent ] - Item 'light_lounge_ceiling_c' received command 22,90,50

Openhab sendet auch hier einen HSBType. Auch hier wäre eine Umwandlung nötig.

Für Dimmer und Colorpicker nutze ich gerade das Hue-Binding parallel zum ein-aus-schalten und statusabfrage mittels Homematic-Binding.

Hi,

das Problem mit den Wertbereichen hatte ich aus openhab herraus auch: viewtopic.php?f=24&t=670
Lässt sich durch eine Transformation lösen, auch wenn ich das nicht sehr elegant finde.

so long,
p

Hallo,

im Prinzip liegst du mit der XML-Datei nicht falsch. Leider findet das Mapping der Geräte - unschönerweise - noch hartkodiert statt. Ich habe gerade mal einen Osram Zwischenstecker bestellt und werde diesen implementieren, sobald er hier eintrifft. In ein paar Tagen geht es also :wink:.

Das Level-Problem werde ich dann auch einmal angehen. Könntest du einmal in Homegear loggen, wie die HSB-Werte dort ankommen und mir das Log posten? Dann kann ich den Colorpicker auch gleich mit einbauen.

Viele Grüße

Sathya

Wenn das noch ein Weilchen so hardcodiert stattfindet, hätte da noch eine:

{ state":{ "on":true, "alert":"select", "reachable":true }, "type":"On/Off light", "name":"Flurschalter", "modelid":"RM01", "manufacturername":"Busch-Jaeger", "uniqueid":"XX:XX:XX:XX:XX:XX:XX:XX-XX", "swversion":"1.0.0"} }
Ist ein “Busch-Jaeger 6711 Universal-Relais-Einsatz ZigBee Light Link” - sollte aber exakt das gleiche Paketdesign wie die OSRAM Zwischenstecker haben. Aufgabe ist ja auch identisch. :wink:

Colorwheel HSB-Beispiele:

2016-10-01 00:58:03.630 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 47,85,50 2016-10-01 00:58:03.645 [ItemStateChangedEvent ] - light_lounge_ceiling_cp changed from NULL to 47,85,50 2016-10-01 00:58:03.918 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 33,7,50 2016-10-01 00:58:03.926 [ItemStateChangedEvent ] - light_lounge_ceiling_cp changed from 47,85,50 to 33,7,50 2016-10-01 00:58:04.230 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 32,9,50 2016-10-01 00:58:04.239 [ItemStateChangedEvent ] - light_lounge_ceiling_cp changed from 33,7,50 to 32,9,50 2016-10-01 00:58:04.519 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 357,3,50 2016-10-01 00:58:04.527 [ItemStateChangedEvent ] - light_lounge_ceiling_cp changed from 32,9,50 to 357,3,50 2016-10-01 00:58:04.825 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 355,6,50 2016-10-01 00:58:04.833 [ItemStateChangedEvent ] - light_lounge_ceiling_cp changed from 357,3,50 to 355,6,50 2016-10-01 00:58:06.271 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 355,6,50 2016-10-01 00:58:06.593 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 337,3,50 2016-10-01 00:58:06.602 [ItemStateChangedEvent ] - light_lounge_ceiling_cp changed from 355,6,50 to 337,3,50 2016-10-01 00:58:06.880 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 337,3,50 2016-10-01 00:58:07.178 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 337,3,50 2016-10-01 00:58:07.478 [ItemCommandEvent ] - Item 'light_lounge_ceiling_cp' received command 337,3,50

Wie auch beschrieben 0-360° Farbton, % Sättigung, %Helligkeit - umrechenformel ist bei Wikipedia bei HSV

Package Details sehe ich im Homegear log selbst nicht. Würde aber empfehlen eine Anpassung im Homegear nicht vorzunehmen. Stecke zu wenig in der Materie, dass ich nachvollziehen kann wie sich solche Werte ggf. bei BidCos verhalten, da der Zugriff auf Homegear-HUE nur mittels openhab(2)-addon-binding-homematics stattfindet und in diesem bestimmt schon Transformationen statt finden.
Denke die sauberste Lösung ist tatsächlich das Arbeiten mittels eigenen Transformationen und MQTT wie es @pmayer schon beschrieben hat.
So bleibt dein Schöpfungswerk ein sauberer erweiterbarer transparenter Schnittstellenübergang - wenns es dann auch mit XML klappt *g.

Alternativ wäre natürlich ein angepasstes hg-hue binding für openhab selbst, eine brauchbare Lösung. Muss ich mich mal tiefer mit beschäftigen.

Gruß

Baue ich dir auch ein ;-). Vielleicht ändere ich auch mal gleich die hartkodierung, so dass die Gerätedefinition wirklich vollständig über XML stattfindet…

Eingebaut und im nächsten Nightly ;-). Jetzt sind die IDs auch nicht mehr hartkodiert und können über XML definiert werden.

Freue mich drauf. In welchem Zeitraum baut er die Nightlies? :wink:

Hallo @Scordalus,

sobald bei Build-Date Oktober steht ;-). Das sollte in wenigen Stunden der Fall sein.

Viele Grüße

Sathya

So Sorry für das verspätete Feedback. Danke für die zügige Anpassung im Source und der Bereitstellung der Packages. Das Build läuft seit Sonntag und schalltet nun alle Schalter und Relais fehlerfrei, auch die Anbindung in OpenHab 2 war problemlos möglich, auch wenn mich erst die Spaces in der ID erschreckt hatten.

LG