Um zu erfahren, ob ein Gerät über das LAN zu erreichen bzw. eingeschaltet ist, kann man den Sys_Ping Befehl verwenden.
Die jeweiligen Zustände können im Dashboard oder WebFront visualisiert werden oder man kann eine Art „Anwesenheit-Erkennung“ (iPod) realisieren.
Für das u.g. Skript muss jedem Gerät, wie Kamera, Audi, Video, iPod usw. eine Variable vom Typ Boolean vergeben werden.
Diese muss im Baumdiagramm unter dem Skript stehen (IPS_GetChildrenIDs / siehe Bild 1).
Im Feld Beschreibung (ObjectInfo) wird die entsprechende IP-Adresse eingetragen (siehe Bild 2).
Getriggert wird das Skript z.B. alle 5 Minuten.
MST
// (C) by IP-Symcon 2009
// Trigger: z.B. alle 5 Minuten
foreach(IPS_GetChildrenIDs($IPS_SELF) as $item){ // alle Unterobjekte
$id_info = IPS_GetObject($item);
$id_typ = $id_info['ObjectType'];
if ($id_typ == 2){ // nur bei Variablen
$id_adr = $id_info['ObjectInfo'];
$ping = Sys_Ping($id_adr, 1000); // Ping max. 2 Sek. warten
if($IPS_SENDER == "Execute") { // zum Testen
echo "IP: $id_adr
";
echo "Ping: " .(int)$ping. "
";
}
SetValue($item, $ping); // Ping-Ergnis speichern
}
}
Leider habe ich da ein Problem entdeckt was recht störend ist:
Mein IPS läuft auf einem Windows Home Server (basiert auf WIndows 2003).
Ich habe 15 Geräte in meinem LAN welche ich per Sys_Ping abfrage (timeout 2000 ms). Wenn ich nun größere Dateien auf den Server kopiere und der Abfragezyklus startet bricht mir meist der Kopiervorgang zusammen.
Das iPhone antwortet im standby nicht auf den Ping, da müsste man das Konzept zur Erkennung ändern.
Ich Frage alle paar Minuten die Status Seite vom WLAN Access Point ab, das funktioniert in meinem Setup bestens.
Wie schreibe ich die Ergebnisse in eine DB um eine Historie zu erzeugen ? Also sowas wie: Gerät X war heute 2h an, 10h in der letzten Woche und 120h insgesamt.