Reaktion auf ERROR-Meldung der ScriptEngine

Gibt es eigentlich eine Möglichkeit in IPS auf Meldungen der ScriptEngine, die nach meinem Wissenststand nur im Logfile protokolliert werden, schnell zu reagieren ?
Ähnlich wie das Modul Event Control („Dieses Modul erlaubt dem User, bei bestimmten Ereignissen in IP-Symcon darauf zu reagieren und ein Skript zu starten“). Das kann wohl nur auf Profilgrenzüberschreitung und Statusänderung reagieren.

Hintergrund der Frage.
Wenn ich per JSON auf einem anderen PC ein Skript starten will und der ist gerade offline, finde ich irgendwann mal ein Riesen-Gedöns im Logfile, ich würde aber gerne sofort auf dieses Fehler-Ereignis durch Ausführen eines anderen Skripts (oder Änderung einer Variablen) reagieren wollen.

Hier ein Beispiel einer diversen Fehlermeldung:

13:27:07 | 44644 | ERROR   | ScriptEngine         | Ergebnis für Skript 44644
<br />
<b>Warning</b>:  file_get_contents(http://192.168.0.148:3777/api/): failed to open stream: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat.

 in <b>D:\IPS\scripts\__rpc.inc.php</b> on line <b>89</b><br />
<br />
<b>Fatal error</b>:  Uncaught exception 'Exception' with message 'Unable to connect' in D:\IPS\scripts\__rpc.inc.php:93
Stack trace:
#0 D:\IPS\scripts\__rpc.inc.php(37): JSONRPC::makeRequest('http://192.168....', '********...', '*****', 'IPS_RunScriptEx', Array, false)
#1 D:\IPS\scripts\JSON_TX.ips.php(313): JSONRPC->__call('IPS_RunScriptEx', Array)
#2 D:\IPS\scripts\JSON_TX.ips.php(313): JSONRPC->IPS_RunScriptEx(24962, Array)
#3 {main}
  thrown in <b>D:\IPS\scripts\__rpc.inc.php</b> on line <b>93</b><br />

Viele Grüsse
Harald

Was spricht dagegen direkt in dem Skript ein try catch Block um die Anfrage zu machen? Dann kannst du direkt darauf reagieren :slight_smile:

paresy

Dagegen spricht, dass ich das nie auf die Reihe bekommen habe:loveips:; in meinem Skript für den JSON-Transfer ist folgender Abschnitt deaktiviert:

//  paresy's Update für die 3.4er Beta (funktioniert nicht)
            if ($lSem & JSONtest) {             
                try {
                    (new JSONRPC ("http://" . $LAN['Svr1']['Li'] . ':' . $LAN[$_IPS['PcRX']]['PW'] . '@' .
                    $LAN[$_IPS['PcRX']]['IP'] . ':' . $LAN[$_IPS['PcRX']]['Port'] . '/api/')) -> IPS_GetKernelDir ();
                } catch (JSONRPCException $e) {
                    $e -> getMessage ();
                    if (isset ($e))
                        print("
e1: $e");
                } catch (Exception $e) {
                    $e3 -> getMessage ();
                    if (isset ($e))
                        print("
e2: $e");
                }
            }


Zur Erklärung: Meine Nomenklatur für meine JSON-Aufrufe hatte ich mal hier beschrieben.

Ein Update dieses Skript-Teils kann mir vielleicht bei dem angeführten Beispiel helfen, aber meine Anfrage „Reaktion auf ERROR-Meldung der ScriptEngine“ war etwas breiter angelegt. Die ScriptEngine bringt ja auch in anderen Konflikten als JSON eine ERROR-Meldung (auch WARNING), z.B. war heute nacht wieder mal mein Schmalband-DSL-Anschluß ausgefallen, was u.a. folgendermaßen notiert wurde:

00:20:23 | 00000 | WARNING | ScriptEngine         | Semaphore 22914 for ScriptID 58378 was not released
00:25:11 | 53447 | WARNING | ScriptEngine         | Ergebnis für Skript 53447
<br />
<b>Warning</b>:  file_put_contents(): supplied resource is not a valid stream resource in <b>D:\IPS\scripts\RegenradarFC2h.ips.php</b> on line <b>744</b><br />

00:25:21 | 21427 | ERROR   | ScriptEngine         | Ergebnis für Skript 21427
<br />
<b>Warning</b>:  Der E/A-Vorgang wurde wegen eines Threadendes oder einer Anwendungsanforderung abgebrochen in <b>D:\IPS\scripts\Wetterwarnungen_UWZ.ips.php</b> on line <b>86</b><br />
Keine Web-Verbindung zur Unwetterzentrale!
00:25:21 | 00000 | WARNING | ScriptEngine         | Semaphore 34708 for ScriptID 21427 was not released
00:30:25 | 58378 | ERROR   | ScriptEngine         | Ergebnis für Skript 58378
<br />
<b>Fatal error</b>:  Uncaught exception 'Google_IO_Exception' with message 'Failed to connect to accounts.google.com port 443: Timed out' in D:\IPS\scripts\google-api-php-client\src\Google\IO\Curl.php:95
Stack trace:
#0 D:\IPS\scripts\google-api-php-client\src\Google\IO\Abstract.php(122): Google_IO_Curl->executeRequest(Object(Google_Http_Request))
#1 D:\IPS\scripts\google-api-php-client\src\Google\Auth\OAuth2.php(337): Google_IO_Abstract->makeRequest(Object(Google_Http_Request))
#2 D:\IPS\scripts\google-api-php-client\src\Google\Auth\OAuth2.php(309): Google_Auth_OAuth2->refreshTokenRequest(Array)
#3 D:\IPS\scripts\google-api-php-client\src\Google\Auth\OAuth2.php(234): Google_Auth_OAuth2->refreshTokenWithAssertion()
#4 D:\IPS\scripts\google-api-php-client\src\Google\Service\Resource.php(208): Google_Auth_OAuth2->sign(Object(Google_Http_Request))
#5 D:\IPS\scripts\google-api-php-client\src\Google\Service\Calendar.php(1561): Google_Service_Resource->call('list', A in <b>D:\IPS\scripts\google-api-php-client\src\Google\IO\Curl.php</b> on line <b>95</b><br />

Das Modul Event Control macht ja schon sowas für Profilgrenzüberschreitung und Statusänderung.

Viele Grüsse
Harald