Skriptausführung bei Fehler wiederholen

Hallo,

ich nutze von HM u.a. Rollladenaktoren, die in meine automatische Beschattung über Skripte eingebunden sind. Nun kommt es leider häufig vor, dass ich die Meldung bekomme:

Warning: Socket is not connected

Alle HM-Komponenten sind dann für ca. 20 Sekunden als fehlerhaft markiert. Es ist schon schlimm genug, dass ich bislang noch nicht herausbekommen konnte, woran dies liegt, aber schlimmer ist natürlich, dass so die Beschattung nicht zuverlässig funktioniert.

Gibt es eine Möglichkeit, die Skriptausführung so zu überwachen, dass es im Fehlerfall erneut ausgeführt wird, bis es fehlerlos durchgelaufen ist (hier also konkret: das Skript müsste noch einmal durchgeführt werden, sobald der Socket reconnected ist)?

Bin für jede Hilfe dankbar!

Viele Grüße, Götz

Der Fehler ist nicht gut. Da würde ich nach der Ursache suchen. Mach mal ein Bild vom HomeMatic Socket. Hast du evtl. HMIP aktiviert ohne dass du HomeMatic IP hast?

paresy

Hallo paresy,

nein, weder IP-Geräte noch IP aktiviert.

Screenshot vom Socket habe ich beigefügt… :confused:

VG, Götz

Dann würde ich mal einen Ping auf die CCU machen, um zu sehen dass die Verbindung stabil ist. Welche Fehlermeldungen hast du denn im Log? Dort muss gemeldet werden wenn die Verbindung abbricht.

paresy

Beigefügt mal die letzten Meldungen (innerhalb einer Stunde 4 Unterbrechungen…).

Wie mache ich einen Ping auf die CCU (sorry für die laienhafte Frage…)?

Götz

Ich habe mal weiter geforscht - ein paar Sekunden vor oder gleichzeitig mit der Meldung

Homematic Socket (KeepAlive): Operation canceled

ist im Debug des Homematic Socket immer folgender Sender mit folgenden Daten:

TRANSMIT RF | <?xml version="1.0" encoding="ISO-8859-1"?><methodCall><methodName>ping</methodName><params><param><value><string>IPS</string></value></param></params></methodCall>

Gleichzeitig mit der Reconnected-Meldung ist im Debug immer folgender Sender mit folgenden Daten:

TRANSMIT RF | <?xml version="1.0" encoding="ISO-8859-1"?><methodCall><methodName>init</methodName><params><param><value><string>http://192.168.xx.xx:5544</string></value></param><param><value><string>IPS</string></value></param></params></methodCall>

Trägt das zu einer Fehleridentifizierung bei?

VG, Götz

CCU angepingt über dieses Skript:

if(ping("172.17.31.200") === false)
    echo "Nicht erreichbar";
else
    echo "Alles tutti!";

function ping($host, $timeout = 1) {
    /* ICMP ping packet with a pre-calculated checksum */
    $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
    $socket  = socket_create(AF_INET, SOCK_RAW, 1);
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
    socket_connect($socket, $host, null);
    $ts = microtime(true);
    socket_send($socket, $package, strLen($package), 0);
    if (socket_read($socket, 255)) {
        $result = microtime(true) - $ts;
    } else {
        $result = false;
    }
    socket_close($socket);
    return $result;
}  

Ergebnis: „Alles tutti!“…

Habe nun auch mal eine Statusvariable angelegt, die über Sys_Ping geschaltet und geloggt wird, um zu schauen, wie oft die Verbindung zur CCU unterbrochen ist…

Mein ursprüngliches Problem habe ich vor Tagen gelöst, indem bei Skriptausführung geschaut wird, ob die Verbindung zum Socket steht, ansonsten 1 Minute gewartet wird, um dann erneut zu prüfen, ob die Verbindung (wieder) steht,…

Allerdings kann ich mir die Verbindungsabbrüche nach wie vor nicht erklären. Im Log in der CCU gibt es keine Meldungen, außer

homematic-ccu2 local0.err ReGaHss: Error: IseXmlRpc::GetObjectByHSSAddress: no exists device object with address= CENTRAL [../Platform/DOM/iseXmlRpc.cpp

die aber unschädlich ist (vgl. https://www.symcon.de/forum/threads/32820-Testing-4-1-CCU-Log-voll-mit-Fehlermeldungen/page4).

Ich habe auch keine Software bezüglich HM laufen (vgl. https://www.symcon.de/forum/threads/33486-HomeMatic-Socket-%28KeepAlive%29-Die-Operation-wird-abgebrochen/page4?highlight=keepalive).

Hat jemand eine Idee, woran es noch liegen könnte? Ich würde gerne eine durchgehende Verbindung zwischen IPS und HM sicherstellen…

VG.

Dein Problem ist leider irgendwie nichts was ich bisher gesehen habe. Das Operation cancelled bedeutet, dass die Socketverbindung abgebrochen ist. Dies kann eigentlich nur der Fall sein, wenn das Netzwerk instabil ist… oder vielleicht irgendeine Firewall mist baut und wahllos Verbindungen killt. Ich bin ein wenig ratlos, was ich dir an Tipp geben kann.

paresy

Danke, paresy, ich beobachte es weiter… Irgendwie finde ich den Fehler. Heute war immerhin seit 5.46 kein Verbindungsabbruch (ohne, dass ich was gemacht habe), also bin ich guter Dinge.

Viele Grüße…