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:
- Das OpenHab System auf einem Raspberry Pi
- Die Philipps Hue Go (oder eine andere Zigbee kompatible Lampe von Hue, LEDVANCE, IKEA TRADFRI, …)
- Einen Zigbee CC2531 USB Stick
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.
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
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/
thanks for share baout Philips Hue Go mit OpenHab steuern