FHEM Geräte mit Amazon Dash Button schalten/steuern - raspberry pi home automation

In diesem Artikel haben ich erklärt, wie du IFTTT Aktionen mit dem Amazon Dash Button auslösen kannst. Durch abändern einer Zeile kannst du jedes beliebige FHEM Geräte schalten.
Wie das funktioniert? Durch aufrufen einer URL (HTTP Post Request), kann man FHEM sagen das es etwas machen soll. So kannst du Lichter ein/aus schalten, Rollläden öffnen/schließen, Funksteckdosen ein/aus schalten und vieles mehr.
Der Dash Button eignet sich nicht für alle Anwendungsfälle, da der Button eine Verzögerung von ca. 5-6 Sekunden hat, bis das FHEM Gerät geschalten wird.
Was wird benötigt:
- Raspberry Pi oder Debian/Ubuntu Linux Rechner
- Amazon Dash Button
- laufendes FHEM
Hier ein Beispielvideo, wie mit einem Amazon Dash Button und FHEM eine Phillips Hue Lampe einschaltet. Vielen Dank an Hagen für das Video.
Inhalt
Variante 1: FHEM Modul dash_dhcp
- funktioniert ohne zusätzliche Software
- FHEM Server kann per LAN-Kabel mit dem Netzwerk verbunden sein
- es können mehrere Amazon Dash Buttons eingebunden werden
Aktualisiere dein FHEM, dass es auf dem neusten Stand ist und das Modul dash_dhcp installiert ist. Hier eine kurze Anleitung wie du ein Update Button in die Seitenleiste der FHEM Web-Oberfläche einbindest.
Finde die MAC Adresse deines Amazon Dash Button heraus. Schau dazu in deinen Router. Ich habe einen Fritzbox. Dort sind alles WIFI Geräte unter WLAN -> Funknetz aufgelistet. Für Mac gibt es das kostenlose Programm LanScan.
Öffne die FHEM Konfigurationsdatei fhem.cfg und füge folgenden Code hinzu. Ersetze die MAC Adresse hinter allowed mit der deines Dash Button. Du kannst mehrere MAC Adressen mit einem
,getrennt hintereinander schreiben. Die MAC Adresse sollte in Kleinbuchstaben geschrieben werden.define DashButton dash_dhcp attr DashButton allowed ac:66:be:e3:fb:fe attr DashButton port 6767 attr DashButton room dashbutton define n_DashButton1 notify DashButton:ac-66-be-e3-fb-fe..short IF ([DeinFhemGeraet] eq "on") (set DeinFhemGeraet off) ELSE (set DeinFhemGeraet on)Ersetze im
notifyBefehlDeinFhemGeraetmit dem Namen deines FHEM Gerätes was du an/aus schalten möchtest und achte darauf das hier die MAC Adresse mit Bindestrichen geschrieben wird. Speichern nicht vergessen!Mehrere Dash Button kannst du mit einem Komma trennen.
attr DashButton allowed ac:66:be:e3:fb:fe,ac:66:be:e3:fa:31Du musst noch die Daten vom Port 67 auf den Port 6767 weiterleiten. Die DHCP Anfragen kommen über den Port 67 rein und auf diesen Port hat nur ROOT Zugriffsrechte. FHEM wird standardmäßig nicht mit ROOT Rechten gestartet.
Ist dein FHEM Server über eine WLAN Stick mit dem Netzwerk verbunden, dann gibt folgenden Befehl in den Terminal ein.
sudo iptables -I PREROUTING -t nat -i wlan0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767Falls der FHEM Server über ein Netzwerkkabel verbunden ist, verwende folgenden Befehl.
sudo iptables -I PREROUTING -t nat -i eth0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767Jetzt solltest du dein FHEM Gerät mit dem Amazon Dash Button ein und ausschalten können. Um zu Prüfen ob der Dash Button von FHEM erkannt wird, kannst du in der FHEM Weboberfläche links auf Event monitor klicken. Nach dem drücken des Dash Button, sollte dash_dhcp DashButton ac-66-be-e3-fb-fe: short erscheinen.

Die Umleitung der Ports mittels iptables muss nach einem Neustart neu eingerichtet werden.
Installieren das Programm iptables-persistent, damit die Portumleitung nach einem Neustart automatisch geladen wird.
sudo apt-get update && sudo apt-get install -y iptables-persistentWährend der Installation von iptables-persistent werden ein paar Einstellungen abgefragt. Bestätige alle mit JA.
Jetzt kannst du die Portumleitung für den Dash Button in die rules.v4 Datei schreiben.
sudo nano /etc/iptables/rules.v4Füge die Umleitung vor dem letzten
COMMITein. (Netzwerkkabel)-I PREROUTING -t nat -i eth0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767(WIFI Stick)
-I PREROUTING -t nat -i wlan0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767Beende den Nano Editor mit ctrl+x und bestätige das Speichern.
Nach einem Neustart
sudo rebootwird die Datei rules.v4 automatisch geladen und die Portumleitung sollte funktionieren.ALTERNATIVE Falls die Weiterleitung über die rules.v4 Datei nicht funktioniert, hier eine alternative Variante. Öffne die /etc/rc.local Datei. Diese wird bei jedem Neustart ausgeführt.
sudo nano /etc/rc.localund füge den Befehl für die Weiterleitung vor
exit 0ein. (Netzwerkkabel)sudo iptables -I PREROUTING -t nat -i eth0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767(WIFI Stick)
sudo iptables -I PREROUTING -t nat -i wlan0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767
Variante 2: mit NodeJS und Dasher
- FHEM Server kann per LAN-Kabel mit dem Netzwerk verbunden sein
- es können mehrere Amazon Dash Buttons eingebunden werden
- flexibel da per HTTP GET und POST Request andere Service wie Zapier oder IFTTT “angepingt” werden können.- zusätzliche Software erforderlich
Als erstes werden die Paketlisten neu eingelesen und installieren die benötigten Programme git & libpcap-dev.
sudo apt-get update && sudo apt-get install libpcap-devDu benötigst des weiteren die aktuelle Version von Node.js (v6.5.0). Ausführliche Anleitung Node.js Quelle zu deinen Paketlisten hinzufügen.
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -Jetzt kannst du Node.js installieren.
sudo apt-get install -y nodejsAls nächstes kannst du das Node.js Programm “Dasher” herunterladen und installieren. Navigiere mit
cd ~/in dein Home-Verzeichnis und kopiere Dasher von Github.git clone https://github.com/maddox/dasher.gitNavigiere in das Dasher Verzeichnis
cd dasherJetzt müssen noch die von Dasher benötigten Programme/Dependencies installiert werden.
npm installDasher benötigt die MAC Address von deinem Dash Button. Diese kannst du einfach herausfinden. Log dich in dein Router ein und schau unter verbundene Geräte. Du kannst auch das mitgelieferte Programm “find_button” verwenden.
script/find_button
Drück nach dem Start von “find_button” den Dash Button. Es sollte dir die MAC-Adresse angezeigt werden. Kopiere dir die MAC-Adresse und beende das Programm mit ctrl+cam Mac, oderstrg+cbei Windows.Jetzt musst du nur noch die URL in der Dasher config/config.json Datei nach deinen Wünschen anpassen.
nano config/config.json{"buttons":[ { "name": "Dash1", "address": "ac:61:b3:e1:fa:fe", "url": "http://127.0.0.1:8083/fhem?cmd=set%20DashButton1%20toggle", "method": "POST", "json": true, "body": {"value1": "any value", "value2": "another value"} } ]}Die IP
127.0.0.1zeigt immer auf den Lokalen Rechner (also ihn selbst). Alternativ kannst du auchhttp://localhost:8083/fhem?cmd=set%20DashButton1%20toggleschreiben.Starte Dasher und drück den Knopf um zu testen ob alles funktioniert. Wenn alles funktioniert, sollte im Terminal „Dash1 pressed“ stehen. Dasher und dein Dash Button funktionieren. Jetzt kannst du FHEM konfigurieren. Mit ctrl+c kannst du das Programm beenden.
sudo npm run startFHEM für den Dash Button konfigurieren
Öffne die FHEM Konfigurationsdatei fhem.cfg und füge folgenden Code hinein. Definiere in FHEM einen Dummy für den Dash Button. Hier eine gute Einsteigerhilfe.
define DashButton1 dummy attr DashButton1 webCmd toggleErstelle ein
notifyder dein FHEM Gerät ein/aus schaltet. ErsetzeDeinFhemGeraetdurch den Namen deines FHEM Gerätes. Speicher die cfg Datei. Falls du Dasher geschlossen hast, starte es mitsudo npm run startund drück den Dash Button.define n_DashButton1 notify DashButton1.* IF ([DeinFhemGeraet] eq "on") (set DeinFhemGeraet off) ELSE (set DeinFhemGeraet on)Erklärung: Der Dummy DashButton1 wird define n_DashButton1[Name des Notify] notify[der Befehl] DashButton1.*[wenn eine Änderung des Dummy Reading, dann] IF ([DeinFhemGeraet] eq “on”) [überprüfe ob Reading von DeinFhemGeraet gleich on ist, dann] (set DeinFhemGeraet off) [setze DeinFhemGeraet Reading auf off] ELSE (set DeinFhemGeraet on) [andernfalls setze DeinFhemGeraet Reading auf on]
Um den Dash Button als Ausschalter für mehrere FHEM Geräte zu konfigurieren, verwende diese Konfiguration. Ersetze wieder
DeinFhemGeraet1undDeinFhemGeraet1mit dem FHEM Gerätenamen. Du kannst so viele Geräte hintereinander schreiben. Sie müssen nur immer mit;;getrennt werden.define n_DashButton1 notify DashButton1.* set DeinFhemGeraet1 off;; set DeinFhemGeraet1 offDasher Autostart einrichten
Nach jedem Neustart musst du das Dasher Programm von Hand starten. Richte ein Init Script für Dasher ein, damit Dasher als Service im Hintergrund läuft und bei einem Neustart gestartet wird. Anleitung
Hier sieht man ungefähr wie die Reaktionszeit ist.
Auf blog.moneybag.de gibt es eine andere Variante die nicht mit dem ARP Request funktioniert, sondern mit LAN-PING.
