Hallo,
ich möchte Euch in diesem Blog die Implementierung der RaspBee Gateway Bridge von Dresden Elektronik mittels des HUE-Plugins vorstellen. Das Aufsatzmodul erweitert den Raspberry Pi um die ZigBee-Funktionalität und ermöglicht über die REST API Schnittstelle der deCONZ Applikation die direkte Kommunikation mit einer Vielzahl von ZigBee 3.0 bzw. ZigBee PRO Geräten, darunter beispielsweise Philips‘ Hue, die Vorschaltgeräteserie von Dresden Elektronik oder der XBee Serie 2. Die Kompatibilitätsliste der RaspBee Gateway Bridge findet Ihr hier.
In meinem Fall verwende ich die RaspBee Bridge in einem dezentralen Raspberry Pi 3 Model B um über das HUE-Plugin schaltbare Steckdosen (Osram Smart+ Plug und Paulmann Cephei Schaltcontroller) und vor allem mehrere RGB/W LED-Streifenlichter (24V mit 5050 SMD’s) mittels ZigBee LED Vorschaltgeräte (Funkvorschaltgerät FLS-PP lp von Dresden Elektronik) in SmarthomeNG einzubinden. Die Anzahl der ZigBee 3.0 Geräte wächst rasant und der Open Source REST-API Standard sorgt dafür das die Preise wettbewerbsfähig bleiben – Insofern sollten die hier erwähnten Geräte nur einen kleinen beispielhaften Ausschnitt darstellen, was (theoretisch) mit ZigBee Geräten und der RaspBee Bridge möglich ist.
Zu beachten ist, dass das SmarthomeNG HUE-Plugin nur auf Geräte aus dem „Licht“-Bereich zugreifen kann. ZigBee Geräte für Schalter und Sensoren lassen sich zwar in das RaspBee Gateway einbinden, aber nicht mit dem HUE-Plugin ansprechen (falls dem nicht so ist, lasst es mich bitte wissen).
Das System läuft jetzt bei mir seit über einem halben Jahr sehr stabil zusammen mit anderen Systemen (u.a. KNX, Sonos und MQTT) in SmarthomeNG bzw. SmartVISU – einschließlich des Widgets hue.control zur Farbsteuerung der LED Stripes. Die Reaktionszeit steht KNX in nichts nach.
Allerdings hatte ich noch nicht die Zeit mich mit allen Funktionalitäten zu befassen. Auf meiner ToDo – Liste steht u.a. noch die Konfiguration der Szenensteuerung.
Installation des Bridge-Moduls
Die Installation der Bridge-Moduls selbst auf einem Raspberry Pi Model B (RasPi2 oder 3) wird von Dresden Elektronik gut beschrieben. Das Modul wird auf die GPIO Stiftleiste aufgesteckt. In meinem Fall habe ich den RasPi samt Modul als feste Installation im Erdgeschoss platziert und über LAN mit dem Netzwerk verbunden. Eine Verbindung über WLAN sollte genauso gehen, aber da ich die Möglichkeit einer LAN-Verkabelung hatte, wollte ich vermeiden das der WLAN Chip des RasPi das ZigBee Signal des benachbarten Bridge-Moduls stört, das nur mit einer Chip-Keramik-Antenne ausgestattet ist. Damit sollte zwar laut Datenblatt eine Reichweite von 500m (freies Feld) möglich sein, aber da die wenigsten von uns Ihr Bett im Kornfeld aufgestellt haben, kann im realen Betrieb nach einigen wenigen massiven Wänden schon Funkschatten entsteht. Nun übertragen die ZigBee Geräte die Signale jedoch nicht nur zentral zur Bridge sondern kommunizieren auch untereinander als sogenanntes Mesh-Netzwerk. Somit lösen sich solche Probleme mit steigender Anzahl von Geräten von selbst. Trotzdem habe ich mich wie bereits erwähnt entschieden LAN zu nutzen und WLAN und Bluetooth im Raspberry auszuschalten in dem man das Laden der Treiber verhindert.
Wer es genauso machen möchte: Zuerst die Datei /etc/modprobe.d/raspi-blacklist.conf mit einem Editor bearbeiten. Dazu öffnet man die Konfigurationsdatei:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
In der Datei die folgenden Treiber deaktivieren:
# WLAN abschalten
blacklist brcmfmac
blacklist brcmutil
#blacklist cfg80211
#blacklist rfkill
# Bluetooth abschalten
blacklist btbcm
blacklist hci_uart
Anschließend speichern und schließen. Zusätzlich muss man noch einen Dienst abschalten, der sonst versucht Bluetooth zu nutzen.
sudo systemctl disable hciuart
Danach ist ein Neustart notwendig.
Installation der Applikationssoftware deCONZ
Für das Aufsetzen des Raspbian Stretch selbst und der Applikationssoftware deCONZ (mit dem Namen der Software konnte ich mich nie anfreunden) für das eigentliche Bridge-Modul gibt es eine ziemlich gute Anleitung von Dresden Elektronik.
Vor der Installation von deCONZ habe ich einen eigenen User bzw. Usergruppen für SmarthomeNG anlegen. Ich habe mich dabei an die gleichen Einstellungen wie für die Installation von SmarthomeNG gehalten:
sudo adduser smarthome --disabled-password --gecos "First Last,RoomNumber,WorkPhone,HomePhone"
sudo usermod -aG www-data,sudo smarthome
sudo usermod -aG www-data smarthome
Der Benutzer ‚smarthome‘ muss nun noch abgemeldet und neu angemeldet werden, damit die Rechte neu eingelesen werden. Dazu am besten das System neu booten mit:
sudo poweroff
Nach der Installation von deConz sollte der ‚deCONZ systemd headless service‘ laufen und man kann über das RaspBee Gateway die einzelnen ZigBee Geräte anschließen.
Anmelden neuer ZigBee Geräte an der Bridge
Das Hinzufügen und Einrichten neuer ZigBee Geräte geschieht am besten mit dem deCONZ Webinterface ‚Wireless Light Control WebApp‘. Daneben gibt es noch eine sehr umfangreichere deCONZ GUI, die eher für Entwickler gedacht ist. Für die reine Einbindung neuer Geräte ist die GUI nicht notwendig.
Wichtig ist, dass die elektrische Installation der ZigBee Geräte erst nach der Anmeldung in der RaspBee Bridge erfolgt, da zum Anmelden der Abstand zwischen Gerät und Bridge nur max. 50 cm betragen darf. Wer vorher schon z.B. das LED Vorschaltgerät im Gebäude verdrahtet hat, muss nochmal zum Schraubenzieher greifen, um beide Geräte zueinander zu führen.
Das eigentliche Anmelden neuer Licht-Geräte ist relativ einfach. Im Webinterface (‚Settings‘) das ZigBee-Netzwerk der Bridge öffnen (‚Open Network‘; ‚Done‘) und dann kurz warten bis das neue Gerät (sofern es sich in unmittelbarer Nähe zur Bridge befindet!) in der Geräteübersicht auftaucht.
Einrichten des HUE-Plugins in SmarthomeNG
Egal ob HUE-Beleuchtung oder ZigBee (Licht-) Gerät eines anderen Anbieters – durch das HUE-Plugin kann man auf die Bridge zugreifen und die Werte auslesen bzw. neu setzen.
Die Installation des HUE-Plugins für die RaspBee-Bridge erfolgt analog wie für eine HUE-Bridge und ist in der SHNG Anwenderdokumentation ganz gut beschrieben, deshalb gehe ich hier nicht näher darauf ein.
Damit sich anschließend das HUE-Plugin mit der Bridge verbinden kann, muss sich SHNG als neue Applikation einmalig in der Bridge registrieren. Dazu wird in der plugin.conf (/usr/smarthome/etc/plugin.conf) ein beliebig wählbarer User-Token hue_user als Listenwert eingetragen:
HUE:
class_name: HUE
class_path: plugins.hue
hue_user:
- 38f625a739562a8bd261ab9c7f5e62c8
hue_ip:
- 192.168.178.99
hue_port:
- '80'
cycle_lamps: 10
cycle_bridges: 30
default_transitionTime: '0.4'
Die User ID dient, wenn autorisiert, als API-Key für die Kommunikation zwischen SHNG und der RaspBee-Bridge.
Für das eigentliche Registrieren benötigt man noch die Methode sh.hue.authorizeuser(), die man in eine kleine Logik einbinden kann:
#!/usr/bin/env python3
# hue_autorisierung.py
# 1) Unlock Gateway in deCONZ Webapp (System Settings)
# 2) Start logic ('Hue_autorisierung')
sh.HUE.authorizeuser()
Und so läuft die Registrierung ab:
- Das Webinterface ‚Wireless Light Control WebApp‘ der Bridge öffnen
- Über Menu > Settings > ‚Unlock Gateway‘ auswählen (nicht mit ‚Open Network‘ verwechseln, das nur für das Hinzufügen von Geräten verwendet wird).
- Innerhalb von 60 Sekunden muss jetzt die Autorisierungs-Logik (s.o.) ausgelöst werden.
Alternativ kann man die User-ID auch mit einem Rest Client in der Bridge generieren und anschließend auslesen um sie in der plugin.conf einzutragen.
Aufbau der Items
Der Aufbau der Items in SmarthomeNG erfolgt wie in der Anleitung zum HUE-Plugin beschrieben. Die benötigte hue_lamp_id der jeweiligen Lampen kann mit einem REST-Client (z.B. ‚Postman‘ als Chrome Plugin) aus der Bridge ausgelesen werden:
GET <IP.VON.RASPBEE>/api/<USER-ID>/lights
Die Antwort vom RaspBee listet alle verbundenen Geräte der Kategorie /lights in der Reihenfolge auf wie sie für die hue_lamp_id in der Itemdefinition verwendet wird.
Ich weiß leider nicht wie ein HUE-Gateway die RGB/W Steuerung vornimmt, aber in der RaspBee-Bridge wird bei der Verwendung von RGB/W LED-Stripes (zumindest bei einigen LED Controllern) der RGB-Bereich und der W-Bereich als getrennte Lampen – ID ausgewiesen. Das macht die Erstellung der Items etwas aufwändig, aber funktioniert problemlos.
Am einfachsten definiert man die ‚System‘ Items (also alles, was nicht speziell einem Gerät zugeordnet wird) in einer separaten raspbee.yaml.
raspbee:
bridge_0:
# if hue_lamp_id and hue_bridge_id is not set, it is searched in a higher layer
# all light control specfic items are defined in 'smartvisu.conf' or 'smartvisu.yaml'
hue_bridge_id: 0
bridge_name:
type: str
hue_listen: bridge_name
zigbeechannel:
type: num
hue_listen: zigbeechannel
mac:
type: str
hue_listen: mac
dhcp:
type: bool
hue_listen: dhcp
ipaddress:
type: str
hue_listen: ipaddress
netmask:
type: str
hue_listen: netmask
gateway:
type: str
hue_listen: gateway
utc:
type: str
hue_listen: UTC
localtime:
type: str
hue_listen: localtime
timezone:
type: str
hue_listen: timezone
whitelist:
type: dict
hue_listen: whitelist
bridge_swversion:
type: str
hue_listen: bridge_swversion
apiversion:
type: str
hue_listen: apiversion
swupdate:
type: dict
hue_listen: swupdate
linkbutton:
type: bool
hue_listen: linkbutton
portalservices:
type: bool
hue_listen: portalservices
portalconnection:
type: str
hue_listen: portalconnection
portalstate:
type: dict
hue_listen: portalstate
scene:
type: str
hue_send: scene
enforce_updates: 'true'
Die Items der Geräte werden dann in der smartvisu.yaml definiert. Das angehängte Beispiel zeigt die Steuerung für ein RGB/W Vorschaltgerät, unterteilt in einen RGB Teil und den dazugehörigen Weiss-Teil.
obergeschoss:
seperator_obergeschoss:
name: Obergeschoss
sv_page: seperator
gallerie:
name: Gallerie
sv_page: room
sv_img: light_indoor_og_1.svg
skulptur_rgb:
name: Wand (Skulptur)
visu_acl: rw
sv_blocksize: 3
sv_widget: "{{ hue.control('item','item.power','item.reachable','item.col_r','item.col_g','item.col_b','item.alert','item.effect','item.bri','item.sat','item.hue') }}"
hue_lamp_id: 2
hue_bridge_id: 0
hue_lamp_type: 0
power_knx:
type: bool
value: 'true'
knx_dpt: 1
knx_send: 7/0/11
knx_listen: 7/0/11
knx_cache: 7/0/11
power:
type: bool
hue_send: 'on'
hue_listen: 'on'
knx_dpt: 1
knx_send: 7/0/23
knx_listen: 7/0/23
knx_cache: 7/0/23
reachable:
type: bool
hue_listen: reachable
ct:
type: num
hue_send: ct
hue_listen: ct
bri:
type: num
cache: 'on'
hue_send: bri
hue_listen: bri
hue_transitionTime: '0.2'
dim:
type: list
# knx_dpt = 3
# knx_listen = x/x/x
hue_dim_max: 255
hue_dim_step: 10
hue_dim_time: '0.2'
sat:
type: num
cache: 'on'
hue_send: sat
hue_listen: sat
col_r:
type: num
cache: 'on'
hue_send: col_r
col_g:
type: num
cache: 'on'
hue_send: col_g
col_b:
type: num
cache: 'on'
hue_send: col_b
hue:
type: num
cache: 'on'
hue_send: hue
hue_listen: hue
hue_transitionTime: '0.2'
dim:
type: list
# knx_dpt = 3
# knx_listen = x/x/x
hue_dim_max: 65535
hue_dim_step: 2000
hue_dim_time: '0.2'
effect:
type: str
hue_send: effect
hue_listen: effect
alert:
type: str
hue_send: alert
hue_listen: alert
modeltype:
type: str
hue_listen: type
lampname:
type: str
hue_listen: name
modelid:
type: str
hue_listen: modelid
swversion:
type: str
hue_listen: swversion
skulptur_white:
name: Wandskulptur Weiss
sv_blocksize: 3
hue_lamp_id: 3
hue_bridge_id: 0
hue_lamp_type: 0
visu_acl: rw
sv_widget: "{{ basic.stateswitch('item1', 'item.power', 'mini', '', '', '', '') }}{{ basic.slider('item2', 'item.bri') }}"
power:
type: bool
hue_send: 'on'
hue_listen: 'on'
knx_dpt: 1
knx_send: 7/0/23
knx_listen: 7/0/23
knx_cache: 7/0/23
reachable:
type: bool
hue_listen: reachable
bri:
type: num
cache: 'on'
hue_send: bri
hue_listen: bri
hue_transitionTime: '0.2'
dim:
type: list
# knx_dpt = 3
# knx_listen = x/x/x
hue_dim_max: 255
hue_dim_step: 10
hue_dim_time: '0.2'
effect:
type: str
hue_send: effect
hue_listen: effect
alert:
type: str
hue_send: alert
hue_listen: alert
modeltype:
type: str
hue_listen: type
lampname:
type: str
hue_listen: name
modelid:
type: str
hue_listen: modelid
swversion:
type: str
hue_listen: swversion
Nachtrag
Die Anzahl der ZigBee Geräte nimmt wie schon erwähnt rasant zu. Am Anfang waren es hauptsächlich (LED)-Lampen und Leuchten wie z.B. das Phillips HUE Programm. Das HUE Plugin in SmarthomeNG deckt das sehr schon ab und damit lässt sich alles steuern. Mittlerweile erlauben die Gateway Bridges der verschiedenen Hersteller aber auch die Kommunikation mit ZigBee Schaltern und Sensoren (Temperatur, Feuchtigkeit, Bewegungsmelder, Rauchmelder, Luftqualität, etc.). Leider scheint das HUE-Plugin dafür nicht ausgelegt zu sein, so dass sich die Anwendung auf den Bereich ‚Licht schalten‘ beschränkt. Langfristig würde wahrscheinlich ein Plugin Sinn machen das alle Applikationen des RaspBee aus dem ZigBee 3.0 Bereich abdeckt.
TODO:
- Implementierung der Szenensteuerung
- Integration von ZigBee Sensoren (z.B aus der Xiaomi-Serie)
0 Kommentare