Amazon Dash Button

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

Vorheriges Thema - Nächstes Thema

CoolTux

Eine Frage. Habe ich irgendwie Erfolg in einem Segmentierten Netz? Der DHCP Server hat Standbeine in alle Netze. FHEM aber nicht, nur ein Standbein ins Servernetz und ins SmartHome Netz.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

cyablo

Jetzt aber:

iptables -I PREROUTING -t nat -i eth0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767 - funktioniert bei mir wunderbar. Gefunden hier:

http://www.tikalk.com/port-forwarding-to-broadcast-requests-using-iptables/

Nun das nächste, das Modul sagt mir: dash1: ignoring 50:f5:da:7e:bb:94, obwohl ich genau die MAC im neuen Format (- als Trenner) eingetragen habe...

cyablo

#152
Zitat von: CoolTux am 13 September 2016, 20:20:21
Eine Frage. Habe ich irgendwie Erfolg in einem Segmentierten Netz? Der DHCP Server hat Standbeine in alle Netze. FHEM aber nicht, nur ein Standbein ins Servernetz und ins SmartHome Netz.

Hier wird ja der Broadcast an 255.255.255.255 abgefangen, der sollte alle Geräte erreichen. Gibt es Gateways zwischen den Netzen?

justme1968

#153
@CoolTux: dhcp funktioniert nur innerhalb einer broadcast domain. d.h. fhem und der button müssen im gleichen netz sein. wenn du unterschiedliche netze verwendest geht es nur dann netz übergreifend wenn du einen dhcp proxy hast.

@cyablo: eventuell hängt es von der iptables version ab ob man die adresse explizit angeben muss. ich hatte auf einem 2.6.5 kernel getestet :). ich weiss nicht was die anderen hier verwendet haben.

die mac adressen im allowed attribut verwenden immer noch den : so wie es auch im log steht. nur im reading ist es ein -.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Wzut

Wie Andre schon schrieb, die DHCP Broadcasts bleiben in dem Netz aus dem sie kommen.
Aber du kannst an deinem Router der alle Netze routet es mit einem dhcp helper Eintrag versuchen und den fhem Server als Ziel angeben:
Ref -> http://www.computerlexikon.com/was-ist-dhcp-relay
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

cyablo

#155
Ich hab Debian Jessie mit 3.16er Kernel, da ist IPTABLES ein Kernel Modul. Naja DAS läuft ja jetzt.

Edit:

@Andre : Dann hab ich die Änderung an dem Modul falsch verstanden, Danke.

justme1968

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

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

cyablo

Fast geschafft, mit Verbose 5 sagt mit das Log:

2016.09.13 21:03:39 4: dash1: got 50:f5:da:7e:bb:94
2016.09.13 21:03:39 1: PERL WARNING: Use of uninitialized value $chaddr in substitution (s///) at ./FHEM/37_dash_dhcp.pm line 165.

Allerdings werden keine Readings für die entsprechende Mac Adresse angelegt.

justme1968

arg...

da ist beim hochladen eine kaputte zwischenversion rein gekommen.

bitte lade das modul noch mal runter: https://forum.fhem.de/index.php/topic,57248.msg488553.html#msg488553.

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

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

cyablo

Und wird sind da... Bäääm :) Besten Dank!

cyablo

Allgemeine Frage: Wie triggert ihr bei dem Modul mit dem Button etwas? event-on-update-reading scheint es ja leider nicht zu geben.

justme1968

ganz normales notify.

du brauchst keine attribute setzen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Omega

Ich habe mich mal an die Lösung von malted gemacht (ab S. 3).

Ich bin inzwischen so weit, dass auf der FHEM-Seite nach dem Drücken des Buttons folgende Meldungen kommen:

Awaiting UDP messages on port 5555
<30>Sep 17 17:08:11 hostapd: wlan0: STA 0c:47:c9:xx:xx:xx IEEE 802.11: authenticated
0c:47:c9:xx:xx:xx pressed
<30>Sep 17 17:08:11 hostapd: wlan0: STA 0c:47:c9:xx:xx:xx IEEE 802.11: associated (aid 2)
0c:47:c9:xx:xx:xx pressed
<30>Sep 17 17:08:11 hostapd: wlan0: STA 0c:47:c9:xx:xx:xx IEEE 802.11: associated (aid 2)
<30>Sep 17 17:08:11 hostapd: wlan0: STA 0c:47:c9:xx:xx:xx WPA: pairwise key handshake completed (RSN)
<30>Sep 17 17:08:11 dnsmasq-dhcp[1055]: DHCPREQUEST(br-lan) 192.168.1.192 0c:47:c9:xx:xx:xx
<30>Sep 17 17:08:11 dnsmasq-dhcp[1055]: DHCPACK(br-lan) 192.168.1.192 0c:47:c9:xx:xx:xx
<30>Sep 17 17:08:11 hostapd: wlan0: STA 0c:47:c9:xx:xx:xx IEEE 802.11: disassociated


Aber von da geht es anscheinend nicht in's FHEM weiter. Weder im Log noch im Dummy sind irgend welche neuen Einträge.

Im Script habe ich sowohl mit
     if (($newmsg) =~ /^.*DHCPACK.*([0-9a-f:]{17}).*/ ) {
als auch mit
     if (($newmsg) =~ /^.*hostapd:.*STA ([0-9a-f:]{17}).* associated/ ) {
getestet.


Das Log vom IoTGW enthält

Sat Sep 17 17:10:18 2016 daemon.info hostapd: wlan0: STA 0c:47:c9:xx:xx:xx IEEE 802.11: authenticated
Sat Sep 17 17:10:18 2016 daemon.info hostapd: wlan0: STA 0c:47:c9:xx:xx:xx IEEE 802.11: associated (aid 2)
Sat Sep 17 17:10:18 2016 daemon.info hostapd: wlan0: STA 0c:47:c9:xx:xx:xx WPA: pairwise key handshake completed (RSN)
Sat Sep 17 17:10:18 2016 daemon.info dnsmasq-dhcp[1055]: DHCPREQUEST(br-lan) 192.168.1.192 0c:47:c9:xx:xx:xx
Sat Sep 17 17:10:18 2016 daemon.info dnsmasq-dhcp[1055]: DHCPACK(br-lan) 192.168.1.192 0c:47:c9:xx:xx:xx
Sat Sep 17 17:10:19 2016 daemon.info hostapd: wlan0: STA 0c:47:c9:xx:xx:xx IEEE 802.11: disassociated


Ich hoffe, mir kann jemand weiterhelfen
Holger
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

malted

Das sieht alles schon mal gut aus. Anscheinend klappt die Datenübergabe von dem Perl-Script nicht an FHEM.

Die Übergabe erfolgt mittels telnet:

$fhem = IO::Socket::INET->new(PeerAddr => "localhost:7072") or die "Can't connect to fhem\n";
                syswrite($fhem, "setreading dash button pressed\n");
                shutdown($fhem, 1);



Was passiert denn, wenn Du auf dem Rechner, auf dem das Proxy-Script läuft, per hand Folgendes absetzt:
telnet localhost 7072
setreading dash button pressed


Den Dash button hast du als Dummy angelegt?


malted

Also, ich habe jetzt die OpenWRT Lösung mit der Lösung aus Post https://forum.fhem.de/index.php/topic,57248.msg488553.html#msg488553 verheiratet.

Das Modul von justme1968 macht nix anderes als einen UDP-Server auf 6767 auf DHCP-Requests lauschen zu lassen.

Das Openwrt schickt sein Log-File per UDP weiter. Also lag es nahe, das Modul von justme1968 so zu konfigurieren, dass es weiterhin mit DHCP-Paketen umgehen kann, aber auch das Remote-Logging von OpenWRT weiterverarbeitet. (Man muss einfach auf dem Openwrt Router unter System->System->Logging auf den FHEM-Server auf Port 6767 einstellen).

Das geht mit folgendem Patch:

--- 37_dash_dhcp.pm.org 2016-09-17 17:47:25.001795259 +0200
+++ 37_dash_dhcp.pm 2016-09-17 18:19:13.473473345 +0200
@@ -154,6 +154,9 @@
   my $giaddr = join '.', unpack('C4', substr($data, 24 ) );
   my $chaddr = join ':', unpack('(H2)*', substr($data, 28, $hlen ) );

+  if (($data) =~ /^.*DHCPACK[^:]*([\da-z]{2}(:[\da-z]{2}){5}) .*/ ) {
+        $chaddr=$1;
+  }

   my $allowed = AttrVal($name, "allowed", undef );
   if( !$chaddr || $chaddr !~ m/[\da-z]{2}(:[\da-z]{2}){5}/ ) {


Damit wird das ganze Proxy-Script überflüssig. Direkt im Wlan-hängende Dash-Button gehen damit genauso, wie die hinter einem openwrt mit remote-logging.

@justme1968: Könntest Du Dir vorstellen, Dein Modul um DHCP-Bestätigung von OpenWRT (siehe Patch) zu erweitern?