Rückgabewert eines ClientSocket bei Fehler

Hallo Leute,

mit dieser Zeile:

$Result = $this->SendDataToParent(json_encode(Array("DataID" => "{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}", "Buffer" => utf8_encode($Message))));

wird ein ClientSocket angesprochen. Gibt es eine definierte Rückmeldung wenn der Socket nicht verbunden ist?

Im Log taucht ab und zu dazu eine Warnmeldung („Socket nicht verbunden“) auf, würde die gerne abfangen.

.
Bevor ich diese Zeile aufrufe, prüfe ich schon ob die IP „anpingbar“ ist, trotzdem laufen ich manchmal in diese Warnmeldung…

Joachim

Wenn der Socket verbunden ist, gibt der einen Status zurück.
Schau mal in $status=IPS_GetInstance($clientSocketID)[‚InstanceStatus‘];

Hallo Tobias,

vielen Dank zunächst einmal für die Antwort!

Ich hatte so ein bisschen gehofft, dass der ClientSocket selbst einen definierten Rückgabewert hat (so etwas wie ein „false“) wenn dort aus irgendeinem Grund die Aufgabe nicht erfolgreich abgearbeitet werden konnte. Selbstverständlich bleibt einem auch die Möglichkeit vor jeder Aktion den Status des ClientSocket zu prüfen, dieses würde aber dann trotzdem zu einem nicht abfangbaren Fehler führen, wenn es bei der dann folgenden Aktion aus irgendeinem Grund nicht erfolgreich ist.

Joachim

Ich habe eine Lösung gefunden, die nun schon 10 Jahre perfekt funktioniert

if (IPS_GetInstance(48293 /*[HomeMatic Socket]*/)['InstanceStatus'] == 102){
$HM_text = 'Homematic Socket installiert und geöffnet';
$xy = '<span style="color:white;background-color:green;">'.$HM_text.'</span>'." - ";
}
if (IPS_GetInstance(48293 /*[HomeMatic Socket]*/)['InstanceStatus'] == 200){
$HM_text = 'Homematic Socket Fehler';

CSCK_SetOpen(48293 /*[HomeMatic Socket]*/, false);
IPS_ApplyChanges(48293 /*[HomeMatic Socket]*/);
ips_sleep(50);
echo CSCK_SetOpen(48293 /*[HomeMatic Socket]*/, true);
IPS_ApplyChanges(48293 /*[HomeMatic Socket]*/);
$HM_text = 'Homatic Socket Reset';

$xy = '<span style="color:red;">'.$HM_text.'</span>'." - ";

Viel Spaß damit

tom2005

Dafür gibt es das hier bei Modulen.
https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/module/hasactiveparent/
Ping ist ja auch nicht wirklich aussagekräftig, es gibt Geräte welche das absichtlich deaktivieren bzw. wo es abschaltbar ist oder in einer Firewall geblockt wird.
Michael

Hallo Michael,

ich habe das jetzt mal so umgesetzt, aber der Sachverhalt bleibt dann vermutlich so: Die Prüfung findet vorher statt, ob die Aktion tatsächlich erfolgreich war, sieht man dann so zuerst doch nicht?

Joachim

Definiere ‚Aktion erfolgreich‘.
Das kann ein ClientSocket doch gar nicht.
Eine eventuelle Antwort kann nur dein Modul auswerten.
Der IO kann nur das abliefern der Daten erkennen.
Wenn die Verbindung gestört ist, wird da ein Error erzeugt.
Das kannst du aber mit PHP ermitteln.
Michael

@ Michael,

als ich das gebaut habe gab es das Modul noch nicht.
Ich denke das Modul spart auch Arbeit.

Aber mit etwas „schnickschnack“ drum rum sieht es im WF so aus:

tom2005

So etwas in der Art habe ich auch, nur ohne Visu.
Aber das war ja nicht die Frage. Es geht hier ja wirklich um PHP Module und wie man es dort umsetzen kann.
Du hast jetzt ja da nur einen IO. Es könnten dazwischen aber auch X Instanzen sein bis ein IO kommt (z.b. Xbee Brücke). Da musst du dann jede Instanz, also die ganze Kette vom Datenfluss betrachten.
Michael