Aktuellen Dash-Button (oder Ariel, etc) von Amazon (JK29LP) mit dem Raspberry Pi nutzen („hacken“)

Amazon hat vor 3 Tagen begonnen in Deutschland Dash Buttons zu verkaufen. Ich habe direkt einen bestellt und probiert, wie man statt Ariel zu bestellen Kommandos auf dem Raspberry Pi auslösen kann. Hier sind die ersten Ergebnisse.
Dash_front_JK29LP
Dash_Back_JK29LP
Im Prinzip sind die Infos im Netz vorhanden. Allerdings gibt es doch einige Fallstricke. Da es mittlerweile zwei Hardware Versionen des Dash Buttons gibt, sind die meisten Anleitungen nicht mit der in Deutschland verkauften Version JK29LP kompatibel. In diesem Beitrag wird der Dash Button so wie in den allermeisten Internet Einträgen nicht ge-„hackt“. Der Button selbst wird also nicht verändert.

Was ist an dem neuen Dash Butteon JK29LP anders?
Zunächst einmal ist eine andere Hardware verbaut, wie dieser Blog Beitrag zeigt.
In Kürze:

  • Der neue Button enthält jetzt auch einen Bluetooth Chip, über den er (zumindest bei Android) konfiguriert wird.
  • Die Batterie ist nicht mehr fest verlötet.
  • Der verwendete Chipsatz ist jetzt von Atmel.

Amazon hat aber auch eine Reihe von Änderungen vorgenommen, die den Einsatz am Pi verändern und zum Teil auch erschweren:
1. Der Dash Button ist ohne Trick nicht mehr deaktivierbar ohne dabei die WLAN Konfiguration zu löschen.
2. Der Button meldet sich im Netz nicht mehr per Address Resolution Protocol (ARP), sondern per UDP Bootstrap Protokoll (bootp) an.

Hier also ein Vorgehen, das klappt:

MAC-Adresse des Dash Buttons herausfinden:
Die meisten Router zeigen im Log an, welche WLAN Geräte sich mit dem Netz verbinden. Wenn man den Dash Button normal per Amazon App einrichtet, so sind beim Abschuss der Einrichtung die letzten Einträge vom Dash Button.
Bei der Fritzbox: System->Ereignisse->WLAN; aber vorher noch „Auch An- und Abmeldungen protokollieren“ anhaken.

Internet Zugriff des Dash Buttons nach Konfiguration sperren:
Wie schon erwähnt beruhen die meisten Infos im Netz auf dem alten Dash Button und einer alten Firmware. Dieser Idee der Hacks ist es, den konfigurierten und im WLAN registrierten Dash Button in der Amazon-App auf „keine Bestellung“ zu setzen. Diesen Eintrag gibt es bei dem neuen Button und der aktuellen App nicht. Entweder ein Button ist für einen Kaufvorgang konfiguriert, oder er muss deaktiviert werden. Wenn man einen Dash Button in der Amazon App deaktiviert und den Button das nächste Mal drückt, so nimmt der Button ein letztes Mal Kontakt mit dem Amazon-Server auf. Der Amazon-Server teilt dem Button dann mit, dass er deaktiviert wurde und der Button löscht die bestehende WLAN Konfiguration. Damit ist der Button nicht mehr im heimischen WLAN registriert und auch nicht mehr nutzbar.
Der Trick: Den Button normal per App aktivierten. Dann in der Router Konfiguration den Internet Zugang des Dash Buttons unterbinden. Bei einer Fritzbox geht dies, in dem man den Button in den Einstellungen für die Kindersicherung auf „gesperrt“ stellt. Der Button kann jetzt noch in das lokale Netzwerk, aber nicht mehr mit Amazon kommunizieren. Der Dash Button behält dann seine WLAN Konfiguration, weil das Löschkommando nicht kommt. Um diese Einstellung vornehmen zu können, braucht man die MAC Adresse des Dash Buttons.
Wenn man die MAC erfolgreich gesperrt hat, leuchtet der Dash Button nach dem Drücken zunächst weiss auf und blinkt dann rot (=Bestellung nicht erfolgreich).

LED Verhalten des Dash-Buttons:
Zur Fehlersuche habe ich hier noch kurz das LED Blink/Leuchverhalten notiert, soweit es sich mir erschlossen hat.
LED leuchtet nach einem Tastendruck
nur rot -> Button ist nicht konfiguriert (oder hat das Deaktivierungskommando bekommen und ist somit nicht mehr konfiguriert).
blau -> Button wurde lange gedrückt und ist im Konfigurationsmodus für die Amazon App
weiss, dann grün -> Button hat erfolgreich eine Bestellung bei Amazon getätigt.
weiss, dann rot -> Button hat sich ins WLAN eingeloggt, konnte aber keine Bestellung bei Amazon auslösen.

Der „Hack“ auf dem Pi:
Die üblichen „Hacks“ beruhen auf dem Verhalten des Dash Buttons. Der Button ist ohne Tastendruck in einem Schalfmodus und nicht im WLAN. Wenn man die Taste drückt, loggt sich der Button im WLAN ein. Diesen Vorgang kann man im Netzwerk erkennen und darauf reagieren. Es finden sich im Netz eine Menge python Scripte, die dies für ARP leisten. Diese Protokolle funktionieren mit dem aktuellen Button nicht mehr, da dieser per bootp arbeitet.
Bevor wir loslegen können, muss man zwei Pakete nachladen; dies geht per:
sudo apt-get install scapy
sudo apt-get install tcpdump

Nach der Installation läuft das folgende Script; einfach als dash.py ablegen. Der Code ist an einigen Beispielen im Netz orientiert und macht den Pi zu einem Netzwerksniffer, der auf das passende Paket wartet.

import datetime
import logging
import urllib2

# Constants
timespan_threshhold = 3

# Globals
lastpress = datetime.datetime(1970,1,1)

logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *


def button_pressed_dash1():
  global lastpress
  thistime = datetime.datetime.now()
  timespan = thistime - lastpress
  if timespan.total_seconds() > timespan_threshhold:
    current_time = datetime.datetime.strftime(thistime, '%Y-%m-%d %H:%M:%S')
    print 'Dash button pressed at ' + current_time
    urllib2.urlopen('http://pi:8083/fhem?cmd.LED=set%20LED%20toggle&room=Haussteuerung')

  lastpress = thistime


def udp_filter(pkt):
  options = pkt[DHCP].options
  for option in options:
    if isinstance(option, tuple):
      if 'requested_addr' in option:
        # we've found the IP address, which means its the second and final UDP request, so we can trigger our action
        mac_to_action[pkt.src]()
        break


mac_to_action = {'ac:63:be:ac:23:1c' : button_pressed_dash1}
mac_id_list = list(mac_to_action.keys())

print "Waiting for a button press..."
sniff(prn=udp_filter, store=0, filter="udp", lfilter=lambda d: d.src in mac_id_list)

if __name__ == "__main__":
  main()

WICHTIG: In dem Script die MAC des eigenen Dash Buttons eintragen und auf KLEINSCHREIBUNG der Buchstaben achten.
Änderung 21.12.2016: Code erweitert, um wiederholte Login Versuche abzufangen. Teilweise gab es mehrere Events aufgrund eines Tastendrucks.

Dann wie folgt starten:
sudo python dash.py
Ein Druck auf den Dash Button sollte jetzt innerhalb von ca. 2 Sekunden erkannt werden. So lange dauert die Registrierung im WLAN.
Dash_works_JK29LP

Beispiel: fhem Server mit dem Dash Button ansteuern
Wenn man das Script um zwei Zeilen ergänzt, kann man zum Beispiel einem fhem Server Kommandos geben.
Bei den Imports ergänzen:

import urllib2

Hinter dem print im Erfolgsfall ergänzen:

urllib2.urlopen('http://127.0.0.1:8083/fhem?cmd=set%20Wohnzimmer_Lampe%20toggle')

Wer etwas anderes auslösen will, kann an dieser Stelle ansetzen.

77 Gedanken zu „Aktuellen Dash-Button (oder Ariel, etc) von Amazon (JK29LP) mit dem Raspberry Pi nutzen („hacken“)

  1. Gunnar R.

    Hi,
    danke für die Aufklärung… hatte auch einige Stunden mit einem neuen Button und den alten Anleitungen verbastelt…
    Bin leider nicht so der Python-Experte: In Python muss man den Quelltext doch durch Einrückungen strukturieren? Mit Copy&Paste aus dem Blog kommen „IndentationError: expected an indented block“-Fehler.
    Kannst Du den Python-Code noch entsprechend formatiert einfügen?
    Das wäre klasse, danke.
    Gunnar

    Antworten
  2. Net

    Hey, danke fürs erstellen einer Anleitung.
    Aber ich bekomm es beim besten willen nicht zum Laufen..
    Hab die Anleitung 1 zu 1 befolgt aber wenn ich das skript starte bekom ich keine rückmeldung beim drücken. Mac Adresse sollte passen, hab die verwendet, die es mir im Router nach dem drücken anzeigt. Hab da auch erfolgreich den Internetzugriff gesperrt.

    Wäre super wenn mir jemand mit dem Problem helfen kann..

    Antworten
    1. ST Beitragsautor

      Hi Net,

      Siehst Du im Routerlog wie der Stick sich im WLAN an und abmeldet?
      Button blinkt erst langsam weiss und dann schnell rot?

      Gruss Stefan

      Antworten
      1. Net

        Ja genau, die mac Adresse taucht auf und verschwindet dann auch wieder, konnte sie auch mit wireshark finden.

        Langsam weiß blingken tut er auch, aber nicht rot am ende..

        Antworten
    2. Tomy

      Ich hatte eben auch das Problem das es nicht funktionieren wollte. Erst als ich die MAC Adresse im Script klein geschrieben habe ( Die Buchstaben ) hat es funktioniert. Eventuell liegt da ja dein Fehler.

      Gruß Tomy

      Antworten
  3. ST

    OK. Was hat Du denn für einen Router und was hast Du konfiguriert? – Hast Du evtl. den WiFi Zugang für die MAC des Buttons gesperrt?
    Der HW Typ des Buttons ist JK29LP?

    Gruss Stefan

    Antworten
  4. Net

    Router ist von Unitimedia TC7200, ist aber mit nem netgear r7000 dd-wrt AP verbunden. Gesperrt war im TC7200, aber auch wenn das deaktiviert war hat es nicht funktioniert. WLAN zugang kann also eigendlich nicht sein, zumal ich auch eine Bestellung zum test durchführen konnte.
    Ja steht so zumindest darauf

    Antworten
    1. Thomasio

      Ich habe auch ein Router von Unitimedia.
      Bestellung gehen auch aber egal was ich mache keine Anleitung geht bei den schei** Router. Dazu wenn man die Mac sperrt, damit sich der Button nicht mehr mit Amazon verbinden kann, sperrt man ihn ganz…
      Egal, lässt man ihn aber normal verbinden und pingt die ip adresse die er nimmt, klappt das aber aufwändig und dauert länger bis er reagiert.

      ABER ICH HABE EINE LÖSUNG

      ich hatte mal ein Switch gebraucht gekauft; einen Dual-Band Wireless Range Extender (F9K1106) mit 2.4 und 5ghz auf je Mbits und halt die lan Anschlüsse das er als switche geht. der war damals in Angebot für nur 20€ auf der offiziellen Seite kostet er $24,99 http://www.belkin.com/us/p/P-F9K1106/ . Ich habe es den Dash anstatt mit meinen Router mit dem switche verbunden und den mal des ganze auf meinen zweiten pi der am switch hängt probier und es ging wunderbar. Da der belkin P-F9K1106 kein billig switch und Dual-Band Wireless Range Extender ist der normal 80€ kostet kann man ihn super einstellen und den dash button das externe Internet verbieten.

      Also für jeden bei den es nicht geht und es daher am Router liegt nutz den belkin P-F9K1106 für ca 25€
      Kann man per lan am Router anschließen oder nur alleine laufen lassen. Und hat den noch einen schönen 600Mbits Dual-Band Wireless Range Extender. Der sogar 3 mal Wlan unterstütz auf 5 ghz und zwei mal auf 2,4 ghz (normal und ein free gast zugang mit Internet seite wo man wie bsp im caffee ein Passwort eingeben muss) . Dan den Pi per lan oder Wireless mit den belkin P-F9K1106 verbinden (mein Belkin hat noch ein usb anschluss für Speicher drucker medien usw. somit kann ich ihn auch über den belkin P-F9K1106 mit strom versorgen) und schon gehts wen man es hier nach der Anleitung macht.

      mfg Thomasio
      bei fragen schreibt mir eine e-mail
      thomasio@projekt-deutschland.com

      Antworten
        1. ST Beitragsautor

          Hallo Tomasio,

          man kann auch einen WLAN Dongle an einen PI anschließen und ein zweites WLAN aufmachen, das nicht nach draußen kommt.

          Gruss Stefan

          Antworten
  5. ST

    Hi Net,

    ich kenne den Router nicht. Dort musst Du auch den Internetzugang sperren (falls es diese Option gibt).
    Jetzt vermute ich mal: Von der Beschreibung her, klingt es so, als ob Du die MAC im Router gesperrt hast. Vermutlich bekommt der Stick dann keine IP zugewiesen und kommt nicht mehr in Dein lokales Netzwerk. Daher dann kein rotes Blinken und keine Erkennung auf dem Pi.
    Bei vielen Routern kann man den Zugang zum lokalen Netzwerk erlauben und den Internetzugang sperren. Diese Variante brauchst Du für den akutellen Dash Button.

    Gruss Stefan

    Antworten
    1. Net

      naja sollte dann ja trotzdem zu dem zeitpunkt funktionieren wenn auch eine bestellung durchgeführt werden konnte. Also kann diese Möglichkeit ausgeschlossen werden.

      Aber trotzdem danke für die Hilfe

      Ich werde den Button mal noch versuchen komplett zurück zu setzen, und neu anmelden evtl. bringt das ja was..

      Antworten
  6. ST

    Wenn es beim einem echten Bestellvorgang nicht geht, hätte ich noch den Gedanken, dass Pi und Dash in unterschiedlichen Subnetzen sitzen? –> Macht der AP ein eigenes Subnetz auf?

    Gruss Stefan

    Antworten
    1. Net

      Puh jetzt komm ich langsam mit meinem Wissen an die Grenze. Aber wenn ich das richtig versteh sollte alles im selben subnetz sein. Pi hat die 192.168.0.12 (bzw pc wo ich gerade teste 192.168.0.20) und der dash button hat die 192.168.0.24. Subnetzmaske ist 255.255.255.0 bedeutet wenn ich das korrekt versteh, alles im selben subnetz?

      Antworten
  7. Hinske

    Hi,

    wo genau kommt das urllib2.urlopen hin?

    Ich habe noch das Problem, dass ich Benutzername und PW in der Url übergeben muss. Klappt das mit urllib?

    Gruß
    Markus

    Antworten
    1. ST Beitragsautor

      Hinter die Zeile 9. Soweit einrücken, wie das davor stehende Print Statement.

      Username und Password per URL geht, wenn das Deine ZielSW erlaubt. Meistens sind das dann Parameter wie zB /?user=rudi&pass=123456

      Gruss Stefan

      Antworten
        1. ST Beitragsautor

          Hi Hinske,

          prima, dass es klappt. Zur Frage: UrlLib/Urllib2 haben unterschiedlichen Syntax. Die Fehlermeldung sagt eigentlich schon sagt, interpretiert Urllib2 den Doppelpunkt als Trennzeichen zum Port. Letztlich muss man den Call halt so aufsetzen, dass der zur Lib passt. Intuitiv hast Du es dann ja hinbekommen.

          Gruss Stefan

          Antworten
  8. Martin

    Hallo,

    das Script ist super und funktioniert mit einem Dash-Button sehr gut.

    Leider bekomme ich es nicht auf die Reihe, mehrere zum Laufen zu bringen. Wenn ich das richtig sehe, müsste so etwas wie:
    mac_to_action = {‚mac1′ : button_pressed_dash1,’mac2‘ : button_pressed_dash2} eigentlich laufen. button_pressed_dash1() und button_pressed_dash2() sind identisch, unterscheiden sich nur bei der print-Mitteilung.

    Das Script wird ausgeführt, startet allerdings sofort mit den beiden print-Mitteilungen. Wenn einer der Taster betätigt wird, bringt scapy einen Reigen an Fehlermeldungen.

    Vielen Dank im Voraus,
    Gruß Martin

    Antworten
    1. ST Beitragsautor

      Bei mir funktioniert:

      mac_to_action = {'df:13:23:d2:2d:22' : button_pressed_dash2 , 'df:13:23:d2:2d:11' : button_pressed_dash1}

      Musst natürlich die zwei Funktionen dash1 und dash2 anlegen und die Einrückungen beachten.

      Gruss Stefan

      Antworten
      1. Stefan

        Hallo Stefan,

        mir bricht es nach dem erfolgreichen start mit 3 dash buttons nach ein paar versuchen ab. 🙁

        Traceback (most recent call last):
        File „dash.py“, line 32, in
        sniff(prn=udp_filter, store=0, filter=“udp“, lfilter=lambda d: d.src in mac_id_list)
        File „/usr/lib/python2.7/dist-packages/scapy/sendrecv.py“, line 586, in sniff
        r = prn(p)
        File „dash.py“, line 20, in udp_filter
        options = pkt[DHCP].options
        File „/usr/lib/python2.7/dist-packages/scapy/packet.py“, line 770, in __getitem__
        raise IndexError(„Layer [%s] not found“ % lname)
        IndexError: Layer [DHCP] not found

        Antworten
  9. Andreas

    Moin Stefan,

    danke für dein Script .. läuft 1A :0)
    Hätte ich doch auch mal früher die Kommentare gelesen … habe gestern den ganzen Abend versucht nen zweiten Button zu integrieren … am Ende hat es auch geklappt … und jetzt sehe ich es steht hier :0D na gut … wieder was gelernt ;0)

    Mal ne andere Frage. Wenn ich den Button drücke kommen jedes Mal drei „Dash Button pressed“ Meldungen mit time. Das bedeutet, da ich auch nen urllib integriert habe, dass der Befehl auch dreimal übergeben wird. Kann man irgendwie erreichen, dass das ganze nur einmal getriggert bzw. übergeben wird ?!

    VG

    Andreas

    Antworten
    1. ST Beitragsautor

      Hallo Andreas,

      Freut mich dass es klappt. Ich bin aber ratlos, warum es ‚zu gut‘ funktioniert. Ich sehe reproduzierbar nur eine Event. Bist Du an der Grenze der WiFi Reichweite, so dass es unvollständige Connects sein könnten?
      Als Lösung könnte man anfangen, dass kein Event von der selben Mac innerhalb von 3 Sekunden kommen können.

      Gruss Stefan

      Antworten
      1. Andreas

        Hallo Stefan,

        hmmm … vielleicht intstalliere ich das ganze nochmal auf nem anderen Rasbi.
        Mal schauen was da dann passiert.

        Kannst du mir noch nen tip geben wie ich das mit den 3 Sekunden lösen könnte ?!

        Danke !

        Andreas

        Antworten
  10. ST

    Hallo Andreas,

    merke Dir den Wert von datetime.datetime.now() in einer Variable und prüfe vor der Ausgabe/dem Url-Call, ob das Delta zwischen dem aktuellen Wert und dem gespeicherten Wert größer als 3 Sekunden ist.

    Gruss Stefan

    Antworten
  11. Olaf

    Hallo,
    vielen Dank für die Anleitung und die Arbeit die drin steckt.
    Ich habe es umgesetzt und es funktioniert, ich schalte damit eine Funksteckdose.

    Ich würde das Script gerne permanent im Hintergrund laufen lassen, dazu habe ich in der crontab folgendes eingefügt:
    @reboot cd /home/pi/ && sudo python dash.py &
    aber leider funktioniert es dann nicht.

    Hat jemand einen Tipp für mich wo mein Denkfehler liegt?

    Danke und Gruß
    Olaf

    Antworten
    1. ST Beitragsautor

      Hallo Olaf,

      Du versuchst über die crontab per sudo einen Prozess mit Root Rechten zu starten. Das ist aus Sicherheitsgründen blockiert. Es gibt diverse Anleitungen, wie man beim Booten einen Prozess mit Root Rechten hochfährt ; zB /etc/init.d

      Gruss Stefan

      Antworten
      1. Keno

        hi,
        habe jetzt diese Varriante gewählt.
        #!/usr/bin/python in das script geschrieben und per
        sudo nano /etc/rc.local den pfad /home/pi/dash.py eingefügt.

        nach dem reboot wird mir wenn ich im Terminal „top“ eingebe auch gezeigt das der prozess dash läuft aber es passiert nichts eim knopfdruck.

        sofern ich das skript über
        sudo python dash.py
        starte funktioniert alles.

        Antworten
        1. ST Beitragsautor

          Hallo Keno,

          wennn das Script zu früh im Bootvorgang gestartet wird, ist das Netzwerk noch nicht voll hochgefahren. Dann scheitert die Initialisierung. Vermutlich hängt es daran.

          Gruss Stefan

          Antworten
          1. Keno

            vielen dank für deine Antwort könnest du mir dafür eine Alternative vorschlagen? bzw etwas Ausführlicher erklären oder verlinken?

  12. Dave

    Hi,
    hast du ne Lösung wie man das ganze umsetzen kann wenn man eine SSL-Verschlüsselte Verbindung und nen User+Pass benötigt?

    Das er das ungültige Zertifikat ignoriert habe ich hiermit hin bekommen:
    import ssl
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE

    urllib2.urlopen(„https://127.0.0.1/“, context=ctx)
    Aber ich scheitere daran das er mittels urllib2 den User und das Passwort übergibt.

    Grüße Dave

    Antworten
    1. ST Beitragsautor

      Hi Stephan,

      ich kann das für meinen Dash Button bestätigen. Der Beginn der Mac wird durch den Hersteller bestimmt, deshalb sollte es auch passen. Es gibt im Netz allerdings auch Berichte über andere MACs; könnte sein, dass das die alte HW Version ist.

      Gruss Stefan

      Antworten
  13. Michi

    Zum Thema MAC…
    Ich verwende 3 Dash Buttons
    2x Ariel 44:65:0d… und ac:63:be….
    1x Nerf ac:63:be:…..

    Also vielleicht hilft Dir das etwas weiter 😉

    Gruss
    Michi

    Antworten
  14. nett_flanders

    Vielen Dank für die wunderbare Anleitung!

    Gäbe es ggf. eine Möglichkeit auf mehrfachen Buttondruck zu reagieren und daraufhin eine andere Aktion als auf einfachen Druck auszuführen?

    Antworten
    1. ST Beitragsautor

      Mit dieser Realisierung nicht. Der Login des Buttons im Netz dauert ca 3 Sekunden. Für einen Doppelklick ist das Gesamtsystem zu träge. Wenn es jemand schafft, den Dash Button wirklich zu hacken und eine andere Firmware aufzuspielen, hast Du eine Chance.

      Gruss Stefan

      Antworten
  15. nett_flanders

    Hallo Stefan,

    vielen Dank für die flotte Antwort.
    Schade, aber man kann bei den Preisen ja ohne Probleme zwei Schalter pro zu schaltendem Gerät verwenden. Ist aus meiner Sicht also kein Beinbruch.

    Gruß
    Stefan

    Antworten
  16. Heiner Bunjes

    Ich habe die mac-Adresse meines Button mit wireshark herausgefunden und auch eine erste Bestellung ausgelöst. Aber der Button taucht nicht in meiner WLN-decice-Liste auf meiner Fritzbox auf und auch nicht im Ereignis-Log.

    Ich kann mir das nicht erklären. Wie kann der Button eine Bestellung auslösen, ohne dass er hinterher in der WLAN-Geräte-Liste steht?

    Antworten
    1. ST Beitragsautor

      Hallo Heiner,

      da habe ich auch keine Erklärung parat. Bei mir erscheint der Button in der WLAN Ereignisliste. Jedenfalls kann der Button keine Bestellung auslösen, wenn er kein WLAN sieht. Aktuelle Firmware auf der FB?

      Gruss Stefan

      Antworten
  17. Heiner Bunjes

    Steht bei Dir der dash button als Device in der Liste der WLAN-Geräte? Ich nehme an, ja; denn nur so kannst Du doch für dies Gerät eine Kindersicherung einrichten; korrekt?

    Ich werde mal kucken, ob bei mir das Pythonscript funktioniert, vielleicht gewinne ich noch neue Erkenntnisse.

    Mein Router (und Modem) ist eine Fritz!Box 7390 mit aktueller Firmware.

    Antworten
  18. Heiner Bunjes

    Hi!

    Dass ich die buttons in der fritz!box nicht gesehen habe liegt daran, dass sie (auf der 7390) nur auftauchen unter „Heimnetz / Heimnetzübersicht / Netzwerkverbindungen“ und unter „Internet / Filter / Kindersicherungen“.

    Sie tauchen z.B. nicht auf unter
    „WLAN / Funknetz“ oder unter „Heimnetz / Heimnetzübersicht / Alle Geräte“.

    Ich hatte an den falschen Stallen nachgesehen. Mea culpa!
    Hier finde ich die Menübezeichnungen der Fritz!Box sehr missverständlich.

    Antworten
  19. Heiner Bunjes

    Ich bin gerade dabei, ein Docker Image zu bauen, dass Dein Script verwendet. Ich melde mich, sobald es funktioniert.

    Eine Variante des Images wird auf dem Raspi laufen.

    Antworten
      1. paloema

        Super, danke für die schnelle Antwort. Heute sollte der Dash eintreffen. Dann kann ich mich am Wo-End dran setzen. Da ich ein absoluter Linux-Laie bin, kurz nachgehakt, um eine URL aufzurufen das Script wie folgt anpassen?

        Zeile 3 ergänzen:
        import urllib2

        Zeile 10 ergänzen:
        urllib2.urlopen(‚irgendeine_webadresse‘)

        Antworten
  20. Heiner Bunjes

    Hallo,

    wie angekündigt hier der Link zu meinem docker container: https://github.com/sejnub/docker-amazon-dash-sniff

    Ich habe folgende Erweiterungen vorgenommen:

    1. Aufruf einer URL mit einem Button-spezifischen Parameter
    2. Ein Filter, der Mehrfacherkennungen herausfiltert. Dies war notwendig weil manche button-Anmeldungen mehrfach erkannt wurden.
    3. Eine Auslagerung von Usernamen und Passwörtern für den URL-Aufruf

    Anmerkung: Der URL-Aufruf ist ein get. Sauberer wäre ein post oder ein put (je nach use case). FHEM möchte aber ein get haben.

    Antworten
    1. paloema

      Hallo Heiner,

      danke dafür. Ich habe auch das Problem, dass Buttons teilweise mehrfach erkannt werden. Allerdings übersteigt deine Docker-Lösung meine Kenntnisse. Hast du einen Hinweis, wie der Threshold auch in das Script von Stefan integriert werden würde?

      Danke vorab!

      Antworten
  21. Pingback: Practice Monitoring using Dash – be-iot

  22. Heiner Bunjes

    Hallo paloema,

    ich habe leider momentan keine Zeit, das Script anzupassen. Wenn Du mal einen scharfen Blick auf mein script https://github.com/sejnub/docker-amazon-dash-sniff/blob/master/dash.py wirfst, wirst Du sehen, dass dort in einer globalen Variable (lastpress) gespeichert wird, wann welcher button das letzte mal erkannt wurde und nur wenn seitdem eine gewisse Zeit vergangen ist, wird die neue Erkennung berücksichtigt.

    Im Prinzip kannst Du mein dash.py nehmen und das rauswerfen, was Du nicht benötigst.

    Sorry, dass ich gerade nicht mehr Zeit habe.

    Antworten
    1. paloema

      Kein Ding, derzeit tut es ohne Dopplungen…keinen Plan warum. Falls es nochmal auftaucht, versuche ich mich an deinem Script! Danke jedenfalls für die Antwort.

      Antworten
  23. karpi

    Mein ADB ist gerade angekommen. Vor der Einrichtung gemäß „Internet Zugriff des Dash Buttons nach Konfiguration sperren“ habe ich aber bereits meine Kindersicherung in der 7490 eingeschaltet und „Emmersen“ schreibt den Button damit nicht in mein Profil. In der FB wird er aber richtig eingerichtet.

    Damit kommt dann ja wohl auch kein „kill“-Kommando zum Löschen aus der FB-WLAN-Liste, oder?

    Ich möchte den Button benutzen, damit meine Gäste das schlummernde Gäste-WLAN selbst einschalten können. Hat schon jemand damit Erfahrungen?

    Antworten
  24. ST Beitragsautor

    Habe das Script oben erweitert, so dass es die Mehrfachevents abfängt. Alle ARP Events innerhalb von 3 Sekunden werden als ein Tastendruck interpretiert. Das geänderte Script seht jetzt oben im Beitrag.

    Gruss Stefan

    Antworten
  25. Pingback: Amazon-Dash-Button "Hack" | Julian's Blog

  26. Uwe

    Bekomme nach start folgende Fehlermeldung :

    Waiting for a button press…
    Traceback (most recent call last):
    File „dashnivea.py“, line 41, in
    sniff(prn=udp_filter, store=0, filter=“udp“, lfilter=lambda d: d.src in mac_id_list)
    File „/usr/local/lib/python2.7/dist-packages/scapy/sendrecv.py“, line 620, in sniff
    r = prn(p)
    File „dashnivea.py“, line 33, in udp_filter
    mac_to_action[pkt.src]()
    File „dashnivea.py“, line 17, in button_pressed_dash1
    thistime = datetime.datetime.now()
    AttributeError: type object ‚datetime.datetime‘ has no attribute ‚datetime‘
    pi@raspberrypi:~ $

    Habe aber keine Ahnung von Python. Weiss jemand rat ?

    Antworten
    1. Matthias

      Ersetze „import datetime“ mit from „datetime import datetime as dt“

      und dann -> Suchen & Ersetzen: „datetime.datetime“ mit „dt“ ersetzen!

      Antworten
  27. Olaf

    @Uwe und Marc

    Bei mir trat das Problem nach dem Update auf von Jessie auf Stretch auf.
    Mattias hat es doch super erklärt:
    Die Zeile ‚import datetime‘ löschen und ersetzen mit:
    ‚ from datetime import datetime as dt‘
    danach alles anpassen, zum Beispiel:
    ‚thistime = datetime.now()‘ mit ‚thistime = dt.now()‘

    Bei mir funktioniert es damit wieder.
    Danke Matthias!

    Antworten
  28. Tobias

    Hallo, erst mal grosses Kompliment und vielen Dank für das Skript.
    Immer wieder habe ich versucht in Node RED den Amazon Dash ans laufen zu bekommen, aber nix hat geklappt. Dann las ich hier erstmalig von der neuen Version mit den geänderten Innereien.

    Das Skript ist wirklich die Lösung.
    Habe auch das Problem mit datetime gehabt und dank dem Hinweis mit dt lösen können.
    Bei mir ist nur das Problem, dass das Skript nur den 1. Drücker erkennt und dann aber nix mehr.

    Habt Ihr vielleicht eine Idee?
    Wäre dafür sehr dankbar!

    Viele Grüße

    Tobias

    Antworten
  29. Tobias

    Hallo noch ein Nachtrag:

    Beim 2.Druck kommt nicht nur nichts, sondern das Skript bricht auch ab:

    Dash button pressed at 2018-02-26 12:15:01
    Traceback (most recent call last):
    File „dash.py“, line 43, in
    sniff(prn=udp_filter, store=0, filter=“udp“, lfilter=lambda d: d.src in mac_id_list)
    File „/usr/lib/python2.7/dist-packages/scapy/sendrecv.py“, line 620, in sniff
    r = prn(p)
    File „dash.py“, line 35, in udp_filter
    mac_to_action[pkt.src]()
    File „dash.py“, line 22, in button_pressed_dash1
    urllib2.urlopen(‚http://192.168.2.20:1880/dash?dash=1‘)
    File „/usr/lib/python2.7/urllib2.py“, line 154, in urlopen
    return opener.open(url, data, timeout)
    File „/usr/lib/python2.7/urllib2.py“, line 429, in open
    response = self._open(req, data)
    File „/usr/lib/python2.7/urllib2.py“, line 447, in _open
    ‚_open‘, req)
    File „/usr/lib/python2.7/urllib2.py“, line 407, in _call_chain
    result = func(*args)
    File „/usr/lib/python2.7/urllib2.py“, line 1228, in http_open
    return self.do_open(httplib.HTTPConnection, req)
    File „/usr/lib/python2.7/urllib2.py“, line 1201, in do_open
    r = h.getresponse(buffering=True)
    File „/usr/lib/python2.7/httplib.py“, line 1121, in getresponse
    response.begin()
    File „/usr/lib/python2.7/httplib.py“, line 438, in begin
    version, status, reason = self._read_status()
    File „/usr/lib/python2.7/httplib.py“, line 402, in _read_status
    raise BadStatusLine(line)
    httplib.BadStatusLine: “

    Antworten
  30. Tobias

    Mein Problem ist offenbar nur mein:
    urllib2.urlopen(‚http://192.168.2.20:1880/dash?dash=1‘) mit dem ich nur einen einfachen Weg gesucht in node red einen Input zu generieren. Das geht bestimmt irgendwie eleganter.
    Vielleicht kann mir jemand helfen wie?

    Besten Dank

    Antworten
  31. Henning

    Hallo Stefan,
    ist es möglich in diesem Script zwei DashButtons für zwei unterschiedliche URL’s zu hinterlegen?

    DashButton A ruft URL A auf
    DashButton B ruft URL B auf

    Ich bin nicht so viel mit Python unterwegs aber ich würde vermuten, dass die Funktionen def button_pressed_dash1() sowie mac_to_action dupliziert werden müssten, so dass der zweite DashButton erfasst und korrekt behandelt wird.
    Allerdings komme ich gedanklich nicht weiter, wie man dann das sniff korrekt bastelt.

    Oder geht das vielleicht alles gar nicht in einem Script und man muss das Script einfach duplizieren?

    Kannst du bitte weiterhelfen?

    Antworten
    1. ST Beitragsautor

      Hallo Henning,

      schua mla im Code nach mac_to_action. Da wird ein Dictionary angelegt; die Liste kannst Du mit einem Komma als Separator erweitern und eine weitere MAC und dahinter deren Funktionsaufruf hinterlegen. Dann legst Du z.B. eine Funktion button_pressed_dash2 an und legst los.

      Gruss Stefan

      Antworten
      1. Henning

        Vielen Dank!
        Genau so hat es funktioniert. Wurde auch schon etwas weiter oben in den Kommentaren erwähnt, habe ich nur leider übersehen.

        Ich poste es hier einfach nochmal – auch für andere:

        Die Funktion def button_pressed_dash1() muss dupliziert werden, z.B. zu def button_pressed_dash2()
        (Einrückung beachten)

        Dann die mac_to_action Liste erweitern:
        mac_to_action = {’18:74:2e:d2:14:8e‘ : button_pressed_dash1 , ’68:37:e9:32:07:b7′ : button_pressed_dash2}
        (die MAC Adressen müssen immer klein geschrieben sein, sonst funktioniert das nicht)

        @Stefan vielen Dank, dass du dieses tolle Script der Welt zur Verfügung gestellt hast. Viele andere Scripte die man findet, funktionieren entweder nicht richtig, lassen sich nicht erweitern oder sind so schlecht geschrieben, dass keiner durchsteigt. Deine Lösung ist wirklich sehr elegant und resourcenschonend. DANKE!

        Antworten
  32. Torsten

    Hallo zusammen,
    ich musste meinen Raspi neu aufsetzen, und habe das Script vom Alten übernommen…aber irgendwie bekomme ich immer diese Fehlermeldung, die es vorher nicht gab…die Tips, die ihr hier reingeschrieben habt, haben leider nichts gebracht in hinsicht auf „datetime“ in Zeile 17. Und der Rest ist mir leider auch ein Rätsel. Hat vielleicht jemand ne Idee?
    Gruß
    Torsten

    Traceback (most recent call last):
    File „dash.py“, line 41, in
    sniff(prn=udp_filter, store=0, filter=“udp“, lfilter=lambda d: d.src in mac_id_list)
    File „/usr/lib/python2.7/dist-packages/scapy/sendrecv.py“, line 620, in sniff
    r = prn(p)
    File „dash.py“, line 33, in udp_filter
    mac_to_action[pkt.src]()
    File „dash.py“, line 17, in button_pressed_dash1
    thistime = datetime.datetime.now()
    AttributeError: type object ‚datetime.datetime‘ has no attribute ‚datetime‘

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert