Philips Hue Go mit OpenHab steuern

Seit einigen Jahren nutze ich nun schon OpenHab auf einem Raspberry Pi um Heizung, Licht, Giessanlage usw. in unserem Haus zu steuern. Was noch fehlte war die Integration von Philips Hue Lampen, genauer gesagt einer Philips Hue Go.

Die Hue Go ist wirklich toll um einem Raum eine gewisse Stimmung zu verpassen, ob Abends beim Fernsehen oder auch mal als Hintergrundbeleuchtung für ein Candle-Light Dinner. Mit dem eingebauten Akku kann man die Lampe auch mal mit auf die Terrasse nehmen. Das einzigste Problem war eben bisher das ich diese nur per Bluetooth steuern konnte, weil ich keine Philips Hue Bridge hatte. Die Bridge kostete bei Amazon ca. 50 Euro, ich möchte euch aber hier zeigen wie ihr die Lampe auch mit einem Zigbee Stick für ab ca. 8 Euro in euer OpenHab-System integrieren könnt.

Was benötigt ihr hierfür:

Schritt 1 – OpenHabian auf dem Raspberry installieren

Eine Anleitung hierzu würde den Umfang des Beitrags sprengen, daher verlinke ich euch hier die Anleitung.

Schritt 2 – Zigbee2MQTT Installieren

Als erstes loggst du dich per SSH auf dem OpenHabian ein.

Dann installieren wir Node.js:

sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

sudo apt-get install -y nodejs git make g++ gcc

Und klonen dann das Zigbee2Mqtt Git-Repository:

sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt

Nun ändern wir den User und Gruppe des Repositories

 sudo chown -R openhab:openhabian /opt/zigbee2mqtt/

Und installieren die notwendigen Abhängigkeiten

cd /opt/zigbee2mqtt
npm ci --production

Nun stecken wir den Zigbee CC2531 Stick in den Raspberry Pi und prüfen dann unter welche ID er erkannt wurde, im Beispiel unten wurde er als ttyACM0 erkannt.

[12:27:51] openhabian@openHABianPi:/opt/zigbee2mqtt$ ls -l /dev/serial/by-id
insgesamt 0
lrwxrwxrwx 1 root root 13 Jan  3 11:59 usb-busware.de_CUL868-if00 -> ../../ttyACM1
lrwxrwxrwx 1 root root 13 Jan  3 11:59 usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018E333C8-if00 -> ../../ttyACM0

Nun passen wir die Konfiguration von Zigbee2Mqtt an um den Stick zu nutzen, hierzu öffnen wir die Konfiguration-Datei

nano /opt/zigbee2mqtt/data/configuration.yaml

Und ändern diese wie folgt

homeassistant: false
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://localhost'
serial:
  port: /dev/ttyACM0
'\n\nadvanced:\n    network_key': GENERATE
experimental:
  output: attribute

Nun könnt ihr die Konfiguration testen

cd /opt/zigbee2mqtt
npm start

Ihr solltet eine Ausgabe ähnlich wie unten bekommen

Zigbee2MQTT:info  2019-11-09T13:04:01: Logging to directory: '/opt/zigbee2mqtt/data/log/2019-11-09.14-04-01'
Zigbee2MQTT:info  2019-11-09T13:04:01: Starting Zigbee2MQTT version 1.6.0 (commit #720e393)
Zigbee2MQTT:info  2019-11-09T13:04:01: Starting zigbee-herdsman...
Zigbee2MQTT:info  2019-11-09T13:04:03: zigbee-herdsman started
Zigbee2MQTT:info  2019-11-09T13:04:03: Coordinator firmware version: '{"type":"zStack30x","meta":{"transportrev":2,"product":2,"majorrel":2,"minorrel":7,"maintrel":2,"revision":20190425}}'
Zigbee2MQTT:info  2019-11-09T13:04:03: Currently 0 devices are joined:
Zigbee2MQTT:warn  2019-11-09T13:04:03: `permit_join` set to  `true` in configuration.yaml.
Zigbee2MQTT:warn  2019-11-09T13:04:03: Allowing new devices to join.
Zigbee2MQTT:warn  2019-11-09T13:04:03: Set `permit_join` to `false` once you joined all devices.
Zigbee2MQTT:info  2019-11-09T13:04:03: Zigbee: allowing new devices to join.
Zigbee2MQTT:info  2019-11-09T13:04:03: Connecting to MQTT server at mqtt://localhost
Zigbee2MQTT:info  2019-11-09T13:04:03: Connected to MQTT server

Um nun Zigbee2mqtt als Service zu starten könnt ihr der Anleitung hier folgen.

Schritt 3 – Hue Go mit Zigbee2mqtt pairen

Nun können wir die Hue Go mit Zigbee2mqtt pairen, da ich die Hue Go per Bluetooth verbunden hatte konnte ich sie mit de Hue Bluetooth app auf die Werkseinstellungen zurücksetzen, und sie hat sich dann direkt mit Zigbee2mqtt verbunden. Falls ihr damit Probleme habt findet ihr hier eine Anleitung.

In der Zigbee2mqtt Konfigurationsdatei könnt ihr der Hue Go nun auch einen neuen Namen vergeben, der nicht so kryptisch ist wie die Device-Id. Hierzu einfach mit “nano /opt/zigbee2mqtt/data/configuration.yaml” die Datei öffnen und dann den “friendly_name” anpassen, ich verwende “HueGo”.

....
devices:
  '0x0017XXXXXXXXXXXX':
    friendly_name: HueGo

Schritt 4 – HueGo als OpenHab Thing anlegen

Nun legen wir die HueGo als Thing in OpenHab an, hierzu legen wir eine .thing Datei an

nano /etc/openhab2/things/zigbee.things

Und kopieren folgenden Inhalt

Bridge mqtt:broker:mosquitto "Mosquitto" [ host="127.0.0.1", port=1883, secure=false, username="xxxx", password="xxxx", clientID="openHAB2" ]
{
    Thing topic zigbeebridge "Zigbee2mqtt Bridge" {
    Channels:
        Type switch : permitJoin         [ commandTopic="zigbee2mqtt/bridge/config/permit_join", on="true", off="false" ]
        Type string : state              [ stateTopic="zigbee2mqtt/bridge/state" ]
        Type string : logType            [ stateTopic="zigbee2mqtt/bridge/log",  transformationPattern="JSONPATH:$.type" ]
        Type string : logMessage         [ stateTopic="zigbee2mqtt/bridge/log",  transformationPattern="JSONPATH:$.message" ]
    }
 	Thing topic HueGo "HueGo" {
    Channels:
        Type switch : state "HueGo1" 							[stateTopic="zigbee2mqtt/HueGo/state", commandTopic="zigbee2mqtt/HueGo/set/state",  on="ON", off="OFF" ]
        Type number : dimmer "HueGo_Dimmer" 					[stateTopic="zigbee2mqtt/HueGo/brightness", commandTopic="zigbee2mqtt/HueGo/set/brightness", min=0, max=255, step=1 ]
		Type colorRGB : color  "HueGo_Color"        			[stateTopic="zigbee2mqtt/HueGo/color", commandTopic="zigbee2mqtt/HueGo/set/color"]
		Type string : colorstring  "HueGo_Color"        			[stateTopic="zigbee2mqtt/HueGo/color", commandTopic="zigbee2mqtt/HueGo/set/color"]
		Type number : color_temperature "HueGo_Color Temp" 	[stateTopic="zigbee2mqtt/HueGo/color_temp", commandTopic="zigbee2mqtt/HueGo/set/color_temp"]
    }
}

Anschliessend legen wir ein entsprechende Items an, um die HueGo später auch mit HomeKit richtig nutzen zu können benötigen wir mehrere Items:

nano /etc/openhab2/items/zigbee.items
Switch HueGoSwitch "HueGoColor" (HueGo){ channel="mqtt:topic:mosquitto:HueGo:state"}
Number HueGo1Dimmer "HueGoColor" (HueGo){ channel="mqtt:topic:mosquitto:HueGo:dimmer"}
String HueGo1ColorString "HueGoColor String" (HueGo){ channel="mqtt:topic:mosquitto:HueGo:colorstring"}
Color HueGo2 "ColorGo" (HueGo)[ "Lighting" ]

Zu letzt benötigen wir noch eine Regel, welche die ausgewählte Farbe richtig an die HueGo sendet. In vielen anderen Beispielen werden hier Java Script Transformatoren benutzt, diese haben bei mir aber nicht funktioniert. Daher die Lösung über mehrere Items und eine Regel.

nano /etc/openhab2/rules/zigbee.rules
rule "HueGo - Color"
when
    Item HueGo2 received command
then
    var String result = ""

    if(receivedCommand == OFF)
    {
        HueGoSwitch.sendCommand(OFF)
    }
    else
    {
        var HSBType hsbValue = receivedCommand as HSBType
        val xyY = hsbValue.toXY.toString // convert to xyY
        val double x = Float::parseFloat(xyY.split(",").get(0).substring(1)) / 100.0 // scale to 0..1.0
        val double y = Float::parseFloat(xyY.split(",").get(1).substring(1)) / 100.0 // scale to 0..1.0
        val int   Y = (hsbValue.brightness * 2.55).intValue // scale to 0..255
       
        var String text="{\"x\":" + String.format("%.3f", x).replace(',','.') + ",\"y\":" + String.format("%.3f", y).replace(',','.') + "}"
       
        HueGo1Dimmer.sendCommand(Y)
        HueGo1ColorString.sendCommand(text)    
    }
end

Fertig, nun solltet ihr die Hue Go mit HomeKit oder über eure OpenHab Oberfläche steuern können.

Optionaler Schritt – Symlinks für USB Stick (Busware, Homematic, Zigbee CC2531, …)

Falls ihr wie ich mehrer USB Stick verwendet, in meinem fall ein Busware Stick um per Homegear Hommatic Geräte mit OpenHab zu steuern und nun den CC2531 Zigbee Stick, kann es sein das diese nach jedem Neustart mal ttyACM0 oder ttyACM1 heißen, was natürlich zu Problemen mit der statischen Konfiguration führt.

Die Lösung: wir vergeben Symbolische Namen für die beiden Sticks, die bei jedem Neustart zugewiesen werden. Dies geht mit Regeln welche ihr in die Datei

sudo nano /etc/udev/rules.d/99-com.rules

hinzufügt.

Diese Regeln ganz unten in die Datei schreiben

SUBSYSTEM=="tty", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204b", SYMLINK+="ttyHomematic"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a8", ATTRS{serial}=="__0X0XXXXXXXXXX", SYMLINK+="ttyZigbee"

Die idVendor, idProduct und serial Information bekommt ihr mit dem Befehl

udevadm info -a -p $(udevadm info -q path -n /dev/ttyACM1)

Nach einem Neustart könnt ihr mit dem Befehl

udevadm info -a -p $(udevadm info -q path -n /dev/ttyZigbee)

testen ob alles geklappt hat.

Nun müsst ihr nur noch in der Konfigurationsdatei den Port auf den neuen symbolischen Namen anpassen.

nano /opt/zigbee2mqtt/data/configuration.yaml
...
serial:
  port: /dev/ttyZigbee
...

Neustarten und fertig!

Hat alles geklappt oder habt ihr noch Fragen? Schreibt mir gerne einen Kommentar.

3 thoughts on “Philips Hue Go mit OpenHab steuern”

  1. Hallo,

    ich habe auf einem neuen Rpi4 ganz frisch Openhabian 3.0.1 installiert und dann Ihre Anleitung befolgt.
    Leider erhalte ich bei Befehl “npm ci –production” folgende Fehlermeldung:

    openhabian@openhabian:/opt/zigbee2mqtt $ npm ci –production
    npm ERR! code EACCES
    npm ERR! syscall mkdir
    npm ERR! path /opt/zigbee2mqtt/node_modules
    npm ERR! errno -13
    npm ERR! Error: EACCES: permission denied, mkdir ‘/opt/zigbee2mqtt/node_modules’
    npm ERR! [OperationalError: EACCES: permission denied, mkdir ‘/opt/zigbee2mqtt/node_modules’] {
    npm ERR! cause: [Error: EACCES: permission denied, mkdir ‘/opt/zigbee2mqtt/node_modules’] {
    npm ERR! errno: -13,
    npm ERR! code: ‘EACCES’,
    npm ERR! syscall: ‘mkdir’,
    npm ERR! path: ‘/opt/zigbee2mqtt/node_modules’
    npm ERR! },
    npm ERR! errno: -13,
    npm ERR! code: ‘EACCES’,
    npm ERR! syscall: ‘mkdir’,
    npm ERR! path: ‘/opt/zigbee2mqtt/node_modules’
    npm ERR! }
    npm ERR!
    npm ERR! The operation was rejected by your operating system.
    npm ERR! It is likely you do not have the permissions to access this file as the current user
    npm ERR!
    npm ERR! If you believe this might be a permissions issue, please double-check the
    npm ERR! permissions of the file and its containing directories, or try running
    npm ERR! the command again as root/Administrator.

    npm ERR! A complete log of this run can be found in:
    npm ERR! /home/openhabian/.npm/_logs/2021-02-01T21_57_49_036Z-debug.log
    openhabian@openhabian:/opt/zigbee2mqtt $

    Können Sie mir hier weiterhelfen?
    Viele Grüße,
    Josef

  2. Ich habe meinen Berechtigungsfehler nun gefunden. Copy&Paste…
    Bei Openhabian3 lautet der User “openhabian” also in meinem Fall:

    sudo chown -R openhabian:openhabian /opt/zigbee2mqtt
    und nicht
    sudo chown -R openhab:openhabian /opt/zigbee2mqtt/

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.