Amazon Dash Button

Begonnen von gloob, 31 August 2016, 08:20:07

Vorheriges Thema - Nächstes Thema

justme1968

wenn dein fhem als root läuft brauchst du keine iptables regel und du musst das port attribut nicht setzen.

sind die dash buttons im gleichen netz wie dein fhem rechner?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

PsychoD

#271
Ja, beide im gleichen Subnetz. Der RPI auf dem FHEM läuft hängt allerdings per Kabel am Router, aber ich denke das sollte keinen Unterschied machen.

Die Buttons scheinen zu funktionieren, ich bekomme mit der Kommandozeile einen Ping zurück.

//Edit: Es klappt!!! :) Danke! Ohne Portweiterleitung scheint es zu gehen.

justme1968

ich würde es noch mal ohne iptables und ohne port attribut versuchen. den raspberry am besten neu booten damit nicht noch irgendwelche reste da sind.

setz mal im modul verbose auf 5 um auszuschliessen das es an einer falschen mac adresse liegt.

wenn es wirklich das gleiche netz ist solltest du die dhcp requests auch mit wireshark sehen.

gruss
  andre

ps: das notify geht ganz ohne perl ebene:define DashButtonPressed notify DashButton:50-f5-da-a6-0c-84..short set az_l_lichterkette on
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

bendim

Ich habe zwei Varianten zusammengetragen und in ein Tutorial verfasst.

Variante 1 mit dem FHEM Modul dash_dhcp https://maker-tutorials.com/fhem-geraete-mit-amazon-dash-button-schaltensteuern-raspberry-pi-home-automation/#variante-1-fhem-modul-dash_dhcp

Variante 2 mit Node.js Dasher App https://maker-tutorials.com/fhem-geraete-mit-amazon-dash-button-schaltensteuern-raspberry-pi-home-automation/#variante-2-mit-nodejs-und-dasher

Wer noch eine Variante kennt, bitte eine PN dann versuch ich diese in den Beitrag mit aufzunehmen.
Vielen Dank an justme1968 für das dash_dhcp modul

Ralf W.

Hallo,

schön das sich jemand die Mühe macht, es in ein Tutorial zu packen. Wäre es nicht besser im Wiki aufgehoben?

Hier noch meine Variante, die über mehrere AccessPoints funktioniert:

/opt/fhem/FHEM/AG_AmazonDash.sh
#!/bin/bash

dhcpdump -i br0 | awk ' /IP:/ {
if ($3 == "(44:65:d:93:94:73)") system("echo setreading AG_Dash  Sagrotan `date +%R:%S` pressed | socat - TCP:fhem:7072") ;
if ($3 == "(ac:63:be:2b:f9:ac)") system("echo setreading AG_Dash powerpoint `date +%R:%S` pressed | socat - TCP:fhem:7072") ;
if ($3 == "(ac:63:be:e0:73:22)") system("echo setreading AG_Dash Herma `date +%R:%S` pressed | socat - TCP:fhem:7072") ;
if ($3 == "(50:f5:da:18:38:89)") system("echo setreading AG_Dash Avery `date +%R:%S` pressed | socat - TCP:fhem:7072")
}'


/etc/rc.local
nohup /opt/fhem/FHEM/AG_AmazonDash.sh &

FHEM
Internals:
   NAME       AG_Dash
   NR         721
   STATE      2016-11-07 07:45:27
   TYPE       dummy
   Readings:
     2016-10-13 18:08:29   Avery           18:08:29 pressed
     2016-10-13 18:07:23   Herma           18:07:23 pressed
     2016-11-07 07:45:27   Sagrotan        07:45:27 pressed
     2016-10-13 18:07:40   powerpoint      18:07:40 pressed
Attributes:
   event-on-change-reading .*
   icon       ios-off
   room       99_IOs
   stateFormat {TimeNow();;}


MfG


http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

justme1968

warum nimmst du nicht das dash_dhcp modul?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Ralf W.

Zitat von: justme1968 am 15 November 2016, 19:08:34
warum nimmst du nicht das dash_dhcp modul?

gruss
  andre

Weil es so problemlos läuft. FHEM (IP per DHCP) mit hostapd, deshalb br0. Mehrere AccessPoints, kein OpenWRT für Dash. Ich muss mich mal durch die 19 Seiten wühlen.

MfG
http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

justme1968

so lange alles ein netz ist funktionen das dash_dhcp modul mit beliebig vielen accesspoints. openwrt ist auch nicht nötig.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Ralf W.

Zitat von: justme1968 am 15 November 2016, 20:29:30
so lange alles ein netz ist funktionen das dash_dhcp modul mit beliebig vielen accesspoints. openwrt ist auch nicht nötig.

Ja, aber! Ich habe das so verstanden, das mit der Regel alle Paket von Port 67 auf 6767 umgeleitet werden. Dann klappt DHCP auf dem Rechner nicht mehr. Richtig?

Müsste dann nicht, wenn ich beides haben möchte, Port 67 auf diesem Rechner dupliziert werden?

So etwa?
iptables -A PREROUTING -t mangle -i br0 -p udp ! -s 127.0.0.1 --dport 67 -j TEE --gateway 127.0.0.1
iptables -A OUTPUT -t nat -p udp -s 127.0.0.1/32 --dport 67 -j DNAT --to 127.0.0.1:6767


MfG
http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

justme1968

ja. wenn du auf einem system eides brauchst musst du kopieren. jedenfalls wenn dein fhem nicht als root läuft.

wobei ich bei meinen tests zwischendurch auch mal alles auf beiden ports hatte. das hängt aber eventuell von der iptables regel ab.

probier es aus und sag ob es geht.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

nesges

Irgendwo hakt's bei mir noch. Folgendes habe ich gemacht:

iptables -A PREROUTING -t nat -i eth0 -p udp --dport 67 -j REDIRECT --to-port 6767

root@wopr:~# iptables -t nat -L -n --line-numbers
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    REDIRECT   udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67 redir ports 6767

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination


Ich sehe auch DHCP-Requests vom Dash-Button:

root@wopr:~# tcpdump port 67 or port 68 or port 6767 -e -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:38:29.026641 44:65:0d:b3:e4:b8 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 291: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 44:65:0d:b3:e4:b8, length 249
12:38:29.518862 44:65:0d:b3:e4:b8 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 291: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 44:65:0d:b3:e4:b8, length 249
12:38:29.535751 44:65:0d:b3:e4:b8 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 303: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 44:65:0d:b3:e4:b8, length 261


Aber in Fhem werden weder Events erzeugt, noch Logausgaben geschrieben (bei verbose 5). Fehlt hier ggf. noch was am Redirect?

Mein dash_dhcp-Device:

Internals:
   CONNECTS   4
   FD         19
   LAST_CONNECT 2016-11-16 12:37:23
   LAST_DISCONNECT 2016-11-16 12:37:23
   NAME       DASH_DHCP
   NR         1725
   NTFY_ORDER 50-DASH_DHCP
   PORT       6767
   STATE      listening
   TYPE       dash_dhcp
   Readings:
     2016-11-16 12:37:23   state           listening
Attributes:
   allowed    44:65:0d:b3:e4:b8
   port       6767
   verbose    5


Das System ist ein Raspbian wheezy:

root@wopr:~# uname -a
Linux wopr 4.1.19-v7+ #858 SMP Tue Mar 15 15:56:00 GMT 2016 armv7l GNU/Linux

justme1968

schau mal ob die pakete die du siehst wirklich von port 6767 kommen oder nicht doch noch von 67.

das iptables kommando das du verwendet hast scheint die version zu sein die nicht überall funktioniert/die ältere ist.

für neuere systeme muss man scheinbar die andere variante verwenden:iptables -I PREROUTING -t nat -i eth0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767

gruss
  andre

ps: man kann die umgeleitet pakete mit wireshark auch nicht am neuen port sehen weil wireshark vor dem redirekt ansetzt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

PsychoD

Nabend zusammen,

ich habe es jetzt dank Andre am laufen. Ich hab nur ein kleines Problem, zu dem mir keine rechte Lösung einfällt. Ich schalte damit einen toggle (ein Dummy, über den ich eine Funksteckdose schalte.). Normalerweise klappt das gut. Dashbutton drücken, und ca. drei Sekunden später schaltet die Lampe. Manchmal passiert es aber, dass der Dashbutton deutlich länger als normal weiß blinkt und leuchtet, und die Lampe schaltet dann mehrfach an und aus. Der Toggle wird also mehrfach ausgelöst. Weiß da jemand eine Lösung? Den Buttons habe ich übrigens in der Fritzbox den Zugriff aufs Internet gesperrt.

Danke & Gruß
Psy

kumue

ich schalte so, wie nesges es gepostet hat... ohne einen dummy dazwischen.
wenn ein, dann schalte aus, ansonsten ein.
klappt bisher wunderbar

https://forum.fhem.de/index.php/topic,57248.msg488657.html#msg488657


justme1968

@PsychoD: event-min-interval setzen. aber warum noch ein dummy dazwischen?

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968