JSONRPC Fehler beim Aufruf abfangen

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.

Hallo Rainer,

versuche es damit

$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,");

oder so

@$result = $rpc->IPS_GetKernelDir();
if ($result == "")
	echo "Keine Verbindung";
else
	echo "KernelVersion: ".$result;

Hallo Karlheinz,
zunächst ein mal für dich und alle IPS-Fans ein gutes und erfolgreiches Jahr 2015.

Besten Dank für deinen Hinweis, der ja eigentlich logisch und recht einfach ist.
Ich werde es versuchen und das Ergebnis posten.

Genau der Hinweis von meike0_0 hats gebracht.

Wie immer, wenn mans weiss, ist es einfach.
Es wäre schön, wenn man die Beschreibung irgendwo finden könnte.

Mein Funktionswunsch ist damit erfüllt.

Morgen Rainer,
ein frohes neues Jahr und viel Gesundheit.

Du siehst das Jahr gebinnt schon einmal gut, hoffentlich geht es so weiter.:smiley:

Hallo,

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).

Gruß
Zk

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");
}