Hauptmenü

Presence

Begonnen von Talkabout, 28 Mai 2015, 20:06:53

Vorheriges Thema - Nächstes Thema

Talkabout

Hallo zusammen,

ich habe schon seid längerem nach einer Lösung gesucht, wie ich mein Handy (Windows Phone) für das Presence-Modul verwenden kann. Bluetooth kam nicht in Frage, zu geringe Reichweite. Abfrage über Ping funktionierte nicht, da, wenn das Handy in Standby ging, es auch auf einen Ping nicht reagierte. Nach etwas Suchen kam ich dann aber doch auf eine funktionierende Lösung: ARP SCAN

http://de.wikipedia.org/wiki/Address_Resolution_Protocol

Über dieses Protokoll war es mir möglich, auch von "schlafenden" Devices eine Antwort zu erhalten. Damit das Ganze funktioniert, bedarf es unter Unix (Debian) des Programms "arp-scan". Dieses kann über "apt-get" installiert werden. Da der Befehl per "sudo" ausgeführt werden muss, bedarf es noch eines Eintrags in /etc/sudoers.

Anschliessend noch eine kleine Funktion in der myUtils:

sub
PresenceByMacAddress($)
{
my ($macAddress) = @_;
        my $command      = "sudo /usr/bin/arp-scan 192.168.20.0/24 | grep -i \"" . $macAddress . "\"";
my $result       = qx/$command/;
        if ($result ne "") {
        return 1;
        }
        return 0;
}


Die IP-Range (192.168.20.0) müsst Ihr durch Eure IP-Range ersetzen. In den meisten Fällen 192.168.1.0 oder 192.168.254.0. Um rauszufinden, welche IP-Range Ihr habt, einfach mal nachschauen, welche IP-Adresse Eure Geräte zugewiesen bekommen haben, und die letzte Nummer durch 0 ersetzen.

Und die entsprechenden "PRESENCE"-Definitionen in der fhem.cfg:

define Handy1 PRESENCE function {PresenceByMacAddress("xx:xx:xx:xx:xx:xx")} 60 60
define Handy2 PRESENCE function {PresenceByMacAddress("xx:xx:xx:xx:xx:xx")} 60 60


Die Zeilen mit "xx" jeweils mit der Hardware-Adresse (MAC-Adresse) des jeweiligen Gerätes ersetzen.

Damit funktioniert nun auch die Anwesenheitserkennung bei mir. Vielleicht kann damit ja jemand auch was anfangen.

Gruss

JoWiemann

Schöne Idee. Leider findet arp-scan bei Handys die an einem Repeater angemeldet sind immer nur die MAC des Repeaters.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

gloob

#2
Kann ich das ganze irgendwie manuell testen? Aktuell funktioniert es mit der Mac Adresse meines PCs nicht.

Eingebunden habe ich es wie folgt:

sub
PresenceByMacAddress($)
{
my ($macAddress) = @_;
        my $command      = "sudo /usr/bin/arp-scan 192.168.1.0/24 | grep -i \"" . $macAddress . "\"";
my $result       = qx/$command/;
        if ($result ne "") {
        return 1;
        }
        return 0;
}


Das ist die Ausgabe im FHEM Log:

2015.05.29 11:51:54 5: PRESENCE (Handy1) - starting local scan
2015.05.29 11:51:54 5: PRESENCE (Handy1) - starting blocking call for mode function
2015.05.29 11:51:54 5: PRESENCE (Handy1) - execute perl function: Handy1|{PresenceByMacAddress("aa:bb:cc:dd:ee:ff")}|1
2015.05.29 11:51:54 5: PRESENCE (Handy1) - function returned with: 0
2015.05.29 11:51:54 5: PRESENCE (Handy1) - blocking scan result: Handy1|1|absent


Lasse ich das ganze im Terminal auf dem Pi laufen bekomme ich folgendes:

pi@raspberrypi ~ $ sudo /usr/bin/arp-scan 192.168.1.0/24 | grep -i aa:bb:cc:dd:ee:ff
192.168.1.99 aa:bb:cc:dd:ee:ff (Unknown)
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

kumue

Ich habe es vorhin erfolgreich getestet..

Aber ich habe den Code abgeändert..

Alt:

define Handy1 PRESENCE function {PresenceByMacAddress("xx:xx:xx:xx:xx:01")} 60 60
define Handy2 PRESENCE function {PresenceByMacAddress("xx:xx:xx:xx:xx:01")} 60 60

Neu:

define Handy1 PRESENCE function {PresenceByMacAddress("xx:xx:xx:xx:xx:xx")} 60 60
define Handy2 PRESENCE function {PresenceByMacAddress("xx:xx:xx:xx:xx:xx")} 60 60


..spich bei der MAC die "01" ersetzt

reload 99_myUtils gemacht ?

Gruß Kai

Talkabout

Hallo Jungs,

sorry für die "01" bei der MAC-Adresse, die muss natürlich raus. Der gesamte String muss durch Eure Mac-Adresse ersetzt werden.

@gloob: ist die MAC-Adresse im Fhem-Log genau die MAC-Adresse Deines Gerätes? Hast Du vielleicht die "01" noch hinten dran gelassen?

Gruss

miggi

#5
als Tipp für die die nur WLAN benutzen, bei mir war eth0 als Standard eingestellt, musste somit den Befehl nur ein wenig abändern.


sub
PresenceByMacAddress($)
{
my ($macAddress) = @_;
        my $command      = "sudo /usr/bin/arp-scan 192.168.178.0/24 --interface=wlan0 | grep -i \"" . $macAddress . "\"";
my $result       = qx/$command/;
        if ($result ne "") {
        return 1;
        }
        return 0;
}


Charity

Hello,

ich habe folgendes Problem.
Ich habe die funktion wie beschrieben in 99_myUtils.pm eingebaut und auch den define für den ARP Request auf das Windows Phone Handy gemacht.
Das ganze wird nun auch alle 60 Sekunden aufgerufen. Nur leider bleibt das Handy immer "absent"

Im Log bekomm ich immer die Meldung

/usr/bin/sudo: 1: /usr/bin/sudo: ��������

Im Sudoer habe ich folgende Einträge

fhem    ALL = NOPASSWD:ALL
fhem    ALL = NOPASSWD:/usr/bin/arp-scan

Woran könnte es noch liegen, dass es beim Aufruf der Funktion doch Zugriffsberechtigungsprobleme gibt ?


miggi



Zitat von: Charity am 07 Juni 2015, 12:23:42
Hello,

ich habe folgendes Problem.
Ich habe die funktion wie beschrieben in 99_myUtils.pm eingebaut und auch den define für den ARP Request auf das Windows Phone Handy gemacht.
Das ganze wird nun auch alle 60 Sekunden aufgerufen. Nur leider bleibt das Handy immer "absent"

Im Log bekomm ich immer die Meldung

/usr/bin/sudo: 1: /usr/bin/sudo: ��������

Im Sudoer habe ich folgende Einträge

fhem    ALL = NOPASSWD:ALL
fhem    ALL = NOPASSWD:/usr/bin/arp-scan

Woran könnte es noch liegen, dass es beim Aufruf der Funktion doch Zugriffsberechtigungsprobleme gibt ?

Hallo,
Du hast den Eintrag in der sudoer Datei nicht ganz richtig. 
Müsste so funkonieren:


fhem    ALL = (root) NOPASSWD:/usr/bin/arp-scan

Oder

fhem    ALL = (ALL) NOPASSWD:/usr/bin/arp-scan

Worin genau der Unterschied liegt kann ich dir jetzt nicht sagen.  Aufjedenfall muss nach dem ALL= noch all oder root in klammern stehen.  Dann dürfte es klappen.

Gruß
Miggi

Gesendet von meinem OnePlus One mit Tapatalk.


Charity

Hi,

erstmal danke, aber der Eintrag

fhem    ALL = (root) NOPASSWD:/usr/bin/arp-scan

hat auch nichts gebracht. Muss die Kiste ev. dafür durchgestartet werden ?

miggi

Zitat von: Charity am 07 Juni 2015, 13:43:20
Hi,

erstmal danke, aber der Eintrag

fhem    ALL = (root) NOPASSWD:/usr/bin/arp-scan

hat auch nichts gebracht. Muss die Kiste ev. dafür durchgestartet werden ?
Also ein Neustart ist nicht nötig. Ist aber komisch,  dass es nicht funktioniert. 
Habe es genauso und bei mir funktioniert es.
Vlt braucht es ein klein wenig Zeit bis es funktioniert. Aber das müsste so passen.

Gesendet von meinem OnePlus One mit Tapatalk.


Charity

Kann es sein, dass der Eintrag in der sudoers

fhem    ALL = NOPASSWD:ALL
fhem    ALL = (root) NOPASSWD:/usr/bin/arp-scan

so nicht passt ?


miggi



Zitat von: Charity am 07 Juni 2015, 13:55:17
Kann es sein, dass der Eintrag in der sudoers

fhem    ALL = NOPASSWD:ALL
fhem    ALL = (root) NOPASSWD:/usr/bin/arp-scan

so nicht passt ?

Den ersten Eintrag brauchst du nicht.
(fhem    ALL = NOPASSWD:All)

Gesendet von meinem OnePlus One mit Tapatalk.


Talkabout

@Charity

Mich irritieren die schwarzen Vierecke etwas. Sind diese exakt so im Log drin?

Charity

@talkabout: ja, nur füllen diese die ganze Zeile. Ich hab nicht alle eingefügt.
@miggi: Leider hat das entfernen der ersten Zeile auch nichts gebracht

Talkabout

@Charity

Das sieht mir irgendwie nach einem Encoding-Problem aus. Kannst Du die Code Zeilen mal über einen Texteditor in der Datei speichern, der in ASCII schreibt?