Amazon Dash Buttons mit Homeassistant nutzen

Amazon Dash Buttons mit Homeassistant nutzen

[UPDATE 2: Dasher und Long-Lived Access Tokens]

Seit der Homeassistantversion 0.82 nutze ich Dasher komplett ohne die Legacy API und verwende stattdessen die zukunftssichere Variante mittels Long-Lived Access Tokens. In der Konfigurationsdateil config.yaml kann also der in Update 1 beschriebene Legacy API eintrag wieder gelöscht werden.

homeassistant:
auth_providers:
- type: homeassistant

Zuerst muss ein Long-Lived Access Token generiert werden. Dazu im Browser das Nutzerprofil in Homeassistant aufrufen und die Sidebar ausklappen. Nun auf das runde Accountlogo klicken und ganz nach unten scrollen. Es muss ein Name für den Token vergeben werden, z.B. Dasher. Anschließend wird der generierte Token eingeblendet. Dieser muss unbedingt notiert werden, da später keine Möglichkeit besteht ihn erneut aufzurufen.
Auf Seiten Dashers muss nun noch die Konfigurationsdatei config.json angepasst und die jeweiligen Header der Requests angepasst werden. Der Eintrag APITOKEN muss selbstverständlich durch den neugenerierten Token ersetzt werden:

"buttons":[
{
"name": "Play-Doh Button",
"address": "XX:XX:XX:XX:XX:XX",
"url": "http://localhost:8123/api/services/script/turn_on",
"headers": {"Authorization": "Bearer APITOKEN", "content-type": "application/json"},
"method": "POST",
"json": true,
"body": {"entity_id": "script.mein_script"}
}
]}

Dasher muss anschließend neu gestartet werden, damit die neue config.yaml angewandt wird:

sudo systemctl restart dasher.service

Mit diesem Setup können die Dashbuttons auch zukünftig mit Homeassistant genutzt werden, auch dann wenn die Legacy API in naher Zukunft eingestellt wird.


[UPDATE 1: Dasher und die Homeassistant Legacy API]

Homeassistant setzt seit Version 0.77 zwingend eine Authentifizierung voraus. Damit diese Anleitung nach wie vor funktioniert, muss in der config.yaml der legacy_api_password Eintrag gesetzt werden:

homeassistant:
auth_providers:
- type: homeassistant
- type: legacy_api_password

Jeder Request in Dashers Konfigurationsdatei config.yaml muss nun um einen Headereintrag ergänzt werden: „headers“: {„x-ha-access“: „password“}. Der Eintrag „password“ muss durch das in Homeassistant verwendete Passwort ersetzt werden. Die Beispiele weiter unten im Text wurden entsprechend angepasst.

Auf längere Sicht wird Homeassistant ein tokenbasiertes Verfahren verwenden. Inwiefern sich dieses mit Dasher umsetzen lässt, ist z.Zt. noch nicht absehbar.


Hier beginnt der ursprüngliche Originalpost:

Amazons Dash Buttons sind preiswerte Geräte des ausufernden Kapitalismus, gedacht um auf einfachem Wege Güter des alltäglichen Gebrauchs auf simple Weise zu erwerben. Sie können mit einem einfachen Knopfdruck eine Verbindung zum lokalen W-Lan herstellen und Einkäufe tätigen. Die Fähigkeit sich selber ins lokale Netzwerk einzubuchen, kann aber auch auf einfache und zweckentfremdende Weise genutzt werden, um Aktionen in Homeassistant zu starten. Zu Zeiten von Amazons Primeday können die Buttons für 2€ statt normalerweise 5€ erworben werden. Als Obolus erfolgt obendrein noch  eine Gutschrift von 3€ für jeden bei Amazon aktivierten Button. Ein Einkauf muss dabei nicht erfolgen. Amazon schenkt einem jeden Käufer quasi einen post-kapitalistischen W-Lan Schalter mit 1€ Gewinn. Dieses Angebot sollte genutzt werden.

Im Folgenden wird erläutert, wie mittels einer einfachen Node-Applikation namens Dasher der Knopfdruck des Buttons als trigger fungieren kann. Diese Anleitung gilt explicit für einen Raspberry Pi 3 mit Raspian, aber auch für alle gängigen UNIX Systeme.

Node installieren

Im ersten Schritt muss Node 8 installiert werden. Node 10 machte auf meine Raspberry Pi 3 Probleme, da es Konflikte mit abhängigen Paketen gab. Für eine Installation muss folgendes im Terminal ausgeführt werden:

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

 

Dashbutton einrichten

Der Dashbutton muss über die Amazon App eingerichtet werden. Er stellt anschließend eine W-Lan-Verbindung her und fragt im letzten Einrichtungsschritt nach einem Produkt, was bei Knopfdruck bestellt werden soll. Der letzten Schritt muss einfach abgebrochen werden.

Dasher installieren

Auch wenn Dasher als nicht länger gepflegtes Programm geführt wird, verrichtet es bis heute seit über einem Jahr gute Dienste und erfüllt seinen Zweck. Zuerst müssen die notwendigen Abhängigkeiten installiert werden:

sudo apt-get install libpcap-dev npm

Anschließend wird das Dasher-Repository auf den Pi heruntergeladen. Dazu musss in ein entsprechendes Verzeichnis im Dateisystem navigiert werden, bspw. das Homeverzeichnis:

cd ~
git clone https://github.com/maddox/dasher.git
cd dasher
npm -g install

 

MAC-Adresse des Dashbuttons herausfinden

Wer eine Fritzbox als Router verwendet, kann einen einfach Trick nutzen. Dazu in das Webinterface der Fritzbox einloggen und unter dem Menüpunkt System > Push-Service den Haken bei Änderungsnotiz. Ist im FritzOs eine Emailadresse hinterlegt, schickt die Fritzbox nach erfolgreicher Aktivierung des Dashbuttons eine Email mit der zugehörigen ḾAC-Adresse.

Ein zweiter Weg ist ein Tool zu nutzen, das Dasher beiliegt. Dazu ins Dasher-Verzeichnis wechseln und folgendes ausführen. Anschließend den Dashbutton drücken und warten bis das Gerät angezeigt wird:

cd dasher
sudo script/find_button

Die MAC-Adresse muss notiert werden, da Sie im nächsten Schritt benötigt wird.

Dasher konfigurieren

Dasher bringt eine Beispielkonfiguration mit, die den eigenen Wünschen angepasst werden kann. Im Dasher-Verzeichnis muss man folgendes eingeben:

cd config
cp config.example.json config.json

Anschließend wird die neu erstellte Datei bearbeitet:

nano config.json

Anbei eine Beispielkonfiguration für 2 Dashbuttons, die ein Skript von Homeassistant ausführen lässt und ein Licht an- und ausschaltet (toggle). Dabei muss die MAC-Adresse (XX:XX:XX:XX:XX:XX), der Name des Skripts/der Leuchte und die URL angepasst werden. Dasher läuft in meinem Fall ebenfalls auf dem Pi, daher kann auf localhost verwiesen werden. Wenn ein API-Passwort in Homeassistant gesetzt wurde muss zusätzlich der Eintrag „headers“: {„x-ha-access“: „password“} gesetzt und angepasst werden, wie im Nerf Button verdeutlicht:

"buttons":[
{
"name": "Play-Doh Button",
"address": "XX:XX:XX:XX:XX:XX",
"url": "http://localhost:8123/api/services/script/turn_on",
"method": "POST",
"headers": {"x-ha-access": "password"},
"json": true,
"body": {"entity_id": "script.mein_script"}
},
{
"name": "Nerf Button",
"address": "XX:XX:XX:XX:XX:XX",
"url": "http://localhost:8123/api/services/light/toggle",
"method": "POST",
"headers": {"x-ha-access": "password"},
"json": true,
"body": {"entity_id": "light.meine_lampe"}
}
]}

Mit STRG+O speichert der Editor Nano die Änderungen.

Systemd-Skript für Dasher erstellen

Es muss ein Initskript angelegt werden:

sudo nano /etc/systemd/system/dasher.service

Anschließend folgendes kopieren und einfügen und den Pfad zum Dasher-Verzeichnis anpassen:

[Unit]
Description=Dasher
After=network.target

[Service]
Type=simple
#user with access to dasher files
User=root
WorkingDirectory=/home/pi/dasher
#use command "which npm" to determine correct location of NPM
ExecStart=/usr/local/bin/npm run start

[Install]
WantedBy=multi-user.target

Erneut müssen die Eingaben mit STRG+O in die Datei geschrieben werden. Das neu erstellte Initskript muss nun noch aktiviert werden mit:

sudo systemctl --system daemon-reload
sudo systemctl enable dasher
sudo systemctl start dasher

 

Dasher-Logs einsehen

Wenn alle vorangegangenen Schritte durchlaufen sind, kann ein Blick in die Logs von Dasher geworfen werden. Hier tauchen Fehlermeldungen und die erfolgreiche Erkennung eines Drucks auf den Dashbutton auf:

journalctl -f -u dasher.service