Um einen Ausfall von Geräten mit einem LAN-Anschluss (z.B. CCU, Webkamera, Gateway) zu erkennen, kann der Sys_Ping Befehl verwendet werden. Für das u.g. Skript muss jedem LAN-Gerät eine Variable vom Typ Boolean vergeben werden. Diese muss im Baumdiagramm unter dem Skript stehen (das Skript nutzt die IPS_GetChildrenIDs Funktion, um alle Variablen unterhalb des Skrips zu durchsuchen). Im Feld Beschreibung der jeweiligen Variablen wird die entsprechende IP-Adresse eingetragen. Um die Verbindung zum Internet zu testen, kann z.B. Google angepingt werden. Hier muss dann ‚www.google.de‘ eingetragen werden (Bild 2). Mit der Eigensacht ‚ObjectInfo‘ (siehe:IPS_GetObject) kann der Text ausgelesen werden. Getriggert wird das Skript z.B. alle 2 Minuten. Ist ein Gerät nicht mehr erreichbar, so kann eine Benachrichtigung mit Hilfe der Funktion WFC_PushNotification auf das Smartphone erfolgen oder eine akustische Alarmmeldung mit Hilfe des WDT-868 erfolgen. Die If-Anweisung ‚if($ping!= GetValue($objectID)‘ sorgt dafür, dass die Benachrichtigung nur einmal bei einem Ausfall ausgeführt wird und nicht bei jeder Skriptausführung.
Wichtig: ‚SetValue(19532, $alarm)‘ muss sich außerhalb der If-Anweisung befinden, damit der Trigger für das 2. Skript regelmäßig ausgeführt wird (und somit der Timer vom WDT-868 aktualisiert wird).
Sollen bestimmte Geräte zeitweise nicht mehr überwacht werden,
so kann man in den ‚Optionen‘ der Variable ‚Versteckt‘ aktivieren bzw. per Befehl: ‚IPS_SetHidden‘ in einem Skript.
In der IF-Anweisung ($objectIsHidden == False) werden diese dann nicht mehr berücksichtigt.
// (C) by Symcon GmbH
// Trigger: z.B. alle 2 Minuten
// IP-Adresse in die "Beschreibung" der Variablen vom Typ Boolean eintragen
$alarm = false; // initialisieren, Startwert > kein Alarm
foreach(IPS_GetChildrenIDs($_IPS['SELF']) as $objectID) { // alle Unterobjekte
$object = IPS_GetObject($objectID);
$objectTyp = $object['ObjectType'];
$objectIsHidden = $object['ObjectIsHidden'];
// echo (int) $objectIsHidden . ": "; // zum Testen
if (($objectTyp == 2) and ($objectIsHidden == False)){// nur bei sichtbaren Variablen
$ipAdresse = $object['ObjectInfo']; // Adresse steht im Feld 'Beschreibung'
$ping = PingVerify($ipAdresse, 100, 5); // Ping maximal eine Sekunde warten
if ($ping == false){ // wenn ein Gerät ausgefallen ist
$alarm = true; // Alarm setzen
}
if ($_IPS['SENDER'] == 'Execute'){ // zum Testen
if($ping) {
$status = "Online";
} else {
$status = "Offline";
}
echo $ipAdresse . " = " . $status . PHP_EOL;
}
if($ping != GetValue($objectID)){
SetValue($objectID, $ping); // Ping-Ergnis speichern
if($ping) {
$meldung = "Rückkehr: ". $object['ObjectName'];
} else {
$meldung = "Ausfall: ". $object['ObjectName'];
}
WFC_PushNotification(58972 /*[Demo]*/, "WatchDog", $meldung, "Speaker", 0);
}
}
}
SetValue(19532 /*[Büro / Server\WatchDog\WDT\LAN WD Ping (alle)]*/, $alarm); // Variable speichern
function PingVerify($ip, $timeout, $count) {
if($count == 0)
return false;
$ping = Sys_Ping($ip, $timeout);
if($ping == false) {
return PingVerify($ip, $timeout, $count-1);
} else {
return $ping;
}
}
Das Skript für den WDT-868 wird ‚Bei einem bestimmten Wert / True / Option: Nachfolgende Ereignisse ausführen‘ getriggert.
$id= 23937;
PJ_SwitchDuration($id, True, 3 * 60); // LAN WD ist auf 2 Minuten eingestellt
Nach Ablauf der eingestellten Zeit oder bei einem Spannungsausfall, fällt das Relais vom WDT-868 ab. Mit Hilfe einer 9V Blockbatterie und einem optischen, akustischen Signalgeber wird man so benachrichtigt – auch wenn der PC komplett ausfällt (Bild 3).
Der WDT-868 kann über unserem Partner-Shop bezogen werden.
MST
Hinweis: es gab hierzu einen ähnlichen Beitrag