Ist relativ simpel. In IPS kannst Du über
$Instance = IPS_GetInstance(xxxxx /*[HomeMatic Socket CCU]*/);
$Status = $Instance['InstanceStatus'];
den Staus des Homematic Sockets abfragen. Wenn dieser nicht den Wert 102 hat ist etwas faul.
Umgekehrt ist es komplizierter. In der CCU habe ich eine Systemvariable mit Namen „IPS Unconnect Count“ angelegt. Dann habe ich in der CCU zwei Programme hinterlegt. Das eine wird minütlich ausgeführt und zählt die Systemvariable um eins hoch.
var item = dom.GetObject("IPS Unconnect Count");
item.State(item.State()+1);
Das zweite wird getriggert durch die Werteänderung der Variable „IPS Unconnect Count“ und verschickt ein Email wenn der Variablenwert grösser 5 ist. Den Wert kannst Du setzten wie Du willst je nach dem wie schnell die Benachrichtigung erfolgen soll. Wie das mit dem Email von der CCU funktioniert kannst Du hier nachlesen.
Und in IPS läuft ein Skript welches minütlich genau diese Systemvariable immer wieder auf null zurück setzt.
<?php
$befehl="var result = dom.GetObject('IPS Unconnect Count').State(0);";
$result=Post_Request ($befehl);
function Post_Request ($sdata)
{
$start=time();
$fp = fsockopen ("IP-ADRESSE DEINER CCU", 8181, $errno, $errstr, 2);
if (!$fp)
echo "$errstr ($errno)<br />
";
else
{
stream_set_blocking ( $fp , 1 ); // sicher gehen, dass der stream im non blocking Mode arbeitet
$st = "POST /tclrega.exe HTTP/1.1
";
$st = $st . "Content-type: application/x-www-form-urlencoded
";
$st = $st . "Content-Length: ". strlen($sdata) ."
";
$st = $st . "Connection: Close
";
fputs($fp,$st.$sdata);
$st = "";
$t = fgets($fp,500);
$st = $st . $t . "
";
while ($t != "
")
{
$t = fgets($fp,500);
}
$t = "";
while (!feof($fp))
{
$t .= fgets($fp,10000);
}
fclose($fp);
}
}
?>
Wenn die Variable also nicht regelmäßg von IPS auf null zurück gesetzt wird weiss die CCU, dass Ihr Ansprechpartner tot ist und schickt eine Nachricht.
kannst du bei Skripte mal zeigen habe echt kein schimmer wie man das macht, hätte gedacht ein ping mit der ccu auf ips
aber das geht wohl nicht oder ??
Nein, dass ist nicht ausreichend. Nur weil ein Ping noch beantwortet wird heisst das nicht, dass ein Dienst/Programm noch läuft.