Smar­thome-Pi mit MQTT und node-red

Wer sich etwas ein­ge­hen­der mit dem The­ma Haus­au­to­ma­ti­sie­rung beschäf­tigt, wird schnell bemer­ken, dass es ein schier unüber­schau­ba­re Men­ge an Sys­te­men ver­schie­de­ner Her­stel­ler dafür gibt. Bald sieht man aber auch, dass vie­le Wege in die Sack­gas­se füh­ren: gerin­ges Ange­bot an Sen­so­ren und Akto­ren, man­geln­de Kom­pa­ti­bi­li­tät mit Pro­duk­ten ande­rer Her­stel­ler, Bin­dung an Cloud-Sys­te­me und oft hohe Kos­ten sind nur eini­ge der Grün­de dafür.

Es gibt zwar auch uni­ver­sel­le Sys­te­me [5], die offen für für ande­re Pro­to­kol­le und Pro­duk­te sind, aber neben den Kos­ten bleibt auch dabei ein ungu­tes Gefühl der Abhängigkeit.

Dabei sind fast alle Kom­po­nen­ten die­ser Smart-Home-Zen­tra­len heu­te auch als Open Source Soft­ware ver­füg­bar und lau­fen pro­blem­los auf bil­li­gen und ener­gie­ef­fi­zi­en­ten Platt­for­men wie dem Raspber­ry Pi.

Nach den durch­wach­se­nen Erfah­run­gen mit den DECT-ULE-Kom­po­nen­ten von AVM und Tele­kom [6] heißt das Pro­jekt nun: Auf­bau einer Haus­au­to­ma­ti­sie­rungs­zen­tra­le auf Basis von Raspber­ry Pi mit Open Source Soft­ware, die zunächst Kom­po­nen­ten von home­ma­tic, spä­ter auch ande­re Sys­te­me wie Zig­Bee, WLAN/Tasmota oder Infra­rot-Emp­fän­ger steu­ern kann.

Hard­ware

Jede Hard­ware, auf der ein Stan­dard-Linux-Sys­tem instal­liert wer­den kann, ist geeig­net. Die Leis­tungs­an­for­de­run­gen sind eher gering. Bei mir tut es ein älte­rer Raspber­ry­Pi 2B. Die zusätz­liche Leis­tung der 3er Serie ist nicht unbe­dingt nötig, aber die ein­ge­bau­te WLAN-Unter­stüt­zung kann hilf­reich sein. Ande­re Ein­pla­ti­nen­rech­ner wie Oran­ge- oder Bana­na­Pi, ODROID oder Cubie­Board oder sogar ein Mini-x86-Sys­tem sind eben­so geeig­net, brau­chen dann aber ein ande­res Betriebssystem-Image.

Das Sys­tem lan­det beim RasPi auf einer SD-Kar­te von min­des­tens 4GByte; wei­te­rer Spei­cher ist nicht nötig.

Sys­tem­in­stal­la­ti­on

Die Grund­in­stal­la­ti­on des RasPi-Sys­tems bie­tet kei­ner­lei Beson­der­hei­ten. Es wird das schlan­ke Raspbi­an Lite benutzt, da kein gra­fi­scher Desk­top nötig ist - alle Zugrif­fe lau­fen spä­ter ent­we­der über eine ssh-Con­so­le oder einen Web-Browser.

  1. Raspbi­an Lite von [1] her­un­ter­la­den, ent­pa­cken und z.B. mit dd oder Etcher auf SD-Kar­te schreiben
  2. File ’ssh’ im root-Ver­zeich­nis der SD-Kar­te anle­gen, um ssh-dae­mon zu starten
  3. fes­te IP-Adres­se in cmdline.txt ein­tra­gen:
    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=c7cb7e34-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh ip=192.168.2.22
  4. Pi boo­ten und per ssh ver­bin­den (User: pi, pass­wort: raspberry)
  5. sudo raspi-con­fig aus­füh­ren, Par­ti­ti­on vergrößern
  6. Mit sudo apt-get update und sudo apt-get upgrade aktu­el­le Linux-Updates installieren 

Basis-Appli­ka­tio­nen installieren

  1. node.js und node-red:
    bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
  2. Mos­qit­to:
    wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
    sudo apt-key add mosquitto-repo.gpg.key
    cd /etc/apt/sources.list.d/
    sudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.list
    sudo apt-get update
    sudo apt-get install mosquitto
    sudo systemctl enable mosquitto.service

Home­ma­tic Support

Home­ma­tic arbei­tet mit dem Funk­pro­to­koll BidCoS auf dem 868 MHz Band. Dafür ist ein zusätz­li­cher USB-Funk­stick nötig, der als nano­CUL bekannt ist. Basis ist ein klei­nes Ardui­no-Board mit einem CC1101-Funk­mo­dul und ent­spre­chen­der Firmware.

Den Stick kann man ent­we­der selbst nach der Anlei­tung in [7] zusam­men­bas­teln oder für etwa 25 Euro als Fer­tig­teil kau­fen. Alter­na­tiv kann man auch das Ori­gi­nal-CUL-Modul von Bus­wa­re benut­zen, das aber mit etwa 50€ zu Buche schlägt.

Auf dem Pi benö­ti­gen wir noch ein Soft­ware­mo­dul zur Kom­mu­ni­ka­ti­on mit dem CUL. Dafür eig­net sich das home­gear-Pro­jekt [4], das so instal­liert wird:

sudo wget https://apt.homegear.eu/Release.key && sudo apt-key add Release.key && sudo rm Release.key
sudo echo 'deb https://apt.homegear.eu/Debian/ stretch/' >> /etc/apt/sources.list.d/homegear.list
sudo apt update
sudo apt install homegear homegear-nodes-core homegear-management
sudo apt install homegear-homematicbidcos
sudo vi /etc/homegear/families/homematicbidcos.conf

Zig­bee-Sup­port

Zwar könn­te man Zig­bee-Gerä­te auch direkt aus node-red her­aus anspre­chen, um aber eine ein­heit­li­che Ein­bin­dung aller End­ge­rä­te über MQTT zu haben, ist die Kom­mu­ni­ka­ti­on über zigbee2mqtt sinn­vol­ler. Die Instal­la­ti­on erklärt [8] ausführlich.

Sonoff/Tasmota Sup­port

Um die ver­brei­te­ten Son­off-Kom­po­nen­ten ohne Her­stel­ler-Cloud-Zwang benut­zen zu kön­nen, müs­sen sie zunächst mit einer neu­en Firm­ware ver­se­hen wer­den. Das wird in vie­len Tuto­ri­als aus­führ­lich erklärt, etwa in [9]. Alter­na­tiv kann man bei diver­sen Ver­sen­dern auch bereits umge­flash­te Son­off-Swit­che kaufen.

In der Tas­mo­ta-Web-Ober­flä­che jedes Son­off-Gerä­tes wird dann der MQTT-Zugang zu unse­rem Ser­ver kon­fi­gu­riert. So kön­nen die Son­offs über MQTT Schalt­be­feh­le emp­fan­gen und Sta­tus­mel­dun­gen senden.

Auf den meis­ten Son­off-Swit­ches sind auch ein oder meh­re­re GPIO-Ports des Pro­zes­sors her­aus­ge­führt. So kann man die Funk­tio­nen auch leicht erwei­tern, etwa um zusätz­liche Kon­tak­te. Die Tas­mo­ta-Firm­ware ist dar­auf bereits eingerichtet.

Infra­rot-Sup­port

Zur Steue­rung älte­rer Hard­ware ohne Netz­werk-Inter­face braucht man einen Infra­rot-Sen­der und Emp­fän­ger im Netz­werk. Neben dem Selbst­bau­pro­jekt IR-WLAN-Gate­way, das unter ande­rem im FHEM-Wiki vor­ge­stellt wird, gibt es fer­ti­ge Gate­ways der chi­ne­si­schen Fir­ma Broad­link. Unter den ver­schie­de­nen Model­len mit unter­schied­li­chen Sen­de­leis­tun­gen und mit oder ohne 433-MHz-Funkmodul.

Ich habe mich für das sehr ein­fa­che Modell Mini RM 3 ent­schie­den, dass neben dem IR-Sen­der und -Emp­fän­ger ledig­lich ein WLAN-Modul besitzt. Es wird bei den bekann­ten Ver­sen­dern für etwa 20€ ange­bo­ten und meist direkt aus Chi­na geliefert.

Die mit­ge­lie­fer­te Smart­phone-App funk­tio­niert nur über das Cloud-Gate­way des Her­stel­lers und ist ent­spre­chend unzu­ver­läs­sig. Statt­des­sen ver­wen­de ich die MQTT Broad­link Bridge von Fred­rick Bäcker, die als Open Source über Git­hub ver­füg­bar ist. Sie ist eigent­lich für die Nut­zung unter Open­HAB gedacht, funk­tio­niert aber unter Node­Red genau so gut. Sie wird nach Anlei­tung manu­ell als Node.js-Modul installiert.

Mein Modell wur­de nicht sofort erkannt, da es offen­sicht­lich eine neue­re Firm­ware-ID (0x27de) besaß. Sie kann recht ein­fach in /srv/openhab2-conf/broadlink-mqtt-bridge/node_modules/broadlinkjs-rm/index.js unter „RM Devices (wit­hout RF sup­port)” (Zei­le 9ff) nach­ge­tra­gen wer­den und wur­de inzwi­schen auch in das Modul aufgenommen.

Home­page des Web­ser­vers der MQTT Broad­link Bridge

Zum Anler­nen der Befeh­le der Infra­rot-Fern­be­die­nun­gen benutzt man am bes­ten den Web-Ser­ver, den die MQTT Broad­link Bridge unter Port 3000 offe­riert. Jede Tas­te einer Fern­be­die­nung sen­det eine Sequenz von Infra­rot-Signa­len, die im Anlern-Modus von der Bridge emp­fan­gen und als Datei unter /srv/o­pen­ha­b2-con­f/­broad­link-mqtt-bridge/­com­mands abge­spei­chert wird.

Zum Auf­zeich­nen trägt man zunächst auf der Home­page den Kom­man­do-Namen unter „Topic” ein, etwa „av/technics/power” für die Power-Tas­te auf der Fern­be­die­nung mei­nes alten Tech­nics-Recei­vers. Dann auf „Record IR” kli­cken, den RM Mini mit der Fern­be­die­nung anpei­len und inner­halb von 30 Sekun­den die Tas­te drücken.

Die Auf­nah­me lan­det dann in /srv/openhab2-conf/broadlink-mqtt-bridge/commands/av/technics/power.bin. So fährt man mit allen Tas­ten aller Fern­be­die­nun­gen fort. Alle Tas­ten einer Fern­be­die­nung sol­len in einem Device-Ver­zeich­nis (hier: „tech­nics”) lan­den, die Fern­be­die­nun­gen einer Grup­pe in einem Grup­pen-Ver­zeich­nis (hier: „av”). Das ist zwar etwas müh­sam, geht aber schnel­ler als man denkt.

Mit dem „Play”-Knopf kann man die Kom­man­dos zum Test wie­der abspie­len. Im spä­te­ren Betrieb wer­den sie aber vom MQTT-Bro­ker gesteu­ert. Unter Node­Red sen­det man für das oben auf­ge­nom­me­ne Kom­man­do eine Mes­sa­ge mit der Pay­load „play” und dem topic „broadlink/av/technics/power” an den MQTT-Bro­ker - ein­fach, oder?

Kon­fi­gu­ra­ti­on

home­gear

Ein­deu­ti­ge Adres­se für die Zen­tra­le fest­le­gen und rpc-Ser­ver absichern:

  • in /etc/homegear/families/homematicbidcos.conf edi­tie­ren:
    cen­tral­Ad­dress = 0xFD<xxxx>
  • absi­chern: alle rpc-Ser­ver nur auf inter­face ::1 (local­host) hören lassen

Mos­quit­to

  • anony­me Log­ins verbieten
  • Username/Passwort für node-red und home­gear setzen
  • ggfs. SSL einschalten

node-red

  • admin absi­chern:
    sudo npm install -g node-red-admin
    node-red-admin hash-pw
    vi /home/pi/.node-red/settings.js
    sudo service nodered restart
  • https erzwin­gen
    • key und cer­ti­fi­ca­te erzeu­gen (hier: letsencrypt)
    • in settings.js requi­re https set­zen (var fs = require(„fs”);)
    • unter https key und cer­ti­fi­ca­te eintragen

Broad­link

Zugangs­da­ten des MQTT-Bor­kers in /srv/openhab2-conf/broadlink-mqtt-bridge/config/local.json (nicht in default.json !) konfigurieren:

{
"mqtt": {
"host": "127.0.0.1",
"port": 1883,
"protocol": "mqtt",
"subscribeBasePath": "broadlink",
"username": "meinMqttUserName",
"password": "meinMqttPasswort"
},
"recording": {
"timeout": {
"ir": 30,
"rf": 30
},
"path": null
},
"gui": {
"port": 3000
}
}

Gerä­te anlernen

Sowohl bei homegear/homematic als auch bei Zig­bee muss jedes Gerät vor der Benut­zung erst mit sei­ner Steu­er­zen­tra­le gepaart wer­den. Das geschieht meist durch lan­ges Drü­cken eines Tas­ters am Gerät; even­tu­ell muss die Soft­ware vor­her in den Anlern­mo­dus ver­setzt wer­den. Genaue­res erfährt man in den jewei­li­gen Software-Dokumentationen.

Flows in node-RED anlegen

Schließ­lich kann man die gepaar­ten Gerä­te über die MQTT-Kno­ten in der Node-RED-GUI ver­wen­den. Unten ein ein­fa­cher Bei­spiel-Flow zum Schal­ten einer Zigbee-Steckdose.

Node-RED Flow mit MQTT-Knoten

Umzug auf neue Hardware

Es gibt Fäl­le, in denen man das Sys­tem von einem alten RasPi nicht kom­plett auf den neu­en mit­neh­men kann. Das ist zum Bei­spiel beim Umzug von einem Pre-4-RasPi auf den RasPi 4 der Fall: dort ist zwin­gend min­des­tens ein Raspbi­an Bus­ter nötig; eine alte Instal­la­ti­on läuft auch nach einem Upgrade nicht.

Dann instal­liert man im neu­en Sys­tem alle Soft­ware­kom­po­nen­ten wie oben beschrie­ben und kopiert nur die Kon­fi­gu­ra­tio­nen vom alten Sys­tem. Im Ein­zel­nen sind das:

  1. Node-Red:
    • ~/.node-red/*
  2. MQTT
    • /etc/mosquitto/*
    • nur bei Per­sis­tenz: /var/lib/mosquitto.db
  3. Homematic/Homegear:
    • /etc/homegear/*
    • /var/lib/homegear/db.sql
  4. Zigbee2mqtt
    • /opt/zigbee2mqtt/data/*
  5. Broad­link-Bridge
    • /srv/o­pen­ha­b2-con­f/­broad­link-mqtt-bridge/­com­mands/*

Quel­len:

  1. Raspbi­an: https://​www​.raspber​ry​pi​.org/​d​o​w​n​l​o​a​d​s​/​r​a​s​p​b​ian
  2. node-red: https://​node​red​.org/​d​o​c​s​/​h​a​r​d​w​a​r​e​/​r​a​s​p​b​e​r​r​ypi
  3. Mos­quit­to: https://​mos​quit​to​.org/​b​l​o​g​/​2​0​1​3​/​0​1​/​m​o​s​q​u​i​t​t​o​-​d​e​b​i​a​n​-​r​e​p​o​s​i​t​ory
  4. Home­gear: https://​doc​.home​gear​.eu/​d​a​t​a​/​h​o​m​e​g​e​a​r​/​i​n​s​t​a​l​l​a​t​i​o​n​.​h​tml
  5. Uni­ver­sel­le Smart-Home-Zen­tra­len, c’t 8/2019, Sei­te 114ff, https://​www​.hei​se​.de/​s​e​l​e​c​t​/​c​t​/​2​0​1​9​/​8​/​1​5​5​4​8​2​1​8​0​0​5​7​9​135
  6. Smart Home unter FRITZ!OS, https://​edv​.mueg​gel​land​.de/​f​r​i​t​z​-​s​m​a​r​t​h​o​me/
  7. nano­CUL Home­page https://​www​.nano​cul​.de
  8. Zigbee2MQTT Instal­la­ti­on http://​www​.zig​bee2m​qtt​.io/​g​e​t​t​i​n​g​_​s​t​a​r​t​e​d​/​r​u​n​n​i​n​g​_​z​i​g​b​e​e​2​m​q​t​t​.​h​tml
  9. Son­off mit Tas­mo­ta fla­shen https://​crea​ti​onx​.shop/​r​a​t​g​e​b​e​r​/​s​o​n​o​f​f​/​f​l​a​s​hen
Veröffentlicht am
Kategorisiert in SmartHome

2 Kommentare

Schreibe einen Kommentar

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

fünfzehn + 16 =