An/Abwesenheits erkennung mit Ping

Hallo,

Ich mache eine An- und Abwesenheiskontrolle mit Ping und den Smartphones.
Manchmal bekomme man per Ping keine Antwort und man wird als Abwesend gemeldet dadurch werden weiter Aktionen durchgeführt.
Deshalb würde ich gern erst bei zb 3 Ping versuchen ohne Antwort als Abesend gemeldet werden. Wie kann ich das Anstellen dass erst bei dem 3 Fehlversuch die Aktionen gestartet werden?

MFG

Ich würde folgendes vorschlagen,
ich bin gerade auf der Arbeit und habe nicht soviel Zeit, aber hier schon einmal ein Anfang bzw. eine Idee:


$zaehlererreichbar = 0;
$zaehlernichtereichbar = 0;

$host="xxx.xxx.xxx.xxx";

exec("ping -n 4 " . $host, $output, $result);

print_r($output);

if ($result == 0)
   {
        // echo "Ping successful!";
        $zaehlererreichbar = $zaehlererreichbar +1;
   }

else
   {
        // echo "Ping unsuccessful!";
        $zaehlernichtereichbar = $zaehlernichtereichbar +1;
   }

Anschließend kannst du die $zaehler-Variablen auswerten z.B.:


if ($zaehlererreichbar == 3)
   {
        Benutzer anwesend / Aktion in IP-Symcon schalten
   }
else
   {
        Benutzer abwesend / Aktion in IP-Symcon schalten
   }


Das ganze war jetzt auf die schnelle aus dem Internet und von mir angepasst, aber vielleicht bring es dich weiter. :slight_smile:
Eigentlich müsstes du „Ping unsuccessful!“, gar nicht zählen, da du mit diesem Ergebniss nichts anfängst.
Da wenn der Ping 3 x nicht erfolgreich ist ja sowiso auf abwesend geschalten werden soll bzw. nichts passiert.

Um das Skript immer wieder aufzurfen kannst du das ganze mit einem Timer wiederaufrufen lassen oder per Trigger anstoßen lassen.

Ich mach das auch Spaßeshalber!

Aber Nachts liegt das Dingen z.B. irgendwo und wird kein Ping zurück geben. Auch nicht nach dem dritten mal anpingen!

Danke Daste

Das wird mir schon sehr weiterhelfen. Werde es heute Abend versuchen umzusetzen.
Ich muss unsuccessfull zählen damit nicht nach nur einem Fehlversuch zu Pingen ich als Abwsend gemeldet werde.

Es ist vieleicht verständlicher wenn ich den genauen ablauf erkläre

Wenn ich als Anwesend gemeldet werde wird ein Begüssungs Text per Sonos ausgegeben.
Das Problem ist wenn ein Ping nicht antwortet aber der darauf folgende wieder antwortet, werde ich kurz Abwesend gemeldet und dann wieder Anwesend und der Text wird wieder ausgegben.

Das würde ich gerne durch das zählen verhindern.

Noch eine Frage kann ich das alles in ein Script packen. Das Pingen + Zählen und das abwesend melden.

Guten Abend Gosef,
das ist kein Problem, du kannst alles in ein Skript packen und benötigst keine zwei dafür.

Hallo

iergendwie klappt das mit deinem script nicht so ganz…

Habe den script ein wenig verändert dass er für mich passt… aber mir ist nicht klar wie es +1 kann addiert werden wenn das nächste mal wenn der script startet wieder auf 0 gesettzt wird:

<?
$zaehlererreichbar = 0;
$zaehlernichtereichbar = 0;

$host="192.168.10.31";

exec("ping -n 4 " . $host, $output, $result);

print_r($output);

if ($result == 1)
   {
        $zaehlernichtereichbar = 0;   
   }
else
   {
        // echo "Ping unsuccessful!";
        $zaehlernichtereichbar = $zaehlernichtereichbar +1;
   }  
   if ($zaehlernichtereichbar == 3)
   {
       setValue(48219 /*[Netzwerk\Netzwerk Besch\Handy\Ping\Galaxy-S-V]*/, false);
   }
else
   {
         setvalue(48219 /*[Netzwerk\Netzwerk Besch\Handy\Ping\Galaxy-S-V]*/, true );
   }
 ?>

Die Variablen des Skripts werden jedes mal beim Aufruf auf 0 gesetzt, das stimmt.

Aber das ist auch kein Problem, da wenn du das Skript z.B. mit einem Trigger alle 5 Minuten einmal anstößt läuft es einmal komplett durch, pingt 4 mal und wertet die Ergebnisse der Pings aus d.h. es erhöht je nachdem ob der Ping erfolgreich war oder nicht die $zaehlernichtereichbar oder die $zaehlerereichbar Variable.

Kann ich dir damit weiterhelfen?

Heute Abend kann ich das Skript selbst mal testen, bin gestern leider nicht mehr dazu gekommen.

so gings mir auch mit ab und an paar ping aussetzer, ich habs so gelöst wobei die andere lösung schöner ist:

$bool = Sys_Ping("192.168.2.40",2000);
          if($bool)
          {
					 SetValue(21158 /*[Program\Anwesenheit\HandyPhil]*/ , True);
                echo "Philipp ist anwesend ";
          }
          else
          {
				  IPS_Sleep(2000);
              $bool = Sys_Ping("192.168.2.40",1000);
              if($bool)
          		{
					SetValue(21158 /*[Program\Anwesenheit\HandyPhil]*/ , True);
               echo "Philipp ist anwesend ";
          		}
          		else
          		{
               SetValue(21158 /*[Program\Anwesenheit\HandyPhil]*/ , False);
               echo "Philipp ist abwesend ";
               }
          }

Hallo,

Die version von PhilippS funktioniert bei mir.
Habe es mit der Version von Daste nicht hinbekommen

MFG

@MichB
@PhillipS

Seid so nett, Euren geposteten PHP-Code in die entsprechenden Tags


zu setzen.
2015-01-17 22_12_29-An_Abwesenheits erkennung mit Ping - Antworten.png

Ist einfach besser lesbar.

Danke Euch.

P.S.: Was fürs Thema -> Handys sind nicht ununterbrochen im WLAN!

Ich bin mit dieser Lösung sehr zufrieden:
http://www.ip-symcon.de/forum/threads/23348-Geofency-mit-Webhook?highlight=geofency

Gruß
lueralba

Entschuldigt bitte die späte Antwort, ihr habt recht mein Skript funktionert nicht, ich habe da einen Fehler beim hochzählen.

Wie beschrieben, benutzt die funktionierende Variante von PhillipS.