FHEM Forum

FHEM - Entwicklung => Wunschliste => Thema gestartet von: gammelobst am 27 Juni 2016, 00:58:48

Titel: PRESENCE Erweiterung um arping
Beitrag von: gammelobst am 27 Juni 2016, 00:58:48
Hallo,

ich bin gerade dabei meine TV-Ecke zu automatisieren. Bei der PS3, PS4 sowie der XBox One ist es kein Problem über einen Watchdog, der die Presence-Änderung checkt, die Quelle am Onkyo-AVR auf die entsprechende Konsole zu schalten.
Allerdings erkennt das PRESENCE-Modul leider meine XBox 360, sowie andere Geräte nicht, die den Echo-Request blocken.
Nach ein wenig Nachforschung kann ich alle meine nicht auf ping reagierenden Kisten mit dem "arping"-command erreichen.
Wenn die Unterstützung von "arping" noch integriert werden könnte wäre ich euch echt dankbar.

cya
Titel: Antw:PRESENCE Erweiterung um arping
Beitrag von: marvin78 am 27 Juni 2016, 10:31:57
PRESENCE unterstützt doch schon jetzt die Verwendung von shell-scripts oder eigenen Funktionen. Damit sollte sich doch recht leicht etwas bauen lassen.
Titel: Antw:PRESENCE Erweiterung um arping
Beitrag von: dev0 am 27 Juni 2016, 12:34:34
Das war auch meine erste Idee, der Nachteil davon ist aber, dass arping min. 1,5 Sekunden blokieren würde, wenn die Mac nicht erreichbar ist.
Alternativ dazu könnte man mit hilfe eines cron jobs jegelmäßig die dazugehörige IP anpingen, damit die lokale arp table die MAC enthält und die MAC nur in der Ausgabe von arp sucht.
Titel: Antw:PRESENCE Erweiterung um arping
Beitrag von: marvin78 am 27 Juni 2016, 12:36:58
Man könnte die eigene Funktion mit Blocking.pm bauen.
Titel: Antw:PRESENCE Erweiterung um arping
Beitrag von: justme1968 am 27 Juni 2016, 12:59:51
presence nutzt jetzt schon Blocking.pm. auch für die function variante.

gruss
  andre
Titel: Antw:PRESENCE Erweiterung um arping
Beitrag von: gammelobst am 27 Juni 2016, 21:19:29
hmm,

als quick'n'dirty-Lösung hab ich in 73_PRESENCE.pm in Zeile 662 "ping" durch "sudo arping" ersetzt und passwortloses sudo erlaubt.
Ja ich weiss, dass das nicht schön ist,, geht jetzt aber wunderbar...

cya

PS: Wenn ich mehr Perl drauf hab wird das bestimmt besser...
Titel: Antw:PRESENCE Erweiterung um arping
Beitrag von: nesges am 20 Juli 2016, 22:53:47
Damit fahr ich ganz gut:

sub presence_arping($;$) {
    my $device = shift;
    my $count = shift || 3;

    my $ip = undef;
    if($device !~ /^(?:\d{1,3}\.){3}\d{1,3}$/) {
        $ip = InternalVal($device, 'ADDRESS', undef);
    } else {
        $ip = $device;
    }

    if(! $ip) {
        Log 3, "presence_arping($device) - parameter '$device' is neither IP nor PRESENCE (could not read ADDRESS)";
    } else {
        # necessary: chmod +s /usr/sbin/arping
        my $temp = qx(arping -c $count $ip 2>&1);
        chomp $temp;
       
        if($temp ne "") {
            Log 5, "presence_arping($device) - arping $ip command returned with output:\n$temp";
            return ($temp =~ /\d+ [Bb]ytes (from|von)/ and not $temp =~ /[Uu]nreachable/) ? 1 : 0;
        } else {
            Log 3, "presence_arping($device) - could not execute arping $ip command";
        }
    }
    return 0;
}


Parameter 1: IP oder Name eines PRESENCE Objektes mit gesetztem Internal ADDRESS
Parameter 2: (optional) Anzahl arpings (Default: 3)

define MORLH468 PRESENCE function { presence_arping('192.168.178.60') }

Update: Typo im Code korrigiert