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)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.