Amazon DASH BUTTON schaltet per URL-Befehl

Euer Thema passt nirgendwo anders rein? Dann gehört es hier hin!

Amazon DASH BUTTON schaltet per URL-Befehl

Beitragvon smoker » Di 25. Jul 2017, 20:47

Hallo @all,

nachdem nun sowohl SIRI als auch ALEXA meine angelegten Devices per Sprache schalten können,
wollte ich was neues ausprobieren und hab mir einen Amazon Dash Button als Schalter zugelegt.

Allerdings erfolgt bei mir KEINE Bestellung in Amazon, sondern der Wifi-Button wird als billiger Schalter genutzt. Wo bekommt man schon für 4,99 EUR und im Sonderfall sogar für 1,99 EUR einen zuverlässigen Wifi-Schalter? :shock:

Ich habe das ganze wieder auf meinem Raspberry Pi umgesetzt (parallel zu HomeBridge und HA-Bridge) und es ist in ca. 20 Min. umgesetzt. Voraussetzung ist ein laufender RasPi mit Wifi und SSH-Zugriff.
Es können damit alle Devices unter FB.Switch, aber natürlich auch beliebig andere Befehle per URL abgesetzt werden.

Man kann den Button z.B. als Lichtschalter, zum Einschalten des Multimediasystems oder als Türklingel verwenden. Den Ideen sind keine Grenzen gesetzt :D

Wenn hier Interesse besteht erstelle ich gern eine Kurzanleitung, wie ich es umgesetzt habe.


Grüße
smoker
smoker
 
Beiträge: 60
Registriert: Mo 22. Apr 2013, 16:16

Re: Amazon DASH BUTTON schaltet per URL-Befehl

Beitragvon mrberni » So 5. Nov 2017, 21:04

Hi,

das klingt in der Tat interessant. Ich könnte an manchen Stellen einen "echten" Schalter gut gebrauchen. Wie hast das denn gelöst?

Gruß
Heute Morgen gab es Kaffee mit Red Bull anstatt Wasser. Nach 10 Minuten auf der Autobahn fiel mir auf, dass ich mein Auto vergessen habe… :shock:

Meine WebApp-Mod: FB.Switch
MiLight-WiFi-Bridge auf einem ESP8266
Benutzeravatar
mrberni
 
Beiträge: 214
Registriert: Fr 5. Jun 2015, 12:42

Re: Amazon DASH BUTTON schaltet per URL-Befehl

Beitragvon smoker » Mo 6. Nov 2017, 19:18

Ich setze jetzt einen fertigen vorkonfigurierten Raspberry Pi mit WLAN und SSH voraus.
Die Beschreibung ist etwas umfangreicher und es sind ALLE Schritte erklärt -> ist dir wahrscheinlich alles bekannt :-)


HARDWARE:
Dash Button NEU bzw. noch nicht mit Artikel verknüpft in Amazon
Raspberry Pi (egal ob 2, 3 oder zero w) hauptsache WLAN „onboard“

SOFTWARE:
scapy (sniffer)
Node.JS
python (normalerweise mit im BS)
eventuell wird noch pathlib benötigt (wegen Pfandangabe in trigger.py)


1. Anlegen des Dash Button:
Entsprechend der Anweisung(Beipackzettel) den Button auf der Amazon-HP als Gerät aktiviern/anlegen (ACHTUNG: keine Artikelverknüpfung durchführen -> hier den Vorgang beenden).
Dann im eigenen Netzwerk schauen, welche MAC-Adresse der Button hat (z.B. mit LanScan unter macOS oder einem ähnlichen Programm), indem man ihn drückt bis die kleine LED blinkt.
Alternativ: Im Script „trigger.py“ beim Befehl #print (pkt[Ether].src) die # weglassen, dann siehst du die MAC-Adresse des Button als Ausgabe auf den Konsole.
ACHTUNG: die MAC wird dann in KLEINBUCHSTABEN eingetragen.


2. Installation Sniffer scapy:
Scapy ist ein Python-Tool mit dem der Netzwerktraffic analysiert werden kann, sowie sich Pakete gezielte manipulieren lassen. Ich nutze scapy, um den WLAN-Verkehr zu überwachen und die DHCP-Requests abzufangen. Das heißt, wenn ein DHCP – Request von der MAC Adresse des Dash-Button aufgezeichnet wird, ist das der Trigger, mit dem nun beliebige Aktionen ausgelöst werden können.

    sudo apt-get install -y scapy


3. Installation Node.JS (falls vorhanden -> zu Punkt 4. gehen)
Ich nutze einen Raspberry Pi Zero für den Aufbau. Das ist wichtig zu wissen, da wir jetzt einen Node.js Server installieren. Der Raspberry Pi Zero verwendet eine ARMv6 CPU-Architektur und benötigt deshalb eine andere Version als z.B. der Raspberry Pi 3 (ARMv8). In der Wikipedia-Übersicht erkennt man, welcher Raspberry Pi welche CPU-Architektur verwendet und unter Link findet man jeweils die aktuelle Node.js Verison. Was macht Node.js? Node.js ist ein Webserver, der serverseitig JavaScript ausführt und eignet sich besonders für eine Client/Server Kommunikation.
Wir laden also das Node.js Paket herunter, entpacken es und kopieren es nach /usr/local



4. Anlegen der „trigger.py“ unter /home/pi/ (ACHTUNG: hier alle Einrückungen exakt so übernehmen)
Dieses python script lauscht auf den WLAN-Netzwerkverkehr, überwacht die DHCP Requests und prüft, ob die MAC Adresse vom Dash Button stammt. Wenn das Script feststellt, dass ein DHCP-Request von einem Dash Button stammt, löst es eine Funktion aus oder startet ein Programm - oder was immer definiert wird. Wir rufen damit eine URL in FB.Switch auf (z.B. eine Steckdose). Da wir nicht wissen in welchem Zustand sich der Aktor befindet (wurde Button schon mal gedrückt oder nicht??) behelfen wir uns mit „Krücke“:

    -> schalte ein und lege eine Datei („dashbutton“) im aktuellen Ordner an
    (wenn die Datei da ist, weißt du, dass du da mal eingeschaltet hast - also so eine Art Statusdatei)
    -> drücke den Button nochmal – existiert die Datei?
    -> Dann schalte aus und lösche die Datei.

Code: Alles auswählen
from scapy.all import *
import sys, os
import urllib
from pathlib import Path
my_file = Path("./dashbutton")

def arp_display(pkt):
    if pkt.haslayer(DHCP):
        if pkt[Ether].src == "ac:f5:xx:xx:xx:xx":  #die MAC Adresse des Button!
            #print (pkt[Ether].src)
            if my_file.exists():
                os.system('rm ./dashbutton‘)
                return urllib.urlopen('http://homer:simpson@192.168.178.1/connair/index.php?action=off&type=device&id=5‚)
            else:
                os.system('touch ./dashbutton‘)
                return urllib.urlopen('http://homer:simpson@192.168.178.1/connair/index.php?action=off&type=device&id=5‘)

print sniff(prn=arp_display, store=0,count=0)

#Beispiel:
"http://homer:simpson@192.169.178.1/web/connair/index.php?action=off&type=device&id=5"


user = homer
Passwort = simpson
IP des Gerätes auf dem FB.Switch läuft = 192.168.178.1
Pfad zu FB.Switch = /connair/
ID des gewünschten devices = 5


5. Autostart
Damit das „trigger.py“ script ausgeführt wird, wenn der Raspberry Pi bootet, lasse ich es über einen Eintrag in der Crontab starten:

sudo cronbtab -e

Am Ende der Datei folgende Zeile einfügen:

@reboot sudo python /home/pi/trigger.py

Soweit sollte das nun Funktionieren.
Viel Spaß :-)
smoker
 
Beiträge: 60
Registriert: Mo 22. Apr 2013, 16:16

Re: Amazon DASH BUTTON schaltet per URL-Befehl

Beitragvon mrberni » Mo 6. Nov 2017, 20:37

Ah OK das ist die überall verwendete Variante mit dem ARP-Sniffing. :)
Wäre schön wenn man auch die LED beeinflussen könnten und die Button-Events (SINGLE, DOUBLE, LONG) abfragen könnte.
Leider ist der Chip locked und der entprechende Pin UNTER der CPU auf Masse gelegt. :(
Weil so ne eigene Firmware wäre schon cool.

Hier gibts auch ein gutes Projekt zu dem Thema: https://github.com/maddox/dasher
Leider ist die Latenz wohl doch recht hoch und man kann auch nicht sofort wieder drücken was den Nutzen doch arg einschränkt...

Aber der Button an sich ist schon ne geile Hardware für die paar Euros. Nur leider unterbindet Amazon das spielen damit. :D

Gruß
Heute Morgen gab es Kaffee mit Red Bull anstatt Wasser. Nach 10 Minuten auf der Autobahn fiel mir auf, dass ich mein Auto vergessen habe… :shock:

Meine WebApp-Mod: FB.Switch
MiLight-WiFi-Bridge auf einem ESP8266
Benutzeravatar
mrberni
 
Beiträge: 214
Registriert: Fr 5. Jun 2015, 12:42


Zurück zu Allgemeine Diskussion

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast