Da anscheinend Fehler im Aufruf der JSONRPC per PHP-Script nicht abfangbar sind, stelle ich den Antrag, diese Funktion zu implementieren.
Ich hatte im Forum „Scripte, PHP usw.“ diese Frage gestellt, aber keine Antwort erhalten.
Nachfolgend zur Erläuterung meine Frage:
Folgendes Script_
$rpc = new JSONRPC("http://ixx@xxx.de:zzz@192.168.1.yy:xx/api/");
$rpc->HM_WriteValueString(12345 /*[Homematic\LEQ0772xxxGong \Funk Gong LEQ0772xxx]*/,"SUBMIT","1,2,1000,38,20,");
IPS ist auf dem IPS-Server „http://ixx@xxx.de:zzz@192.168.1.yy:xx/api/“ gestoppt.
Fehlerhinweis:
Warning: file_get_contents(http://...@xxx.de:zzz@192.168.1.yy:xx/api/): failed to open stream:
Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.
in C:\Program Files (x86)\IP-Symcon\scripts\__jsonrpc.inc.php on line 33
Warning: array_walk_recursive() expects parameter 1 to be array, null given in
C:\Program Files (x86)\IP-Symcon\scripts\__jsonrpc.inc.php on line 40
Wie fange ich diesen Fehler ab?
Vielleicht viel einfacher als gedacht, aber wie?
Suchfunktion habe ich jetzt eine Stunde vergeblich bemüht.
$rpc = new JSONRPC("http://ixx@xxx.de:zzz@192.168.1.yy:xx/api/");
@$rpc->HM_WriteValueString(12345 /*[Homematic\LEQ0772xxxGong \Funk Gong LEQ0772xxx]*/,"SUBMIT","1,2,1000,38,20,");
ich verwende die JSONRPC Schnittstelle für die Verbindung IPSymcon auf einem Rasperry und eines IPSymcon-Servers auf einem PC. Hierbei werden ein Script und einige Variablen zyklisch (alle 2 Sekunden) durch den PC auf dem Rasperry auf- bzw. abgerufen.
Ist die Verbindung zum Raspbery gestört ist die Scriptlaufzeit mit dem „@$result = $rpc->… Befehl“ bis zur Erkennung der gestörten Verbindung ca. 22 Sekunden. Da das Script jedoch alle 2 Sekunden aufgerufen wird, laufen die Tasks über.
Wie könnte eine fehlende/gestörte Verbindung schneller erkannt werden (z.B. über Ping).
Ich habe es jetzt so gemacht.
Das Script läuft alle 60 Min. Kann man ja ändern, wenns zu lange oder zu kurz ist.
Bei Ausfall schickt er mir eine Mail. Zum Testen hatte ich mir auch eine Mail bei „OK“ geschickt.
Die Echos können nach dem Test raus.
// Abfangen des Fehlers, wenn JsonRpc nicht läuft
$rpc = new JSONRPC("http://xxx@xxxxxxx.de:pppp@192.168.1.xx:po/api/");
@$result = $rpc->IPS_GetKernelDir();
if ($result == "")
{
echo "Keine Verbindung zum Pi";
SetValue(37871 /*[Datenaustausch\Pi Wohlbefinden\Pi Fehler]*/, "Fehler");
SetValue(37871 /*[Datenaustausch\Pi Wohlbefinden\Pi Fehler]*/, false);
IPS_RunScript(22196 /*[Mail-Versand\Mail wegen Pi-Ausfall]*/);
}
else
{
//echo ("Verbindung zum Pi aktiv");
SetValue(54530 /*[Datenaustausch\PIi Wohlbefinden\Fehlermeldung]*/, "OK");
SetValue(37871 /*[Datenaustausch\Pi Wohlbefinden\Pi Fehler]*/, true);
SetValue(35124 /*[Datenaustausch\Pi Wohlbefinden\Pi uptime alt]*/, GetValue(19364 /*[Datenaustausch\Pi Wohlbefinden\Pi uptime]*/));
//SMTP_SendMail(29748 /*[ISDN-Telefon\Mail-Versand\E-Mail senden (SMTP) Android]*/,"Alles OK", "Pi läuft");
}