himpler.com himpler.com

Virtuelle Geräte in homee

4 Min.

Ich habe nach einem Weg gesucht, bisher nicht von homee unterstütze Geräte in homee zu integrieren. In diesem kleinen Tutorial möchte ich Dir zeigen, wie sich über einen kleinen Umweg viele andere Geräte (z.B. Fernseher und Funksteckdosen mit 433Mhz) in homee integrieren lassen.

Inzwischen hat sich eine weitere und bessere Möglichkeit zur Integration von virtuellen Geräten in homee ergeben: zum Beitrag “Virtuelle Geräte in homee mit Node-RED”

Voraussetzungen

Hinweis: Die Installation ist grundsätzlich auch auf anderen Systemen möglich. Dazu werden unter Umständen jedoch andere Befehle benötigt.

Installation der benötigten Software

Um die virtuellen Geräte erstellen zu können, brauchen wir NodeJS, NPM, Node-RED und ein Plugin. Zur Installation melden wir uns zuerst per SSH auf dem RPi an. Anstelle des raspberrypi.local kannst du auch die IP-Adresse eingeben.

ssh pi@raspberrypi.local

Anschließend aktualisierst Du mit folgenden Befehlen die Paketquellen und fügst eine Paketquelle für NodeJS hinzu.

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y build-essential

Der Befehl node -v sollte Dir nach der erfolgreichen Installation die Versionsnummer ausgeben. Nun installieren wir Node-RED und die benötigten Pakete von NPM.

sudo npm install -g node-red --unsafe-perm
node-red
cd ~/.node-red
npm install node-red-contrib-wemo-emulator
npm install wemore@latest

Damit Node-RED auch nach einem Neustart läuft, erstellen wir nun mit folgendem Befehl eine neue Datei

sudo nano /etc/init.d/node-red

und fügst dort folgenden Inhalt ein:

#!/bin/sh
### BEGIN INIT INFO
# Provides: node-red
# Required-Start:    $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
# Description:       Enable service provided by daemon.
### END INIT INFO

dir="/home/pi"
cmd="DEBUG=* sudo node-red --userDir /home/pi/.node-red"
user="pi"

name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"

get_pid() {
    cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && ps -p `get_pid` > /dev/null 2>&1
}

case "$1" in
    start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        cd "$dir"
        if [ -z "$user" ]; then
            sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
        else
            sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
        fi
        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            exit 1
        fi
    fi
    ;;
    stop)
    if is_running; then
        echo -n "Stopping $name.."
        kill `get_pid`
        for i in 1 2 3 4 5 6 7 8 9 10
        # for i in `seq 10`
        do
            if ! is_running; then
                break
            fi

            echo -n "."
            sleep 1
        done
        echo

        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will not attempt to start"
        exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0

Mit STRG+O lässt sich die Datei speichern, mit STRG+X wird der Editor geschlossen.

Jetzt geben wir der Datei noch die richtigen Rechte und sorgen für den Autostart.

sudo chmod 755 /etc/init.d/node-red
sudo update-rc.d node-red defaults

Wenn alles funktioniert hat, lässt sich Node-Red mit sudo /etc/init.d/node-red start starten. Das Webinterface von Node-Red erreichst Du anschließend über die Adresse http://raspberrypi.local:1880 (oder alternativ wieder mit der IP).

Node-Red Webinterface

Node-Red Webinterface

Erstellen des virtuellen Geräts

In der linken Spalte sind die so genannten Nodes aufgelistet, die sich nun verwenden lassen. Das virtuelle Gerät simuliert einen WeMo Switch. Um diesen zu erstellen ziehen wir den orangenen Node “wemo emu” in den Flow. Mit einem Doppelklick kannst Du den Node analog dem Beispiel im Bild konfigurieren.

Konfiguration des Nodes

Konfiguration des Nodes

Für einen ersten Test fügen wir noch einen Debug-Node hinzu. Mit einem Klick auf Deploy wird der Flow anschließend aktiviert.

Flow mit Debug Node

Flow mit Debug Node

Gerät zu homee hinzufügen

In homee fügen wir nun ein neues WLAN Gerät hinzu. Dazu wählen wir den Typ Belkin Wemo. Nach einem kurzen Moment sollte das virtuelles Gerät in der Liste auftauchen und sich auswählen lassen.

homee Device Auswahl

homee Device Auswahl

Nach Abschluss der Prozedur steht das Gerät in der Geräteliste zur Verfügung und lässt sich ein- und ausschalten. Nach einem Schaltvorgang erscheinen die in der Konfiguration gesetzten Informationen (Topic und Payload) im Debug Tab. An Stelle des Debug-Nodes lassen sich nun andere Nodes mit dem WeMo Node verknüpfen. Zum Beispiel können in Abhängigkeit des Payloads HTTP Requests ausgeführt werden.

Flow Beispiel

Flow Beispiel

Node-RED ist eine vielseitige und flexible Lösung zur Verbindung von weiteren Smart-Home Geräten. Neben den Standard Nodes gibt es unter anderem Plugins für Harmony Hub, RCSwitch, Hue Lampen und viele mehr. Die Plugins lassen sich am besten über npmjs.com finden.

In einem weiteren Post zeige ich bald wie sich eine Anwesenheitserkennung über Node-RED und die Fritzbox realisieren lässt.

* Wenn Du über diesen Link bei Amazon einkaufst, erhalte ich eine kleine Provision. Damit unterstützt Du mich bei der Pflege meiner OpenSource Projekte. Du zahlst dafür nichts extra.

Das könnte dir auch gefallen