Smarthome-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än­gig­keit.

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.

Hardware

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­li­che 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 Banana­Pi, ODROID oder Cubie­Board oder sogar ein Mini-x86-Sys­tem sind eben­so geeig­net, brau­chen dann aber ein ande­res Betriebs­sys­tem-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.

Systeminstallation

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-Brow­ser.

  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 schrei­ben
  2. File ’ssh’ im root-Ver­zeich­nis der SD-Kar­te anle­gen, um ssh-dae­mon zu star­ten
  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: raspber­ry)
  5. sudo raspi-con­fig aus­füh­ren, Par­ti­ti­on ver­grö­ßern
  6. Mit sudo apt-get update und sudo apt-get upgrade aktu­el­le Linux-Updates instal­lie­ren

Basis-Applikationen installieren

  1. node.js und node-red:
    bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/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
    systemctl enable mosquitto.service

Homematic Support

Home­ma­tic arbei­tet mit dem Funk­pro­to­koll Bid­CoS 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 Firm­ware.

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­ge­ar-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

Zigbee-Support

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] aus­führ­lich.

Sonoff/Tasmota Support

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 kau­fen.

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 sen­den.

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­li­che Kon­tak­te. Die Tas­mo­ta-Firm­ware ist dar­auf bereits ein­ge­rich­tet.

Infrarot-Support

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-Funk­mo­dul.

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 gelie­fert.

Die mit­ge­lie­fer­te Smart­pho­ne-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 gebau so gut. Sie wird nach Anlei­tung manu­ell als Node.js-Modul instal­liert.

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 auf­ge­nom­men.

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-brid­ge/­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?

Konfiguration

homegear

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

  • 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 las­sen

Mosquitto

  • anony­me Log­ins ver­bie­ten
  • Username/Passwort für node-red und home­ge­ar set­zen
  • ggfs. SSL ein­schal­ten

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: let­sen­crypt)
    • in settings.js requi­re https set­zen (var fs = require(„fs”);)
    • unter https key und cer­ti­fi­ca­te ein­tra­gen

Broadlink

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

{
"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 Soft­ware-Doku­men­ta­tio­nen.

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 Zig­bee-Steck­do­se.

Node-RED Flow mit MQTT-Kno­ten

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­ge­ar: https://​doc​.home​ge​ar​.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 flas­hen https://​crea​ti​onx​.shop/​r​a​t​g​e​b​e​r​/​s​o​n​o​f​f​/​f​l​a​s​hen

Schreibe einen Kommentar

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