FHEM mit Siri über iPhone steuern

Mit ** gekennzeichne Links auf dieser Seite sind Affiliatelinks.

Seit einigen Monaten habe ich FHEM im Einsatz und bin damit mittlerweile auch sehr glücklich. Leider ist die Steuerung über die einzelnen Apps und die Weboberfläche eher träge. Abhilfe schafft hier eine Siri-Integration für FHEM mittels Homekit.

In diesem Beispiel installiere ich Schritt für Schritt die Software Homekit auf dem Raspberry Pi der zweiten Generation.

Siri FHEM

Bevor wir mit der Installation starten, wird das System erstmal auf den neuesten Stand gebracht.

sudo apt-get update
sudo apt-get upgrade

Nun müssen wir gcc 4.9 installieren. Diese Version ist für Homebridge erforderlich. Leider ist sie für Debian Wheezy nicht verfügbar. Also tun wir mal so, als wäre wir kurzzeitig die Nachfolger-Version "Jessie".

In der folgenden Datei müssen wir also "wheezy" durch "jessie" ersetzen. Das geht (wie in meinem Beispiel) einfach per vi, oder mit jedem anderen Texteditor.

sudo vi /etc/apt/sources.list
sudo apt-get update

Nun können wir die neuste gcc-Version mit apt installieren.

sudo apt-get install gcc-4.9 g++-4.9

Damit wir in Zukunft wieder die richtigen Pakete für unser Betriebssystem installieren, ändern wir die vorige Einstellung wieder auf den Ursprungswert.

In der folgenden Datei wieder "jessie" durch "wheezy" ersetzen:

sudo vi /etc/apt/sources.list
sudo apt-get update

Jetzt musste ich noch etwas schummeln, damit die Version 4.9 auch standardmäßig verwendet wird. Natürlich könnten hierbei theoretisch Seiteneffekte mit anderen Programmen auftreten, welche ihr in Zukunft bauen möchtet. Ich konnte aber bisher kein Problem feststellen!

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7

Als nächstes laden wir nodejs herunter und installieren alles wie in diesem kurzen Snippet erklärt.

wget https://nodejs.org/dist/latest-v4.x/node-v4.2.6-linux-armv6l.tar.gz
tar -xvf node-v4.2.6-linux-armv6l.tar.gz
cd node-v4.2.6-linux-armv6l
sudo cp -R * /usr/local/
cd ..
rm -r node-v4.2.6-linux-armv6l
rm node-v4.2.6-linux-armv6l.tar.gz
sudo apt-get install libavahi-compat-libdnssd-dev
sudo npm install -g homebridge
sudo npm install -g homebridge-fhem
sudo npm install -g homebridge-http
sudo npm install -g homebridge-philipshue

Als nächstes wechseln wir zum Benutzer FHEM. Damit das klappt, muss für diesen (falls nocht nicht geschehen), die Shell freigeschaltet werden.

sudo vi /etc/passwd

In der Zeile von FHEM ändern wir /bin/false zu /bin/sh - in meinem Fall sieht das nun so aus:

fhem:x:999:20::/opt/fhem:/bin/sh
su fhem

Falls das Passwort nicht bekannt ist, einfach ein neues vergeben via

sudo passwd fhem

Jetzt werden die Homebridge-Konfigurationen angelegt:

mkdir ~/.homebridge
vi ~/.homebridge/config.json

{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:35",
        "port": 51826,
        "pin": "031-45-154"
    },
    "platforms": [
        {
            "platform": "homebridge-fhem.fhem",
            "name": "FHEM"
        }
    ],
    "accessories": []
}

homebridge

Konfiguration in FHEM

define Homebridge dummy
attr Homebridge devStateIcon start:ampel_gruen stop:ampel_rot restart:ampel_gelb status:ampel_aus
attr Homebridge event-on-change-reading state
attr Homebridge webCmd status:start:stop:restart

define Homebridge.Status dummy
attr Homebridge.Status icon phone_ring
attr Homebridge.Status setList on off
attr Homebridge.Status webCmd on:off

define Homebridge.DOIF DOIF ([Homebridge] eq "start") ({system ("sudo /etc/init.d/homebridge start")})\
DOELSEIF ([Homebridge] eq "stop") ({system ("sudo /etc/init.d/homebridge stop")})\
DOELSEIF ([Homebridge] eq "restart") ({system ("sudo /etc/init.d/homebridge restart")})\
DOELSEIF ([Homebridge] eq "status") ({system ("sudo /etc/init.d/homebridge status")})
attr Homebridge.DOIF room 91_WebDevices
sudo vi /etc/sudoers

Folgende Zeile einfügen:

fhem ALL=(ALL) NOPASSWD:/etc/init.d/homebridge

Auto-Start

sudo vi /etc/init.d/homebridge

#!/bin/sh
### BEGIN INIT INFO
# Provides: homebridge
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time for homebridge
# Description: Enable service provided by daemon.
### END INIT INFO
export PATH=$PATH:/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules
PID=`pidof homebridge`
case "$1" in
start)
if ps -p $PID > /dev/null 2>&1; then
        echo "Homebridge is already running"
        perl /opt/fhem/fhem.pl 7072 "setreading Homebridge.Status info Homebridge is allready running"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge.Status on"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge on"
else
        su - "fhem" -c "homebridge > /dev/null 2>&1 &"
        echo "Homebridge starting"
        sleep 2
    $0 status
fi
;;
stop)
if ! ps -p $PID > /dev/null 2>&1; then
        echo "Homebridge is not running"
        perl /opt/fhem/fhem.pl 7072 "setreading Homebridge.Status info Homebridge is not running"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge.Status off"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge off"
else
        kill $PID
        echo "Homebridge closed"
        perl /opt/fhem/fhem.pl 7072 "setreading Homebridge.Status info Homebridge closed"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge.Status off"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge off"
fi
;;
restart)
if ! ps -p $PID > /dev/null 2>&1; then
        $0 start
else
        $0 stop
        $0 start
fi
;;
status)
if ps -p $PID > /dev/null 2>&1; then
        echo "Homebridge is running PID $PID"
        perl /opt/fhem/fhem.pl 7072 "setreading Homebridge.Status info Homebridge running as PID $PID"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge.Status on"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge on"
else
        echo "Homebridge is not running"
        perl /opt/fhem/fhem.pl 7072 "setreading Homebridge.Status info Homebridge is not running"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge.Status off"
        perl /opt/fhem/fhem.pl 7072 "set Homebridge off"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0
sudo chmod 755 /etc/init.d/homebridge
sudo update-rc.d homebridge defaults
sudo service homebridge start

Hier findest Du die letzten beiden Generationen des Raspberry. Darunter findest Du das passende Gehäuse und SD-Karten.

Bei einem Netzteil für den Raspberry sollte unbedingt darauf geachtet werden, dass es mindestens 2000mA leistet! Andernfalls kann es zu seltsamen Seiteneffekten kommen, wodurch der Raspberry langsam wird, abstürzt oder plötzlich gar nicht mehr startet. Die erforderliche Leistung wird umso höher, desto mehr USB-Geräte angeschlossen werden. Daher sollte am Netzteil auf keinen Fall gespart werden!

FHEM-Kurs

Newsletter

Trage Dich jetzt in den Newsletter ein und genieße dadurch viele Vorteile:

  • 5€-Gutschein als Dankeschön
  • Zugang zu exklusiven Inhalten
  • Rabattaktionen für Kurse
  • Angebote für Produkte

* Durch Angabe meiner E-Mail-Adresse erkläre ich mich damit einverstanden, dass mir regelmäßig Informationen und Produktempfehlungen aus dem Fachgebiet Smart Home zugesendet werden. Mit dem Eintrag akzeptieren Sie unsere Datenschutzbestimmungen. Meine Einwilligung kann ich jederzeit widerrufen.

Matthias Kleine

Matthias Kleine

Großer Fan und Anhänger von OpenSource-Projekten und erweiterbaren Haus-Automatisierungskomponenten. Je offener und flexibler das System, desto besser. Ich lege mich ungern auf einzelne Protokolle oder Standards fest, sondern probiere aus allen Welten das Beste zu verheiraten. Unterwegs als Softwareentwickler, Trainer und Blogger im Bereich Smart Home.

Auf YouTube und hier im Blog gibt es bereits unzählige kostenlose Videos, Informationen und Tutorials. Wenn Dir das noch nicht reicht, ist ein Training genau das richtige für Dich! Die folgenden Trainings haben den Vorteil, dass immer von Anfang an gestartet wird und Du ohne Vorwissen teilnehmen kannst.