FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: JoWiemann am 07 September 2017, 11:58:59

Titel: Presence und iPhone / Android
Beitrag von: JoWiemann am 07 September 2017, 11:58:59
Hallo,

da Apple die iPhones immer wieder schlafen schickt habe ich mich nochmal auf die Suche nach einer Lösung gemacht und folgendes im openhab Forum gefunden: https://openhabforum.de/viewtopic.php?t=137 und es etwas angepasst:


#!/bin/bash

declare -a DEVICES
sudo hping3 -2 -c 10 -p 5353 -i u1 $1 -q >/dev/null 2>&1
DEVICES=`arp -an | awk '{print $4}'`
CHECK="$2"
if [[ ${DEVICES[*]} =~ $CHECK ]]
then
echo "1"
else
echo "0"
fi


Das Script habe ich unter /opt/fhem/FHEM/presence.sh lauffähig gespeichert.

In meiner ))_myUtils.pm dann folgende Sub eingetragen:


sub CheckiPhone($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx(/opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckiPhone", 2, "CheckiPhone: $ret";
    return 0;
  }

  return $ret;

}


und in Presence dann definiert:

function {CheckiPhone("192.168.n.n", "xx:xx:xx:xx:xx:xx")} 60 60
                                        IP                        MAC

Siehe da, es läuft sehr zuverlässig.

Grüße Jörg


Titel: Antw:Presence und iPhone
Beitrag von: Thyraz am 07 September 2017, 12:16:54
Verrückt, warum hat man hier davor noch nichts von hping3 in Verbindung mit dem iPhone gelesen?
Auf Google findet man da Einiges, hier ist dein Post der einzige Treffer.

Vielen Dank für diesen Hinweis, wird daheim gleich mal getestet.
Titel: Antw:Presence und iPhone
Beitrag von: f-zappa am 07 September 2017, 14:13:36
Das dürfte allerdings auch einen Effekt auf die Akkulaufzeit haben ...
Titel: Antw:Presence und iPhone
Beitrag von: Thyraz am 07 September 2017, 15:11:46
Klar,

muss man mal schauen wie stark das auf den Akku geht.
Da es daheim Strom gibt, würde es mich nicht weiter stören solange es nicht gravierend schnell den Akku leersaugt.

Geofencing klappt bei uns im neuen Zuhause nicht mehr so zuverlässig.
Problem ist das Heimkommen per Rad oder Auto über die Tiefgarage.

Hier hab ich immer wieder mal das Problem, dass das Telefon gerade dann kein Empfang/Wlan hat wenn die Geofencing App Fhem informieren will.
Eine Erkennung direkt von FHEM Seite wäre mir daher grundsätzlich lieber, als das iPhone die Erkennung zu überlassen mit der Notwendigkeit dann FHEM zu informieren.

Mal sehen wie das läuft.
Dafür hat man hier dann das Problem, dass Akku leer = abwesend bedeuted.
Aber evtl. kann man hier fast alle Fehlerfälle abfangen wenn man den Timestamp des Türkontakts an der Wohnungstür in die Presence-Logik mit einbezieht...
Titel: Antw:Presence und iPhone
Beitrag von: Benni am 07 September 2017, 18:05:25
Hallo Jörg,

danke fürs Finden!  8)

Testbetrieb läuft bei mir inzwischen auch, werde ebenfalls beobachten und berichten.

gb#
Titel: Antw:Presence und iPhone
Beitrag von: Thyraz am 07 September 2017, 18:45:56
Bei mir will das Ganze leider noch nicht so recht.
Müsste hping3 schon was zurück liefern, oder ist es Ok, dass hier 100% "packet loss" ist?

So kann ich mein iPhone anpingen wenn es gerade aktiv ist:

ping 192.168.1.44


Hier bekomme folgende Meldung:

sudo hping3 -2 -c 10 -p 5353 -i u1 192.168.1.44 -q

Zitat
HPING 192.168.1.44 (eth0 192.168.1.44): udp mode set, 28 headers + 0 data bytes

--- 192.168.1.44 hping statistic ---
100 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

Die CheckiPhone Funktion liefert auch immer 0 zurück.
Titel: Antw:Presence und iPhone
Beitrag von: JoWiemann am 07 September 2017, 19:03:29
Zitat von: Thyraz am 07 September 2017, 18:45:56
Bei mir will das Ganze leider noch nicht so recht.
Müsste hping3 schon was zurück liefern, oder ist es Ok, dass hier 100% "packet loss" ist?

Die CheckiPhone Funktion liefert auch immer 0 zurück.

Die Rückgabe von hping3 ist so Ok. hping3 dient ja auch nur dazu das iPhone aufzuwecken. Mit arp wird dann die Liste der sichtbaren Geräte geholt. Ist da iPhone wach, wird seine MAC aufgelistet und gefunden.

Was hast Du bisher gemacht und was steht im Fhem Log?

Grüße Jörg
Titel: Antw:Presence und iPhone
Beitrag von: Benni am 07 September 2017, 19:06:37
Ich hatte auch kleinere Startschwierigkeiten.

Bei mir war das Problem, dass der User fhem arp nicht im Suchpfad hatte. Ich habe es dann in der presence.sh einfach mit vollem Pfad (bei mir /usr/sbin/arp) angegeben, seither läufts bei mir. 
Evtl. muss auch noch die sudoers angepasst werden.

Es empfiehlt sich bei Problemen auch mal noch die Kommentare auf der von Jörg oben verlinkten Quelle durchzulesen, da wird einiges schon behandelt.

gb#
Titel: Antw:Presence und iPhone
Beitrag von: CQuadrat am 07 September 2017, 20:26:41
Zitat von: Benni am 07 September 2017, 19:06:37
Bei mir war das Problem, dass der User fhem arp nicht im Suchpfad hatte. Ich habe es dann in der presence.sh einfach mit vollem Pfad (bei mir /usr/sbin/arp) angegeben, seither läufts bei mir. 
Evtl. muss auch noch die sudoers angepasst werden.


Bei mir auch.

Bei mir ist auch notwendig, dass in der MAC Kleinbuchstaben stehen.
Titel: Antw:Presence und iPhone
Beitrag von: Thyraz am 07 September 2017, 20:30:06
Arghs...

Nachdem ich mir die Ausgabe von arp angeschaut hab, ist mir mein Fehler klar geworden.
Ich hab die Mac Adresse aus Gewohnheit mit Großbuchstaben geschrieben.
Arp liefert aber Kleinbuchstaben und der Vergleich schlägt fehl.  ::)

Nachdem ich das geändert hab funktioniert der Spaß einwandfrei...

edit: haha, ok du hast die Gleiche Fehlersuche hinter dir CQuadrat. ;)
Titel: Antw:Presence und iPhone
Beitrag von: JoWiemann am 08 September 2017, 09:29:04
Ich hab mal ein lowercase eingebaut.

Grüße Jörg
Titel: Antw:Presence und iPhone
Beitrag von: Jamo am 08 September 2017, 12:05:18
Ich habs bei mir seit gestern auch am laufen, funktioniert bisher prima, ich konnte über Nacht keinen negativen Einfluss auf die Batterielaufzeit feststellen.

Wenn ich das WLAN ausschalte (ich benutze auch die Presence parameter "60 60"), dauert es etwa 2 Minuten bis das 'absent' kommt, beim WLAN einschalten maximal eine Minute bis zum 'present'.
Titel: Antw:Presence und iPhone
Beitrag von: Thyraz am 08 September 2017, 13:27:15
Ja, beim abschalten kommt eben max. eine Minute bis das Gerät aus dem ARP Cache fliegt und eine weiter max. Minute bis FHEM wieder abfrägt zusammen.
Beim einschalten gibt es nur die max. Minute bis FHEM wieder abfrägt.

Keine Ahnung ob man dem Pi noch beibringen kann bestimmte ARP Einträge sofort zu vergessen und dann erst mit hping3 eine neue ARP Anfrage zu starten?
Das würde die weitere Gedenkminute eliminieren.

edit: Zumindest gibt es

arp -d 192.168.xxx.xxx

als delete Option.

Teste das später daheim mal...
Titel: Antw:Presence und iPhone
Beitrag von: Benni am 09 September 2017, 07:43:13
Ich hatte gestern plötzlich aus irgendeinem Grund das Phänomen, dass mein iPhone regelmäßig fälschlicherweise absent gemeldet wurde und zwar immer direkt gefolgt von einem present (iPhone-Restart und arp-cache löschen hat nix gebracht).
Es hatte irgendwie den Anschein, als ob der hping3 erst verspätet Wirkung zeigt, bzw. nicht mehr richtig durchkommt.

Ich habe mir für den hPing-Aufruf nun einen cronjob (root) eingerichtet, seither läuft es wirklich zuverlässig. Jetzt ist zwar nicht mehr alles schön in einem Skript und die ip für den Ping kein Parameter mehr, sondern direkt im cronjob hart eingetragen, aber dafür läuft der Ping jetzt auf jeden Fall mit root-Rechten, so dass ich nicht mehr darauf achten muss, dass fhem die erforderlichen Rechte für dafüt hat (Stw. sudoers)

Der Eintrag in der crontab sieht wie folgt aus (name-of-phone natürlich durch den echten Namen ersetzt):


* * * * * /usr/sbin/hping3 -2 -c 10 -p 5353 -i u1 <name-of-phone> -q >/dev/null 2>&1


Wie gesagt, seither habe ich keine Probleme mehr damit. Wenn ich mal noch Lust habe, mache ich mich mal noch an die Ursachenforschung für das o.g. Phänomen.

gb#

Update (09.09.2017):
Das mit der Zuverlässigkeit hat leider schon wieder ein Ende. Habe jetzt wieder das selbe Phänomen.
Habe den Testbetrieb nun erst mal eingestellt, da es sich außerdem auch spürbar auf den Akku auswirkt.

Schade! Wäre schön gewesen  :(

Update (01.02.2018)
Aufgrund einer Nachfrage habe ich mal den crontab-Eintrag hier noch ergänzt.
Titel: Antw:Presence und iPhone
Beitrag von: MadMax-FHEM am 10 September 2017, 11:48:46
Hi,

ich häng mich hier mal dran...

Suche schon länger nach einer Lösung für Presence mit dem Handy.

Habe zwar Android aber ich dachte: probieren kann ich's ja mal.

Habe es seit einigen Tagen parallel zum "normalen" Presence lan-ping laufen und bis jetzt funktioniert die hping3-Methode so wie es sein soll...

Werde das mal noch weiter testen und sehen...

Gruß und danke, Joachim
Titel: Antw:Presence und iPhone
Beitrag von: miche am 10 September 2017, 13:22:53
Hallo,

ich wollte das jetzt auch mal ausprobieren. Jedoch bekomme ich Fehlermeldungen.
Wenn ich den Code in die MyUtils eintrage kommt folgender Fehler:

Missing right curly or square bracket at ./FHEM/myUtilsTemplate.pm line 38, at end of line syntax error at ./FHEM/myUtilsTemplate.pm line 38, at EOF

Wenn ich in Zeile 38 noch die geschweifte Klammer schreibe kommt folgender Fehler:

Undefined subroutine &main::myUtilsTemplate_Initialize called at fhem.pl line 2450.

Nun Frage ich mich warum, in der fhem.pl wurde ja gar nix geändert!

die presence.sh hab ich auch angelegt

Meine PRESENCE Funktion bringt auch noch einen Fehler:
PRESENCE (CheckMicheiPhone) - error while processing check: unexpected function output (expected 0 or 1):
Titel: Antw:Presence und iPhone
Beitrag von: MadMax-FHEM am 10 September 2017, 13:38:42
Alles so gemacht wie hier beschrieben:

https://wiki.fhem.de/wiki/99_myUtils_anlegen

Poste doch mal deine myUtils und bitte in code-Tags (das '#' im Menü)...

Wie hast du editiert?

Gruß, Joachim
Titel: Antw:Presence und iPhone
Beitrag von: majorshark am 10 September 2017, 13:58:32
Ich habe diese Lösung mal getestet. Eigentlich wollte ich gegenüber meiner jetzigen Lösung erreichen, dass die Abwesenheit schneller erkannt wird. Funktionierte leider nicht. Ich bin jetzt wieder zu der snmpCheck Variante zurückgekehrt. Diese funktioniert beim mir seit Jahren zuverlässig. Nur mit dem Manko, dass es bis zur Abwesenheit manchmal 20 Minuten dauern kann.
Titel: Antw:Presence und iPhone
Beitrag von: MadMax-FHEM am 10 September 2017, 14:47:18
20min verstehe ich nicht.
Bei mir dauert es so max. 1 bis 2 min, kommt auf das eingestellte Intervall an...

Gruß, Joachim
Titel: Antw:Presence und iPhone
Beitrag von: miche am 10 September 2017, 21:18:50
Zitat von: MadMax-FHEM am 10 September 2017, 13:38:42
Alles so gemacht wie hier beschrieben:


Natürlich nicht, war mein Fehler.
Ich hab nicht die 99_myutils genommen sonder die myutils die vorhanden war.
Jetzt läuft !!!
Danke für den Tip
Titel: Antw:Presence und iPhone
Beitrag von: MadMax-FHEM am 11 September 2017, 10:44:06
Hmmm, Stromverbrauch...

Gefühlt etwas mehr, leider nicht wissenschaftlich ermittelt (keine Zeit) ;)

Aktuell experimetiere ich mit einem zweistufigen Konzept:

Ein Presence mit normalem lan-ping und wenn der absent bzw. present erkennt, dann wird ein statusRequest beim hping3-Presence ausgelöst per Notify
Das hping3-Presence hat ein Intervall von (aktuell) alle Stunde ist aber das "führende" Presence

Erste Tests sind positiv (gut vielleicht etwas umständlich aber wenn es zuverlässig läuft kommt das so ins Hauptsystem) mal sehen wie es nachts wird...

Gruß, Joachim
Titel: Antw:Presence und iPhone
Beitrag von: majorshark am 11 September 2017, 15:24:10
Zitat von: MadMax-FHEM am 10 September 2017, 14:47:18
20min verstehe ich nicht.
Bei mir dauert es so max. 1 bis 2 min, kommt auf das eingestellte Intervall an...

Gruß, Joachim

Ich habe mal am DHCP-Server eine Einstellung geändert. Werde das jetzt mal testen und dann berichten.
Titel: Antw:Presence und iPhone
Beitrag von: MadMax-FHEM am 11 September 2017, 15:28:44
Zitat von: majorshark am 11 September 2017, 15:24:10
Ich habe mal am DHCP-Server eine Einstellung geändert. Werde das jetzt mal testen und dann berichten.

Nur um sicher zu gehen:

ich verwende nicht die dhcp-Methode von Presence...

Bis vor kurzem normal lan-ping und jetzt (testweise) die aus dem Thread...

Aber keine dauert 20min...

Je nach Einstellung zwischen 1-2min...

Mich hat nur gewundert, dass die Variante aus dem Thread nicht schneller als 20min sein soll (war ja deine Hoffnung)...

Gruß, Joachim
Titel: Antw:Presence und iPhone
Beitrag von: majorshark am 11 September 2017, 16:30:11
Bei der snmpCheck Methode habe ich wahrscheinlich den "Fehler" gefunden. Die DHCP-Server Einstellung hat es nicht gebracht. Aber die Aktualisierungszeit der ARP-Tabelle.
Mein LANCOM Router, den ich dafür abfrage, hat ein ARP-Aging von 15 Minuten eingestellt. Da ich noch einen Watchdog von fünf Minuten dazwischen habe scheint das mit den 20 Minuten hinzukommen. Ich habe die ARP-Aging Time mal auf Fünf Minuten heruntergesetzt.

Warum aber der RasPI der Meinung ist seine eigene ARP-Tabelle auch erst nach 15 Minuten zu aktualisieren kann ich nicht sagen.
Titel: Antw:Presence und iPhone
Beitrag von: MadMax-FHEM am 16 September 2017, 11:31:15
Zitat von: MadMax-FHEM am 11 September 2017, 10:44:06
Hmmm, Stromverbrauch...

Gefühlt etwas mehr, leider nicht wissenschaftlich ermittelt (keine Zeit) ;)

Aktuell experimetiere ich mit einem zweistufigen Konzept:

Ein Presence mit normalem lan-ping und wenn der absent bzw. present erkennt, dann wird ein statusRequest beim hping3-Presence ausgelöst per Notify
Das hping3-Presence hat ein Intervall von (aktuell) alle Stunde ist aber das "führende" Presence

Erste Tests sind positiv (gut vielleicht etwas umständlich aber wenn es zuverlässig läuft kommt das so ins Hauptsystem) mal sehen wie es nachts wird...

Gruß, Joachim

Bislang läuft diese Kombination problemlos und der tatsächliche ("führende") Status ist wie es sein soll!

Mit dem "normalen" lan-ping habe ich immer wieder mal 'absent' bekommen (was dann einen statusRequest des hping3/Scripts auslöst), das eigentliche PRESENCE mit dem h3ping bzw. Script zeigt stabil 'present' (außer ich bin wirklich nicht da ;)  )...

Akkuverbrauch ist (gefühlt) auch wieder normal :)

Habe das jetzt vom Testsystem auf mein Hauptsystem übernommen!
(werde das Updateintervall des hping3/Scripts mal weiter vergrößern, eigentlich ist ja nur der durch das notify ausgelöste statusRequest ausschlaggebend)


Evtl. wäre es gut den Thread-Titel zu ändern, da es ja für Android (zumindest bei mir) auch funktioniert!

EDIT: achja -> vielen Dank für die Idee, das Script und das Einstellen hier!!

Gruß, Joachim
Titel: Antw:Presence und iPhone
Beitrag von: stera am 16 September 2017, 13:21:04
Ich habe auch sehr gute Erfahrung mit dem Fritz Box Modul und Presence Modul gemacht. Das ist ja nicht so selten, dass jemand zu Hause eine FritzBox hat. Ob das IPhone dort in der Auflistung der Geräte im Standby verschwindet kann ich leider nicht sagen, weil ich Android benutze.

Aber vll. hilft es ja den einen oder anderen  :o


Internals:
   CHANGED
   DEF        function {checkFritzMACpresent("Fritzbox","XX:XX:XX:EC:XX:1X")} 60 60
   MODE       function
   NAME       WLANHandy
   NOTIFYDEV  global
   NR         50
   NTFY_ORDER 50-WLANHandy
   STATE      present
   TIMEOUT_NORMAL 60
   TIMEOUT_PRESENT 60
   TYPE       PRESENCE
   Helper:
     DBLOG:
       state:
         myDbLog:
           TIME       1505554925.52647
           VALUE      present
   READINGS:
     2017-09-15 01:21:49   model           function
     2017-09-16 13:16:20   presence        present
     2017-09-16 13:16:20   state           present
   helper:
     CURRENT_STATE present
     call       {checkFritzMACpresent("Fritzbox","XX:XX:XX:EC:XX:1X")}
Attributes:
   devStateIcon present:WLAN_Status.1 absent:WLAN_Status.0
   event-on-change-reading .*
   room       Netzwerk


Gruß,
SteRa
Titel: Antw:Presence und iPhone / Android
Beitrag von: Avatar am 23 September 2017, 08:13:48
Ich habe noch diese Variante gefunden, ist annähernd wie schon propagiert. Es scheint dass ARP doch etwas volatile ist und es manchmal vorkommt dass bei der MAC-Adresse <incomplete> auftaucht und somit die Erkennung fehlerhaft ist.

Es wurden zwei Elemente nachgeführt, das eine wurde "sleep" eingefügt und das zweite -  bei nicht erfolgtem erkenne eine Schlaufe so oft wie gewünscht durchlaufen wird, mit der Möglichkeit dass ARP dann korrekten Inhalt hat. Schaut es an, ich bin nicht ganz überzeugt aber ich denke es ist eine Möglichkeit es etwas zuverlässiger zu machen.#!/bin/bash

# detect iphone by IP and MAC address.
# use MAC address too, to prevent false positives if IP might change
# return ON or OFF so output can be directly bound to a switch item

# number of retries, less is faster, but less accurate
MAXRETRIES=10

# exit immediately if no parameters supplied
if [ $# -lt 2 ]
  then
    echo "UNDEF"
  exit 1
fi

# Set variables
IP=$1
MAC=$2
COUNT=0

while [ ${COUNT} -lt ${MAXRETRIES} ];
do
  # Change dev and eth0 if needed
  #   sudo ip neigh flush dev eth0 ${IP}
  sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP} >/dev/null 2>&1
  sleep .1
  # Only arp specific device, grep for a mac-address
  STATUS=`arp -an ${IP} | awk '{print $4}' | grep "${MAC}"`

  if [ ${#STATUS} -eq 17 ]; then
     # exit when phone is detected
     echo "1"
    exit 0
  fi
  let COUNT=COUNT+1
  sleep .1
done
# consider away if reached max retries
echo "0"


Grüsse Eric
Titel: Antw:Presence und iPhone
Beitrag von: dusti64 am 29 Oktober 2017, 15:56:31
Zitat von: MadMax-FHEM am 11 September 2017, 10:44:06

Aktuell experimetiere ich mit einem zweistufigen Konzept:

Ein Presence mit normalem lan-ping und wenn der absent bzw. present erkennt, dann wird ein statusRequest beim hping3-Presence ausgelöst per Notify
Das hping3-Presence hat ein Intervall von (aktuell) alle Stunde ist aber das "führende" Presence

Hallo in die Runde...

ich habe mich jetzt auch mal an die Erstellung einer zuverlässigen Anwesenheit gemacht und mich eng an diesen Beitrag gehalten... jedenfalls versucht ;) vielen Dank für die Erstellung und die Tipps...

Zuerst ein lan-ping auf das iPhone, welches ja bekanntlich in den "Schlafmodus" geht (bei mir nach 3min), dann das Script erstellt, eingepflegt und eine 2. Presence auf die MAC-Adresse + Scriptausführung, sowie das notify (s.o.) erstellt und eine Structure, in der beide Presence sind. Der Status ändert sich auch zuverlässig, d.h. bin ich weg, ist die Structure absent.

Jetzt habe ich eine Verständnisfrage zu dem o.g. notify, welches ich auch eingerichtet habe:

Es ist jetzt so, wenn ich das iPhone benutze, ändern sich der Status des lan-ping auf present und die Structure Anwesenheit bleibt auf present, dadurch ruht das notify.
Geht das iPhone in den Schlafmodus und der lan-ping auf absent, wird dadurch das notify aktiv und löst ein statusRequest aus für den hping3 aus, welches ich über ein disabledForIntervals = 60 alle 60 sec ausführe.
Wo ist jetzt der Vorteil des langen Intervalls für das hping3-Presence von einer Stunde? Das greift doch nur, wenn ich das iPhone wirklich nutze und ich sitze gaaaaanz selten länger als ne Std. am Handy...oder anders rum, ich komme nach Hause und hab das Handy in der Tasche, ohne es zu benutzen (WLAN ist an, aber nicht aktiv) - dadurch, dass der lan-ping auf die IP ja noch absent ist, greift auch hier keine Änderung des notify, welches ja noch aktiviert ist/sein muss, damit ich die Änderung mit dem hping3-Script erkennen kann und die Structure ihren Status ändert...

Wo stehe ich auf dem Schlauch?

Gruß Dusti
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 29 Oktober 2017, 17:44:25
Hi,

also ich habe einen langen (noch längeren / müsste ich jetzt nachsehen ;)  ) timeout bzw. Zyklus für den hping3 da dieser auf die Akku-Laufzeit des Smartphone geht (gefühlt und manche berichteten dies).

D.h. solange der normale ping auch eine Anwesenheit erkennt brauche ich den hping3 nicht.
Geht allerdings der normale lan-ping auf absent heißt das noch lange nicht, dass ich weg bin...
...daher dann zum tatsächlichen Prüfen der hping3 etc.

Für das schnellere Erkennen, wenn ich zurück komme bin ich noch dran was zu finden.
Es gibt bei Presence ja einen Abfragezyklus "normal" und einen "anwesend".
Was ich gerne hätte bzw. ich mir mal basteln wollte ist eine höhere Frequenz für den hping3 bei Abwesenheit (da ist mir der Akku ja egal weil da der hping3 ja nicht wirkt ;)  ), dann sollte schnell die echte Anwesenheit erkannt werden wenn ich wieder zurück komme.

Aktuell geht es, könnte aber tatsächlich schneller sein...
...aber ich hab noch so viele (wichtigere) Baustellen ;)

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: dusti64 am 29 Oktober 2017, 18:58:29
Hi Joachim...und Danke:)

ich hab schon verstanden, warum die Zeit so lang gewählt ist, eben wegen dem Akku. Doch dieser Zyklus greift ja nicht, wenn das notify getriggert wird, weil der normale lan-ping auf "absent" geht. Oder anders gefragt...geht der Vorteil nicht flöten durch den statusRequest (alle 60 sec durch das disable-Intervall), wie oft wird der denn abgesetzt bei dir, wenn der normale lan-ping "absent" zeigt?
Also mein iPhone fliegt sofort raus aus dem lan-ping (mit leichter Verzögerung von 60 sec), wenn ich es sperre. Somit ist diese Art der Abfrage quasi bei über. Für Android mag es ja funktionieren...da kann ich nichts zu sagen.

Was machen denn die ganzen Hintergrundaktualisierungen (WhatsApp usw.), die sind doch auch über WLAN verbunden, wenn das iPhone WLAN hat oder? Ist der Akkuverbrauch echt soviel höher durch den hping3?

Zitat von: MadMax-FHEM am 29 Oktober 2017, 17:44:25
Was ich gerne hätte bzw. ich mir mal basteln wollte ist eine höhere Frequenz für den hping3 bei Abwesenheit (da ist mir der Akku ja egal weil da der hping3 ja nicht wirkt ;)  ), dann sollte schnell die echte Anwesenheit erkannt werden wenn ich wieder zurück komme.
Sicher, wenn du nicht da bist, ist die Häufigkeit egal, weil der Akku ja auch nicht da ist  ;D  genau das meine ich ja...wenn du nicht da bist, greift doch erst die lange Zeit für die Abfrage  :-\

Gruß Dusti
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 29 Oktober 2017, 20:14:35
Hm, dann ist das wohl beim iPhone so...

Bei mir war es halt ein paar mal in der Nacht, da ich dort wohl tatsächlich nichts mit dem Telefon mache ;)

Ich habe kein push aktiviert und frage Mail etc. nur alle keine Ahung was ab...

Wie gesagt: ein paar mal die Nacht. Und wenn ich dann bei offenem Fenster geschlafen habe kam eben die Nachricht "Fenster offen"... Unnötig weil ich war ja da.

Das ist seit dem weg und ein paar mal nachts einen hping3 ist ok...
...schade, dass es bei dir dann wohl nicht 2-Stufig geht/sinn macht... :-|

Musst halt mal sehen wie es sich bzgl. Akku verhält, wenn du nur den hping3-Mechanismus nimmst (so wie der Thread ja eigentlich gedacht ist/begonnen hat)...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: dusti64 am 29 Oktober 2017, 20:52:31
Na ich schau mir das mal ein paar Tage an...mal sehen, wie es sich auswirkt.

Trotzdem Danke und einen schicken Abend 🙋‍♂️

Gruß Dusti
Titel: Antw:Presence und iPhone / Android
Beitrag von: T3mplate am 29 Oktober 2017, 23:09:54
Zitat von: MadMax-FHEM am 29 Oktober 2017, 20:14:35
Hm, dann ist das wohl beim iPhone so...

Bei mir war es halt ein paar mal in der Nacht, da ich dort wohl tatsächlich nichts mit dem Telefon mache ;)

Ich habe kein push aktiviert und frage Mail etc. nur alle keine Ahung was ab...

Wie gesagt: ein paar mal die Nacht. Und wenn ich dann bei offenem Fenster geschlafen habe kam eben die Nachricht "Fenster offen"... Unnötig weil ich war ja da.

Das ist seit dem weg und ein paar mal nachts einen hping3 ist ok...
...schade, dass es bei dir dann wohl nicht 2-Stufig geht/sinn macht... :-|

Musst halt mal sehen wie es sich bzgl. Akku verhält, wenn du nur den hping3-Mechanismus nimmst (so wie der Thread ja eigentlich gedacht ist/begonnen hat)...

Gruß, Joachim

Kannst du deine Lösung mal posten?
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 29 Oktober 2017, 23:50:19
Zitat von: T3mplate am 29 Oktober 2017, 23:09:54
Kannst du deine Lösung mal posten?

Jep.

Also ich habe ein PRESENCE wie hier im Thread beschrieben mit hping3-Script.
Das ist auch das, nach welchem ich die Automatiken laufen lasse, bei Anwesenheit/Abwesenheit (z.B. Fenster geschlossen etc. wenn ich weg bin), da nur dieses zuverlässig abwesend anzeigt, wenn ich tatsächlich weg bin.

Hier das list:


Internals:
   DEF        function {my_CheckPhone("192.168.1.79", "xx:xx:xx:xx:xx:xx")} 3600
   MODE       function
   NAME       pIch
   NOTIFYDEV  global
   NR         351
   NTFY_ORDER 50-pIch
   STATE      absent
   TIMEOUT_NORMAL 3600
   TIMEOUT_PRESENT 3600
   TYPE       PRESENCE
   READINGS:
     2017-10-29 22:46:53   model           function
     2017-10-29 22:47:08   presence        absent
     2017-10-29 22:47:08   state           absent
   helper:
     ABSENT_COUNT 0
     call       {my_CheckPhone("192.168.1.79", "xx:xx:xx:xx:xx:xx")}
Attributes:
   alias      Ich
   devStateIcon absent:user_ext_away present:user_available maybe.absent:user_available
   event-on-change-reading .*
   icon       user_unknown
   room       Eingang


Das Intervall von 3600 Sekunden könnte auch noch (deutlich) größer sein, da es mir hier eher auf den statusRequest ankommt, den das andere PRESENCE (lan-ping) auslöst, wenn das erkennt oder zu erkennen glaubt, dass ich weg bin.

Hier das list dazu:


Internals:
   ADDRESS    192.168.1.79
   CHANGED
   DEF        lan-ping 192.168.1.79
   MODE       lan-ping
   NAME       pIch_light
   NOTIFYDEV  global
   NR         355
   NTFY_ORDER 50-pIch_light
   STATE      present
   TIMEOUT_NORMAL 30
   TIMEOUT_PRESENT 30
   TYPE       PRESENCE
   READINGS:
     2017-10-29 22:46:53   model           lan-ping
     2017-10-29 23:43:23   presence        present
     2017-10-29 23:43:23   state           present
   helper:
     CURRENT_STATE present
     PRESENT_COUNT 0
Attributes:
   absenceThreshold 2
   event-on-change-reading .*


D.h. das lan-ping PRESENCE läuft ganz normal.
Wenn dieses glaubt mein Handy wäre absent, dann wird per notify ein statusRequest beim hping3 PRESENCE ausgelöst.
Dieses geht eigentlich zuverlässig nur dann auf absent, wenn ich tatsächlich weg bin.
Gerade nachts hatte ich da öfter mal "Fehlalarme" (Fenster noch auf)...
...seither nicht mehr.

Hier noch das notify:


Internals:
   DEF        pIch_light:(absent|present) set pIch statusRequest
   NAME       nPresenceHandy
   NR         359
   NTFY_ORDER 50-nPresenceHandy
   REGEXP     pIch_light:(absent|present)
   STATE      active
   TYPE       notify
   READINGS:
     2017-10-29 22:46:53   state           active
Attributes:


Das Auslösen des statusRequest auch bei present-Meldung des lan-ping PRESENCE brauche ich, damit (trotz des großen Abfrageintervalls des "Haupt-PRESENCE") der Status auch im für mich eigentlich wichtigen PRESENCE gesetzt wird.

Die Erkennung auf "present" könnte etwas schneller gehen (da ist lan-ping auch etwas langsam) aber wichtiger ist mir (aktuell) die Erkennung auf absent und das zuverlässig ohne "Fehlalarme"...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: T3mplate am 30 Oktober 2017, 10:55:34
Zitat von: MadMax-FHEM am 29 Oktober 2017, 23:50:19
Jep.

Vielen Dank.
Musstest du nicht aber auch Änderungen am bash-skript oder der Utils vornehmen?

VG
Stefan
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 30 Oktober 2017, 11:16:15
Zitat von: T3mplate am 30 Oktober 2017, 10:55:34
Vielen Dank.
Musstest du nicht aber auch Änderungen am bash-skript oder der Utils vornehmen?

VG
Stefan

Gerne.

Nein, warum?

Sind (bis auf den Namen meiner Funktion ;)  ) identisch zum ersten Post...

Ich habe ja nur das hping3 PRESENCE angelegt wie beschrieben, allerdings mit (sehr) großem Abfrage-Intervall (eigentlich bräuchte das gar nicht abfragen aber disable geht ja nicht ;)  )...
Bei dem rufe ich dann durch das notify den "statusRequest" auf, dadurch macht es aktiv eine Abfrage und liefert "absent/present" (und absent halt nur, wenn tatsächlich absent)...

Dann noch ein normales lan-ping PRESENCE (bzw. das was ich schon immer hatte aber halt nicht immer zuverlässig funktioniert hat) welches dann bei absent und present per notify den "statusRequest" beim hping3-PRESENCE auslöst (siehe oben ;)  ).

Und wie gesagt die 2 Stufen nur wegen dem Akkuverbrauch.
Gefühlt war der Akku nachts immer deutlich runter als ich anfangs nur den hping3-PRESENCE laufen hatte (Abfragezyklus ca. 1min).

EDIT: und wie geschrieben orientiere ich mich nur am hping3-PRESENCE bzgl. present/absent (das andere dient nur zum "Anstoßen" ;)  )

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: T3mplate am 30 Oktober 2017, 11:17:58
Zitat von: MadMax-FHEM am 30 Oktober 2017, 11:16:15
Gerne.

Nein, warum?

Sind (bis auf den Namen meiner Funktion ;)  ) identisch zum ersten Post...

Ich habe ja nur das hping3 PRESENCE angelegt wie beschrieben, allerdings mit (sehr) großem Abfrage-Intervall (eigentlich bräuchte das gar nicht abfragen aber disable geht ja nicht ;)  )...
Bei dem rufe ich dann durch das notify den "statusRequest" auf, dadurch macht es aktiv eine Abfrage und liefert "absent/present" (und absent halt nur, wenn tatsächlich absent)...

Dann noch ein normales lan-ping PRESENCE (bzw. das was ich schon immer hatte aber halt nicht immer zuverlässig funktioniert hat) welches dann bei absent und present per notify den "statusRequest" beim hping3-PRESENCE auslöst (siehe oben ;)  ).

Und wie gesagt die 2 Stufen nur wegen dem Akkuverbrauch.
Gefühlt war der Akku nachts immer deutlich runter als ich anfangs nur den hping3-PRESENCE laufen hatte (Abfragezyklus ca. 1min).

Gruß, Joachim

Dann wird das heute Abend gleich mal getestet.
Titel: Antw:Presence und iPhone / Android
Beitrag von: T3mplate am 31 Oktober 2017, 09:35:51
Zitat von: MadMax-FHEM am 29 Oktober 2017, 23:50:19

Internals:
   DEF        pIch_light:(absent|present) set pIch statusRequest
   NAME       nPresenceHandy
   NR         359
   NTFY_ORDER 50-nPresenceHandy
   REGEXP     pIch_light:(absent|present)
   STATE      active
   TYPE       notify
   READINGS:
     2017-10-29 22:46:53   state           active
Attributes:

So. Ich habe deine Idee jetzt übernommen.
Ich habe eine Presence Funktion über die Fritzbox (statt LAN Ping liest diese die angemeldeten Geräte auf der Fritzbox aus) laufen.
Diese funktionierte entgegen LAN Ping in der Vergangenheit nahezu Fehlerfrei bei einem Puffer von 10 Minuten.
Seit iOS11 aber habe ich mindestens 10 falsche "absent" pro Tag, was natürlich absoluter Mist ist.

Jetzt aber meine Frage zu deinem notify:
Wenn ich das richtig verstehe, dann reagierst du auf einen Wechsel von "absent" auf "present" oder andersherum.
Wenn solch ein Wechsel auf deinem LAN Ping stattfindet, dann lässt du dein führendes present Modul per statusRequest schauen.

Wie gehst du mit folgendem Fall um:
1. Dein LAN Ping macht eine Falschmeldung -> "absent"
2. Du prüfst mit hping3 ob das stimmt -> führendes Modul bleibt auf "present"
3. Direkt nach dem Falschmeldung verlässt du wirklich das Haus
4. Da LAN Ping noch auf "absent" ist, wechselt das Device nicht den Status
5. Das hping3 Modul geht erst nach 3600s (oder mehr bei höherem Intervall) auf "absent"

Ich habe deshalb folgendes bei mir umgesetzt:

defmod Stefan_Handy_Abgleich DOIF ([Stefan_Handy] ne [Stefan_Handy_Fritzbox]) (set Stefan_Handy statusRequest) (setreading Stefan_Handy_Fritzbox state [Stefan_Handy:state])
attr Stefan_Handy_Abgleich do always
attr Stefan_Handy_Abgleich group Stefan_Handy
attr Stefan_Handy_Abgleich icon it_smartphone
attr Stefan_Handy_Abgleich room Wohnzimmer-BG


Damit gleiche ich die beiden presence Module ab. Wird ein Unterschied festgestellt, dann wird hping3 ausgeführt und dieser Status in das Fritzbox Presence Device überführt. Dadurch kommt nach X Minuten (in meinen Fall 180sekunden) ein neuer Wechsel bei Fritzbox Presence und der Abgleich wird erneut durchgeführt.

Ist diese Lösung besser oder schlechter? Mich würde deine Meinung interessieren.
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 31 Oktober 2017, 10:49:36
Hmm,

stimmt wohl dieser Fall wäre nicht abgedeckt.

Ist aber noch nicht aufgetreten (gefühlt und laut Log)...

Tagsüber (wo ich ja doch immer wieder mal was mit dem Handy mache) hatte bislang auch das "normale" lan-ping immer funktioniert...
...Probleme/Unstimmigkeiten hatte ich nur nachts.

Bin mir bzgl. DOIF nicht sicher (verwende es [bislang] noch nicht) aber soweit mir bekannt braucht ein DOIF ebenfalls einen "Auslöser".
Da aber ja kein Statuswechsel kommt, kommt auch (dank event-on-change-reading) kein Event, also wird auch das DOIF nicht erneut ausgeführt...
...gleiches Problem.
(habe nachgesehen müsste so sein: kein Ereignis kein DOIF)

D.h. du müsstest (wie ich auch) das event-on-change-reading beim lan-ping PRESENCE/Fritzbox PRESENCE wegnehmen!

Das setreading ist vermutlich unnötig bzw. fraglich, ob das macht wie es gedacht ist:
da vermutlich das Ergebnis des statusRequest des hping3 noch nicht da ist würde das Fritzbox PRESENCE vermutlich auf present gehen (durch setreading) bis zum nächsten Prüfen...
Erst danach (nun ist ja das hping3 PRESENCE auch absent) würden beide Status auf dem selben Wert sein: absent (Fritzbox erneute eigenprüfung und hping3 durch den statusRequest).
Ohne das setreading wären beide Status nach dem hping3 statusRequest automatisch auf dem gleichen Stand: Fritzbox PRESENCE war ja absent und das hping3 PRESENCE ist es nach dem statusRequest auch.
Also gleicht sich das eigentlich automatisch ab oder es ist was unstimmig, dann eben noch mal statusRequest bis es stimmt...

Statt setreading state sollte set auch genügen...
...aber ich denke es ist unnötig (siehe oben).

Aber danke für den Hinweis auf die Lücke.
Ich werde es allerdings so lösen (bleibe bei notify ;)  ):

event-on-change-reading wegnehmen beim lan-ping PRESENCE
dadurch wird ja jeder Status (auch bei nicht Wechsel) gemeldet
notify löst aus
allerdings will ich ja nicht jedesmal einen statusRequest (daher ja das event-on-change-reading und die 2 stufigkeit), daher werde ich auch auf unterschiedlichen Status prüfen und nur dann einen hping3 statusRequest auslösen, wenn sich die beiden unterscheiden (also so wie du mit DOIF ;)  ).

Gruß und danke, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: dindihi am 11 November 2017, 13:47:34
Nur so als Info, hatte auch lange das Problem dass die Android bzw Ipad's im Standby nach ner Weile keine ping's mehr beantworten.
Da ich als Router Mikrotik nutze mit capsman, hatte ich dann die Idee dies über die caps registration table zu realisieren.

Hab dies dann so gelöst:

sub CheckPhone($$)
{
my ($ip,$mac)= @_;
my $ret = "";
my $cmd = "ssh -l USERNAME -i /opt/mikrotik/rb3011_id_dsa 192.168.88.1 \"/caps-man registration-table print count-only  where mac-address=$mac\" |tr -d \'\\r\\n\' |tr -s \' \'";
$ret = qx($cmd);
$ret =~ s,[\r\n]*,,g;
Log3 "CheckPhone", 2, "CheckPhone: $ret";
if ($ret == 1) {return 1;} else {return 0;}
}

(im script wird die Variable IP nicht genutzt.)
Das dsa certificate muss zuerst erstellt werden (google).

Titel: Antw:Presence und iPhone / Android
Beitrag von: BooosesThaSnipper am 19 November 2017, 10:42:18
Hi zusammen,

bin neu hier und habe gerade diesen Thread gefunden. Eigentlich komme ich aus der LightManager Ecke und habe dort eine ähnliche Anforderung gehabt und hab ebenso hping3 genutzt um meine Anforderung zu lösen. (https://www.jbmedia.de/forum/viewtopic.php?f=24&t=952)

Hab das Script dazu auch bereits seit längerem auf GitHub stehen:
https://github.com/BooosesThaSnipper/SmartHome/blob/master/PresenceCheck2Marker/presencecheck2marker.sh

Vielleicht hilft diese Variante auch hier dem ein oder anderem weiter. Aktuell ist dieses Script zu 100% auf den LightManager ausgelegt. Da ich noch neu bei FHEM bin, und aktuell noch beim einlesen bin, weiß ich nicht was FHEM für Rückgabewerte erwartet. Aus den bereits genannten Scripten reicht wohl ein ReturnCode von 0 oder 1 (abwesend / anwesend) aus. Ist das korrekt?

Falls Interesse besteht würde ich das Script für FHEM umschreiben, so dass am Ende eine 0 oder 1 raus kommt. Würde hierfür Interesse bestehen?

Viele Grüße
Markus


Titel: Antw:Presence und iPhone / Android
Beitrag von: Neuhier am 19 November 2017, 10:58:02
@dindihi
Das Problem ist wohl eher, daß das Handy nach einer Weile kein WLAN aktiv hat.
Müßtest mal schauen, ob Du diesen Ruhemodus (?) deaktivieren kannst.

Ich mache hier Presence über G-Tags, also BT.
Titel: Antw:Presence und iPhone / Android
Beitrag von: bstohs am 27 November 2017, 21:36:40
danke für die tollen Code-Fragmente

ich habe lange probiert, bis ich eine stabile Funktionsweise hatte.

Auf meinem Raspi funktioniert hping3 mit dem im Code angegebenen Interface nicht.
Also habe ich den Parameter weggelassen und es wird das Standard-Interface verwendet.
Hier meine presence.sh Datei:

declare -a DEVICES
sudo hping3 -2 -c 10 -p 5353 $1 -q >/dev/null 2>&1
sleep 2
DEVICES=`arp -an | awk '{print $4}'`
CHECK="$2"
if [[ ${DEVICES[*]} =~ $CHECK ]]
then
echo "1"
else
echo "0"
fi
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 29 Dezember 2017, 01:01:26
Mahlzeit,

ich kann die hping3 Geschichte bisher nicht als wakeup nachstellen bei einem S5 und einem S7.
Scheint es dann doch nur bei Iphone zu gehen?
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 29 Dezember 2017, 02:03:49
Zitat von: Master_Nick am 29 Dezember 2017, 01:01:26
Scheint es dann doch nur bei Iphone zu gehen?

Nein, habe ein SONY Xperia X compact und damit funktioniert es auch.

Daher wurde es von anfänglich iPhone auf iPhone und Android umbenannt ;)

Was geht denn nicht?
Wird alles asuber ausgeführt aber das Telefon geht trotzdem auf absent, obwohl present?

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 29 Dezember 2017, 10:15:48
Moin,

also ich habe den hping3 manuell ausgeführt als mein Telefon schlief und es erschien dennoch nicht in arp Tabellen oder ließ sich aktiv anpingen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 02 Januar 2018, 23:43:51
Frohes Neues!

:) So habe mir nun mal die Zeit genommen und siehe da bisher sieht es sehr gut aus.
Vielen Dank für diese fleißige Vorarbeit - da musste man echt nur noch nehmen - tausend Dank!!

Mache nun mal eine Testphase und hoffe dann die ausgelagerte Logik auf den Mobiltelefonen abschalten zu können.

Nun wäre es ja noch fantastisch für diese Lösung automatisch Geräte zu erkennen. Also einen Filter für die Geräte, die IMMER im Netz sind (NAS, Router, APs, Pis, etc.) und wenn aber neue Geräte hinzukommen sollten sie automatisch angelegt werden und mittels der Funktionalität auf Anwesenheit geprüft werden. Oder zumindest vorgeschlagen für Anlage (Touch freundlich für das Bedienpanel).

Das wäre ein Traum! Der schon wieder meine aktuellen Fähigkeiten übersteigt   :-[


Aktuelle Version meines Scriptes: https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242 (https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242)
Titel: Antw:Presence und iPhone / Android
Beitrag von: fhem_starter_1 am 14 Januar 2018, 11:57:56
Hallo zusammen,

ich habe das Skript wie im ersten Post beschrieben eingebunden.
Ich habe anschließend ein Gerät mit "define handy_test function {CheckiPhone("192.168.0.103", "C0:xx:xx:xx:xx:xx")} 60 60" angelegt.
Allerdings bekomme ich immer die Fehlermeldung "PRESENCE (handy_test) - error while processing check: unexpected function output (expected 0 or 1): "
Hat jemand eine Idee, woher das kommen könnte? Der State des Gerätes bleibt auch dauerhaft auf "error".

Hier nochmal die 99_myUtils.pm:
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.
sub CheckiPhone($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx(/opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckiPhone", 2, "CheckiPhone: $ret";
    return 0;
  }
}
1;
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 14 Januar 2018, 12:50:02
Poste doch mal ein list des PRESENCE-Devices...

Und: das Script presence.sh hast du nach /opt/fhem/FHEM kopiert und ausführbar gemacht...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 14 Januar 2018, 13:31:08
Die letzte Version von Master_Nick funktioniert mit meinem iPhone 6S leider nur eingeschränkt. Sobald das iPhone länger als +5 Minuten nichts mehr gemacht hat (schläft) wird es nicht mehr gefunden. Das Aufwecken scheint nicht so funktionieren.
Hat jemand eine Idee, woran das scheitern kann?
Titel: Antw:Presence und iPhone / Android
Beitrag von: fhem_starter_1 am 14 Januar 2018, 13:51:03
Zitat von: MadMax-FHEM am 14 Januar 2018, 12:50:02
Poste doch mal ein list des PRESENCE-Devices...

Und: das Script presence.sh hast du nach /opt/fhem/FHEM kopiert und ausführbar gemacht...

Gruß, Joachim
Internals:
   DEF        function {CheckiPhone("192.168.0.103", "xx:xx:xx:xx:xx:xx")} 60 60
   MODE       function
   NAME       handy_test
   NOTIFYDEV  global
   NR         97
   NTFY_ORDER 50-handy_test
   STATE      error
   TIMEOUT_NORMAL 60
   TIMEOUT_PRESENT 60
   TYPE       PRESENCE
   READINGS:
     2018-01-14 11:39:32   model           function
     2018-01-14 13:48:55   state           error
   helper:
     ABSENT_COUNT 0
     PRESENT_COUNT 0
     call       {CheckiPhone("192.168.0.103", "xx:xx:xx:xx:xx:xx")}
Attributes:

Mac-Adresse hab ich hier mal durch xx ersetzt. Die Datei ist ausführbar in dem Ordner, hab ich auch per ssh nochmal getestet, Rechte sind auch an fhem:dialout angepasst.
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 14 Januar 2018, 14:09:14
Was kommt denn auf der Console zurück, wenn du das Script direkt auf der Linux Console aufrufst?

Steht etwas im fhem Log?

Denn die Sub sollte ja alles außer 0 bzw. 1 abfangen und nur 0 oder 1 zurückgeben aber einen Eintrag machen was tatsächlich zurück kam...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: fhem_starter_1 am 14 Januar 2018, 14:50:12
Wenn ich die IP und Mac eingebe kommt dort eine 0 zurück, wenn ich nur die IP oder gar nichts eingebe kommt eine 1 zurück. Im Log steht nur der Fehler hier:
PRESENCE (handy_test) - error while processing check: unexpected function output (expected 0 or 1):
Titel: Antw:Presence und iPhone / Android
Beitrag von: frank am 14 Januar 2018, 15:26:35
in deiner funktion fehlt am ende die zeile:
return $ret;
Titel: Antw:Presence und iPhone / Android
Beitrag von: fhem_starter_1 am 14 Januar 2018, 15:36:13
Zitat von: frank am 14 Januar 2018, 15:26:35
in deiner funktion fehlt am ende die zeile:
return $ret;
Das war's, danke!
Dann scheint das Skript im ersten Post falsch zu sein, sollte eventuell mal angepasst werden
Titel: Antw:Presence und iPhone / Android
Beitrag von: frank am 14 Januar 2018, 16:02:35
da hatte ich aber geschaut und mit deinem verglichen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 14 Januar 2018, 20:27:01
Wenn man im letzten Script von MadMax-FHEM das erste

sleep .1

durch ein

sleep .2

ersetzt, so verbessert sich scheinbar die Erkennung. Zumindest habe ich das bei mir auf einem Pi3 festgestellt. Vorher sehr viele false absents, jetzt mit dieser Anpassung sehr viel zuverlässiger.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Thyraz am 15 Januar 2018, 09:18:43
Bei den Lösungen mit Sleep würde ich das Script evtl. umbauen, dass es keinen Rückgabewert zurückgibt, sondern FHEM über andere Wege benachrichtigt.
Zum Beispiel über Telnet und dann dafür das Script nicht mit qx starten, damit es es im Hintergrund und nicht sychron gestartet wird.

Wenn man den im Post 1 beschriebenen Weg geht, ruft FHEM das Script ja synchron auf und wird blockiert bis zum Rückgabewert wenn ich das richtig verstehe.

Klar sind 0.2 Sekunden nicht sonderlich lange, aber wenn man sich das bei jedem Script / Modul denkt addiert sich das schnell.
Und wenn man mehrere Handys überwachen will werden die Gedenksekunden auch länger...

Titel: Antw:Presence und iPhone / Android
Beitrag von: frank am 15 Januar 2018, 10:58:02
sicher das hier die fhem hauptinstanz blockiert wird?
im mode lan-ping arbeitet presence doch nonblocking. warum sollte das im mode function anders sein.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Thyraz am 15 Januar 2018, 11:09:21
Ach verdammt.
Da lag mein Denkfehler. ;)

Hatte nur die Funktion selbst im Blick.
Den Aufruf über Presence hab ich ausgeblendet.

Dann passt es natürlich..
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 15 Januar 2018, 13:27:14
Zitat von: kjmEjfu am 14 Januar 2018, 13:31:08
Die letzte Version von Master_Nick funktioniert mit meinem iPhone 6S leider nur eingeschränkt. Sobald das iPhone länger als +5 Minuten nichts mehr gemacht hat (schläft) wird es nicht mehr gefunden. Das Aufwecken scheint nicht so funktionieren.
Hat jemand eine Idee, woran das scheitern kann?

Konntest du entdecken, woran das bei dir liegt?
hping3 nutzen ja alle Versionen - lediglich nutze ich nicht den direkten ARP-Cache da mir der zu unklar ist im Timeout bzw. ich Netzwerkgeräte habe die den ARP noch weiter vor halten und kommunizieren (was ja generell im Netzwerk durchaus ein Performance-Bonus ist).
Ich und meine Frau sind beide mit Android unterwegs - die IPhone meiner Familie wurden aber bisher ohne Probleme erkannt.

Bisher kann ich von einer 100% Erfolgsquote reden seit dem 02.01.2018.

Wahrscheinlich muss man aber so eine erkennung immer etwas auf seine Umgebung (Equipment im Netzwerk und Co.) abstimmen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 15 Januar 2018, 14:05:52
Zitat von: Master_Nick am 15 Januar 2018, 13:27:14
Konntest du entdecken, woran das bei dir liegt?

Ja, ich musste den Sleep im Script von 0.1 auf 0.2 verlängern.
Bei 0.1 stand noch nichts im arp drin, so dass dann nix gefunden wurde. Nach 0.5 war der Eintrag schon wieder weg.
War mehr oder weniger Zufall, dass ich es darauf zurück führen konnte.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 15 Januar 2018, 14:11:53
Zitat von: kjmEjfu am 15 Januar 2018, 14:05:52
Ja, ich musste den Sleep im Script von 0.1 auf 0.2 verlängern.
Bei 0.1 stand noch nichts im arp drin, so dass dann nix gefunden wurde. Nach 0.5 war der Eintrag schon wieder weg.
War mehr oder weniger Zufall, dass ich es darauf zurück führen konnte.

Aber das hast du dann in MadMaxs Version gemacht richtig verstanden ;-) ?
Das arbeitet mit dem OS eigenen Arp Cache da kann es durchaus dauern.

Aber wenn es so funktioniert ist es ja super :-)

Bei mir blieben Geräte über 30 Minuten in dem Cache daher war das für mich keine Lösung. Eine Erkennung sollte ad-hoc sein und nicht gecached (meine persönliche Ansicht *g*).
Aber die Jungs haben großartige Arbeit geleistet hier! Hatte noch kaum eine Anwesenheits-Erkennung die so gut arbeitet!
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 15 Januar 2018, 14:16:42
Zitat von: Master_Nick am 15 Januar 2018, 14:11:53
Aber das hast du dann in MadMaxs Version gemacht richtig verstanden ;-) ?
Das arbeitet mit dem OS eigenen Arp Cache da kann es durchaus dauern.

jeps, richtig verstanden :-)
Ich muss jetzt mal schauen, ob das mit dem Wert dauerhaft zuverlässig funktioniert.

Zitat von: Master_Nick am 15 Januar 2018, 14:11:53
Bei mir blieben Geräte über 30 Minuten in dem Cache daher war das für mich keine Lösung. Eine Erkennung sollte ad-hoc sein und nicht gecached (meine persönliche Ansicht *g*).

Da bin ich deiner Meinung. Deshalb gefiel mir eigentlich auch die "Erkennung" mit Geofency (Webhook) besser. Aber seit örtlichem Umzug ist der minimale Radius zu groß und führt zu false positives - mal abgesehen davon, dass das VPN-on-demand in der aktuellen iOS-Version nicht mehr so zuverlässig automatisch aufgebaut wird und dann gar kein Webhook aufgerufen werden kann.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 15 Januar 2018, 14:22:00
Zitat von: kjmEjfu am 15 Januar 2018, 14:16:42
Da bin ich deiner Meinung. Deshalb gefiel mir eigentlich auch die "Erkennung" mit Geofency (Webhook) besser. Aber seit örtlichem Umzug ist der minimale Radius zu groß und führt zu false positives - mal abgesehen davon, dass das VPN-on-demand in der aktuellen iOS-Version nicht mehr so zuverlässig automatisch aufgebaut wird und dann gar kein Webhook aufgerufen werden kann.

Dann versuch es doch mal mit dem von mir mit arp-scan - da hast du keinen Cache - sleeps sind ja an ähnlicher Stelle soweit ich das jetzt mal eben überflogen bin :-)
Würde mir tatsächlich auch helfen, da ich voraussichtlich erst dann merke, dass es bei mir mit IPhones nicht zuverlässig ist, in dem Moment wo es dann notwendig wäre (Habe einige Sachen in Abhängigkeit von der Anwesenheit geschaltet die durchaus nerven können wenn man dann als Gast in der Wohnung ist *g* man wird dann halt ignoriert)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Thyraz am 15 Januar 2018, 14:29:37
@Master_Nick ich wollte es die Tage auch nochmal mit deiner Version testen, da die Originalversion bei mir unzuverlässig war.

Zum Testen hab ich mir damals einfach ein paar Tage lang Push-Nachrichten bei jedem Anwesend / Abwesend Event geschickt.
Damit bekommt man recht schnell mit ob etwas spinnt oder nicht.
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 15 Januar 2018, 19:05:36
Beim arp-scan findet sich in 90% aller Fälle kein Treffer nach dem hping3. Funktioniert also derzeit nicht (mehr).
arp -an zeigt einen Treffer, aber dann habe ich nur den Cache.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 16 Januar 2018, 11:24:13
Zitat von: kjmEjfu am 15 Januar 2018, 19:05:36
Beim arp-scan findet sich in 90% aller Fälle kein Treffer nach dem hping3. Funktioniert also derzeit nicht (mehr).
arp -an zeigt einen Treffer, aber dann habe ich nur den Cache.

Entschuldige die Frage - arp-scan hast du gesondert installiert? :-) Nicht das da ggf. schon ein Knackpunkt ist. (wobei ich stark davon ausgehe, dass du es hast!)
Ansonsten schau doch mal die MaxRetries von Pre und normaler detektion an, aktuell sollten sie beide auf 10 stehen. Das reicht bei mir im Netz komplett aus.

Oder wechselt die IP ggf öfter bei dir? Dann versuch es mal mittels Hostname (ich nutzte nur Hostnames um nur die MAC als fix Wert zu haben und so flexibel wie möglich zu sein).
Titel: Antw:Presence und iPhone / Android
Beitrag von: Thyraz am 16 Januar 2018, 11:52:18
Also ich hab die letzte Variante von Master_Nick mit arp-scan und den Retries gestern Nachmittag auch mal bei mir eingerichtet.

Lief bisher problemlos durch, mit der normalen Variante aus Post 1 hatte ich immer wieder absent Meldungen obwohl das Handy brav daheim lag.
Nach dem Aufwachen dann meist gesehen, dass es Nachts so 5-10 absent/presence Wechsel gab, während das Handy brav auf dem Nachttisch im Ladedock stand.

Hoffe das bleibt so. :)
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 16 Januar 2018, 12:41:13
Zitat von: Master_Nick am 16 Januar 2018, 11:24:13
Entschuldige die Frage - arp-scan hast du gesondert installiert? :-) Nicht das da ggf. schon ein Knackpunkt ist. (wobei ich stark davon ausgehe, dass du es hast!)
Ansonsten schau doch mal die MaxRetries von Pre und normaler detektion an, aktuell sollten sie beide auf 10 stehen. Das reicht bei mir im Netz komplett aus.

Oder wechselt die IP ggf öfter bei dir? Dann versuch es mal mittels Hostname (ich nutzte nur Hostnames um nur die MAC als fix Wert zu haben und so flexibel wie möglich zu sein).

Die IP habe ich in der Fritz.Box auf eine feste gestellt, daran happert es nicht.
Problem ist eher, dass der arp-scan in den meisten Fällen nach dem hping3 keinen Eintrag zur IP oder MAC findet. Dummerweise kann man aber ja nicht prüfen, ob der hping3 das iPhone überhaupt geweckt hat.
Heute nacht war das Handy 147mal abwesend. Klar, jetzt kann ich im PRESENCE-device den absenceThreshold weiter hochsetzen, aber das ist auch nicht im Sinne des Erfinders.

Ich versuche heute nochmal den arp-scan dediziert auf ein Interface zu schicken, aber bin skeptisch ob das hilft.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 16 Januar 2018, 13:19:32
"absenceThreshold weiter hochsetzen" <- nein definitiv nicht.

Der Gedanke wäre eher, dass man mal manuell schaut wie es sich verhält.

Also hingehen mit "sudo arp-scan -q -g iPHONE-IP" schaust wie lange es erreichbar ist - lass einfach mal 30 Minuten vergehen ohne was am Handy zu machen (ja ich weiß was für eine Anforderung *g*).

Und dann h3ping3 auf die IP: "sudo hping3 -q -2 -c 10 -p 5353 -i u1 iPHONE-IP" Ggf. musst du hier mal schauen ob das Interface überhaupt für dich passend ist. Ggf klappt der hping3 bei dir ja gar nicht und man bekommen es gar nicht mit (dank >/dev/null 2>&1).

Und dann sollte/müsste/hoffen wir es das Telefon aufwachen auf eine Art, die es in den ARP Raum zurück bringt. Normaler Ping war bei mir weiterhin nicht drin.
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 16 Januar 2018, 14:01:26
Zitat von: Master_Nick am 16 Januar 2018, 13:19:32
Also hingehen mit "sudo arp-scan -q -g iPHONE-IP" schaust wie lange es erreichbar ist - lass einfach mal 30 Minuten vergehen ohne was am Handy zu machen (ja ich weiß was für eine Anforderung *g*).

das verschwindet quasi aus dem arp-scan, sobald es den Auto-Lock macht.
Bin am Überlegen, ob ich noch einen Bluetooth-Scan einbaue. Vielleicht verläuft der positiv, wenn die anderen negativ sind und überdeckt dadurch.
Wäre dann ein 3-teiliger Scan statt 2-teilig.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 16 Januar 2018, 14:03:59
 :o Mh das entspricht so gar nicht dem Verhalten, dass die Iphones der anderen Nutzer hier haben.

Ist denn dein WLAN bei Standby auf immer an geschaltet (den echten Deep Sleep kann man ja anscheind eh nicht verhindern)?
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 16 Januar 2018, 14:15:35
Zitat von: Master_Nick am 16 Januar 2018, 14:03:59
Ist denn dein WLAN bei Standby auf immer an geschaltet (den echten Deep Sleep kann man ja anscheind eh nicht verhindern)?

Ich schalte zumindest nicht absichtlich ab.
Aber wie gesagt, ich versuche heute Abend nochmal explizit das Interface für hping3 und arp-scan festzulegen, vielleicht verhaspelt sich dort etwas.
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 16 Januar 2018, 20:15:43
zwei neue Erkenntnisse:

- auf einem anderen Pi läuft die Erkennung sehr viel zuverlässiger. Dafür müsste ich das Script aber remote auf dem anderen Pi ausführen oder dort per Cron ausführen und die Rückgabe an Presence geben ...
- der Bluetooth-Ping läuft auf dem unzuverlässigen Pi auch recht gut. Zumindest scheint das auf den ersten Blick so.

Eventuell kann man in das Script noch eine dritte Stufe einbauen?

sudo l2ping -t3 -c1 $Bluetooth-MAC

Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 16 Januar 2018, 21:09:25
Willst du wirklich mit BT arbeiten? Die Reichweite ist soviel naja.... :-)

Ich würde dem mal auf den Grund gehen was da los ist. Klingt als wäre bei dir was faul im Netz oder in der Konfiguration.

Aber klar wenn alles nix bringt bau ich dir das locker ein. Ist jetzt kein Hexenwerk.


Würde halt nur empfehlen es anders zu schaffen  8) 8)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Martin Fischer am 17 Januar 2018, 14:59:42
Moin Zusammen...

ich werfe auch mal ein Script in die Runde.. vielleicht kann es wer verwenden..  ;)

Meine Anwesenheitserkennung erfolgt über mehrere Stufen, die dann letztlich in einem Status enden. :)

Für solch eine Verwendung lieferte ich seinerzeit die Grundlage für das structure Device, welches dann in FHEM integriert wurde.

Folgende Methoden verwende ich um das Smartphone zu prüfen:

Da Smarthones aber auch mal ausgeschaltet werden (können ;) ), kommt zusätzlich noch die Anwesenheitserkennung via G-Tag Beacon am Schlüsselbund eines jeden Bewohners mittels collectord_lepresence und lepresenced auf mehrere "Satelliten" (RasPi) zum Einsatz. Seit heute wurde es um stationäre G-Tag Beacons in den Fahrzeugen erweitert ;)

Ein Smartphone wird demnach als structure-Device angelegt:

Internals:
   ATTR       smartphone
   CFGFN      /etc/fhem/conf.d/60_presence.cfg
   CHANGEDCNT 59753
   DEF        smartphone user.martin.phone.01.beacon user.martin.phone.01.bluetooth user.martin.phone.01.dhcpd user.martin.phone.01.ping user.martin.phone.01.wlan
   NAME       user.martin.phone.01.grp
   NR         2162
   NTFY_ORDER 50-user.martin.phone.01.grp
   STATE      absent
   TYPE       structure
   CONTENT:
     user.martin.phone.01.beacon absent
     user.martin.phone.01.bluetooth absent
     user.martin.phone.01.dhcpd absent
     user.martin.phone.01.ping absent
     user.martin.phone.01.wlan absent
   READINGS:
     2018-01-17 13:40:55   LastDevice      user.martin.phone.01.wlan
     2018-01-17 13:40:55   LastDevice_Abs  user.martin.phone.01.wlan
     2018-01-17 13:40:55   state           absent
Attributes:
   alias      Samsung Galaxy S7
   attendance user.martin.presence.01.grp
   clientstate_behavior relative
   clientstate_priority present absent
   devStateIcon present:HM-OU-LED16.green .*:HM-OU-LED16.off
   event-on-change-reading state
   event-on-update-reading state
   group      Martins Smartphone
   icon       it_smartphone
   room       Bewohner
   userattr   attendance attendance_map structexclude


Die Struktur setzt sich dann aus folgende Devices zusammen:








DeviceTypDefinitionBemerkung
user.martin.phone.01.beaconPRESENCEevent user.martin.phone.01.egigeozone:absent user.martin.phone.01.egigeozone:present 10 60Überwacht ein dummy Device, das direkt von extern durch das Smartphone gesetzt wird.
user.martin.phone.01.bluetoothPRESENCElan-bluetooth d8:5b:2a:xx:xx:xx 127.0.0.1:5222 10 30Anbindung an collectord
user.martin.phone.01.dhcpdPRESENCEevent user.martin.phone.01.dhcpd2fhem:absent user.martin.phone.01.dhcpd2fhem:present 10 60Überwacht ein dummy Device, das direkt von extern durch den ISC DHCP Daemon gesetzt wird.
user.martin.phone.01.pingPRESENCEevent user.martin.phone.01.hping:absent user.martin.phone.01.hping:present 60 60Überwacht ein dummy Device, das direkt von extern durch das anhängige Script gesetzt wird.
user.martin.phone.01.wlanPRESENCEfunction {checkUserPhoneWlan("user.martin")} 10 30Überprüft ob sich das Smartphone in eine Fritzbox bzw. Fritzrepeater (ge"meshed") eingebucht hat.

Die "Hilfesdevices" für EgiGeozone, ping und dhcp werden wie bereits erwähnt, direkt von aussen gesetzt. Zusätzlich werden diese jeweils durch ein eigenes watchdog Device überwacht, das nach 7 Minuten ohne eine neue Statusmeldung, den Status des Hilfsdevice automatisch auf absent setzt. Dies dient als Fallback, falls mal eins der "externen Melder" ausfällt.

Diese Konstellation ist nun mit den Bewohnern gekoppelt und in eine Alarmanlage (eigene, sehr umfangreiche Funktion in 99_myUtils.pm mit diversen Sensoren, Aktoren, etc.) eingebunden. Das Haus erkennt automatisch ob jemand anwesend ist bzw. nach Hause kommt oder ob niemand zu Hause ist.

Auf den Smartphones kommt die App EgiGeozone zum Einsatz. Mittels geofancy Device meldet die App direkt an das entsprechende RESIDENTS Device in FHEM. Edmund hat in den letzten Releases von EgiGeozone einige von mir vorgeschlagene und gemeinsam getesteten Features übernommen. Danke nochmal!

Die Alarmanlage wird (mit einem Puffer) automatisch scharf geschaltet, sobald sich keiner mehr in einem gewissen Radius ("Home") aufhält und weder die G-Tags am Schlüsselbund noch das Smartphone "physisch" in der Nähe ist und erkannt wurde. Ein Besuch bei den Nachbarn ist dann also durchaus möglich, ohne das gleich die Alarmanlage scharf geht. ;)

Ist keiner mehr anwesend, wird die "innere" als auch die "äußere" Sicherheit überwacht. Ist jemand anwesend, wird ab einer bestimmten Uhrzeit nur die Überwachung der "äußeren" Sicherheit bis in den Morgen getriggert.

Umgekehrt wird die Alarmanlage ausgeschaltet, wenn

Letzteres setzt jedoch voraus, das die Alarmanlage vorher auch scharf war. Ansonsten hat das "Auto" keine weitere Relevanz bei der Anwesenheitsüberwachung. Und natürlich kann man die Alarmanlage auch vollkommen losgelöst von der Anwesenheitserkennung steuern.

Das mal als "Kurzform" meiner Umsetzung ;)

Nun zum anhängigen Skript bzgl. der Erkennung via ping:
Ich habe das Skript vor einiger Zeit umgesetzt und aktiv im Einsatz. Es versucht die Anwesenheit eines Smartphones, das sich im lokalen Netz befindet, über mehrere Stufen (ping, nmap, hping3) zu ermitteln und direkt an FHEM zu melden. Der Aufruf erfolgt minütlich aus einem Cron-Job; der Status wird nur an FHEM gemeldet, wenn sich der Zustand ändert.

Da ich mehrere getrennte Netze betreibe ("IoT-Netz", "Heimnetz", "Hausautomationnetz") und sich dadurch FHEM und die zu überwachenden Smartphones nicht im selben Netz befinden, bilde ich die Anwesenheit in FHEM dann in einen Dummy Device ab, siehe oben ("Hilfedevice" "user.martin.phone.01.hping"). Dieses Device wird - wie beschrieben - von einem PRESENCE Device überwacht. Dies muss dann jeder für sich umsetzen, wie er meint.

root@abe:~# check-host-alive3 -h
Usage: check-host-alive3.sh [-h] [-v] -H <fhemserver> -P <port> -d <fhem_device> <ip-adresse>


Das Skript befindet sich im Anhang. Es erfordert also die Angabe der FHEM relevanten Adressen (IP, Port) als auch das entsprechende Device (bei mir ein dummy Device) und die IP-Adresse des Smartphones (feste IP Adresse zuweisen!).

Im folgenden noch meine FHEM interne Funktion "checkUserPhoneWlan($)" (99_myUtils.pm) zur Abfrage der Fritzbox Infrastruktur. Aufgerufen wird sie mit einem Devicenamen als Parameter. Bei mir ist das das RESIDENTS Device "user.martin".

Dieses Device hat zusätzliche Attribute "spendiert" bekommen (userattr "my_eMail my_phoneAlias my_phoneIP my_phoneMacBt my_phoneMacWlan my_telegramUsername"), wo ich z.B. die entsprechenden Infos hinterlege, z.B. die MAC Adresse für die WLAN Abfrage. So muss ich diese nur an einer Stelle in FHEM pflegen und kann sie überall wo sie gebraucht werden, aus diesem Device auslesen.

Die Funktion wird von dem entsprechenden PRESENCE Device (siehe oben) aufgerufen und prüft in allen FRITZBoxen bzw. Repeatern ob das Smartphone über WLAN eingebucht ist. Diese Funktion prüft sowohl Devices vom Typ FRTIZBOX als auch cloneDummy. Letzteres ist der Tatsache geschuldet, das ich - wie bereits geschrieben - ein kaskadiertes Netz mit getrennten Segmenten betreibe und in jedem Segment zumindest ein FHEM Server habe, der via FHEM2FHEM an den "Hauptserver" angebunden ist. Somit sind die Netze untereinander abgeschottet und keiner kann Unfung treiben ;)  Aber: wo ein Wille da ein Weg ;)

Viel Spaß...


########################################
# WLAN Überwachung (PRESENCE)
sub checkUserPhoneWlan($) {
  my $name = ( caller(0) )[3];    # get name of subroutine
  $name =~ s/^.*:://;             # remove package name
  my ( $user ) = @_;

  return _ERROR( $name, 1, "Please define $user first." )
      if ( !$defs{$user} );
  return _ERROR( $name, 1, "Please set attribute 'my_phoneMacWlan' for user '$user' first." )
      if ( !AttrVal( $user, "my_phoneMacWlan", "" ) );

  my $debug = ( AttrVal( $user, "verbose", 0 ) >= 1 ) ? 1 : undef;

  my $count = 0;
  my ($mac) = AttrVal( $user, "my_phoneMacWlan", "" );
  $mac =~ tr/:/_/;
  $mac =~ tr/a-z/A-Z/;
  Log3 $name, 0, "DEBUG $name: user:$user mac:$mac" if ($debug);
  my $inactive = "WLAN, 0 / 0 Mbit/s, 0";

  my @fbs = devspec2array("TYPE=FRITZBOX,TYPE=cloneDummy");
  foreach my $fb ( @fbs ) {
    Log3 $name, 0, "DEBUG $name: search for mac:$mac (user:$user) on fb:$fb" if ($debug);

    my $phone = ReadingsVal($fb, "mac_" . $mac,"absent");
    next if ( $phone eq "absent" || $phone eq "inactive" );
    next if ( $phone =~ /$inactive/ );
    if ( $phone =~ /WLAN/ ) {
      $count++;
      Log3 $name, 0, "DEBUG $name: found phone:$phone (user:$user, mac:$mac) on fb:$fb" if ($debug);
    }
  }
  return ( $count == 0 ) ? 0 : 1;
}

Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 20 Januar 2018, 19:37:34
Zitat von: Master_Nick am 16 Januar 2018, 21:09:25
Ich würde dem mal auf den Grund gehen was da los ist. Klingt als wäre bei dir was faul im Netz oder in der Konfiguration.

Aber klar wenn alles nix bringt bau ich dir das locker ein. Ist jetzt kein Hexenwerk.

Ich finde keinen Fehler :-(
Wobei mir auch der Ansatzpunkt fehlt. Verwunderlich ist, dass es vom Zero aus scheinbar problemlos funktioniert, der normale Pi (mit FHEM drauf) aber Probleme hat. Wo und wie man damit jetzt einen Fehler suchen könnte ... don't know.

Von daher wäre es natürlich cool, wenn du einen BT Ping mit einbauen würdest.
Ein
nmap -sU -sT $IP -p U:5353,T:62078
scheint auch nochmal irgendwie anders zu pingen und kriegt manchmal ein positives Ergebnis, wenn die anderen Pings nichts finden.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 21 Januar 2018, 15:15:17
Das klingt als würde das aufwecken bei dir nicht gehen.
Ansonsten als würden einige Geräte bei dir das Netzwerk beschneiden und jegliche ICMP Echo abschneiden. Sehr seltsam  :o


Welches Kommando brauchst du denn dann als 3. Stufe?

Auch wenn ich empfehle nicht einfach den leichtesten Weg zu gehen sondern das Problem zu finden *g*
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 21 Januar 2018, 16:35:57
Zitat von: Master_Nick am 21 Januar 2018, 15:15:17
Das klingt als würde das aufwecken bei dir nicht gehen.
Ansonsten als würden einige Geräte bei dir das Netzwerk beschneiden und jegliche ICMP Echo abschneiden. Sehr seltsam  :o


Welches Kommando brauchst du denn dann als 3. Stufe?

das wäre
sudo l2ping -t3 -c1 $Bluetooth-MAC

Zitat von: Master_Nick am 21 Januar 2018, 15:15:17
Auch wenn ich empfehle nicht einfach den leichtesten Weg zu gehen sondern das Problem zu finden *g*

da bin ich komplett bei dir. Aber ich nicht die geringste Idee, woran es happert. Von daher ist es schwierig dieses Problem zu lösen
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 21 Januar 2018, 16:47:51
Wenn der "kleine" Pi es kann, warum setzt Du Dir da nicht die Erkennung drauf, welche dann FHEM aktuallisiert? z.B. durch nc?
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 22 Januar 2018, 16:54:27
Zitat von: Wernieman am 21 Januar 2018, 16:47:51
Wenn der "kleine" Pi es kann, warum setzt Du Dir da nicht die Erkennung drauf, welche dann FHEM aktuallisiert? z.B. durch nc?

genau das habe ich jetzt auch gemacht :-)
scheint zu funktionieren
Titel: Antw:Presence und iPhone / Android
Beitrag von: RappaSan am 23 Januar 2018, 11:59:15
Ich hab mal Spaßeshalber das script aus #46 Edit 2 in /opt/fhem/FHEM/presence.sh eingegeben und das CheckiPhone von Seite 1 in 99_myUtils.pm.

Anschließend wird das Log zugemüllt mit folgenden Meldungen:
---
sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben

Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
Regeln erklärt hat.  Normalerweise läuft es auf drei Regeln hinaus:

    #1) Resprektieren Sie die Privatsphäre anderer.
    #2) Denken Sie nach bevor Sie tippen.
    #3) Mit großer Macht kommt große Verantwortung.
---

Hab ich da irgendwo etwas überlesen?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 23 Januar 2018, 12:42:12
Hi RappaSan,

ich denke das hat nichts mit dem Script zu tun sondern mit der Nutzung von "sudo" auf deinem System :-)
Hatte ich nach dem Update auf Strecht auf einem Pi von mir auch mal - ich meine hier findet man die Lösung (Antwort 17): https://stackoverflow.com/questions/21659637/how-to-fix-sudo-no-tty-present-and-no-askpass-program-specified-error
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 23 Januar 2018, 12:50:19
Solange Du nicht den dortigen Tipp verwendest: "NOPASSWD: ALL" ist es O.K.

Denn genau mit DEM Eintrag wird fhem = superuser und damit "böse" ...
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 23 Januar 2018, 12:51:44
 ;D immer wieder gut wenn mehere drauf schauen! :-D
Da muss ich ja mal prüfen wie ich es vor Monaten fixte....
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 23 Januar 2018, 12:54:18
Bei Sudo IMMER expliziete Programme freischalte und darauf achten, das diese NUR für root bearbeitbar (oder eigentlich überhaupt keine Schreibrechte).

Ansonsten ist es eine der ältesten bekannten Unix-Sicherheitslücke ....
Titel: Antw:Presence und iPhone / Android
Beitrag von: RappaSan am 23 Januar 2018, 14:20:13
ok, visudo war der Freund, der alles gerichtet hat.
Da mein Raspbian aber das "let" Kommando nicht mochte (das war doch mal 'n gaanz alter BASIC-Befehl...), habe ich das script noch etwas angepasst:

Zeile 46:
PRECOUNT=$(($PRECOUNT+1))
Zeile 65:
COUNT=$(($COUNT+1))

Nu läuft's. :)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 23 Januar 2018, 14:38:00
*Klugscheißermode on*
https://askubuntu.com/questions/385528/how-to-increment-a-variable-in-bash (https://askubuntu.com/questions/385528/how-to-increment-a-variable-in-bash)

Bitte nicht falsch verstehen  8)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 23 Januar 2018, 14:48:44
@Wernieman da hast du absolut Recht! Und solche Hinweise sind gut - Code darf ruhig an Qualität gewinnen und es merzt auch Fehlerquellen aus. :-)
Wobei man natürlich sagen muss nativ Bash ist es mit let eh nicht mehr gewesen. Portierbar wäre es anders. Hab es nun ohne let gestaltet.

Ich glaub das hatte ich tatsächlich einfach kopiert und umbenannt statt es schön zu machen im Gesamten ;-)

Zitat von: RappaSan am 23 Januar 2018, 14:20:13
ok, visudo war der Freund, der alles gerichtet hat.
Da mein Raspbian aber das "let" Kommando nicht mochte (das war doch mal 'n gaanz alter BASIC-Befehl...), habe ich das script noch etwas angepasst:

Zeile 46:
PRECOUNT=$(($PRECOUNT+1))
Zeile 65:
COUNT=$(($COUNT+1))

Nu läuft's. :)

Was sagt er denn bei dir bei let? Eigentlich müsste das voll und ganz gehen wundert eher das er da meckert. Alt mag sein aber nicht outdated oder ersetzt (meines Wissens nach).

Aus gegebenem Anlass daher:

EDIT 4 meiner Version des Scriptes aus diesem Thread ohne let (versuch es nativ mit bash zu machen - wenn noch weitere nicht native bash Funktionen genutzt werden, immer her damit):

*EDIT*
Neuste Version: https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242 (https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242)

Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 23 Januar 2018, 15:48:38
Wie sieht jetzt Dein Sudo-Eintrag aus?

Nach einem Kurzcheck hast Du nur 2 Programme drin: arp-scan und hping3
Titel: Antw:Presence und iPhone / Android
Beitrag von: fl_Indigo am 23 Januar 2018, 19:49:52
vielleicht hilfts ja jemandem - ich hab das bei mir wie folgt gelöst:

- DHCP leasetime am router auf 5 minuten gesetzt
- jedes phone hat eine reservierte IP am DHCP
- das DHCP leasefile vom router spiegle ich auf einen webserver am router welches ich mit HTTPMOD parse
- wenn phone im leasefile auftaucht --> present
- wenn phone nicht mehr im leasefile steht --> absent

als router OS hab ich gargoyle im einsatz (openwrt aufsatz)

config wie folgt:

#Anwesenheitserkennung
define Anwesenheit HTTPMOD http://10.0.0.254:81/leases.html 60
attr Anwesenheit userattr reading01Name reading01Regex ... reading11Name reading11Regex
attr Anwesenheit event-min-interval .*:60
attr Anwesenheit reading01Name Handy_Martin
attr Anwesenheit reading01Regex (10.0.0.50 Handy_Martin)
attr Anwesenheit reading11Name dummy
attr Anwesenheit reading11Regex (10.0.0.90 ESP8266_Socket_Wohnzimmer)
attr Anwesenheit room 07_Android_Geräte
attr Anwesenheit userReadings Handy_Martin_time:.* {my $timestamp_now = time_str2num(nowdate());; my $timestamp_last = time_str2num(ReadingsTimestamp("Anwesenheit","Handy_Martin","0"));; my $timestamp_diff = $timestamp_now - $timestamp_last;; return $timestamp_diff },\
attr Anwesenheit verbose 0

define handy_martin dummy
attr handy_martin userattr presence presence_map structexclude
attr handy_martin alias Handy Martin
attr handy_martin devStateIcon present:it_network@green absent:it_network@red
attr handy_martin group 1 Anwesenheit Neubau
attr handy_martin presence Anwesenheit_Neubau
attr handy_martin room 07_Android_Geräte
attr handy_martin sortby 1
define DOIF_handy_martin_presence DOIF ([Anwesenheit:Handy_Martin_time] < 600) (setreading handy_martin state present) DOELSEIF ([Anwesenheit:Handy_Martin_time] > 600) (setreading handy_martin state absent)
define DOIF_Telegram_martin_anwesend DOIF ([handy_martin:state] eq "present") (set TelegramBot message Martin zuhause!) DOELSEIF ([handy_martin:state] eq "absent") (set TelegramBot message Martin abwesend!)


der dummy im HTTPMOD zeigt auf ein geräte das immer präsent ist, damit die zeiten auch gerechnet werden wenn KEIN handy anwesend ist...
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 23 Januar 2018, 20:06:04
- DHCP leasetime am router auf 5 minuten gesetzt

Also was bestimmte Eigenschaften deines Netztes angeht halte ich das für eine sehr heftige Lösung - aber das kommt eben auch stark darauf an wie dein LAN genutzt wird und womit und und :-)
Für mich wäre das nix Habe aber eben auch 2 Aps da würd ich am Tag x IP changes haben :-D

Aber, eine sehr interessante Lösung und wenn es für dich hilft  8) Daumen hoch!
Titel: Antw:Presence und iPhone / Android
Beitrag von: fl_Indigo am 24 Januar 2018, 07:49:35
für MEINE geräte hab ich fixe IPs vergeben, das ist ja auch der schmäh warum ich es für presence nutzen kann.
alles anderen geräte sind eh wurscht welche IP die kriegen...
Titel: Antw:Presence und iPhone / Android
Beitrag von: RappaSan am 24 Januar 2018, 08:28:26
Zitat von: Master_Nick am 23 Januar 2018, 14:48:44
---

Was sagt er denn bei dir bei let? Eigentlich müsste das voll und ganz gehen wundert eher das er da meckert. Alt mag sein aber nicht outdated oder ersetzt (meines Wissens nach).

---


Hmmm, ich hab ja jetzt einiges umgestellt und krieg's nicht mehr nachvollzogen.
Irgendetwas mit wrong function in line Nr. xx oder so.

But nevermind, nun läuft's ja.

Nachtrag:
Hab's rekonstruieren können durch kopieren des originalscripts #46 Edit 2:
/opt/fhem/FHEM/presence.sh: 46: /opt/fhem/FHEM/presence.sh: let: not found
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 24 Januar 2018, 11:12:56
 :o welche Version von Raspian nutzt du denn?

Das klingt für mich wie als wäre die Funktion let bei dir nicht verfügbar.
Aber ich hab sie ja so oder so ausgebaut im EDIT 4.
Titel: Antw:Presence und iPhone / Android
Beitrag von: RappaSan am 25 Januar 2018, 14:59:25
Version auf dem Pi2:
Linux FHEM-jessie 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

Titel: Antw:Presence und iPhone / Android
Beitrag von: JoWiemann am 25 Januar 2018, 15:36:27
Hm, bash (GNU Bourne Again SHell) ist auch für Jessie als essenziell gelistet und im man file wird ,,let" weiterhin aufgeführt. Auf meinem zweiten Test-RPi läuft Jessie und ,,let" funktioniert.


Gesendet von iPad mit Tapatalk

Grüße Jörg
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 01 Februar 2018, 16:18:44
Bekomme folgende Meldung...

2018.02.01 16:16:45.219 1: PERL WARNING: Can't exec "/opt/fhem/FHEM/presence.sh": No such file or directory at ./FHEM/99_myUtils.pm line 87.
2018.02.01 16:16:45.221 3: eval: {CheckiPhone("xxx","xxx")}
2018.02.01 16:16:45.239 1: PERL WARNING: Use of uninitialized value $ret in substitution (s///) at ./FHEM/99_myUtils.pm line 89.
2018.02.01 16:16:45.239 3: eval: {CheckiPhone("xxx","xxx")}
2018.02.01 16:16:45.240 1: PERL WARNING: Argument "" isn't numeric in numeric ne (!=) at ./FHEM/99_myUtils.pm line 91.
2018.02.01 16:16:45.240 3: eval: {CheckiPhone("xxx","xxx6")}
2018.02.01 16:16:45.254 2: PRESENCE (Galaxy.A5.Wlan) - error while processing check: unexpected function output (expected 0 or 1):


das sh script ist aber da /opt/fhem/FHEM/presence.sh und mit 777 authorisiert.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 01 Februar 2018, 16:24:52
Mhhh....

Also das letzte mit unexpected ist ein Folgefehler aus dem ersten.

Ggf was kaputt kopiert? Also unvollständig?
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 01 Februar 2018, 16:47:20
Hab das Script genommen...

#!/bin/bash

declare -a DEVICES
sudo hping3 -2 -c 10 -p 5353 -i u1 $1 -q >/dev/null 2>&1
DEVICES=`arp -an | awk '{print $4}'`
CHECK="$2"
if [[ ${DEVICES[*]} =~ $CHECK ]]
then
echo "1"
else
echo "0"
fi
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 01 Februar 2018, 17:02:50
Hast du denn auch hping3 installiert?
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 01 Februar 2018, 17:09:11
Jep... und sogar erfolgreich getestet.


pi@raspberrypi:/opt/fhem/FHEM $ sudo hping3 -2 -c 10 -p 5353 -i u1 192.168.1.34 -q
HPING 192.168.1.34 (eth0 192.168.1.34): udp mode set, 28 headers + 0 data bytes

--- 192.168.1.34 hping statistic ---
10 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 01 Februar 2018, 17:10:38
Can't exec "/opt/fhem/FHEM/presence.sh": No such file or directory at ./FHEM/99_myUtils.pm line 87

ist aber ja recht eindeutig.

Wo liegt denn dein Script? Welche Rechte hat es (ls -al)?
Wie sieht dein Aufruf genau aus?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 01 Februar 2018, 17:11:01
Eh das Script kann glaub ich keine Hostnames.

Aber der Fehler no file or directory sagt erst mal, dass irgendwo deine Pfade nicht stimmen.

Versuch es mit IP und MAC oder nutze einfach meine Version des Scripts von #89.
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 01 Februar 2018, 17:23:46
Mein script liegt genau da wo er es angeblich nicht findet.
Ich habe jetzt mal das script von #89 kopiert, ist zwar 3mal so gross aber ich habs versucht. Reboot und die gleiche Meldung.

2018.02.01 17:18:30.211 1: PERL WARNING: Can't exec "/opt/fhem/FHEM/presence.sh": No such file or directory at ./FHEM/99_myUtils.pm line 87.
2018.02.01 17:18:30.212 3: eval: {CheckiPhone("xxx","xxx")}
2018.02.01 17:18:30.230 1: PERL WARNING: Use of uninitialized value $ret in substitution (s///) at ./FHEM/99_myUtils.pm line 89.
2018.02.01 17:18:30.231 3: eval: {CheckiPhone("xxx","xxx")}
2018.02.01 17:18:30.231 1: PERL WARNING: Argument "" isn't numeric in numeric ne (!=) at ./FHEM/99_myUtils.pm line 91.
2018.02.01 17:18:30.232 3: eval: {CheckiPhone("xxx","xxx")}
2018.02.01 17:18:30.247 2: PRESENCE (Galaxy.S5.Wlan) - error while processing check: unexpected function output (expected 0 or 1):
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 01 Februar 2018, 18:09:42
Dann bitte mal den Inhalt aus deiner 99_myUtils.pm.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 01 Februar 2018, 18:34:12
Vorallem checjk mal Zeile 89 .. wenn das System so nett ist und Dir den genauen Ort angiebt ...
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 01 Februar 2018, 18:50:02
Hab die sub aus #1 einfach kopiert.

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.
use HTML::Entities;

sub
wrapLine($$)
{
  my ($string, $maxLength) = @_;
  $string = decode_entities($string);
my @stringParts = split(/ /, $string);
  my $actRowLength = 0;
  my $resultString = '';
  while (scalar(@stringParts) > 0) {
  my $tempString = shift @stringParts;
    if ($actRowLength > 0)
    {
    if (($actRowLength + length($tempString)) > $maxLength)
      {
      $actRowLength = 0;
        $resultString .= '<br>';
      }
    }
    $resultString .= $tempString;
    $actRowLength += length($tempString);
    if (scalar(@stringParts) > 0)
    {
    $resultString .= ' ';
    $actRowLength += 1;
    }
  }
  if ($resultString eq '')
  {
  return ' ';
  }
  else
  {
  return $resultString;
  }
}

######## Gerät über Fritzbox abfragen ########
sub
NetDevDa($)
{
my $n = 0;
my ($Reading) = @_;
$Reading =~ tr/:/_/;
my @fbs = devspec2array("TYPE=FRITZBOX");
foreach( @fbs ) {
my $Name = ReadingsVal($_,"mac_" . $Reading,"");
if( ($Name ne "") && ($Name ne "inactive") ) {
$n++;
}
}
if( $n == 0) {
return 0;
} else {
return 1;
}
}

######## Gerät über Script abfragen ########
sub CheckiPhone($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx(/opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckiPhone", 2, "CheckiPhone: $ret";
    return 0;
  }

  return $ret;

}

1;
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 01 Februar 2018, 21:57:20
Wie hast du denn das Script erstellt?

Wenn für Linux "untaugliche" Zeichen/Zeilenenden/-umbrüche drin sind (kopiert über Windows z.B.) dann gibt es u.U. auch die komische File not found Meldung...

Kurz da Handy...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 01 Februar 2018, 22:41:16
Sorry aber ich werde nicht für Dich Zeile 89 suchen .. das kann Dein Editor besser ...
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 02 Februar 2018, 10:07:14
Zeile 89

$ret =~ s,[\r\n]*,,g;        # remove CR from return-string
Titel: Antw:Presence und iPhone / Android
Beitrag von: kjmEjfu am 02 Februar 2018, 10:28:16
Grundproblem ist aber weiterhin, dass er die Datei nicht finden/ausführen kann.
Ich würde immernoch gerne ein ls -al von dem Ordner sehen.

Das andere sind Folgefehler.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 02 Februar 2018, 12:49:57
Hatte mich auch verschrieben ... meinte Zeile 87 ....
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 02 Februar 2018, 13:18:02
Hast du das Script auch ausführbar gemacht und nicht nur 777? :-)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 02 Februar 2018, 15:37:52
Über die Sinnhaftigkeit von 777 kann (und sollte man) streiten. Aber es bedeutet, das es ausführbar ist!

(Wobei man NIEMALS ein globales Schreibbit für ein Ausführbares Programm setzen sollte. Also ein 755 wäre DEUTLICH besser wegen der Security)
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 02 Februar 2018, 17:11:01
Testhalber sind mein scripte immer erstmal auf 777 und ja mit sudo chmod +x "/opt/fhem/FHEM/presence.sh" auch ausführbar gemacht.
Über ls -af bekomm ich auch die ganze liste mit allen Dateien *.pm als auch das presence.sh angezeigt.

Zeile 87
$ret = qx(/opt/fhem/FHEM/presence.sh $ip $mac);

Zeile 89
$ret =~ s,[\r\n]*,,g;        # remove CR from return-string
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 02 Februar 2018, 17:18:24
Um mal sicher zu gehen:
ls -lha /opt/fhem/FHEM/presence.sh

Edit:
Und dann bitte mal:
head -n5 /opt/fhem/FHEM/presence.sh

Edit2:
Wie hast Du die Datei erstellt?
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 02 Februar 2018, 18:04:20
Zitat von: Wernieman am 02 Februar 2018, 17:18:24
Edit2:
Wie hast Du die Datei erstellt?

Jep, siehe auch bereits hier: https://forum.fhem.de/index.php/topic,76342.msg759494.html#msg759494

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 02 Februar 2018, 18:56:52
Datei habe ich mit notepad erstellt, sprich hier rauskopiert im notepad eingefügt abgespeichetr und auf den raspi kopiert.

pi@raspberrypi:/opt/fhem/FHEM $ ls -lha /opt/fhem/FHEM/presence.sh
-rwxrwxrwx 1 fhem dialout 1.9K Feb  1 17:18 /opt/fhem/FHEM/presence.sh

pi@raspberrypi:/opt/fhem/FHEM $ head -n5 /opt/fhem/FHEM/presence.sh
#!/bin/bash
# detect Iphone/Android by IP/HOSTNAME and MAC address.
# use MAC address too, to prevent false positives if IP might change
# returns 1 or 0


hier ist nochmal die presence.sh vielleicht ist ja auch nen tippfehler...

#!/bin/bash
# detect Iphone/Android by IP/HOSTNAME and MAC address.
# use MAC address too, to prevent false positives if IP might change
# returns 1 or 0

# number of retries, less is faster, but less accurate
# Max retries for predetection
PREMAXRETRIES=10
# Max retries for detection
MAXRETRIES=10

# exit immediately if no parameters supplied
if [ $# -lt 2 ]
  then
    echo "UNDEF"
  exit 1
fi

# Set variables
# Checking if $1 is a host or an ipadress
IP=`echo $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
HOST=`host -4 $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
MAC=$2
COUNT=0
PRECOUNT=0

# This if takes care of an empty $IP by setting variable Host as IP or even quits the detection by setting absent - if no ip for a hostname is available
if [ -z "$IP" ]; then
IP=${HOST}
if [ -z "$IP" ]; then
echo "0"
exit 0
fi
fi

# Predetection: saves energie on your mobile devices by first trying to get presence over current arp-scan results
while [ ${PRECOUNT} -lt ${PREMAXRETRIES} ];
do
PRECHECK=`sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`
if [ ${#PRECHECK} -eq ${#MAC} ]; then
   # exit when phone is detected
   echo "1"
   exit 0
   fi
  ((PRECOUNT++))
done

# Detection: trys to wake up your mobile device an getting it visible in arp-scan results
while [ ${COUNT} -lt ${MAXRETRIES} ];
do
  # Change dev and eth0 if needed
  #   sudo ip neigh flush dev eth0 ${IP}
  sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP} >/dev/null 2>&1
#  sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP}
  sleep .1
  # Only arp specific device, grep for a mac-address
  STATUS=`sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`

  if [ ${#STATUS} -eq ${#MAC} ]; then
     # exit when phone is detected
     echo "1"
    exit 0
  fi
  ((COUNT++))
  sleep .1
done
# consider away if reached max retries
echo "0"
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 02 Februar 2018, 19:01:44
Mit Notepad (ohne +) macht man sowas nicht, siehe meinen Kommentar!!

Dann wird es wohl an den "Windows-Zeilenenden" liegen...

Vernünftigen Linux-Editor nehmen, dann klappt das auch...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 02 Februar 2018, 20:22:02
Im Linux sieht das script denke ich mal nun recht sauber aus. In fhem steht hinter den Handies zwar jetzt absend aber meines ist anwesend auch in der fritzbox.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 03 Februar 2018, 11:45:02
d.h. Script wird jetzt aufgerufen, aber innerhalb des Scriptes gibt es noch einen Fehler?
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 03 Februar 2018, 17:11:36
ich habe  das script mal auf der console laufen lassen...

sudo bash -x /opt/fhem/FHEM/presence.sh 192.168.0.34 ac:ab:b9:a7:5a:66



+ sudo hping3 -q -2 -c 10 -p 5353 -i u1 192.168.178.34
+ sleep .1
++ sudo arp-scan -q -g 192.168.178.34
++ grep -o ac:af:b9:a6:5a:66
sudo: arp-scan: command not found
+ STATUS=
+ '[' 0 -eq 17 ']'
+ (( COUNT++ ))
+ sleep .1
+ '[' 10 -lt 10 ']'
+ echo 0


ich glaub der Fehler liegt hier sudo: arp-scan: command not found

Ich habe das Package nachinstalliert

sudo apt-get install arp-scan

script läuft auf der commandozeile jetzt durch und in fhem steht jetzt auch present.

Danke für Eure Geduld.
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 03 Februar 2018, 22:39:16
Während meine LAN-PING Methode stetig weiterhin meldet das ich das Haus verlassen hätte (wegen der Sleep Funktion), ist bei der neuen hping3 Methode der Status permanent nun present.

Danke.
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 04 Februar 2018, 07:14:29
D.h. du nutzt nun nur den hping3?

Wenn das deinen Akku leer saugen sollte, dann kannst du (wie ich) auch "2-Stufig" fahren:

Normaler LAN-Ping und bei Bedarf (Quercheck) dann ein statusRequest beim hping3 Presence...

Das hping3 Presence ist das "führende" Presence...

Genauer erläutert hier im Thread weiter vorne (fast am Anfang)...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 04 Februar 2018, 21:17:44
Normaler LAN-Ping und bei Bedarf (Quercheck) dann ein statusRequest beim hping3 Presence...

Das hping3 Presence ist das "führende" Presence..


Was genau bzw wo wird das umgesetzt?
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 04 Februar 2018, 21:51:51
Dann halt noch mal in Kürze (obwohl es eigentlich in diesem ja noch nicht so langen Thread bereits stehen müsste):

Ich habe ein "normales" Presence mit LAN ping auf's Handy.
Welches halt nicht immer zuverlässig funktioniert hat (sleep des Handys).
Zusätzlich eben das hping3 Presence, welches für mich den tatsächlichen Zustand angibt.
Dieses mit sehr großem Interval (praktisch fast deaktiviert).
Dann ein Notify auf das LAN ping auf absent|present daraufhin dann einen statusRequest beim hping3.

Somit hab ich die zuverlässigkeit von hping3 und die Akkuschonung von LAN ping...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 05 Februar 2018, 09:22:53
Das Vorgehen habe ich verstanden nur bräuchte ich hier .. eine Umsetzungshilfe.

Dann ein Notify auf das LAN ping auf absent|present daraufhin dann einen statusRequest beim hping3.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Thyraz am 05 Februar 2018, 13:13:31
"statusRequest" ist ein set Befehl von Presence Devices.
Presence Devices haben außerdem ein "presence" Reading welches "absent" oder "present" als Wert hat.

Du legst also wie MadMax-Fhem sagt ein Presence für normalen Lan Ping an und einen für hping3 mit dem Script hier aus dem Thread.
Wenn das Lan-Ping auf absent geht, führst du nun eben statusRequest beim hping3 presence device aus.

Löst das deine Frage? Wenn nicht, beschreibe mal genauer woran du hängst.
Ein Notify erstellen wird bei deinem Posting-stand ja wahrscheinlich nicht das Problem sein...
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 05 Februar 2018, 14:08:25
Mahlzeit,
ich habe mal geschaut, dass mein FHEM aktuell ist und bemerke nun, dass anscheind ein Timeout eingebaut wurde, dieses kann man für ein presence mit function nicht anpassen.

Daher habe ich nun regelmäßig im Log
/Work/presence.sh: Zeile 63: echo: Schreibfehler: Datenübergabe unterbrochen (broken pipe).

Denn der pauschale Durchlauf des Scripts mit jeweils 10 und insgesamt 20 Versuchen braucht dann wohl etwas länger als im presence Modul ermöglicht.
Auch der mode shellscript würde wohl nicht helfen. Lediglich für mode event geht das wohl.


*EDIT* Es scheint sich eingependelt zu haben war wohl etwas Last die das verursachte...
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 06 Februar 2018, 08:27:32
Ok, ich habe mal diesen Abgleich versucht anzustellen und hoffe auf ggf. eine Korrektur.

Lan_ping wird also immer ausgeführt und wenn dieses absent meldet springt er auf die hping3 Routine, richtig ?

define Ping_Abgleich DOIF ([lan_ping] ne [hping_3]) (set Lan_ping statusRequest) (setreading hping3 state [lan_ping:state])
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 07 Februar 2018, 19:22:07
Ich habe das jetzt mal so definiert und erhalte nun für diesen Abgleich folgende readings...

e_hping3_STATE present   
e_lan_ping_STATE absent
state cmd_1

Das bringt mir für die weitere Verarbeitung keinen Mehrwert, denn ich muss ja nun auf e_ irgendwas abfragen um weiter arbeiten zu können. Könnte man das nicht zusammenfassen das er guckt ob Handy absend ist oder nicht ?
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 07 Februar 2018, 19:37:49
Ich weiß ja nicht genau was wie du machst und meinst...

Ich habe ein LAN ping Presence auf das Handy und ein hping3 Presence auf das Handy.

Letztendlich auswerten tue ich nur das hping3 (führendes Presence).

Dann ein simples Notify:

lanping (absent|present) set hping3 statusRequest

Quasi als "Absicherung" ob tatsächlich weg oder "nur" WLAN sleep...

Sorry, dass ohne list/code aber bin unterwegs und hab nur Handy...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 07 Februar 2018, 19:54:57
Letztlich möchte ich auch nur eine Absicherung. Nur habe ich festgestellt dass sogar mal h3ping auf absend steht während lan ping vorhanden ist. Also dachte ich mir, bringe ich beide mit entweder oder zusammen und setz ein notify auf On wenn einer der beiden Stati auf present steht.

Hier mal das komplette Vorgehen... Allerdings bekomm ich keine Message (vermutlich ist der watchdog falsch)


#
# Samsung Galaxy A5 (lan-ping)
#
define HA.SvenWlan PRESENCE lan-ping Ip
attr HA.SvenWlan userattr presence presence_map structexclude
attr HA.SvenWlan event-on-change-reading state
attr HA.SvenWlan group Anwesenheit
attr HA.SvenWlan pingCount 4
attr HA.SvenWlan presence Anwesenheit
attr HA.SvenWlan room 3.2_Anwesenheit,Fritzbox,Status
#
# Samsung Galaxy A5 (hping3)
#
define Galaxy.A5.Wlan PRESENCE function {CheckiPhone("IP","Mac")} 60 120
attr Galaxy.A5.Wlan userattr Bewohner_structure Bewohner_structure_map Handys Handys_map structexclude
attr Galaxy.A5.Wlan Bewohner_structure Bewohner
attr Galaxy.A5.Wlan Handys alleHandys
attr Galaxy.A5.Wlan event-on-change-reading state
attr Galaxy.A5.Wlan group Anwesenheit
attr Galaxy.A5.Wlan room 3.2_Anwesenheit,Fritzbox,System

define Galaxy.A5.Compare DOIF ([HA.SvenWlan] ne [Galaxy.A5.Wlan]) (set HA.SvenWlan statusRequest) (setreading Galaxy.A5.Wlan state [HA.SvenWlan:state])
attr Galaxy.A5.Compare group Anwesenheit,Status
attr Galaxy.A5.Compare room 3.2_Anwesenheit,Status

define HA.Sven dummy
attr HA.Sven event-on-change-reading state
attr HA.Sven eventMap 1
attr HA.Sven group Anwesenheit
attr HA.Sven room 3.2_Anwesenheit,Status

define HA.Sven.On notify (HA.SvenWlan:present)|(Galaxy.S5.Wlan:present) { fhem ("set HA.Sven on;; setstate watchdogHASvenWlanAbwesend defined") if (Value("HA.Sven") ne "on") }
attr HA.Sven.On group Anwesenheit
attr HA.Sven.On room 3.2_Anwesenheit,Status

define watchdogHA.Sven.Wlan.Off watchdog (HA.SvenWlan:abent)|(Galaxy.S5.Wlan:abent) 00:03 (HA.SvenWlan:present)|(Galaxy.S5.Wlan:present) set HA.Sven off
attr watchdogHA.Sven.Wlan.Off regexp1WontReactivate 1
attr watchdogHA.Sven.Wlan.Off room 3.2_Anwesenheit,Status

define HA.Sven.On.PushNotify notify HA.Sven:on { fhem ("set PushMessenger msg 'Anwesenheit' 'Sven/Handy ist Zuhause.' '' 0 ''")}
attr HA.Sven.On.PushNotify group Auskunft,notify
attr HA.Sven.On.PushNotify room 3.2_Anwesenheit,Status

define HA.Sven.Off.PushNotify notify HA.Sven:off { fhem ("set PushMessenger msg 'Anwesenheit' 'Sven/Handy hat das Haus verlassen.' '' 0 ''")}


Statt mit (HA.SvenWlan:present)|(Galaxy.S5.Wlan:present) zu arbeiten wäre dann die Kombi aus beidem durch das Compare hilfreich.
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 13 Februar 2018, 20:30:50
Guten Abend allerseits,

auch von mir einen herzlichen Dank für die vielen Ansätze, dieses Dilemma zu lösen.

@en-trust: ich verstehe Dein DOIF nicht. HA.SvenWlan ist doch der Lanping. Der wird doch nicht besser, wenn man ihn per statusRequest noch einmal aufruft. Anschließend überschreibt er auch noch den Status des Presence-Device, der mit Hping3 ermittelt wurde  ???
Zitat
define Galaxy.A5.Compare DOIF ([HA.SvenWlan] ne [Galaxy.A5.Wlan]) (set HA.SvenWlan statusRequest) (setreading Galaxy.A5.Wlan state [HA.SvenWlan:state])
attr Galaxy.A5.Compare group Anwesenheit,Status
attr Galaxy.A5.Compare room 3.2_Anwesenheit,Status
Meiner Meinung nach müsste es umgekehrt sein und ich habe es bei mir auch so implementiert und es funktioniert bisher gut.
Ich empfehle außerdem ein "do always" und ein Wiederholintervall, bei mir "Repeatcmd 120". Hier mein DOIF:


define DI_SGS7_Refresh DOIF ([SGS7_Ping] eq "absent")\
(set SGS7 statusRequest)\
DOELSE\
(setreading SGS7 state present)
attr DI_SGS7_Refresh do always
attr DI_SGS7_Refresh repeatcmd 120
attr DI_SGS7_Refresh room Anwesenheit

Bei mir wird also der StatusRequest des Hping3-Device ausgeführt, wenn der Lanping "absent" liefert.
Wenn der Lanping hingegen "present" liefert, kann ich damit den Status des Hping3-Device überschreiben.



Ich habe aber ein anderes Problem mit diesem Ansatz: durch den StatusRequest wird im Log immer "StatusRequest" geloggt, auch wenn der Status die ganze Zeit "Present" ist. Das an sich wäre nicht so schlimm. Allerdings fasse ich mehrere Handys per Structure zusammen und lasse mir über eine Readingsgroup den letzten Statuswechsel auf einem Dashboard anzeigen. Als ich noch Lanping exklusiv genutzt habe, hat das wunderbar geklappt, d.h. der letzte Statuswechsel war dann teilweise stundenlang her und ich konnte auch einen Blick sehen, wann ich das Haus verlassen habe.
Jetzt, wo der Status meistens per Hping3 ermittelt wird, ist er durch das Intervall von 120 Sekunden eigentlich immer aktuell, obwohl kein erkennbarer Statuswechsel stattgefunden hat. So sieht das aus:
2018-02-13_18:54:39 SGS7 statusRequest
2018-02-13_18:56:39 SGS7 statusRequest
2018-02-13_18:58:39 SGS7 statusRequest
2018-02-13_18:59:07 SGS7 absent
2018-02-13_19:00:39 SGS7 statusRequest
2018-02-13_19:02:39 SGS7 statusRequest
2018-02-13_19:04:39 SGS7 statusRequest
2018-02-13_19:04:51 SGS7 present


Hat jemand eine Idee, wie ich die StatusRequest-Events ignorieren kann? Es geht weniger um die Einträge im Log als vielmehr um die Anzeige des Timestamps in den Readings der STRUCTURE.
Ich habe schon ein paar Stunden gesucht, aber nichts sachdienliches gefunden. Oder woran kann es sonst liegen, dass die Readings der STRUCTURE bei jedem StatusRequest aktualisiert werden?
Eine vergleichsweise erstellte STRUCTURE über PRESENCE-Devices des FRITZBOX-Ansatzes zeigt dieses Verhalten ebenfalls nicht. Ich habe allerdings den Eindruck, dass die Fritzbox-Methode etwas träger ist bzw. dass es nach dem Verlassen des WLANs etwas länger dauert, bis die Mac-Adresse nicht mehr gefunden wird. Daher würde ich die Hping3-Methode nicht so schnell aufgeben wollen.

Ich danke für jeden Hinweis.


Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 14 Februar 2018, 08:10:48
Zitat von: HausHH am 13 Februar 2018, 20:30:50

Es geht weniger um die Einträge im Log

Das konnte ich scheinbar mit dem Attribut ignoreRegexp lösen. Hat aber natürlich leider keine Auswirkung auf die Readings, d.h. da wäre ich weiter dankbar über Tipps.
Titel: Antw:Presence und iPhone / Android
Beitrag von: frank am 14 Februar 2018, 18:52:17
kommt der statusrequest vom structure?
dann reicht doch event-on-change.
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 15 Februar 2018, 20:04:54
Vielen Dank für den Tipp, manchmal liegt die Lösung so nah, .... hier aber leider nicht  ;)

Der Statusrequest kommt vom DOiF, der in Post #136 steht.

Die STRUCTURE sieht so aus:
Internals:
   ATTR       Anwesend_Chk
   CHANGED   
   CHANGEDCNT 97
   DEF        Anwesend_Chk MotoG5 SGS7
   NAME       ST_Anwesenheit_Chk
   NR         250
   NTFY_ORDER 50-ST_Anwesenheit_Chk
   STATE      present
   TYPE       structure
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1518718528.67816
           VALUE      present
   READINGS:
     2018-02-15 19:42:25   LastDevice      SGS7
     2018-02-15 19:42:25   LastDevice_Abs  SGS7
     2018-02-15 19:42:25   state           present
Attributes:
   alias      Anwesend_Chk
   clientstate_behavior relativeKnown
   clientstate_priority present absent
   devStateIcon present:HOME_Status.1 undefined:HOME_Status.1 absent:HOME_Status.3
   event-on-change-reading state
   group      PRESENCE
   room       Anwesenheit


Und eins der beiden Smartphones:
Internals:
   CHANGED   
   DEF        function {CheckPhone("192.168.x.x","2c:0e:3d:xx:xx:xx")} 3600 3600
   INTERVAL_NORMAL 3600
   INTERVAL_PRESENT 3600
   MODE       function
   NAME       SGS7
   NOTIFYDEV  global
   NR         248
   NTFY_ORDER 50-SGS7
   STATE      present
   TYPE       PRESENCE
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1518720265.988
           VALUE      statusRequest
   READINGS:
     2018-02-15 12:55:20   model           function
     2018-02-15 19:44:27   presence        present
     2018-02-15 19:44:27   state           present
   helper:
     CURRENT_STATE present
     call       {CheckPhone("192.168.x.x","2c:0e:3d:xx:xx:xx")}
Attributes:
   Anwesend_Chk ST_Anwesenheit_Chk
   event-on-change-reading state
   icon       it_smartphone
   room       Anwesenheit
   userattr   Anwesend_Chk Anwesend_Chk_map structexclude


Als ich noch kein ignoreRegexp in der Definition des Logfiles für das Smartphone hatte, wurde ja immer "statusRequest" geloggt. Aber anschließend wurde nicht  "present" geloggt, obwohl im state die ganze Zeit "present" stand. Das habe ich nicht so richtig verstanden, wäre mir aber auch egal, wenn es denn so funktionieren würde, wie es gedacht ist.
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 15 Februar 2018, 21:13:56
Ich habe jetzt noch mal die DOIFs deaktiviert, um absolute Gewissheit zu erhalten.
Und siehe da: der Timestamp in der STRUCTURE wird nicht mehr aktualisiert, auch wenn die PRESENCE-Devices entsprechend aktualisiert werden (INTERVAL-Werte jeweils 3600).

TJa, was tun? Die DOIFs und die Lanpings entfernen und die PRESENCE-Devices trotz der Darstellung in diesem Thread auf 30-Sekunden-Intervall setzen und vielleicht werden die Akkus schnell leer gesogen?
Oder doch die PRESENCE-Erkennung der Fritzbox nehmen und versuchen, die Trägheit der Erkennung (weg) zu optimieren, z.B. durch geringere Polling-Intervalle?

Ich weiß es nicht. Ich werde noch mal etwas testen. Mal schauen, welche Erkenntnisse noch auf mich warten ....
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 15 Februar 2018, 21:30:17
Also ich nutze eine Structure die NUR auf present oder absent reagiert (es kommt noch bald hinzu - possible absent und possible present).

In dieser Structure sind alle Handys als:

function {CheckPresence("HANDY1", "XX:XX:XX:XX:XX:XX")} 300 300

Im Hintergrund liegt das Script aus EDIT 4 von mir: https://forum.fhem.de/index.php/topic,76342.msg754319.html#msg754319


Damit hab ich alles abgedeckt was ich benötige und kann mit dem übergeordneten Ding arbeiten in jeglichen Schaltungen. Aktuell reagiere ich auf absent und present demnächst gilt dann (present or possible present or possible absent) und nur absent ist dann wirklich abwesend. Jedes einzelne Handy hat ein Threshold von 2 bei der Überwachung.

Damit fahre ich zu 100% ohne Fehlerkennung. Man könnte nun natürlich noch einen Watchdog auf das Übergeordnete Element (bei mir Anwesenheit) setzen und sagen wenn 5  Minuten absent dann setze was anderes auf Off. Dann hat man es 4 Stufig abgefangen ;-D
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 19 Februar 2018, 12:58:57
Huhu,
hatte heute nochmal was geändert bei mir.
Vielen Dank nochmal an alle beteiligten - das script ist ja nur eine Version der hier schon vorhandenen ;-)
Funktioniert bei mir immer noch ohne jede Fehlerkennung.

EDIT 5 meiner Version des Scriptes:

- Max Retries im Default auf 8 gesetzt (nach update auf performantere Hardware ergab 10 immer ein timeout anstatt ein away - hatte mit der Verwendung von Structure kein Probleme ergeben aber Optik...)
- Kommentare angepasst

Vorraussetzungen des Scripts: arp-scan und hping3 sind installiert, ausführender user muss sudo nutzen dürfen

Aufruf des Scripts: sudo scriptname.sh IP/DNS-Name MAC-Adresse
Aufruf in FHEM machbar über das Modul presence: define NameDesPresenceDevices presence function {CheckPresence("IP/DNS-NAME", "XX:XX:XX:XX:XX:XX")} 300 300 (hier alle 5 Minuten bei present und absent).



Erklärung des Scripts:
Es wird erst über mit 8 Versuchen geschaut, ob das Gerät mittels arp-scan gefunden werden kann (Vorteil von arp-scan ist, dass es nicht den System cache nutzt sondern pro instanz schaut was so los ist im Netzwerk).
Wird etwas gefunden gibt es "1" zurück, bei nicht erfolgreicher Suche wird die nächste Stufe aufgerufen. Nun wird mittels hping3 versucht das Handy aufzuwecken und erneut mittels arp-scan geschaut, ob es aufzufinden ist, dieser Versuch wird auch 8 Mal unternommen. Wird etwas gefunden gibt es "1" zurück, wenn nicht wird 0 zurück gegeben.

Ich verwende das Script in einer Kombination mit Structure, hier sind die Presence Devices alle als "Bewohner" gekennzeichnet und ein Structure Device "Anwesenheit" übernimmt sobald einer von den Presence Devices als "present" markiert wird diesen Status ebenfalls. Sind alle "absent" übernimmt es diesen Status. Meine Presence Devices habe ich noch auf absenceThreshold 2 gesetzt. Ich habe nun noch "maybe present und maybe absent" ebenfalls als present interpretieren lassen und schalte dafür noch einen Dummy über den Structure Device Anwesenheit, dieser nimmt dann die Statuus "present", "maybe present" und "maybe absent" als present und nur "absent" als absent an.

Script für die Anwesenheitserkennung mittels WLAN (presence.sh):
#!/bin/bash
# detect Iphone/Android by IP/HOSTNAME and MAC address.
# use MAC address too, to prevent false positives if IP might change
# returns 1 or 0

# number of retries, less is faster, but less accurate
PREMAXRETRIES=8
MAXRETRIES=8

# exit immediately if no parameters supplied
if [ $# -lt 2 ]
  then
    echo "UNDEF"
  exit 1
fi

# Set variables
IP=`echo $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
HOST=`host -4 $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
MAC=$2
COUNT=0
PRECOUNT=0

if [ -z "$IP" ]; then
IP=${HOST}
if [ -z "$IP" ]; then
echo "0"
exit 0
fi
fi

while [ ${PRECOUNT} -lt ${PREMAXRETRIES} ];
do
PRECHECK=`sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`
if [ ${#PRECHECK} -eq ${#MAC} ]; then
   # exit when phone is detected
   echo "1"
   exit 0
   fi
   ((PRECOUNT++))
done


while [ ${COUNT} -lt ${MAXRETRIES} ];
do
  # Change dev and eth0 if needed
  #   sudo ip neigh flush dev eth0 ${IP}
  sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP} >/dev/null 2>&1
  #sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP}
  sleep .1
  # Only arp specific device, grep for a mac-address
  STATUS=`sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`

  if [ ${#STATUS} -eq ${#MAC} ]; then
     # exit when phone is detected
     echo "1"
    exit 0
  fi
  ((COUNT++))
  sleep .1
done
# consider away if reached max retries
echo "0"



Und hier noch die 99_myUtils.pm für presence

package main;
use strict;
use warnings;

sub CheckPresence($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx( /opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckPresence", 2, "CheckPresence: $ret";
    return 0;
  }

  return $ret;

}

1;
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 10 März 2018, 19:25:58
 :) Mittels der Hilfe von CoolTux habe ich es heute geschafft, dass meine Structure für die Anwesenheit auch maybe present und maybe absent als present interpretiert und man somit dadurch schon mal eine Stufe mehr hat. Denn aus einem maybe absent oder maybe present kann jederzeit wieder ein present werden.

Bei uns ist die Situation so, dass bei der Waschmaschine kein WLAN ist (bisher).

Der Trick für die presence Devices war es das maybe absent auf maybe_absent zu mappen, da Leerzeichen nicht gut sind für eine Structure ;-)

bewohner_map presence:^maybe.absent:maybe_absent presence:^maybe.present:maybe_present presence:present:present presence:absent:absent

clientstate_priority present|maybe_present|maybe_absent absent

Ansonsten kann ich weiter berichten, die Anwesenheitserkennung über diese Lösung funktioniert immer noch Fehlerfrei.
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 10 März 2018, 19:56:22
Zitat von: Master_Nick am 10 März 2018, 19:25:58
Ansonsten kann ich weiter berichten, die Anwesenheitserkennung über diese Lösung funktioniert immer noch Fehlerfrei.

Das kann ich mittlerweile auch bestätigen. Wobei das Handy meiner Frau (Moto G5S) mit der Fritzbox-Variante gut zurecht kommt, während mein Galaxy S7 mit der Hping3-Variante besser zurecht kommt. Der Akku wird auch nicht merklich strapaziert.
Das mehrstufige Verfahren mit Hping3 für den Fall, dass der klassische Lan-Ping versagt, habe ich daher nicht gebraucht.

Gut, wenn man die Auswahl hat  :)
Wenn es mal schlechter wird, würde ich Deine letzten Änderungen nachvollziehen, daher hier schon mal danke für's Posten!
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 11 März 2018, 16:35:09
Sehr gern :-)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 19 März 2018, 21:11:12
Das klingt alles sehr viel versprechend, ich scheitere aber mit meinen knappen Linux Kenntnissen schon am Script und muss um Hilfe bitten:
pi@raspberrypi:/opt/fhem/FHEM$ sudo presence.sh XXX.XXX.X.XX xx:xx:xx:xx:xx:xx
sudo: presence.sh: command not found

Meine IP Adresse habe ich geXXXt. Die MAC Adresse (Kleinbuchstaben) ebenso.

Was habe ich bisher gemacht
sudo apt-get install arp-scan
sudo apt-get install hping3


in /opt/fhem/FHEM mit nano presence.sh erstellt und das script von post 141 hinein kopiert
sudo nano presence.sh
#!/bin/bash
# detect Iphone/Android by IP/HOSTNAME and MAC address.
# use MAC address too, to prevent false positives if IP might change
# returns 1 or 0

# number of retries, less is faster, but less accurate
PREMAXRETRIES=6
MAXRETRIES=6

# exit immediately if no parameters supplied
if [ $# -lt 2 ]
  then
    echo "UNDEF"
  exit 1
fi

# Set variables
IP=`echo $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
HOST=`host -4 $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
MAC=$2
COUNT=0
PRECOUNT=0

if [ -z "$IP" ]; then
IP=${HOST}
if [ -z "$IP" ]; then
echo "0"
exit 0
fi
fi

while [ ${PRECOUNT} -lt ${PREMAXRETRIES} ];
do
PRECHECK=`sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`
if [ ${#PRECHECK} -eq ${#MAC} ]; then
   # exit when phone is detected
   echo "1"
   exit 0
   fi
   ((PRECOUNT++))
done


while [ ${COUNT} -lt ${MAXRETRIES} ];
do
  # Change dev and eth0 if needed
  #   sudo ip neigh flush dev eth0 ${IP}
  sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP} >/dev/null 2>&1
  #sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP}
  sleep .1
  # Only arp specific device, grep for a mac-address
  STATUS=`sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`

  if [ ${#STATUS} -eq ${#MAC} ]; then
     # exit when phone is detected
     echo "1"
    exit 0
  fi
  ((COUNT++))
  sleep .1
done
# consider away if reached max retries
echo "0"

Dann mit Ctrl X y gespeichert
Den Owner korrigiert
sudo chown fhem:dialout presence.sh
und ausführbar gemacht mit
sudo chmod +x presence.sh
ls -la liefert folgendes
-rwxr-xr-x  1 fhem dialout   1387 Mar 19 19:50 presence.sh
Hier nochmal die Fehlermeldung
pi@raspberrypi:/opt/fhem/FHEM$ sudo presence.sh XXX.XXX.X.XX xx:xx:xx:xx:xx:xx
sudo: presence.sh: command not found

Wahrscheinlich ein primitiver Anfängerfehler. Wer hat einen Tip?
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 19 März 2018, 22:05:35
Wenn das Script nicht im Pfad/PATH liegt, dann musst du es (Linux Console) so starten:

./presence.sh xxxxx

Oder mit dem kompletten Pfad:

/opt/fhem/FHEM/presence.sh xxxx

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 19 März 2018, 22:34:57
Danke, erste Hürde genommen. Das funktioniert.

und was mache ich beim Fhem Aufruf falsch?
defmod Ajuba PRESENCE function {CheckPresence("XXX.XXX.X.XX", "xx:xx:xx:xx:xx:xx")} 300 300

setstate Ajuba error
setstate Ajuba 2018-03-19 22:33:16 model function
setstate Ajuba 2018-03-19 22:33:16 state error

Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 19 März 2018, 22:51:39
Zitat von: Ajuba am 19 März 2018, 22:34:57
Danke, erste Hürde genommen. Das funktioniert.

und was mache ich beim Fhem Aufruf falsch?
defmod Ajuba PRESENCE function {CheckPresence("XXX.XXX.X.XX", "xx:xx:xx:xx:xx:xx")} 300 300

setstate Ajuba error
setstate Ajuba 2018-03-19 22:33:16 model function
setstate Ajuba 2018-03-19 22:33:16 state error

99_myUtils.pm vergessen?
Stand zumindest nicht im Text.

Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 19 März 2018, 23:03:28
Jep denke auch da fehlt noch die Utils!

Aber generell muss man dich loben für die perfekte Auflistung deiner Taten. So war es super zu analysieren was noch fehlte :-)
Gute Arbeit! 8)

*Edit* Ein Stück weit mein Fehler :-) hätte sie nochmal wiederholen sollen - habe ich oben korrigiert (hier isse auch noch mal).

Meine 99_myUtils.pm für presence

package main;
use strict;
use warnings;

sub CheckPresence($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx( /opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckPresence", 2, "CheckPresence: $ret";
    return 0;
  }

  return $ret;

}

1;
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 19 März 2018, 23:14:13
Zitat von: HausHH am 19 März 2018, 22:51:39
99_myUtils.pm vergessen?
Stand zumindest nicht im Text.



Vollkommen richtig - Peinlich.
Nachdem es auch in der (scheinbaren) Zusammenfassung von Post 141 nicht stand hab ich darauf vergessen.

Das Modul scheint jetzt zu funktionieren. Ich wundere mich nur warum mein Handy seit 10 min absent ist obwohl der Script Direktaufruf 1 zurück liefert

defmod Ajuba PRESENCE function {CheckiPhone("XXX.XXX.X.XX", "xx:xx:xx:xx:xx:xx")} 300 300
attr Ajuba room CONTROL->System

setstate Ajuba absent
setstate Ajuba 2018-03-19 23:09:45 .absenceThresholdCounter 0
setstate Ajuba 2018-03-19 23:09:45 .presenceThresholdCounter 0
setstate Ajuba 2018-03-19 22:59:39 model function
setstate Ajuba 2018-03-19 23:09:45 presence absent
setstate Ajuba 2018-03-19 23:09:45 state absent
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 19 März 2018, 23:27:33
Und jetzt darf erstmals ich auf einen Fehler hinweisen

$ret = qx(/Work/presence.sh $ip $mac);

Mit deinem Pfad "/Work" wird es wohl bei niemandem funktionieren. -> Bitte korrigieren.

Trotzdem, mein Handy bleibt auf absent während das Script selbst 1 zurück liefert.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 19 März 2018, 23:31:35
Hehe   ;D

Stimmt ich nutze einen Pfad für mein selbstgebrautes entgegen dem was hier gängig ist.
*FIXED*
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 19 März 2018, 23:34:07
Hast du auch eine Idee wegen meinem "absent"?
Welche Infos soll ich liefern?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 19 März 2018, 23:34:28
Gib mal das List deines presence devices am besten :-)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 19 März 2018, 23:41:08
Ich glaub ich hab die Antwort im Logfile gefunden

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

sudo: no tty present and no askpass program specified


EDIT: Nur weiß ich nicht wo es an den Rechten fehlt.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 20 März 2018, 00:13:25
Hier noch das List. Das ist erst gar nicht durchgegangen weil mein Netz voll blockiert war bis ich das Device gelöscht habe und Fhem neu gestartet.

Internals:
   CFGFN     
   DEF        function {CheckPresence("192.168.X.XX", "n:n:n:n:n:n")} 300 300
   INTERVAL_NORMAL 300
   INTERVAL_PRESENT 300
   MODE       function
   NAME       Ajuba
   NOTIFYDEV  global
   NR         287
   NTFY_ORDER 50-Ajuba
   STATE      absent
   TYPE       PRESENCE
   READINGS:
     2018-03-19 23:58:08   model           function
     2018-03-19 23:58:10   presence        absent
     2018-03-19 23:58:10   state           absent
   helper:
     call       {CheckPresence("192.168.X.XX", "n:n:n:n:n:n")}
Attributes:


So wie ich die Logfile Meldung verstehe fehlen mir die Zugriffsrechte ohne Passwort.
sudo: no tty present and no askpass program specified
Aber Fhem sollte doch die vollen Rechte auf presence.sh haben ?????
-rwxr-xr-x  1 fhem dialout   1387 Mar 20 00:09 presence.sh



Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 20 März 2018, 00:36:53
Vermutlich fehlt der User fhem in der sudoers...

https://kofler.info/sudo-ohne-passwort/

Allerdings gibt es seit Jessie/Stretch unter /etc/sudoers.d/ für jeden User eine eigene Datei.
Für den User pi sollte bereits eine da sein...

Aber: Achtung! und auf eigene Gefahr!

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 20 März 2018, 06:34:06
Zitat von: MadMax-FHEM am 20 März 2018, 00:36:53
Vermutlich fehlt der User fhem in der sudoers...

https://kofler.info/sudo-ohne-passwort/


Man sollte noch mal betonen, dass eine Einstellung
pi ALL=(ALL) NOPASSWD: ALL
wie in dem Artikel geschrieben, zwar ganz toll funktioniert, aber die Sicherheit kompromittieren kann.
Falls Fhem von außen erreichbar ist, würde ich von so einem "Scheunentor" abraten.

Ich habe per Visudo folgende Zeile eingetragen, die bei mir funktioniert:
fhem    ALL = NOPASSWD: /opt/fhem/FHEM/backup.sh,/opt/fhem/FHEM/presence.sh,/usr/bin/arp-scan,/usr/sbin/hping3

Also nur die verwendeten Komponenten (Programme und Skripte) berechtigt.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 20 März 2018, 07:41:38
Mann sollte bei solchen zeilen auch aufpassen, wer alles diese Dateien "bearbeiten" darf. Am besten gleich für alle "sperren".
chmod -w Datei

Als root (oder mit sudo) geht es dann immer noch ...
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 20 März 2018, 08:30:37
Zitat von: HausHH am 20 März 2018, 06:34:06
Man sollte noch mal betonen, dass eine Einstellung
pi ALL=(ALL) NOPASSWD: ALL
wie in dem Artikel geschrieben, zwar ganz toll funktioniert, aber die Sicherheit kompromittieren kann.
Falls Fhem von außen erreichbar ist, würde ich von so einem "Scheunentor" abraten.

Ich habe per Visudo folgende Zeile eingetragen, die bei mir funktioniert:
fhem    ALL = NOPASSWD: /opt/fhem/FHEM/backup.sh,/opt/fhem/FHEM/presence.sh,/usr/bin/arp-scan,/usr/sbin/hping3

Also nur die verwendeten Komponenten (Programme und Skripte) berechtigt.

Dem Stimme ich absolut zu - die einzelnen Scripte und Programme einzutragen (so habe ich es auch gemacht) ist deutlich sicherer als einfach ALL.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 20 März 2018, 08:34:55
Hilfe, in welch gefährlicher Linux-Ecke bin ich denn da wieder gelandet.  :o
Ein kurzer Check heute früh (auf die Schnelle mit nano - nur zum Nachschauen) hat ergeben, dass mein sudoers komplett leer wäre. - Kann das sein, ist das normal?

War für euch Linux Profis die ganze Zeit klar, dass in sudoers was drin stehen muss?
Oder kann es sein, dass ich früher mal wo was verbockt habe und sudoers ist nur ein Versuch das wieder gerade zu biegen?
Ich bin gerade ziemlich verunsichert weil überall steht wie gefährlich Fehler in sudoers sein können.

Bevor ich mich heute Abend ans Werk mache beschreibe ich im Folgenden was ich dann versuchen werde:
Als erstes mit dd ein Image ziehen, falls ich was kaput mache.
Dann
cd /etc
sudo visudo sudoers


dort trage ich dann folgendes ein mit einer Leerzeile am Ende
fhem    ALL = NOPASSWD: /opt/fhem/FHEM/backup.sh,/opt/fhem/FHEM/presence.sh,/usr/bin/arp-scan,/usr/sbin/hping3


Wie speichere ich dann ab? Gleich wie be Nano mit Ctrl-X y Enter?

Und dann wurde noch folgendes empfohlen
chmod -w sudoers
Muss ich dann den Raspi neu starten?
Habe ich was Wesentliches vergessen?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 20 März 2018, 08:42:59
Also um damit mal aufzuräumen - es ist gefährlich es auf ALL zu haben, wenn jemand irgendwie Zugriff auf FHEM und damit auf den user fhem im System bekäme.
Somit hat es eine potenzielle Gefahr aber keine sofortige akute alles zerstörende in dem Moment wo man was tut.

Mit der Liste beschränkt man genau auf die Sachen die der User fhem machen soll und darf. So wäre dann ein Kapern vom User nicht so wild, weil er nur bestimmtes darf.

Ich mache es eigentlich nicht  mit "sudo visudo".

Die Datei die man allerdigns damit öffnen würde enthält bei mir:
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d


Und ich beziehe mich nun genau auf den Teil: "#includedir /etc/sudoers.d"

Genau dort gehört es meiner Meinung nach hin.

Ich habe daher die Datei "/etc/sudoers.d/010_fhem-nopasswd"

Mit dem Inhalt:
fhem ALL = NOPASSWD: /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3




Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 20 März 2018, 08:46:12
Bevor über irgendwelche Artikel gewettert wird sollten diese gelesen werden!
Dort wird es ausführlich erläutert inkl. dem Hinweis auf "Scheunentor" und auch die Herangehensweise für gezielte Anwendungen freizugeben...

Ebenso wie von Master_Nick erläutert der Hinweis zu /etc/sudoers.d/
Hängt aber halt vom System ab...

Und übrigens: bei Standardinstallation hat User pi per sudo ohne Passwort alle Rechte...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 20 März 2018, 08:53:50
Jups :-) 
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 20 März 2018, 09:11:35
Zitat von: Master_Nick am 20 März 2018, 08:42:59
Und ich beziehe mich nun genau auf den Teil: "#includedir /etc/sudoers.d"
Genau dort gehört es meiner Meinung nach hin.
Ich habe daher die Datei "/etc/sudoers.d/010_fhem-nopasswd"

Mit dem Inhalt:
fhem ALL = NOPASSWD: /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3


Also verstehe ich das richtig?
Im Verzeichnis etc/sudoers.d soll ich eine Datei "010_fhem-nopasswd" erzeugen und folgendes reinschreiben?
fhem ALL = NOPASSWD: /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3


Dann bleibt nur noch die Frage warum bei mir heute Früh
sudo nano sudoers
eine leere Datei gezeigt hat und wie man das repariert? Denn sonst wird ja gar nichts aufgerufen. Oder habe ich nur verschlafen einen Blödsinn angeschaut weil ich ja sonst gar nicht wie bisher mit "sudo" agieren könnte?
Kann ich einfach das vorhin gepostete reinkopieren?
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d



MadMax, was willst du damit sagen?
Zitat von: MadMax-FHEM am 20 März 2018, 08:46:12
Und übrigens: bei Standardinstallation hat User pi per sudo ohne Passwort alle Rechte...
Dass es sowie eine potentielle Gefahr gibt?

Sorry für die vielen blöden Fragen aber ich merke als Linux-Neuling gerade, dass das eine kritische Zone ist.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 20 März 2018, 09:18:21
Zitat von: Ajuba am 20 März 2018, 09:11:35
Also verstehe ich das richtig?
Im Verzeichnis etc/sudoers.d soll ich eine Datei "010_fhem-nopasswd" erzeugen und folgendes reinschreiben?
fhem ALL = NOPASSWD: /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3


Exakt :-)


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Zitat von: Ajuba am 20 März 2018, 09:11:35
Dann bleibt nur noch die Frage warum bei mir heute Früh
sudo nano sudoers
eine leere Datei gezeigt hat und wie man das repariert? Denn sonst wird ja gar nichts aufgerufen. Oder habe ich nur verschlafen einen Blödsinn angeschaut weil ich ja sonst gar nicht wie bisher mit "sudo" agieren könnte?
Kann ich einfach das vorhin gepostete reinkopieren?

Weil du es irgendwo gemacht hast ohne Pfadangabe. Sozusagen du bist IRGENDWO ob im root-dir oder in /etc... wenn du nun sudo nano sudoers sagte legt er einfach an Ort und Stelle eine Datei an.
Du wirst sie suchen müssen - am besten direkt da schauen wo du nach login landest bei deinem system.


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Mach einfach mal sudo visudo - ich denke nicht, dass dann was leeres geöffnet wird :-)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Zitat von: Ajuba am 20 März 2018, 09:11:35
MadMax, was willst du damit sagen?Dass es sowie eine potentielle Gefahr gibt?

Sorry für die vielen blöden Fragen aber ich merke als Linux-Neuling gerade, dass das eine kritische Zone ist.

Es gibt keine blöden Fragen ;-) solange man auch mitdenkt.
Ansonsten will MadMax meines erachtens darauf hinweisen, dass der User pi abgesichert gehört wie es auch überall steht (Passwort ändern - SSH Login absichern etc).
Solange man aber z.B. sein FHEM nur im lokalen Netzwerk betreibt und nicht im Internet frei gibt ist die Gefahr schon mal deutlich geringer. Und an den User Pi kommt man auch mit Freigabe von FHEM eher schwieriger.
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 20 März 2018, 09:18:58
In welchem Verzeichnis hast du denn:

sudo nano sudoers

aufgerufen?

Wenn du das "irgendwo" aufrufst, macht Linux/nano einfach eine neue Datei auf (weil es DORT die sudoers Datei nicht gibt) und die ist nat. (erst mal) leer ;)

Und: jep, wie von Master_Nick beschrieben...

Wenn dort bereits eine für den User pi liegt, dann arbeitet dein System mit /etc/sudoers.d/ und dann wie von Maser_Nick beschrieben.

Potentielle Gefahr sind auch Linux-Anwender die keine Ahnung von Linux haben ;)

Das bedeutet nur, dass wenn jemand deinen pi "kapert" er mittels 'sudo' OHNE weitere Passwortabfrage eben 'root' ist und "alles darf"...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 20 März 2018, 09:19:52
Eine leere Datei ist Prinzipiell nicht böse .....

Machmal lieber etwas anderes:
1. Was sagt Deine sudoers Datei:
cat /etc/sudoers
2. Gibt es sudoers-Dateien nach dem Config-Dir:
ls -lha /etc/sudoers.d

Wenn Du eingiebst: "sudo nano sudoers", in welchem Verzeichnis bist Du dann?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 20 März 2018, 09:38:00
Zitat von: MadMax-FHEM am 20 März 2018, 09:18:58
Gefahr sind auch Linux-Anwender die keine Ahnung von Linux haben ;)
Eigentlich wollte ich ja nur FHEM benutzen und keinen Linux Tauchgang machen  :-X ... und Perl schon gar nicht. Aber es hilft halt nichts, Fhem ist super und die helfende Community auch. Da muss ich halt durch.  ;D

Aber so gescheit war ich schon, dass ich zu "cd /etc" wechselte und mit "ls" sudoers gesehen habe bevor ich "sudo nano sudoers" eingegeben habe. Deshalb macht es mir ja Sorgen, dass ich keinen Inhalt gesehen habe.
Am besten melde ich mich am Abend wieder wenn ich nochmal nachschauen kann.
Danke vorerst.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 20 März 2018, 09:42:36
 ;) Nimm die Aussage bitte nicht zu ernst/persönlich.

Wir haben alle mal angefangen und haben alle Hilfe dabei erhalten. Diese erhältst auch du  :D  8)
Aber aus der harten Sicht des Netzes... wo jemand nicht wusste wie es abzusichern war, wird es ausgenutzt. Da hat er eben Recht - ohne es auch nur irgendwie persönlich auf dich zu bringen.

Ich weiß auch noch lange nicht alles bei Linux - aber es wächst und gedeiht und vor allem mit dem Forum hier macht es echt Spaß und man erntet Erfolge.
Definitiv kommt man komplett ohne sich mit zu befassen nicht weit und lernen gehört definitiv auch dazu.

Schau nachher nochmal nach und dann sehen wir weiter :-)
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 20 März 2018, 11:34:12
@Ajuba:

jep, wie Master_Nick schon geschrieben hat: ist nicht auf dich bezogen. Aber du wolltest wissen was "gefährlich" ist ;)

Besser wie hier beschrieben zum Editieren der sudoers:

Zitat
Vorsichtsmaßnahmen

Die Veränderung von /etc/sudoers ist gefährlich. Wenn Sie einen Syntaxfehler einbauen, ist ein weiterer sudo-Kommando unmöglich und Sie können den Fehler nicht mehr korrigieren! Um dieses Dilemma zu vermeiden, können Sie drei Vorsichtsmaßnahmen ergreifen:

    Sie ändern /etc/sudoers nicht mit irgendeinem Editor, sondern mit visudo. Vor dem Speichern führt visudo einen Syntaxtest durch. Sie können die Datei erst speichern, wenn die Syntax korrekt ist. Wenn Sie keine Lust auf den Editor vi haben, stellen Sie vor der Ausführung von visudo den gewünschten Editor mit export EDITOR=$(which nano) ein, wobei Sie nano durch Ihren Lieblingseditor ersetzen.

Evtl. siehst du dann mehr...

Was passiert wenn du mit user 'pi' etwas als 'root' ausführst?

Beispielsweise: sudo su danach (sofort) wieder exit! oder sudo service fhem status

Und sollte sich das länger ziehen, besser einen neuen Thread aufmachen in "Server Linux"

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 20 März 2018, 20:46:15
Kaum macht man es richtig schon funktioniert es - Mein Handy ist present. ;D

Was habe ich gemacht:
Zitat von: Master_Nick am 20 März 2018, 08:42:59
Ich habe daher die Datei "/etc/sudoers.d/010_fhem-nopasswd"
Mit dem Inhalt:
fhem ALL = NOPASSWD: /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3

Was hatte ich heute früh falsch gemacht:
Statt "sudo nano sudoers" hatte ich nur "nano sudoers" eingegeben und der leere Bildschirm hat mich in der morgendlichen Eile so geschockt, dass ich am unteren Bildschirmrand die Fehlermeldung "[ Error reading sudoers: Permission denied ]" vollkommen übersehen hatte.  ::)

Ich danke allen für die Unterstützung.

@Master_Nick: Ist eigentlich geplant, diese PRESENCE function Methode in CommandRef inklusive Script und myUtils zu beschreiben?
Falls es gewünscht ist, könnte ich mich mal als Autor mit einer Schritt für Schritt Anleitung versuchen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 20 März 2018, 20:58:58
Hehe ich bin tatsächlich nicht der Urheber hier :-)
Ich habe nur eine anscheind sehr gute Version aus dem Ursprung gemacht.

Habe mich lange daran geärgert, dass die Logik für die Anwesenheitserkennung im Handy sein musste um gut zu funktionieren und das war mein Antrieb es zur Perfektion zu treiben.

Aber wir können bestimmt ein Howto oder einen Eintrag ins Wiki erzeugen - denke ich :D "Neuland" :-D
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 20 März 2018, 21:06:57
OK, wenn es recht ist werde ich im Laufe der Woche einen Entwurf ausformulieren den ich dir zur Kontrolle vorlege.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 20 März 2018, 21:14:32
Sehr gern :-)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Ajuba am 23 März 2018, 21:31:38
Master_Nick, herzlichen Dank an für die tollen Adaptionen.
Gestern war ich zwar um 4 Uhr früh für 5 Minuten außer Haus  :-\ aber sonst scheint es stabil zu laufen.
Ich hatte aber auch noch kein absence_treshhold aktiviert.

Nun zum Wiki
Im aktuellen Wiki wird "function" nur im Zusammenhang mit Perl-Funktionen erwähnt. Das müsste an noch auf "Script" erweitern.

Ich habe meinen Vorschlag mal in Word erstellt.
Bei rot markiertem Text bin ich mir nicht sicher, ob es so notwendig ist oder ob man es besser weglassen soll.

Bitte kritisch prüfen, ob das brauchbar ist.
Titel: Antw:Presence und iPhone / Android
Beitrag von: dott.olivero am 07 April 2018, 12:25:33
Also erstmal vielen Dank an den Initiator JoWiemann und den Vervollkommner Master_Nick für diese Funktionalität.

Da bei mir das einfache LAN-PING nach mind. 2 Jahren Einsatz keine zuverlässigen Ergebnisse mehr produziert, habe ich das presence.sh-Script implementiert.
Allerdings sind meine Ergebnisse nicht so prickelnd... Vielleicht mache ich ja was falsch?

Folgende Smartphones werden getrackt:
- Samsung S9 (Android 8.0.0)
- Samsung A8 (Android 7.1.1)
- iPhone 7

Besonders das S9 macht Probleme. Hier habe ich die meisten 'absent'-Meldungen, wenngleich das Phone im Haus und WLAN ist, teils sogar wenn es in Benutzung ist. Beim S8 und iPhone 7 gibt es 'nur' 4-8 Fehlmeldungen am Tag. Ich konnte nicht herausfinden, dass Google oder Samsung bei Android 8 oder dem S9 am Wifi-Modul eine besondere Stromsparfunktion implementiert hätten.

Hier meine Definition
define smartphone_s9 presence function {CheckPresence("192.168.XXX.XXX", "xx:xx:xx:xx:xx:xx")} 30 300
attr smartphone_.* devStateIcon present:10px-kreis-gruen absent:10px-kreis-rot maybe.absent:10px-kreis-gelb
attr smartphone_.* event-on-change-reading .*
attr smartphone_.* absenceThreshold 8


Mittels 'absenceThreshold 8' bezwecke ich (hoffentlich korrekt gedacht und umgesetzt), dass falls das Phone nicht gefunden werden kann, es 8x probiert wird in einer Frequenz von 30 Sekunden (gem. define für Anwensenheit), also 4,5 Min. Im Log sieht man ziemlich genau 5 Minuten (?), bis der Status von 'maybe absent' auf 'absent' wechselt. Das Script unterdessen hat ja nochmals eine eigene Wiederholrate der Versuche (Standard 2x6), so dass insgesamt max. 2x6x8=96 Versuche vor Statuswechsel 'present' -> 'absent' unternommen werden.

Hier mal ein paar Logauszüge (das Smartphone S9 war die ganze Zeit im Haus, nicht in Benutzung, WLAN aktiviert):

2018-04-06_02:04:21 smartphone_s9 present
2018-04-06_02:14:35 smartphone_s9 maybe absent
2018-04-06_02:19:40 smartphone_s9 absent
2018-04-06_02:32:31 smartphone_s9 present
2018-04-06_02:37:45 smartphone_s9 maybe absent
2018-04-06_02:42:50 smartphone_s9 absent
2018-04-06_02:44:10 smartphone_s9 present
2018-04-06_02:49:24 smartphone_s9 maybe absent
2018-04-06_02:54:28 smartphone_s9 absent
2018-04-06_02:59:25 smartphone_s9 present
2018-04-06_03:04:38 smartphone_s9 maybe absent
2018-04-06_03:09:42 smartphone_s9 absent


Ausgeschaltet aber im Haus. Interessanterweise habe ich es ab 09:19 im WLAN genutzt, was erst 10:08:38 detektiert wurde.

2018-04-07_06:18:28 smartphone_s9 present
2018-04-07_06:23:42 smartphone_s9 maybe absent
2018-04-07_06:28:47 smartphone_s9 absent
2018-04-07_10:08:38 smartphone_s9 present


Für einen Tipp, was ich falsch mache oder besser machen könnte/müsste, wäre ich sehr dankbar.

Ergänzung: im Logfile /var/log/auth.log findet sich ein merkwürdiges "TTY=unknown", das mir nichts sagt...
Apr  7 13:45:42 raspi_fhem sudo:     fhem : TTY=unknown ; PWD=/opt/fhem ; USER=root ; COMMAND=/usr/bin/arp-scan -q -g 192.168.XXX.XXX
Apr  7 13:45:42 raspi_fhem sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Apr  7 13:45:43 raspi_fhem sudo: pam_unix(sudo:session): session closed for user root
Apr  7 13:45:43 raspi_fhem sudo:     fhem : TTY=unknown ; PWD=/opt/fhem ; USER=root ; COMMAND=/usr/bin/arp-scan -q -g 192.168.XXX.XXX
Apr  7 13:45:43 raspi_fhem sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 08 April 2018, 17:58:47
Hast du:

- WLAN im Standby Modus eingeschaltet lassen: EIN
- zu mobilen Daten wechseln: AUS
? :-)
Titel: Antw:Presence und iPhone / Android
Beitrag von: dott.olivero am 08 April 2018, 21:21:25
Hallo Master_Nick,

vielen Dank für Deinen Support.

Zitat- WLAN im Standby Modus eingeschaltet lassen: EIN
- zu mobilen Daten wechseln: AUS

Ja klar  ;):
- Zu mobilen Daten wechseln: AUS
- WLAN automatisch aktivieren: AUS
- WLAN-Energiesparmodus: AUS
- WLAN im Standbymodus eingeschaltet lassen: IMMER
- "WLAN-Netzwerk XYZ" Automatisch erneut verbinden: EIN

Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 09 April 2018, 11:31:11
Dann kann es natürlich noch an deinen Settings im DHCP und am WLAN selbst liege.
Ich hab ein S8+ meine Frau ein S8 - technisch sollte das Android das das selbe sein wie bei dir auf dem 9er.
Titel: Antw:Presence und iPhone / Android
Beitrag von: bugster_de am 30 April 2018, 10:43:54
Hi,

tolle Lösung! Habe das jetzt seit ein paar Tagen im Einsatz und funktioniert einwandfrei ! Danke dafür.
Einmal Samsung Galaxy S7 und einmal iPhone 7 jeweils mit den neuesten OS Updates.
Titel: Antw:Presence und iPhone / Android
Beitrag von: JoWiemann am 01 Mai 2018, 17:59:39
Hallo,

leider musste ich feststellen, dass die sudo Aufrufe von arp-scan und hping3 immer folgende Einträge in /var/log/auth.log hinterlassen


May  1 17:45:03 raspberrypi sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
May  1 17:51:33 raspberrypi sudo:     fhem : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/arp-scan -q -g 192.168.x.xxx
May  1 17:45:03 raspberrypi sudo: pam_unix(sudo:session): session closed for user root
May  1 17:45:03 raspberrypi sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
May  1 17:51:37 raspberrypi sudo:     fhem : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/sbin/hping3 -q -2 -c 10 -p 5353 -i u1 192.168.x.xxx
May  1 17:45:03 raspberrypi sudo: pam_unix(sudo:session): session closed for user root


Durch die Häufigkeit musste ich dann gestern feststellen, das auf der 8 GByte SD kein Platz mehr vorhanden war. Und das nach jetzt 6 Monaten.

Als Lösung habe ich folgendes angepasst:

In der /etc/syslog.conf wird die Zeile:


auth,authpriv.* /var/log/auth.log


durch


:msg, contains, "fhem : TTY=unknown ; PWD=/ ;"  ~
:msg, contains, "pam_unix(cron:session)"  ~
:msg, contains, "pam_unix(sudo:session)"  ~
auth,authpriv.* /var/log/auth.log


ersetzt. Nun noch mit:


sudo /etc/init.d/rsyslog restart


rsyslog neu starten und mit:


> /var/log/auth.log


die /var/log/auth.log leeren.

Grüße Jörg
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 01 Mai 2018, 19:52:53
Also ich hab pro Monat ein Log und das ist maximal 16 MB - wie du da Gigabytes schaffst  ist mir ein Rätsel :-)
Titel: Antw:Presence und iPhone / Android
Beitrag von: JoWiemann am 01 Mai 2018, 20:17:56
Scheint an den iPhones zu liegen. Und derer sind es vier.

Grüße Jörg
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 01 Mai 2018, 20:30:56
Mh - Nutzt du es denn wie mein Vorschlag aussah?
Also erst Arp Scan und nur wenn da nicht drin nach X Versuchen dann X Versuche Hping3?
Titel: Antw:Presence und iPhone / Android
Beitrag von: JoWiemann am 01 Mai 2018, 20:39:01
Zitat von: Master_Nick am 01 Mai 2018, 20:30:56
Mh - Nutzt du es denn wie mein Vorschlag aussah?
Also erst Arp Scan und nur wenn da nicht drin nach X Versuchen dann X Versuche Hping3?

Ja, nutze ich. Wobei ich glaube die der Presence Check war nur das Tüpfelchen auf dem i. Der RPi läuft schon seit mindestens vier Jahren. Das Filtern in rsyslog war halt nach einigem suchen ein interessanter Ansatz.

Grüße Jörg
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 01 Mai 2018, 20:41:06
Ah okay :-)
Ja gut ab und an muss man Logs ausmisten :-D
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 02 Mai 2018, 10:06:55
Wobei dann eigentlich "logrotate" das Stichwort. Wie lange bewahrst Du denn die logs auf?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 02 Mai 2018, 10:51:38
Ich weiß es tatsächlich nicht -  ;D
Das default Setting ist gesetzt, da ich da nie was dran gemacht habe. Aber ich hab das auth.log.1 auf Größe geprüft und es war genau am 30.04. zum Wechsel auf den 01.05. abgeschlossen worden.
Somit denke ich mal rotiert wird monatlich - Aufbewahrung - keine Ahnung, müsste ich schauen :-D
Titel: Antw:Presence und iPhone / Android
Beitrag von: czcbe am 24 Mai 2018, 18:17:29
Eine Frage dazu aus der Windows-Ecke:

- Ich habe FHEM auf Windows laufen mit cygwin und das Script gemäss Antwort #141 nachgebaut

- hping3 und arp-scan fand ich nocht nicht für Windows, daher vorerst übergangsweise Ersatzaufbau mit "ping IP" und "arp -a" von Windows (Auch die MAC Schreibweise statt Doppelpunkt einen Bindestrich habe ich angepasst)

- cygwin-console zeigt nach manuellen Script-Aufruf inkl. Parameter saubere Ausgabe 0 bzw. 1

- Rufe ich das aber in FHEM mittels Presence-Device auf:

"- error while processing check: unexpected function output (expected 0 or 1): "

--> Meine Vermutung liegt in 99_myUtils.pm:
  -   $ret =~ s,[\r\n]*,,g;        # remove CR from return-string
  -   Der CR wird nicht richtig entfernt, ich vermute da Windows sich eben bisschen anders verhält. Versch. Alternative Enternungsmöglichkeiten haben bislang nicht geholfen.

Hat wer Tipps? Evtl. könnte die Ausgabe bereits ohne CR erfolgen?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 24 Mai 2018, 19:50:44
Moin,

ich denke um ein Ping Tool das genau den Port bedienen kann wirst du nicht herum kommen.

Ping allein kann (afaik) keine Pings auf bestimmte Ports.


Zum Rest hab ich keine Idee sorry.

Aber auch so...... warum tut man sich das an auf Windows :-D ?
Titel: Antw:Presence und iPhone / Android
Beitrag von: czcbe am 25 Mai 2018, 08:44:28
Hallo

Danke für deine Antwort. Den hping3 werd ich noch nachziehen, ist klar, sobald ich da für Windows was gefunden habe. Aber mir geht es vorerst mal nur um das Grundgerüst. Ich möchte gerne zuerst nur mal eine korrekte Ausgabe abfangen können. Wie gesagt in der Konsole kommen gute Werte, aber FHEM kann sie dann scheinbar nicht auswerten. Ich habe dazu auch schon diverse Versuche mit anderen CR/LF Filtermethoden versucht - kein Erfolg bis jetzt.

Das gewöhnliche lan-ping vom Presence-Modul ist ja so bei mir fast nicht zu gebrauchen (bremst FHEM aus, eine Menge absent, obwohl online etc.), daher will ich schon eine funktionierende Alternative finden...

Und zu deiner Frage: Windows läuft bis jetzt soweit nicht schlecht, wird mit cygwin ja ziemlich gut an Linux angepasst, commands sind fast alle verfügbar.
Titel: Antw:Presence und iPhone / Android
Beitrag von: czcbe am 25 Mai 2018, 09:30:28
Zitat von: Master_Nick am 10 März 2018, 19:25:58

Der Trick für die presence Devices war es das maybe absent auf maybe_absent zu mappen, da Leerzeichen nicht gut sind für eine Structure ;-)


Da habe ich übrigens noch einen Input bezüglich mapping, aber via eventMap, ohne Underline, der kann mit Abständen umgehen:
eventMap: /maybe absent:present/maybe present:present/present:present/absent:absent/
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 25 Mai 2018, 09:47:17
Falls Powershell eine Option wäre: da gibt es seit Version 4 mit Test-NetConnection auch die Möglichkeit, bestimmte Ports zu prüfen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: czcbe am 26 Mai 2018, 11:13:16
Jaa, mit Powershell wäre ich sowas von begeistert, ich habe hier manchmal eeeextrem Mühe mit dem Code, einmal Doppelpunkt, aber nur wenn x,y, aber nur im Modul A (alt), A (neu) kann das noch nicht, dann wieder Komma wenn es in Klammern steht, aber geschweifte Klammern sind dann wieder nur bei IFs erlaubt und mehrere Abfragen sind mit ";;" zu trennen etc. Äh...das ist ein anderes Thema.

Theoretisch könnte ja von Perl aus wirklich jedes beliebige Code-Teil aufgerufen werden, sofern das Grundbetriebssystem das unterstützt?
Inzwischen habe ich jedenfalls rausgefunden, dass es ein grundsätzliches Problem im 99_myUtils.pm gibt. Die Funktion bekommt nämlich gar kein Resultat zurück. Ich dachte zuerst es liegt evtl. am CR/LF in der Ausgabe.

Hier mal mein Code 99_myUtils.pm:
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.



package main;
use strict;
use warnings;

sub CheckPresence($$)
{
  my ($ip,$mac)= @_;
  my $ret = "0";


  $mac = lc($mac);

  $ret = qx( /cygdrive/d/Downloads/2CheckItOut/fhem_portable/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string
 
  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckPresence", 2, "CheckPresence: $ret";
    return 0;
  }

  return $ret;
   #return 0;
}

1;




Hier die presence.sh:
#!/bin/bash
# detect Iphone/Android by IP/HOSTNAME and MAC address.
# use MAC address too, to prevent false positives if IP might change
# returns 1 or 0
# number of retries, less is faster, but less accurate

PREMAXRETRIES=6
MAXRETRIES=6
# exit immediately if no parameters supplied
if [ $# -lt 2 ]
  then
    echo "UNDEF"
  exit 1
fi

# Set variables
IP=`echo $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
#HOST=`host -4 $1 | grep -oP '([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}'`
MAC=$2
COUNT=0
PRECOUNT=0

if [ -z "$IP" ]; then
IP=${HOST}
if [ -z "$IP" ]; then
echo "0"
exit 0
fi
fi

while [ ${PRECOUNT} -lt ${PREMAXRETRIES} ];
do
PRECHECK=`arp -a | grep -o "${MAC}"`
if [ ${#PRECHECK} -eq ${#MAC} ]; then
   # exit when phone is detected
   echo "1"
   exit 0
fi
((PRECOUNT++))
done


while [ ${COUNT} -lt ${MAXRETRIES} ];
do
  # Change dev and eth0 if needed
  #   sudo ip neigh flush dev eth0 ${IP}
  ping  ${IP} >/dev/null 2>&1
  #sudo hping3 -q -2 -c 10 -p 5353 -i u1 ${IP}
  sleep .1
  # Only arp specific device, grep for a mac-address
  STATUS=`arp -a | grep -o "${MAC}"`

  if [ ${#STATUS} -eq ${#MAC} ]; then
     # exit when phone is detected
     echo "1"
    exit 0
  fi
  ((COUNT++))
  sleep .1
done
# consider away if reached max retries
echo "0"


Host habe ich rauskommentiert, da Windows diesen command nicht kennt und ich ja mit IPs arbeite. Und wie gesagt, direkter Aufruf von der presence.sh gibt korrekte Ausgabe 0 oder 1.
Titel: Antw:Presence und iPhone / Android
Beitrag von: chq am 28 Mai 2018, 20:40:21
Wie kann man denn ein Script von einem Mac aus in opt/fhem/FHEM speichern? User: pi, Passwort: raspberry

Per Cyberduck scheint es nicht zu gehen, also muss wohl das Terminal ran, oder?

Gruß Chris
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 28 Mai 2018, 21:07:41
1. Ändere das Passwort!
2. Ob der User pi in den Ordner von FHEM schreiben darf .....
Titel: Antw:Presence und iPhone / Android
Beitrag von: chq am 29 Mai 2018, 09:21:29
Habe nun alles soweit ausgeführt (anbei eine Anleitung für mich):

presence.sh und 99_myUtils.pm hab ich aus Beitrag 141 (https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242 (https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242)) entnommen.

1. sudo apt-get install arp-scan
2. sudo apt-get install hping3
3. Zu folgendem Verzeichnis navigieren: cd /opt/fhem/FHEM
4. Script erstellen: sudo nano
5. Inhalt von presence.sh reinkopieren
6. ctrl-o
7. Als Dateiname presence.sh angeben
8. ctrl-x
9. in FHEM via Browser (Port 8083):

Edit files -> myUtilsTemplate.pm -> hinter 'Save as den Dateinamen 99_myUtils.pm angeben -> Code von 99_myUtils.pm unten reinkopieren -> Save as anklicken

10. sudo chmod +x /opt/fhem/FHEM/presence.sh
11. sudo /opt/fhem/FHEM/presence.sh 192.168.0.5 00:cd:fe:f0:70:fb (gibt eine 1 zurück)
12. In FHEM via Browser (Port 8083):

define chrisPresent presence function {CheckPresence("192.168.X.XX", "xx:xx:xx:xx:xx:xx")} 60 60

Leider erscheint bei mir unter PRESENCE -> chrisPresent lediglich "error"

Wo kann ich ansetzen?

Gruß Chris

Edit: Im Logfile steht das hier:

2018.05.29 09:19:45 2: PRESENCE (chrisPresent) - error while processing check: unexpected function output (expected 0 or 1): Undefined subroutine &main::CheckPresence called at (eval 32) line 1.
2018.05.29 09:20:45 1: ERROR evaluating {CheckPresence("192.168.XX.XX", "xx:xx:xx:xx:xx:xx")}: Undefined subroutine &main::CheckPresence called at (eval 34) line 1.
Titel: Antw:Presence und iPhone / Android
Beitrag von: czcbe am 29 Mai 2018, 09:37:12
Die Funktion "CheckPresence" wird scheinbar nicht erkannt. Bedeutet, dass in der 99_myUtils.pm vermutlich was nicht stimmt beim Aufrufen.

Es sollte am Schluss in der letzten Zeile die 1; stehen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: chq am 29 Mai 2018, 11:06:42
Das steht bei mir in der 99_myUtils.pm:

package main;
use strict;
use warnings;

sub CheckPresence($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx( /opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckPresence", 2, "CheckPresence: $ret";
    return 0;
  }

  return $ret;

}

1;


Ich verstehe nicht, warum es bei Master_Nick geht und dann bei mir trotz gleichen "Inhalts" nicht.

Müssen die Buchstaben der MAC-Adresse bei
define chrisPresent presence function {CheckPresence("192.168.X.XX", "xx:xx:xx:xx:xx:xx")} 60 60
groß oder klein geschrieben werden?

Gruß Chris
Titel: Antw:Presence und iPhone / Android
Beitrag von: nils_ am 29 Mai 2018, 11:10:53
Zitat von: chq am 29 Mai 2018, 11:06:42
Das steht bei mir in der 99_myUtils.pm:

package main;
use strict;
use warnings;

sub CheckPresence($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx( /opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckPresence", 2, "CheckPresence: $ret";
    return 0;
  }

  return $ret;

}

1;


Ich verstehe nicht, warum es bei Master_Nick geht und dann bei mir trotz gleichen "Inhalts" nicht.

Gruß Chris

guck mal hier:
https://wiki.fhem.de/wiki/99_myUtils_anlegen
und hier:
https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/myUtilsTemplate.pm

vielleicht fällt dir der unterscheid auf :)
kleiner tipp myUtils_Initialize
Titel: Antw:Presence und iPhone / Android
Beitrag von: chq am 29 Mai 2018, 12:32:59
Ok, der vertrottelte Anfänger hat Folgendes mitgenommen:

myUtils_Initialize($$)
{
  my ($hash) = @_;
}


ist fester Bestandteil der 99_myUtils.pm und wurde von Master_Nick nur deshalb nicht angegeben, da jedem fortgeschrittenen Nutzer klar sein sollte, dass seine Darstellung lediglich ein Auszug aus seiner 99_myUtils.pm darstellt und nicht seine komplette.

Gruß Chris
Titel: Antw:Presence und iPhone / Android
Beitrag von: chq am 30 Mai 2018, 09:03:07
Jetzt läuft's, juhuu- vielen Dank für die Unterstützung!

Hat hier nochmal jmd. an den  Presence Parametern "60 60" gedreht? Hab das Gefühl, dass es mit höheren Einstellungen (z.B. "200 200") zuverlässiger funktioniert.

Gruß Chris

Edit: Naja, meistens geht's. Muss mir glaub noch was basteln, um die fehlerhaften Absents seitens meines iPhone6s rauszufiltern.  :P
Titel: Antw:Presence und iPhone / Android
Beitrag von: chaot4ever am 10 Juli 2018, 19:03:47
Hab ein Problem mit presence.sh: Ich krieg immer 12x die Antwort: "ioctl: No such device" und dann eine "0".
Verwende ich aber eine ältere presence.sh (identische Gruppe, Eigentümer und Rechte) mit folgendem Inhalt wird mein iPhoneX korrekt an- und abgemeldet:
#!/bin/bash

declare -a DEVICES
sudo hping3 -2 -c 10 -p 5353 -i u1 $1 -q >/dev/null 2>&1
DEVICES=`arp -an | awk '{print $4}'`
CHECK="$2"
if [[ ${DEVICES[*]} =~ $CHECK ]]
then
echo "1"
else
echo "0"
fi

An was kann das liegen?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 14 Juli 2018, 14:56:55
Ich schlage vor du gleichst hier gegen ab - für mich ist deine presence.sh viel zu kurz.

https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242
Titel: Antw:Presence und iPhone / Android
Beitrag von: miche am 16 August 2018, 14:34:10
Hallo,

bei mir lief das ganze jetzt seit Monaten stabil, doch seit kurzem werden die beiden iPhones in der Nacht manchmal nicht mit hping 3 gefunden und dann meint FHEM es ist niemand zu Hause.
Hat jemand eine Idee warum dies so sein könnte? Ansonsten funktioniert dies sehr zuverlässig,  nur Nachts tritt dies auf!
Titel: Antw:Presence und iPhone / Android
Beitrag von: RappaSan am 16 August 2018, 14:47:05
Ich hatte ein ähnliches Problem mit der Erkennung. Erst als ich bei meiner FritzBox den automatischen Kanalwechsel abgestellt hatte, funktionierte die Erkennung wieder zuverlässig.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 16 August 2018, 21:06:40
Mahlzeit, ich kann von keinerlei dieser Probleme berichten.
Nutze für jedes Gerät einen absenceThreshold von 3 - es muss also 3 Checks abwesend sein, nachdem es mal anwesend war um als absent zu gelten.
Ansonsten fasse ich den Status aller presence einheiten mittels structure zusammen und habe auch da einen dummy device der erst mal x minuten Abwesen sein muss, damit der Hauptdummy auf absent geht.
Bei jeder present erkennung ist aber sofort ganz oben auch present angekommen.

Damit habe ich seit meiner Erstellung/Anpassung des Script keinerlei Fehlerkennungen. Schalte sogar Devices im Haus aus, wenn keiner da ist.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Sigi3000 am 24 September 2018, 18:06:40
Hallo liebe FHEM Gemeinde!

vielen Dank für die top Anleitung aber dennoch scheint sich bei mir ein Fehler eingeschlichen zu haben den ich nicht beheben kann.

PRESENCE (Sigi_iPhone_WLan) - error while processing check: unexpected function output (expected 0 or 1): Not enough arguments for main::CheckPresence at (eval 3818) line 1, near ""192.168.x.xx", "xx:xx:xx:xx:xx:xx")"


hat jemand einen Reim darauf was mir fehlen könnte?
bekomme für den state eine Error Meldung.

in der sudoers habe ich auch schon unter den user fhem den Pfad der presence.sh hinzugefügt.

Danke und LG
Sigi
Titel: Antw:Presence und iPhone / Android
Beitrag von: JoWiemann am 24 September 2018, 19:10:28
Zitat von: Sigi3000 am 24 September 2018, 18:06:40
Hallo liebe FHEM Gemeinde!

vielen Dank für die top Anleitung aber dennoch scheint sich bei mir ein Fehler eingeschlichen zu haben den ich nicht beheben kann.

PRESENCE (Sigi_iPhone_WLan) - error while processing check: unexpected function output (expected 0 or 1): Not enough arguments for main::CheckPresence at (eval 3818) line 1, near ""192.168.x.xx", "xx:xx:xx:xx:xx:xx")"


hat jemand einen Reim darauf was mir fehlen könnte?
bekomme für den state eine Error Meldung.

in der sudoers habe ich auch schon unter den user fhem den Pfad der presence.sh hinzugefügt.

Danke und LG
Sigi

Bitte ein List vom Device und, sofern vorhanden, Auszüge vom Log.

Grüße Jörg
Titel: Antw:Presence und iPhone / Android
Beitrag von: Sigi3000 am 24 September 2018, 19:30:50
Habe gerade das Problem gefixt.
MAC Adresse musst großgeschrieben werden. TOP. funktioniert einwandfrei.

Aber trotzdem danke noch einmal.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 25 September 2018, 12:45:05
Dachte das XX:XX:XX.... reicht aber hab es mal ergänzt.  ;)

https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242
Titel: Antw:Presence und iPhone / Android
Beitrag von: Sigi3000 am 25 September 2018, 15:10:14
ja sorry!  ;D hätte es auch genauer lesen können aber da ich es im Terminal kleingeschrieben hatte, dachte ich mir nichts mehr dabei.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 25 September 2018, 17:52:25
Gar kein Problem! :-) Fehlerhafte Anleitung (die davon ausgeht es wäre klar - obwohl nicht klar gesagt).
Titel: Antw:Presence und iPhone / Android
Beitrag von: JoWiemann am 25 September 2018, 20:15:17
Zitat von: Master_Nick am 25 September 2018, 17:52:25
Gar kein Problem! :-) Fehlerhafte Anleitung (die davon ausgeht es wäre klar - obwohl nicht klar gesagt).

Hm, in der Sub CheckPresence steht $mac = lc($mac); somit wird durch lc() - lc steht für lower case - die mac umgewandelt. Also kann es nicht daran gelegen haben.

Grüße Jörg
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 25 September 2018, 20:22:55
Also ich habe bei mir auch alle groß geschrieben, weil es klein nicht funktioniert. :-D
Ggf klappt da was nicht sauber.

*EDIT* ist Blödsinn! Ich habe alle klein! Weil groß mal ne Zeit nicht ging ^^
Habe es jetzt nochmal nachgetestet - egal ob klein oder groß bei mir - geht dennoch immer.

Eventuell war es ja ein Klassiker wie "I" und "l" oder sowas :-D
@Sigi3000 schick doch mal nen List wie Jörg vorgeschlagen hat.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Sigi3000 am 29 September 2018, 12:27:22
Internals:
   CHANGED   
   DEF        function {CheckPresence("192.168.1.55", "XX:XX:XX:XX:XX:XX")} 180 180
   INTERVAL_NORMAL 180
   INTERVAL_PRESENT 180
   MODE       function
   NAME       iPhone_Sigi_Wlan
   NOTIFYDEV  global
   NR         102
   NTFY_ORDER 50-iPhone_Sigi_Wlan
   STATE      present
   TYPE       PRESENCE
   READINGS:
     2018-09-29 12:21:31   model           function
     2018-09-29 12:24:34   presence        present
     2018-09-29 12:24:34   state           present
   helper:
     CURRENT_STATE present
     call       {CheckPresence("192.168.1.55", "XX:XX:XX:XX:XX:XX")}
Attributes:
   event-on-change-reading state
   icon       it_smartphone
   room       Residents
Titel: Antw:Presence und iPhone / Android
Beitrag von: Sigi3000 am 29 September 2018, 12:31:38
interessant. bei mir hat es nur funktioniert nachdem ich die MAC Adresse groß geschrieben habe.
Habe aber auch festgestellt das immer wieder kurze Aussetzer dazwischen sind. ist dass, wenn das iPhone dann Wirklich in den Sparmodus wechselt und es erst wieder aus dem "Dornröschen Schlaf" gewerkt wird?

Andere Frage noch: is es möglich unter ROOMMATE --> rr_presenceDevices -->mehrer anzulegen und den STATE abzufragen oder bin ich auf ein PRESENCE Device limitiert?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 29 September 2018, 15:38:30
Also ich habe 6 Devices die kontrolliert werden hiermit.

Was genau nun "rr_presenceDevices" und ROOMATE ist keine AHnung :-D

Aber du kannst dir ein structure da was feines zusammenbauen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Sigi3000 am 02 Oktober 2018, 23:09:26
überwachst du deine 6 Geräte auch mit der gleichen Abtastrate oder hast du unterschiedliche eingestellt. Habe momentan ein Phänomen das sich das iPhone 6s in den Tiefschlaf versetzt und nicht mehr aufwacht. Mein iPhone X aber ohne Probleme erkannt wird. ich habe bei mir jeweils 180 Sekunden eingestellt.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 02 Oktober 2018, 23:51:23
 :) Extra nachgeschaut:

function {CheckPresence("iPhone-X", "XX:XX:XX:XX:XX:XX")} 300 300

Alle sind so, ob Android oder iOS. In meiner presence.sh habe ich PREMAXRETRIES=8 und MAXRETRIES=8. Damit fahr ich sehr gut.


Hab das mal im Script hier geändert - hatte da 6 stehen. Nutze seit langer Zeit 8.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Sigi3000 am 03 Oktober 2018, 06:12:34
vielen Dank für deinen Antwort. ich werde es einmal so probieren. Mal sehne was dabei raus kommt. sonst neues Smartphone kaufen  :P
Titel: Antw:Presence und iPhone / Android
Beitrag von: knopf_piano am 04 Oktober 2018, 22:10:51
Servus,
seit fritz-update auf avm_7.01 (ca. 1 Woche her) ist mein Presence-Status aller mobile-devices mangelhaft.
Ständiges gezappel present/absent, hatte ich bei den Laborversionen ab 6.93 auch festgestellt, weswegen ich wieder auf 6.93 zurück geflasht hab.

Ich verwende die function aus post #195 (übrigens danke!) mit presence function {} 60 60.
im presence.sh ist definiert
- PREMAXRETRIES=8
- MAXRETRIES=8

Das hat bisher (avm 6.93) top funktioniert, leider jetzt nicht mehr zuverlässig.
Auf Hohe presence-Werte wie 300/300 möchte ich nicht gehen, da meine usecases dann rausfallen.
Hat jemand gleiche Beobachtung bzw. evtl Lösung dafür?

thx
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 05 Oktober 2018, 00:45:42
Nutzt du denn Windows? Dass du das aus #195 ( https://forum.fhem.de/index.php/topic,76342.msg805597.html#msg805597 ) nutzt?

Ansonsten empfehle ich das aus #141 ( https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242 )

Was genau hat deine FritzBox mit dem ganzen zu tun? Also ich hab für das WLAN ebenfalls eine FritzBox (aktuell 7390 die 7490 liegt hinter mir und wartet auf Austausch) und das passt ohne Probleme.
Titel: Antw:Presence und iPhone / Android
Beitrag von: knopf_piano am 05 Oktober 2018, 07:19:30
Zitat von: Master_Nick am 05 Oktober 2018, 00:45:42
Nutzt du denn Windows? Dass du das aus #195 ( https://forum.fhem.de/index.php/topic,76342.msg805597.html#msg805597 ) nutzt?
nein, linux
Zitat von: Master_Nick am 05 Oktober 2018, 00:45:42
Ansonsten empfehle ich das aus #141 ( https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242 )
sorry, war mein Fehler, mein presence.sh ist so wie in  #141
Zitat von: Master_Nick am 05 Oktober 2018, 00:45:42
Was genau hat deine FritzBox mit dem ganzen zu tun? Also ich hab für das WLAN ebenfalls eine FritzBox (aktuell 7390 die 7490 liegt hinter mir und wartet auf Austausch) und das passt ohne Probleme.
Wie ich beschrieben hab, dass mit fritz-update auf 7.01 bzw. > 6.93 (inkl. Labor ab 6.93) das Verhalten so ist.

An meinem script/fhem-cfg hab ich nichts geändert.
Welche Version fritz-os hast du?

hab mal plot angehängt

Beispielhaft present/absent als Grafik, smartphones waren alle im Haus. Auch keine Änderung der Smartphone wlan-Einstellungen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Frank_Huber am 05 Oktober 2018, 08:05:25
Presence über Mac Adresse wie im wiki beschrieben geht auch mit der 7.01
--> https://wiki.fhem.de/wiki/FRITZBOX#Anwesenheitserkennung_per_regelm.C3.A4.C3.9Figer_Abfrage_.C3.BCber_das_PRESENCE_Modul

Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 05 Oktober 2018, 19:31:25
Ich versteh auch den Gedanken überhaupt nicht, warum solllte die FritzBox irgendwas daran ändern? :-D Es gibt ja auch Leute die keine FritzBox haben und Presence geht dennoch :-D


Aber ich habe aktuell 6.83 auf der 7390.

Meines Erachtens liegen aber ALLE Notwendigkeiten auf dem Raspberry Pi für das Presence mittels MAC oder auch IP. Ich habe ja sogar bei mir extra arp-scan eingebunden, da es lokal alles macht und zusätzlich nicht cached.
Titel: Antw:Presence und iPhone / Android
Beitrag von: knopf_piano am 05 Oktober 2018, 21:23:47
Das ist kein Gedanke sondern meine Beobachtung. Tausch mal bitte deine fritzbox auf 7490 mit 7.01 aus und berichte.
einziger unterschied: du hast nen raspi, ich hab nen zotac.
Aber vielleicht überseh ich noch was.

Hab nebenher das aus dem wiki umgestellt und es scheint stabil zu sein.
Werde die Tage mal beide varianten hin und probieren...

Gesendet von meinem SM-J510FN mit Tapatalk

Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 05 Oktober 2018, 22:40:03
 :) Alles klar mach ich morgen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 15 Oktober 2018, 11:49:23
Zitat von: knopf_piano am 05 Oktober 2018, 21:23:47
Das ist kein Gedanke sondern meine Beobachtung. Tausch mal bitte deine fritzbox auf 7490 mit 7.01 aus und berichte.
einziger unterschied: du hast nen raspi, ich hab nen zotac.
Aber vielleicht überseh ich noch was.

Hab nebenher das aus dem wiki umgestellt und es scheint stabil zu sein.
Werde die Tage mal beide varianten hin und probieren...

Gesendet von meinem SM-J510FN mit Tapatalk

Also ich habe nun die Fritz Box 7490 (07.01) installiert seit Freitag und es funktioniert mit der Anwesenheit weiter alles weiterhin prima.


Solltest du aber Lan Pin nutzen weiß ich ggf wo der Haken liegt - Ursache leider aber noch unbekannt ..

Mir scheint fast, als habe die FritzBox nen Hau im DNS weg.

Mit Host sieht man alles ist eigentlich super...
pi@Pi3:~ $ host anubis
anubis.fritz.box has address 192.168.0.2
anubis.fritz.box has IPv6 address 2001:16b8:ae1:d800:c5d5:f834:2a51:c699
anubis.fritz.box has IPv6 address 2001:16b8:ae1:d800:e8c1:cd2a:38e:ed04
anubis.fritz.box has IPv6 address 2001:16b8:ae1:d800:458b:1b88:c2bf:7fbe


Ping auf DNS-Name .... nöööö
pi@Pi3:~ $ ping anubis
PING anubis(Anubis.fritz.box (2001:16b8:ae1:d800:e8c1:cd2a:38e:ed04)) 56 data bytes
From Pi3.fritz.box (2001:16b8:ae1:d800:ea48:3b2f:f943:f9dc) icmp_seq=1 Destination unreachable: Address unreachable


Ping auf ipv4 und ipv6 gehen aber.

Ich schau mal, ob ich eine Ursache finde. Ansonsten seit ihr herzlich eingeladen mit zu Überlegen :-D
Total seltsam!

Bei mir schien dabei aber ein Neustart der FritzBox und ein löschen des Arp caches am Pi zu helfen:
ip -s -s neigh flush all
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 15 Oktober 2018, 14:02:04
Zitatanubis.fritz.box has address 192.168.0.2
anubis.fritz.box has IPv6 address 2001:16b8:ae1:d800:c5d5:f834:2a51:c699
anubis.fritz.box has IPv6 address 2001:16b8:ae1:d800:e8c1:cd2a:38e:ed04
anubis.fritz.box has IPv6 address 2001:16b8:ae1:d800:458b:1b88:c2bf:7fbe
Die Frage ist, sind diese Adressen richtig?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 15 Oktober 2018, 15:17:35
 ;) Sonst hätte ich ja nicht gesagt, es ist eigentlich super.

Aber ja, die stimmen alle und jede ist auch 'pingbar'.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 16 Oktober 2018, 08:18:26
Komisch ..
pi@Pi3:~ $ ping anubis
PING anubis(Anubis.fritz.box (2001:16b8:ae1:d800:e8c1:cd2a:38e:ed04)) 56 data bytes
From Pi3.fritz.box (2001:16b8:ae1:d800:ea48:3b2f:f943:f9dc) icmp_seq=1 Destination unreachable: Address unreachable

Aper ping auf 2001:16b8:ae1:d800:ea48:3b2f:f943:f9dc geht?

Ist eigentlich Unlogisch, da beim obigen ping die Adresse aufgelöst wird (siehe Ausgabe) und dann ein ping auf die Adresser erfolgt. also kein Unterschied zur sofortigen Verwendung der Adresse ...

... Es sei denn, Du hast einen IP-Doppler, was Deine Lösung: Löschen ARP-Cache) erklären würde. Aber IP-Doppler bei IPv6???
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 16 Oktober 2018, 09:28:54
 :D Das wäre gewaltig strange - denn dann hätte der DHCP (ich arbeite nur mit DHCP und keinen statischen Adressen) der FritzBox echt kaputt.
Ich glaube das kann man ausschließen - auch jegliche Scantools zeigen keine doppelten IPs (also 2 mal die gleiche mit 2 unterschiedlichen MACs).


Seitdem ich ipv6 an allen meines PIs abgeschaltet habe, habe ich übrigens keinerlei Problem mehr zu beklagen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 16 Oktober 2018, 09:53:21
Vergleiche mal Deine MACs ...

Meine Erfahrung mit FritzBox: Wenn sich ein Client selten meldet (praktisch kein Internetverkehr), fliegt er sehr zeitig bei der FritzBox aus dem Speicher.

Arbeit deshalb auch nicht mit dem DNS/DHCP der FritzBox (oder einem anderen Router)
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 16 Oktober 2018, 10:45:47
Zitat von: Wernieman am 16 Oktober 2018, 09:53:21
Vergleiche mal Deine MACs ...

Meine Erfahrung mit FritzBox: Wenn sich ein Client selten meldet (praktisch kein Internetverkehr), fliegt er sehr zeitig bei der FritzBox aus dem Speicher.

Arbeit deshalb auch nicht mit dem DNS/DHCP der FritzBox (oder einem anderen Router)

Alle Geräte die dauerhaft bei mir installiert sind haben den Haken - immer die gleiche IP vergeben, dadurch bleiben sie im statischen Speicher der Box.
Nutze für sowas FING auf meinem S8+ - leider keinerlei Auffälligkeiten (weder doppelte Ip noch MAC).

Aber ja für sonstige Geräte gilt genau wie du sagst diese Flüchtigkeit.
Titel: Antw:Presence und iPhone / Android
Beitrag von: juliar am 04 Dezember 2018, 19:35:10
Hallo zusammen! Ich habe aktuell auch ein Problem und würde es auch auf das Update der FritzBox 7490 schieben. Ich habe zwei Handys dessen Anwesenheit im Wlan ich mittels
define FB7490 FRITZBOX
set FB7490 password meinPwd
attr FB7490 allowTR064Command 1
attr FB7490 INTERVAL 60
define Handy1 PRESENCE function {checkAllFritzMACpresent("xx:xx:xx:xx:xx:xx")} 60 60
...

prüfe um dann Aktionen auszuführen. Das hat bislang auch problemlos funktioniert. Nun habe ich folgendes Verhalten: Wenn beide Handys zuhause sind und ich auf beiden Handys das Wlan deaktiviere, erkennt die Fritzbox wie gewollt das die Handys nicht da sind und schmeißt sie innerhalb von ca. 1 Minute aus der Netzwerkübersicht raus. Fhem auf Raspberry erkennt das dann sauber. Soweit so gut. Sind aber beide Handys mit aktiviertem Wlan zuhause und man verlässt mit den Handys das Haus, verschwindet eins der Handys auch nach Stunden nicht aus der Netzwerkübersicht der Fritzbox. Somit erkennt dann auch FHEM logischerweise die Abwesenheit nicht.

Scheint natürlich eher ein Problem der Fritzbox zu sein. :-( Kann das jemand nach dem Update auch beobachten und gibt es eine Lösungsidee? Kann ich über FHEM zum Beispiel die Fritzbox anweisen die Netzwerkliste zu aktualieren, so dass alle Geräte die nicht mehr in Reichweite sind auch nicht mehr als aktiv anzuzeigen?

Danke und Gruß
Julia
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 04 Dezember 2018, 20:04:01
Nabend,

zuerst einmal nutzt du ja kein Stück das Script, um das es hier im Thread eigentlich geht sondern wahrscheinlich das hier: https://wiki.fhem.de/wiki/FRITZBOX#Anwesenheitserkennung_per_regelm.C3.A4.C3.9Figer_Abfrage_.C3.BCber_das_PRESENCE_Modul

Ich nutze das nicht und bin auch kein Fan davon.
Die FritzBox hat definitiv einen MAC Cache/ARP Cache und somit kann ich mir sehr gut vorstellen, dass du da Ewigkeiten brauchst bis das Handy mal raus ist aus dem Ding.
WLAN aus sendet im besten Fall ein Abmelde/Quit Connection oder ähnliches Signal an die FritzBox und daher weiß sie ich kann das Handy raus streichen. Das passiert aber nicht wenn man einfach außerhalb der WLAN Range kommt. Und da fängt dann dein Problem an.

Aus genau dem Grund, dass man abhängig ist von der Entwicklung anderer und einem Cache habe ich das Script von den ersten Seiten stark angepasst nach meinen Bedürfnissen und vor allem ohne Cache gebaut.

Bei der FritzBox sehe ich keine wirkliche Chance, dass man es zum laufen bekommt - würde einem Router ungern den Cache leeren für sowas :-D
Titel: Antw:Presence und iPhone
Beitrag von: Beetle2003 am 30 Januar 2019, 07:03:38
Zitat von: MadMax-FHEM am 11 September 2017, 10:44:06
Hmmm, Stromverbrauch...

Gefühlt etwas mehr, leider nicht wissenschaftlich ermittelt (keine Zeit) ;)

Aktuell experimetiere ich mit einem zweistufigen Konzept:

Ein Presence mit normalem lan-ping und wenn der absent bzw. present erkennt, dann wird ein statusRequest beim hping3-Presence ausgelöst per Notify
Das hping3-Presence hat ein Intervall von (aktuell) alle Stunde ist aber das "führende" Presence

Erste Tests sind positiv (gut vielleicht etwas umständlich aber wenn es zuverlässig läuft kommt das so ins Hauptsystem) mal sehen wie es nachts wird...

Gruß, Joachim
[/quote


Guten Morgen Joachim,

Mich würde die Lösung aus Kombination von lan-ping und hping3 interessieren.

Hast du diese irgendwo vorgestellt?

Danke

Gruss

Ralf
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 30 Januar 2019, 10:25:50
@Beetle2003 :-D  Steht deine Frage in dem Zitat?
Titel: Antw:Presence und iPhone
Beitrag von: CoolTux am 30 Januar 2019, 10:28:38
Zitat von: MadMax-FHEM am 11 September 2017, 10:44:06
Hmmm, Stromverbrauch...

Gefühlt etwas mehr, leider nicht wissenschaftlich ermittelt (keine Zeit) ;)

Aktuell experimetiere ich mit einem zweistufigen Konzept:

Ein Presence mit normalem lan-ping und wenn der absent bzw. present erkennt, dann wird ein statusRequest beim hping3-Presence ausgelöst per Notify
Das hping3-Presence hat ein Intervall von (aktuell) alle Stunde ist aber das "führende" Presence

Erste Tests sind positiv (gut vielleicht etwas umständlich aber wenn es zuverlässig läuft kommt das so ins Hauptsystem) mal sehen wie es nachts wird...

Gruß, Joachim
[/quote


Guten Morgen Joachim,

Mich würde die Lösung aus Kombination von lan-ping und hping3 interessieren.

Hast du diese irgendwo vorgestellt?

Danke

Gruss

Ralf

Meinst Du das hier

https://forum.fhem.de/index.php/topic,76342.0.html
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 30 Januar 2019, 10:43:10
Also der großflächig genutzte Ansatz ist soweit ich persönlich das sehe dieser hier: https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242
Titel: Antw:Presence und iPhone / Android
Beitrag von: Beetle2003 am 30 Januar 2019, 13:45:52
Zitat von: Master_Nick am 30 Januar 2019, 10:43:10
Also der großflächig genutzte Ansatz ist soweit ich persönlich das sehe dieser hier: https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242

Hallo,

Danke für den Link.

Genau das habe ich gesucht.

Titel: Antw:Presence und iPhone
Beitrag von: MadMax-FHEM am 30 Januar 2019, 14:32:26
Zitat von: Beetle2003 am 30 Januar 2019, 07:03:38
Zitat von: MadMax-FHEM am 11 September 2017, 10:44:06
Hmmm, Stromverbrauch...

Gefühlt etwas mehr, leider nicht wissenschaftlich ermittelt (keine Zeit) ;)

Aktuell experimetiere ich mit einem zweistufigen Konzept:

Ein Presence mit normalem lan-ping und wenn der absent bzw. present erkennt, dann wird ein statusRequest beim hping3-Presence ausgelöst per Notify
Das hping3-Presence hat ein Intervall von (aktuell) alle Stunde ist aber das "führende" Presence

Erste Tests sind positiv (gut vielleicht etwas umständlich aber wenn es zuverlässig läuft kommt das so ins Hauptsystem) mal sehen wie es nachts wird...

Gruß, Joachim

Guten Morgen Joachim,

Mich würde die Lösung aus Kombination von lan-ping und hping3 interessieren.

Hast du diese irgendwo vorgestellt?

Danke

Gruss

Ralf

Hallo Ralf,

hier mal das "2-Stufige Konzept" im Detail:

das ist das Presence Device, welches meine "tatsächliche Anwesenheit" signalisiert.
Es ist das hier im Thread beschriebene hping3:


define pIch PRESENCE function {my_CheckPhone("192.168.X.X", "XX:XX:XX:XX:XX:XX")} 3600
attr pIch update-on-change-reading .*


Die Wiederholzeit ist bewusst sehr hoch (könnte auch noch höher sein weil eigentlich wird es durch das Notify "aktualisiert")...


Das hier ist ein "normales" lan-ping Presence Device.
Das hatte ich vorher als einziges Presence Device.
Allerdings geht es nicht immer, daher zusätzlich das hping3.
Da das hping3 (gefühlt) den Akku leer saugt hab ich das "normale" gelassen und für den Fall, dass es absent ist wird (per Notify) durch das hping3 geprüft, ob es nur "schläft" oder tatsächlich weg ist...


define pIch_light PRESENCE lan-ping 192.168.X.X
attr pIch_light absenceThreshold 2


Das hier ist das Notify auf das pIch_light:

define nPresenceHandy notify pIch_light:(absent|present) {my_CheckPresence()}


Hier die sub in der ich prüfe, ob der Status unterschiedlich ist und wenn ja: hping3 anstossen...
...ansonsten ist es wohl tatsächlich weg ;)

sub my_CheckPresence()
{
  my $pIchStatus = ReadingsVal("pIch", "state", "absent");
  my $pIchLightStatus = ReadingsVal("pIch_light", "state", "present");

#  Log3(undef, 1, "my_CheckPresence      pIchLightStatus: $pIchLightStatus      pIchStatus: $pIchStatus");
 
  if($pIchLightStatus ne $pIchStatus)
  {
    fhem("set pIch statusRequest");
#    Log3(undef, 1, "my_CheckPresence statusRequest      pIchLightStatus: $pIchLightStatus      pIchStatus: $pIchStatus");
  }
}


Ich logge beides mit und hab gesehen, dass ab und an (v.a. nachts) die beiden kurz "auseinanderlaufen", also das pIch_light absent anzeigt aber der hping3 tatsächlich present anzeigt (was auch stimmt).

Da ich mich bzgl. Anwesenheit auf das pIch (hping3) abstütze läuft es bei mir stabil (ohne den Akku leer zu saugen)...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: Beetle2003 am 01 Februar 2019, 16:43:03
Hallo Joachim,

vielen Dank für die Hilfestellung bei der zweistufigen Methode.
Es schein sehr gut zu funktionieren.
Ich lasse alle meine Geräte, welche in WLAN sind und durch PRESENCE überwacht werden nun mit dieser Methode überwachen.

Ich habe die CheckPresence Routine in zwei Punkten angepasst:
1. Ich übergebe in zwei Variablen das Gerät
2. Die Funktion Lit hat bei mir nicht funktioniert. Musste diese abändern.

Als nächsten werde ich mir etwas ausdenken, dass ich die IP Adresse und MAC aus der FritzBox auslese und übergebe.

Gruss

Ralf 
Titel: Antw:Presence und iPhone / Android
Beitrag von: 1dz am 08 Februar 2019, 17:55:07
Hallo zusammen,

ich habe mich auch einmal an der Anwesenheitserkennung versucht.
Allerdings scheitere ich als Anfänger bereits an einem weit niedrigeren Level.
Wäre toll wenn mir jemand ein wenig auf die Sprünge helfen könnte.
Ich hatte mich am Beitrag #145von Ajuba orientiert.

Folgendes habe ich auf meinem Raspberry gemacht:

sudo apt-get install arp-scan

Dabei gab es diese Fehlermeldungen:
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
arp-scan ist schon die neueste Version.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 9 nicht aktualisiert.
N: Datei »mosquitto-jessie.list.1« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-wheezy.list.2« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-wheezy.list.1« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-jessie.list.1« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-wheezy.list.2« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-wheezy.list.1« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.


danach

sudo apt-get install hping3

Dabei erschienen diese Fehlermeldungen:
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
hping3 ist schon die neueste Version.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 9 nicht aktualisiert.
N: Datei »mosquitto-jessie.list.1« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-wheezy.list.2« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-wheezy.list.1« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-jessie.list.1« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-wheezy.list.2« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.
N: Datei »mosquitto-wheezy.list.1« in Verzeichnis »/etc/apt/sources.list.d/« wird ignoriert, da sie eine ungültige Dateinamen-Erweiterung hat.


Danach in /opt/fhem/FHEM mit nano presence.sh erstellt

sudo nano presence.sh

und das script von post 141 hinein kopiert.

Gespeichert und anschließend den Owner angepasst und ausführbar gemacht.

sudo chown fhem:dialout presence.sh
sudo chmod +x presence.sh

Wenn ich nun versuche die presence.sh aufzurufen bekomme ich folgende Fehlermeldung:

sudo /opt/fhem/FHEM/presence.sh

/opt/fhem/FHEM/presence.sh: Zeile 19: Syntaxfehler beim unerwarteten Wort `while'
/opt/fhem/FHEM/presence.sh: Zeile 19: ` fi fi while [ ${PRECOUNT} -lt ${PREMAXRETRIES} ] do'


Wäre klasse wenn mir jemand einen Tip geben könnte.

Gruß
Thomas


Titel: Antw:Presence und iPhone / Android
Beitrag von: Beetle2003 am 16 Februar 2019, 21:58:45
Hallo Thomas,

ich habe es wie folgt gelöst (Dank viel Unterstützung im Form )
in 99_myUtils

###############   Presence von WLAN Geraeten
sub Check_WLAN_Device($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx(/opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    # Log3 "CheckWLANDevice", 2, "CheckWLANDevice: $ret";
    return 0;
  }

  return $ret;

}


########  Check Presence
sub CheckPresence($$)
{
  my ($hping,$pres)= @_;

  my $Status = ReadingsVal($hping, "state", "absent");
  my $LightStatus = ReadingsVal($pres, "state", "present");

#  Log3(undef, 1, "my_CheckPresence      pIchLightStatus: $pIchLightStatus      pIchStatus: $pIchStatus");

  if($LightStatus ne $Status)
  {
    fhem("set $hping statusRequest");
#    Log3(undef, 1, "my_CheckPresence statusRequest      $pres_Status: $LightStatus      $hping_Status: $Status");
  }
}


############## Check ob Geraet an der Fritz!Box angemeldet ist ( ueber MAC Adresse )
sub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($Device),
  #           zu suchende MAC ($MAC),
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($Device, $MAC) = @_;
  my $Status = 0;
  $MAC =~ tr/:/_/;
  $MAC = "mac_".uc($MAC);
  my $StatusFritz = ReadingsVal($Device, $MAC, "weg");
  if ($StatusFritz eq "weg") {
   # Log 1, ("checkFritzMACpresent ($Device): $MAC nicht gefunden, abwesend.");
    $Status = 0;
  } elsif ($StatusFritz eq "inactive") {
   # Log 1, ("checkFritzMACpresent ($Device): $MAC ist >inactive<, also abwesend.");
    $Status = 0;
  } else {
    # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät per WLAN angemeldet.
   # Log 4, ("checkFritzMACpresent ($Device): $MAC gefunden, Gerät heißt >$StatusFritz<.");
    $Status = 1;
  }
  return $Status
}


In der Cfg Datei

define Smartphone_Ralf PRESENCE function {checkFritzMACpresent("FritzBox_Keller","11:22:33:44:55:66")} 600 900
##Mac Adresse des Smartphone

define Smartphone_Ralf_hping PRESENCE function {Check_WLAN_Device("192.168.188.100", "11:22:33:44:55:66")} 3600
##IP und Mac Adresse des Smartphone

define Presence_Smartphone_Ralf notify Smartphone_Ralf:(absent|present) {CheckPresence("Smartphone_Ralf_hping", "Smartphone_Ralf")}
##Das notify welches das Smartphone aufweckt

Die Datei /opt/fhem/FHEM/presence.sh anlegen und Dateirechte und Besitzer setzten - wenn nicht richtig.

Das funktioniert bei mir sehr gut.

Ich habe die Meldungen im Log deaktiviert.


Titel: Antw:Presence und iPhone / Android
Beitrag von: 1dz am 19 Februar 2019, 13:26:59
Hallo Ralf und Alle,

ich habe es am Laufen, allerdings bislang nur einstufig mit der hping3 Methode.
Bin froh das es zunächst überhaupt erstmal funktioniert.
Habe nicht viel Ahnung von Linux und bin dankbar für alles was ich kopieren kann.

Die von mir beschrienen Fehlermeldungen sind wohl ohne Bedeutung !?!
Die Syntaxfehler beim Aufruf von presence.sh führe ich mal auf fehlerhaftes copy und paste zurück.

Die Anwesenheitserkennung mit einem Galaxy S5 ist schon ziemlich gut aber noch nicht perfekt.
Ca. 2-3 Mal in der Nacht wir das Phone fälschlicherweise als abwesend erkannt, und danach wieder anwesend.

Mal schauen ob ich die ,,2 stufige Methode" hin bekomme.

Gruß und vielen Dank
Thomas
Titel: Antw:Presence und iPhone / Android
Beitrag von: RappaSan am 19 Februar 2019, 13:46:23
Die Androiden sparen gerne zwischendurch Strom, da kann man einstellen, was man will. Interessiert die leider nicht. :(
Titel: Antw:Presence und iPhone / Android
Beitrag von: Beetle2003 am 22 Februar 2019, 10:24:51
Zitat von: 1dz am 19 Februar 2019, 13:26:59
Hallo Ralf und Alle,

ich habe es am Laufen, allerdings bislang nur einstufig mit der hping3 Methode.
Bin froh das es zunächst überhaupt erstmal funktioniert.
Habe nicht viel Ahnung von Linux und bin dankbar für alles was ich kopieren kann.

Die von mir beschrienen Fehlermeldungen sind wohl ohne Bedeutung !?!
Die Syntaxfehler beim Aufruf von presence.sh führe ich mal auf fehlerhaftes copy und paste zurück.

Die Anwesenheitserkennung mit einem Galaxy S5 ist schon ziemlich gut aber noch nicht perfekt.
Ca. 2-3 Mal in der Nacht wir das Phone fälschlicherweise als abwesend erkannt, und danach wieder anwesend.

Mal schauen ob ich die ,,2 stufige Methode" hin bekomme.

Gruß und vielen Dank
Thomas

Hallo Thomas,

Für die zweistufige Methode musst du die Fritz!Box in dem einbinden.
Dann kannst du die Anwesenheit der Geräte über die Mac Adresse abfragen.

Ob es ein Plugin für andere Router gibt, ist mir derzeit nicht bekannt.
Titel: Antw:Presence und iPhone / Android
Beitrag von: 1dz am 22 Februar 2019, 20:23:05
Hallo Ralf und Joachim,

würdet Ihr wohl so nett sein und mir Eure komplette "99_myUtils" mal zeigen.
Ich habe versucht das nachzuvollziehen kriege es aber nicht hin.

Gruß und danke im vorraus.

Thomas
Titel: Antw:Presence und iPhone / Android
Beitrag von: Beetle2003 am 22 Februar 2019, 21:00:37
Zitat von: 1dz am 22 Februar 2019, 20:23:05
Hallo Ralf und Joachim,

würdet Ihr wohl so nett sein und mir Eure komplette "99_myUtils" mal zeigen.
Ich habe versucht das nachzuvollziehen kriege es aber nicht hin.

Gruß und danke im vorraus.

Thomas

Hallo Thomas,

hast Du die Fritz!Box in Fhem eingebunden? Erklärung siehe   https://wiki.fhem.de/wiki/FRITZBOX

Meine 99_myUtils (mit den hierfür notwendigen Routinen) habe ich in dem Post hinterlegt

Wo liegt aktuell deine Herausforderung?

Wenn Du die Fritz!Box eingebunden hast, siehst Du in den Readings die angemeldeten Geräte. Ist das auch bei Dir?

Gruss

Titel: Antw:Presence und iPhone / Android
Beitrag von: eurofinder am 22 Februar 2019, 23:40:10
@Beetle2003:
Ich habe deine Anwesenheitsprüfung jetzt bei mir mal zwecks Probe umgesetzt.
Smartphone_XXX
Smartphone_XXX_hping
Presence_Smartphone_XXX
werden auch mit present bzw absent gesetzt.

Welches Device trage ich dann jetzt unter meinem ROOMMATE unter rr_presenceDevices ein, damit der Status auch aktualisiert wird. Muss ich an den Attributen noch was ändern und wenn ja wie?
Bin zwar nicht ganz unwissend was Linux betrifft, aber mit FHEM erst seit kurzem befasst und noch in der Lernphase:-)

Gruß und schönes Wochenende
eurofinder
Titel: Antw:Presence und iPhone / Android
Beitrag von: Fowler am 25 Februar 2019, 09:13:41
Hi,

ich habe bei mir im Netz das Problem,dass der Aufruf von hping3 immer 100% packet loss hat.
Ein normaler ping funktioniert jedoch.

sudo hping3 -q -2 -c 10 -p 5353 -i u1 192.168.178.25
HPING 192.168.178.25 (eth0 192.168.178.25): udp mode set, 28 headers + 0 data bytes

--- 192.168.178.25 hping statistic ---
10 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms


ping -c 5 192.168.178.25
PING 192.168.178.25 (192.168.178.25) 56(84) bytes of data.
64 bytes from 192.168.178.25: icmp_seq=1 ttl=64 time=137 ms
64 bytes from 192.168.178.25: icmp_seq=2 ttl=64 time=45.0 ms
64 bytes from 192.168.178.25: icmp_seq=3 ttl=64 time=74.2 ms
64 bytes from 192.168.178.25: icmp_seq=4 ttl=64 time=103 ms
64 bytes from 192.168.178.25: icmp_seq=5 ttl=64 time=128 ms

--- 192.168.178.25 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4002ms
rtt min/avg/max/mdev = 45.023/97.979/137.833/34.484 ms



Hatte jemand von euch schon einmal das Problem, und weiss woran das liegen könnte?
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 25 Februar 2019, 09:23:08
Steht der Parameter -p bei hping nicht für den Port?
Was passiert, wenn Du ohne diesen Parameter hpingst?
Icmp (das Protokoll hinter Ping) erfordert meiner Meinung nach keinen Port und wenn auf Port 5353 nichts lauscht, kann auch keine Antwort kommen.
Hping kann mehr als Ping, also auch Ports per TCP ansprechen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: 1dz am 25 Februar 2019, 09:24:33
Hallo Ralf,

mein Problem war das ich einige Syntax Errors in der 99_myutils hatte.
Wie auch immer, mit Deiner Hilfe ist es mir nun gelungen eine brauchbare An(Abwensenheitserkennung zu basteln.
Bislang, das heißt seit Samstag 23.02.19,  keine Fehlalarme bei mir!!!!!!!!
Ich benutze die Hping Methode: IP und Mac Adresse des Smartphone, und wie Du mir zeigtest das Auslesen der Fritzbox: Mac Adresse des Smartphone.

Vorher wurde mein Handy in unregelmäßigen Abständen als abwesend erkannt, obwohl es sehr wohl hätte anwesend sein müssen.
Ich werde nun noch versuchen meinen Wlan Repeater, so wie im Wiki beschrieben, mit einzubinden, weil sich
mein Phone manchmal mit der Fritzbox und manchmal mit dem Repeater connected.

So, bleibt noch sich recht herzlich zu bedanken. Natürlich auch an alle anderen die die ganze Vorarbeit geleistet haben.
Es ist schon toll was mit Fhem alles möglich ist.

Gruß
Thomas
Titel: Antw:Presence und iPhone / Android
Beitrag von: Fowler am 25 Februar 2019, 09:26:32
@HausHH

Ohne den Port habe ich es auch schon probiert. Das ging leider auch nicht.

Kann es sein, dass da entweder die FritzBox oder vielleicht der Switch (managed) irgendetwas blockiert?

Ich konnte allerdings nichts entsprechendes finden.
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 25 Februar 2019, 09:35:52
Zitat von: Fowler am 25 Februar 2019, 09:26:32
@HausHH

Ohne den Port habe ich es auch schon probiert. Das ging leider auch nicht.

Kann es sein, dass da entweder die FritzBox oder vielleicht der Switch (managed) irgendetwas blockiert?

Ich konnte allerdings nichts entsprechendes finden.
Stimmt, ich habe auch den -p Parameter in meinem Aufruf.
Was für ein Gerät ist denn am Ziel? Kannst Du dort den eingehenden Verkehr mitschneiden, z.B. bei einer Windows Firewall? Dann könnte man eingrenzen, ob es Sinn macht, sich mit dem Switch zu beschäftigen
Titel: Antw:Presence und iPhone / Android
Beitrag von: Fowler am 25 Februar 2019, 09:52:55
Zitat von: HausHH am 25 Februar 2019, 09:35:52
Stimmt, ich habe auch den -p Parameter in meinem Aufruf.
Was für ein Gerät ist denn am Ziel? Kannst Du dort den eingehenden Verkehr mitschneiden, z.B. bei einer Windows Firewall? Dann könnte man eingrenzen, ob es Sinn macht, sich mit dem Switch zu beschäftigen

Das ist ein Android-Phone, ich wüsste nicht wie man da leicht etwas mitschneiden kann.

Der arp-scan Teil scheint allerdings zu funktionieren.

Ich verwende das presence.sh Skript von Master_Nick:
https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242 (https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242)


Wann braucht man denn von dem Skript den hping3-Teil?
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 25 Februar 2019, 11:09:27
Zitat von: Fowler am 25 Februar 2019, 09:52:55
Das ist ein Android-Phone, ich wüsste nicht wie man da leicht etwas mitschneiden kann.


Wann braucht man denn von dem Skript den hping3-Teil?

Ich glaube, hping3 kommt ins Spiel, wenn der arp-scan fehlgeschlagen ist, kann mich aber irren.

Zurück zu Deinem Problem:
- das Android-Phone ist über ein im Switch integriertes WLAN-Modul mit diesem verbunden? Oder hast Du auch noch einen WLAN-AP?
- kannst Du andere Geräte im LAN per hping3 erfolgreich ansprechen?
- kannst Du andere Geräte im WLAN per hping3 erfolgreich ansprechen?
- hat der Switch (oder ein vielleicht doch vorhandener WLAN-AP) eine Einstellmöglichkeit für ICMP? (An/Aus, entweder Global oder pro Anschluss oder pro Host)?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Fowler am 25 Februar 2019, 14:53:53
Mir ist noch nicht ganz klar, warum ich da immer 100% packetloss habe, aber ich glaube das Skript funktioniert auch so korrekt.

Zumindest wird bei beiden Schleifendurchläufen hinterher der richtige Status zurückgeliefert.

Für mich ist das dann so ok.

Trotzdem vielen Dank für die Hilfe!
Titel: Antw:Presence und iPhone / Android
Beitrag von: Beetle2003 am 02 März 2019, 19:40:36
Zitat von: eurofinder am 22 Februar 2019, 23:40:10
@Beetle2003:
Ich habe deine Anwesenheitsprüfung jetzt bei mir mal zwecks Probe umgesetzt.
Smartphone_XXX
Smartphone_XXX_hping
Presence_Smartphone_XXX
werden auch mit present bzw absent gesetzt.

Welches Device trage ich dann jetzt unter meinem ROOMMATE unter rr_presenceDevices ein, damit der Status auch aktualisiert wird. Muss ich an den Attributen noch was ändern und wenn ja wie?
Bin zwar nicht ganz unwissend was Linux betrifft, aber mit FHEM erst seit kurzem befasst und noch in der Lernphase:-)

Gruß und schönes Wochenende
eurofinder

Hallo,

ich habe es bei mir wie folgt gelöst:
Die Anwesenheitserkennung führe ich mit Smartphone_XXX durch, da diese schneller ein positives ( Anwesenheit ) Ergebnis liefert.
Die Abwesenheitserkennung mit Smartphone_XXX_hping, da diese das Gerät versucht zu wecken, falls es im Stromsparmodus ist. Hierdurch ergibt sich eine Verzögerung bei mir von 30 Minuten ( so konfiguriert ), doch ich bin mir dann sicher, dass das Gerät nicht mehr im Haus ist. Wenn alle Smartphones das Haus tagsüber verlassen haben, fahre ich die Heizung in den Eco Mode und aktiviere die Alarmanlage, sofern vorher nicht manuell erledigt wurde.

Mfg
Ralf
Titel: Antw:Presence und iPhone / Android
Beitrag von: ErzGabriel am 15 September 2019, 10:58:09
Hallo zusammen.
Ich habe mit dem umsetzen der hier beschriebenen Anwesenheitsabfrage ein kleines Problem.
Script ist angelegt und funktioniert manuell einwandfrei.
Subroutine steht in der myUtils und gibt auch keinen fehler aus.
Device ist angelegt und gibt auch keine Fehlermeldung aus.

Trotzdem wird mein Handy immer als abwesend angezeigt. Ich stehe gerade völlig auf dem Schlauch und bräuchte mal ne Starthilfe. Das Script liefert 1 oder 0 zurück, kann es sein, das ich noch im Device anlegen muss, was 1 und 0 sind? Und wenn ja, wie ging das nochmal mit der Umsetzung?

Danke.
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 15 September 2019, 12:18:26
Welches Script hast du WIE WO abgelegt!?
(am besten posten)

Wie sind dort die Rechte für das Script: ls -la

Wenn du das Script in FhemWeb ausführst funktioniert das auch!?

Einfach Scriptname inklusive vollständigem Pfad wie folgt in FhemWeb:

{qx("/vollständiger Pfad/Scriptname")}

Du brauchst nat. ein Presence-Device was die Funktion auch aufruft...
...und Presence-Typ halt entsprechend wählen/definieren etc.

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 16 September 2019, 00:08:47
Zitat von: ErzGabriel am 15 September 2019, 10:58:09
Hallo zusammen.
Ich habe mit dem umsetzen der hier beschriebenen Anwesenheitsabfrage ein kleines Problem.
Script ist angelegt und funktioniert manuell einwandfrei.
Subroutine steht in der myUtils und gibt auch keinen fehler aus.
Device ist angelegt und gibt auch keine Fehlermeldung aus.

Trotzdem wird mein Handy immer als abwesend angezeigt. Ich stehe gerade völlig auf dem Schlauch und bräuchte mal ne Starthilfe. Das Script liefert 1 oder 0 zurück, kann es sein, das ich noch im Device anlegen muss, was 1 und 0 sind? Und wenn ja, wie ging das nochmal mit der Umsetzung?

Danke.


Moin :-) Zugegeben..... eine Anleitung auf einer Seit gibt es hier auch glaub ich gar nicht so Richtig...

Devices die du zwingend brauchst:
Nur die Handys die du sehen willst (in dem Fall dann deines)

Dies sollte angelegt sein wie folgt:

Als PRESENCE Device und mit der Definition
     
function {CheckPresence("HostnameDeinesHandys", "00:00:00:00:00:00")} 120 300
*Die 00:00:00:00:00:00 mit der Mac deines Handys ersetzen bittte.

Dann muss das script in die MyUtils wandern wie du schon sagtest.
Und du benötigst hping3 und arpscan installiert. Ansonsten muss FHEM die Scripte ausführen dürfen (Berechtigungen setzen).
Titel: Antw:Presence und iPhone / Android
Beitrag von: ErzGabriel am 16 September 2019, 13:39:52
Ich bedanke mich für Eure Hilfe, Problem ist gelöst.
Master_Nick hatte den richtigen Hinweis für mich.

Ich Schussel hatte vergessen, Fhem die Berechtigung für die Scripte zu geben.

Danke, für die Hilfe.
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 03 März 2020, 10:13:41
Ich habe mal dieses CheckAll verwandt...

sub checkAllFritzMACpresent($) {
  # Benötigt: nur die zu suchende MAC ($MAC),
  # Es werden alle Instanzen vom Type FRITZBOX abgefragt
  #
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($MAC) = @_;
  # Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0
  my $Status = 0;
  $MAC =~ tr/:/_/;
  $MAC = "mac_".uc($MAC);
  my @FBS = devspec2array("TYPE=FRITZBOX");
    foreach( @FBS ) {
my $StatusFritz = ReadingsVal($_, $MAC, "weg");
if ($StatusFritz eq "weg") {
} elsif ($StatusFritz eq "inactive") {
} else {
  # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.
  $Status = 1;
}
    }
  return $Status
}


Allerdings zeigt mir fhem bei der mac nur als Status defined, aber keine present.

Hier mal ein List dazu...

Internals:
   CFGFN     
   DEF        function {checkAllFritzMACpresent("meine Mac")} 60 60
   FUUID      5e5e0a24-f33f-e9d9-9b06-e31c1440d6619874
   INTERVAL_NORMAL 60
   INTERVAL_PRESENT 60
   MODE       function
   NAME       Smartphone_Sven_all
   NOTIFYDEV  global
   NR         1388
   NTFY_ORDER 50-Smartphone_Sven_all
   STATE      defined
   TYPE       PRESENCE
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1583226190.54382
           VALUE      disabled
   READINGS:
     2020-03-03 08:41:24   model           function
     2020-03-03 10:04:24   state           defined
   helper:
     DISABLED   0
     call       {checkAllFritzMACpresent("meine Mac")}
     RUNNING_PID:
       abortFn    PRESENCE_ProcessAbortedScan
       arg        Smartphone_Sven_all|{checkAllFritzMACpresent("meine Mac")}|0
       bc_pid     126030
       finishFn   PRESENCE_ProcessLocalScan
       fn         PRESENCE_DoLocalFunctionScan
       pid        WAITING:
       timeout    60
       abortArg:
Attributes:
   group      Anwesenheit
   room       3.2_Anwesenheit,Fritzbox
   userattr   presence presence_map structexclude
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 03 März 2020, 11:08:59
Erbitte mehr Erläuterung "dieses CheckAll"? Ich kenne Checkall nur von DOIF.

*EDIT: Ah so heißt deine Funktion :-D

Also was komplett eigenes - richtig?
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 03 März 2020, 11:33:55
Zitat von: Master_Nick am 03 März 2020, 11:08:59
Also was komplett eigenes - richtig?

Nicht ganz, ist wohl das "normale" Fritzbox-Anwesenheit...
...ABER @en-trust: hier (total) falsch! ;)

Evtl. mal in einem PRESENCE-Modul-Thread nachfragen...

EDIT: oder (wahrsch. besser) einen neuen Thread aufmachen...

Hier geht es um die "hping3-Methode"...

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: en-trust am 03 März 2020, 11:41:56
Die Funktion stammt aus... und wurde in #226 hier gepostet.

https://wiki.fhem.de/wiki/FRITZBOX#Anwesenheitserkennung_.C3.BCber_mehrere_Fritzboxen_oder_AVM_Repeater_und_Fritzbox
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 03 März 2020, 11:45:17
Zitat von: en-trust am 03 März 2020, 11:41:56
Die Funktion stammt aus... und wurde in #226 hier gepostet.

https://wiki.fhem.de/wiki/FRITZBOX#Anwesenheitserkennung_.C3.BCber_mehrere_Fritzboxen_oder_AVM_Repeater_und_Fritzbox

Aber auch dort wurde bereits darauf aufmerksam gemacht, dass es NICHT um das HIER behandelte Script etc. geht ;)

https://forum.fhem.de/index.php/topic,76342.msg867803.html#msg867803

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: bbg41crew am 20 März 2020, 09:46:10
Ich hatte folgendes Problem:

der Aufruf der presence.sh mit folgendem Befehl

./presence.sh x.x.x.x x:x:x:x:x

hat bei mir in Putty folgende Fehlermeldung ausgegeben:

/bin/bash^M bad interpreter: No such file or directory

Lösung des Problems war folgende Befehlszeile

sed -i -e 's/\r$//' presence.sh


Hintergrund fand ich auf askubuntu.com

ZitatThe ^M is a carriage return character. Linux uses the line feed character to mark the end of a line, whereas Windows uses the two-character sequence CR LF. Your file has Windows line endings, which is confusing Linux.

Vielleicht hilft das dem ein oder anderen.


Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 20 März 2020, 09:59:16
Wie so oft: FALSCHER Editor!
(oder falscher "Weg" des "Holens")

Ein Linux Script ist halt ein Linux Script und KEINE Windows Text Datei ;-)

Gruß, Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: bbg41crew am 20 März 2020, 10:17:31
Ein Schicksal das uns Hobby-Code-Zusammenkopierern leider nicht erspart bleibt... ;-). Herzliche Grüße, Dominik
Titel: Antw:Presence und iPhone / Android
Beitrag von: MadMax-FHEM am 20 März 2020, 11:09:41
Zitat von: bbg41crew am 20 März 2020, 10:17:31
Ein Schicksal das uns Hobby-Code-Zusammenkopierern leider nicht erspart bleibt... ;-). Herzliche Grüße, Dominik

Dann empfielt sich drauf zu achten und evtl. das hier zu nutzen/parat zu haben ;) : http://dos2unix.sourceforge.net/

Weil auch das "sed-Zeugs" ist eher schwer für einen "Linux-Unkundigen"...
...und angewendet auf die falsche Datei (am Ende noch mit einem [kleinen] "Verschreibsler") kann schon mal ganz arg was schief gehen...

Viel Spaß noch! Joachim
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 20 März 2020, 12:00:53
Dafür gibt es seit Ewigkeiten schon fertige Programme:
dos2unix
unix2dos
Titel: Antw:Presence und iPhone / Android
Beitrag von: bbg41crew am 21 März 2020, 14:25:15
Lieben Dank - DOS2UNIX direkt installiert. Jetzt bringt mich allerdings ein anderes Problem zum verzweifeln:

Aufruf des presence.sh scripts mit folgenden Parametern liefert einwandfrei die "1":

./presence.sh x.x.x.x x:x:x:x:x:x

Leider liefert das PRESENCE modul mit folgenden Parametern immer ein absent:

function {CheckPresence("x.x.x.x","x:x:x:x:x:x")} 60 60

Ein Aufruf in der FHEM-Befehlszeile mit folgendem Code liefert ein "0" zurück was die absent-Meldung erklären würde:

{CheckPresence("x.x.x.x","x:x:x:x:x:x")}

Berechtigungen gemäß ls -la:

-rwxrwxrwx  1 fhem  dialout   1387 Mär 21 13:03 presence.sh
-rwxrwxrwx  1 fhem  dialout   3642 Mär 21 13:12 99_myUtils.pm


Berechtigungen für FHEM wie folgt:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
fhem ALL=(ALL) NOPASSWD: /opt/fhem/FHEM/backup.sh, /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3


Wenn ich die Berechtigung für FHEM wie folgt umsetze, funktioniert das Script im FHEM korrekt:

fhem    ALL=(ALL) NOPASSWD: ALL

Ich bin wirklich relativ ratlos warum das Skript mit den beschränkten Rechten nicht funktioniert - hat einer von euch eine Idee?

Viele Grüße,

Dominik

Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 21 März 2020, 16:59:29
Zitat{CheckPresence("x.x.x.x","x:x:x:x:x:x")}
Ruft das wirklih Dein Script auf? Kannst Du bitte uns mal den Inhalt von CheckPresence geben?
Titel: Antw:Presence und iPhone / Android
Beitrag von: bbg41crew am 21 März 2020, 17:41:00
Sehr gerne:

CheckPresence ist in meiner 99_myUtils.pm hinterlegt mit folgendem Code:

sub CheckPresence($$)
# Makes sure that PRESENCE works also with Iphone and other devices that go to deep sleep

{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx( /opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckPresence", 2, "CheckPresence: $ret";
    return 0;
  }

  return $ret;

}


Der Code an sich funktioniert auch wenn ich FHEM volle Berechtigung gebe. Nur wenn ich den Code einschränke ergibt sich das Problem.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 21 März 2020, 18:45:20
Da Du (gans) oben dein Script indirekt aufrufst, was passiert bei direktem Aufruf?
/opt/fhem/FHEM/presence.sh $ip $mac
Titel: Antw:Presence und iPhone / Android
Beitrag von: bbg41crew am 21 März 2020, 19:14:54
Funktioniert und liefert "1" zurück

nickl@nini-nuc:/opt/fhem/FHEM$ /opt/fhem/FHEM/presence.sh x.x.x.x x:x:x:x:x:x
1
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 21 März 2020, 20:57:49
Probiere mal:
fhem   ALL = NOPASSWD: /opt/fhem/FHEM/backup.sh, /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3
Titel: Antw:Presence und iPhone / Android
Beitrag von: bbg41crew am 22 März 2020, 12:31:28
Vielen Dank - habe ich jetzt mal angepasst wenngleich ich mich letztlich für eine andere Variante entschieden habe. Hintergrund ist, dass bei mir leider der Deep Sleep Mode nicht zuverlässig verhindert wurde.

Meine aktuelle Lösung ist:

IFTTT checkt Geofence und sendet via Telegram absent oder present an FHEM.

Bin mal gespannt ob das zuverlässiger funktioniert.
Titel: Antw:Presence und iPhone / Android
Beitrag von: is2late am 29 April 2020, 17:29:54
Hi,

bekomme folgende Fehlermeldung:
sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
sudo: /etc/sudoers.d/010_fhem-nopasswd gehört UID 999, sollte UID 0 gehören]


Ich bin nach der Anleitung in #176 vorgegangen (Presence.docx), weil sie mich Anfänger so schön geleitet hat.
Der Inhalt der Datei sudoers.d/010_fhem-nopasswd:

fhem ALL = NOPASSWD: /opt/fhem/FHEM/presence.sh, /usr/bin/arp-scan, /usr/sbin/hping3

Hier die Rechte:
-r--r----- 1 root root     36 Apr 29  2019 010_at-export
-r--r----- 1 fhem dialout 111 Apr 29 19:10 010_fhem-nopasswd
-r--r----- 1 root root     27 Okt 18  2016 010_pi-nopasswd


Das Problem wurde wohl weiter oben (Antwort #82) schon besprochen, aber leider verstehe ich die Lösung (#83) nicht.
Kann mir bitte jemand auf die Sprünge helfen?

LG Ingo

PS: Plötzlich ist auch meine Lupusec-Alarmanlage nicht mehr erreichbar.... Parallelität oder Folge?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 29 April 2020, 22:56:06
Gucke es Dir mal genauer an:
-r--r----- 1 root root     36 Apr 29  2019 010_at-export
-r--r----- 1 fhem dialout 111 Apr 29 19:10 010_fhem-nopasswd
-r--r----- 1 root root     27 Okt 18  2016 010_pi-nopasswd


Speziell die User/Gruppe und dann den Fehlertext "/etc/sudoers.d/010_fhem-nopasswd gehört UID 999, sollte UID 0 gehören]"

Hinweis: UID 0 = root
Titel: Antw:Presence und iPhone / Android
Beitrag von: is2late am 30 April 2020, 11:31:01
Vielen Dank, Wernieman! Tipp hat geholfen!
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 30 April 2020, 11:46:59
Ich hoffe Du hast was gelernt. Viele Fehler kann man durch lesen des Fehlertextes selber lösen.
Titel: Antw:Presence und iPhone / Android
Beitrag von: is2late am 30 April 2020, 12:23:06
Ja, denke auch, dass so der Lerneffekt größer ist. Allerdings muss man die Fehlermeldung auch erst einmal richtig interpretieren können :-\
Nun ist die Fehlermeldung zwar verschwunden, aber die Erkennung funktioniert trotzdem noch nicht korrekt.
ls - la zeigt
-r--r-----   1 root root  115 Apr 30 11:21 010_fhem-nopasswd

sudo /opt/fhem/FHEM/presence.sh 192.168.1.1 aa:bb:cc:dd:00:11] wirft die "1" aus.

Genau wie oben #277, ergibt

[{CheckPresence("x.x.x.x","x:x:x:x:x:x")}]  aber "0".

99_myUtils hat folgenden Inhalt:

package main;

use strict;
use warnings;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.
package main;
use strict;
use warnings;

sub CheckPresence($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx( /opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckPresence", 2, "CheckPresence: $ret";
    return 0;
  }

  return $ret;

}

1;


Deinen Tipp #282 habe ich schon umgesetzt.
Was könnte sonst noch falsch sein? Welche Infos kann ich noch liefern?

LG Ingo
Titel: Antw:Presence und iPhone / Android
Beitrag von: Wernieman am 30 April 2020, 12:43:57
Also Script läuft?

Baue in Dein myUtils mehr Debugmeldungen ein. Sorry aber da müssen andere ran ...
Titel: Antw:Presence und iPhone / Android
Beitrag von: is2late am 30 April 2020, 12:58:09
Okay, danke!
Titel: Antw:Presence und iPhone / Android
Beitrag von: Otto123 am 01 Mai 2020, 19:09:34
Zitatsudo /opt/fhem/FHEM/presence.sh 192.168.1.1 aa:bb:cc:dd:00:11]
wirft die "1" aus.

Genau wie oben #277, ergibt

[{CheckPresence("x.x.x.x","x:x:x:x:x:x")}]  aber "0".
Naja, wenn das presence.sh Script wirklich sudo braucht :( dann muss doch auch sudo in den Aufruf in der 99_myUtils!?
Insofern versteh ich #141 nicht, oben sudo unten nicht. Aber ich will diese 100 Folgeseiten nicht lesen. Ich brauch diese Lösung nicht ;)

Gruß Otto
Titel: Antw:Presence und iPhone / Android
Beitrag von: is2late am 01 Mai 2020, 21:30:55
Volles Verständnis....aber danke für Deinen Gedanken!
Titel: Antw:Presence und iPhone / Android
Beitrag von: RappaSan am 02 Mai 2020, 08:41:56
Ist die einsame eckige Klammer wirklich im sudo Aufruf drin? ???
Titel: Antw:Presence und iPhone / Android
Beitrag von: is2late am 02 Mai 2020, 14:00:21
Nein, sorry, keine Ahnung, wie die Klammer da reingekommen ist. Der Aufruf funktioniert jedenfalls.
Titel: Antw:Presence und iPhone / Android
Beitrag von: howy-1 am 09 Oktober 2020, 17:28:40
Hallo zusammen,

ich grabe mal hier nach 120 Tagen ein wenig um, indem ich nur etwas ergänzen möchte:

Das Skript "presence.sh" läuft fehl, wenn man 2 Netzwerk-Devices hat.  Mein Server hat eth0 und eth1 und nach einigem Recherchieren habe ich herausgefunden, dass der im Skript enthaltene arp-scan-Befehl das falsche Netzwerk-Device bei mir genommen hat und deswegen die Handys immer als abwesend gekennzeichnet wurden. Nach hinzufügen von --interface=eth1 gehts dann wieder.

Der Aufruf sieht dann in presence.sh so aus:

PRECHECK=`arp-scan --interface=eth1 -q -g ${IP} | grep -o "${MAC}"`


und

STATUS=`arp-scan --interface=eth1 -q -g ${IP} | grep -o "${MAC}"`


Bei der Option "--interface" ist natürlich immer das jeweils gemeinte Interface einzutragen.  ;)


Grüße, Dirk
Vielleicht konnte ich jemand damit helfen. Bei mir funktioniert es jetzt wieder.
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 03 Februar 2021, 22:11:18
Moin zusammen,

ich hatte vor kurzem festgestellt, dass das in diesem Thread behandelte Script bzw. das darin verwendete arp-scan bei meinem Debian (Buster) für zahlreiche Meldungen im Syslog sorgt. Bei jedem Aufruf von arp-scan wird für die Netzwerkkarte einmal kurz der Promiscuous Mode eingeschaltet und dann auch sofort wieder ausgeschaltet. Das erzeugt jede Menge Einträge im Syslog (ich weiß, könnte man filtern) und das System wird ziemlich träge, so dass man nach dem Tippen eines Kommandos an der Kommandozeile zuschauen kann, wie die Buchstaben erscheinen.

Das war ziemlich lästig und ich habe keine Möglichkeit gefunden, arp-scan ohne den Promiscuous Mode aufzurufen, so dass ich nach einer Alternative geschaut habe. Ich habe die arp-scan-Aufrufe nun ersetzt durch Aufrufe mit dem ip-Kommando.

Aus `sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`
wurde `ip -4 neighbor show | grep -o "${MAC} REACHABLE" | grep -o "${MAC}"

Ich musste dann noch den AbsenceThreshold etwas erhöhen, da Änderungen deutlich schneller durchschlagen. Das Device wechselt nun ziemlich häufig zwischen "Maybe absent" und "Present", aber das scheint mir das kleinere Übel zu sein.

Falls jemand einen Tipp für mich hat
- wie ich längere "Present"-Phasen ohne den häufigen Wechsel zu "Maybe absent" erreiche
oder
- die Nutzung des Promiscuous Mode bei Nutzung von Arp-Scan verhindern kann
wäre ich sehr dankbar.

Schönen Abend und viele Grüße aus Hamburg
Helge
Titel: Antw:Presence und iPhone / Android
Beitrag von: Otto123 am 03 Februar 2021, 22:20:36
Hallo Helge,

ZitatFalls jemand einen Tipp für mich hat
- wie ich längere "Present"-Phasen ohne den häufigen Wechsel zu "Maybe absent" erreiche
schau mal ein userreadings könnte diesen Punkt richten.
https://forum.fhem.de/index.php?topic=117884.0

Gruß Otto
Titel: Antw:Presence und iPhone / Android
Beitrag von: HausHH am 04 Februar 2021, 07:42:00
Danke Otto, schaue ich mir an.
Fürs Erste habe ich die MAXRETRIES im Skript von 10 auf 25 erhöht, damit der Hping3 mehr Versuche macht.
Scheint bei mir bisher ganz gut zu funktionieren, d.h. jetzt springen die Handys nicht mehr ständig hin und her.

Danke und Gruß
Helge
Titel: Antw:Presence und iPhone / Android
Beitrag von: howy-1 am 24 Februar 2021, 20:11:37
Hallo HausHH

Zitat von: HausHH am 03 Februar 2021, 22:11:18
Ich habe die arp-scan-Aufrufe nun ersetzt durch Aufrufe mit dem ip-Kommando.

Aus `sudo arp-scan -q -g ${IP} | grep -o "${MAC}"`
wurde `ip -4 neighbor show | grep -o "${MAC} REACHABLE" | grep -o "${MAC}"



wo genau hast Du das geändert?  In presence.sh?   Bei mir rollen auch die Meldungen bezügl. "promiscuous mode" über die Konsole, weshalb ich das auch gerne umstellen würde.

Gruß,Dirk
Titel: Antw:Presence und iPhone / Android
Beitrag von: miche am 12 Januar 2022, 19:27:12
Hallo,

ich habe zur Zeit ein Problem mit dem Script.
Meine iPhones werden nicht mehr absent gemeldet. Die MAC Adressen bleiben im Cache erhalten, auch wenn die Geräte nicht zu Hause sind.
Wenn ich den ARP Cache lösche geht der Status wieder auf absent, aber sobald wieder presence gemeldet wurde bleibt die Adresse wieder im ARP.

Hat jemand einen Tip für mich?

Gruß und Danke
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 12 Januar 2022, 19:41:40
Hey,
mit welchem Script von welcher Seite des Threads :-) ?
Titel: Antw:Presence und iPhone / Android
Beitrag von: miche am 12 Januar 2022, 23:30:52
Das ist eine gute Frage. Wahrscheinlich eins von ganz Anfang, hab das ja nicht mehr geändert weil es funktioniert. Hast einen Tip welche Version noch funktioniert? Ohne dem Cache vielleicht?
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 12 Januar 2022, 23:41:15
Nuja also die Mühe einmal ein wenig zu lesen solltest du dir schon gemacht habe ;-)

Wahrscheinlicht hast du dann irgendwas altes.
Ich habe damals extra was gebaut ehen ohne den Cache. Das sollte dies sein.

Zitat von: Master_Nick am 30 Januar 2019, 10:43:10
Also der großflächig genutzte Ansatz ist soweit ich persönlich das sehe dieser hier: https://forum.fhem.de/index.php/topic,76342.msg769242.html#msg769242


Ich selbst habe mittlerweile (seit Jahren) das Wifi alles auf Ubiquiti Unifi umgestellt - und daher gar keine Probleme mehr mit einer guten und 100% funktionierenden Anwesenheitserkennung darüber.
Titel: Antw:Presence und iPhone / Android
Beitrag von: miche am 13 Januar 2022, 16:31:29
Vielen Dank! Jetzt funktioniert es wieder wie es soll!
Titel: Antw:Presence und iPhone / Android
Beitrag von: Master_Nick am 14 Januar 2022, 11:57:46
Hehe das war ja einefach - gern.
Titel: Antw:Presence und iPhone / Android
Beitrag von: Kurt77 am 18 Januar 2022, 17:49:20
Zitat von: is2late am 30 April 2020, 12:23:06
sudo /opt/fhem/FHEM/presence.sh 192.168.1.1 aa:bb:cc:dd:00:11] wirft die "1" aus.

Genau wie oben #277, ergibt

[{CheckPresence("x.x.x.x","x:x:x:x:x:x")}]  aber "0".

99_myUtils hat folgenden Inhalt:

package main;

use strict;
use warnings;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.
package main;
use strict;
use warnings;

sub CheckPresence($$)
{
  my ($ip,$mac)= @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx( /opt/fhem/FHEM/presence.sh $ip $mac);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  if ( $ret != 0 && $ret != 1) {
    Log3 "CheckPresence", 2, "CheckPresence: $ret";
    return 0;
  }

  return $ret;

}

1;


Deinen Tipp #282 habe ich schon umgesetzt.
Was könnte sonst noch falsch sein? Welche Infos kann ich noch liefern?

LG Ingo
Hallo Ingo,
habe exakt das gleiche Problem.
Hast Du inzwischen eine Lösung gefunden?
Danke und Gruß,
Kurt