vom Anfänger für Anfänger: IPS ClientSocket Error-Handler
…. wenn nämlich der Mediaportal-Pc runter gefahren ist: der Client Socket in IPS, welcher die Kommunikation von EventGhost entgegen nimmt geht auf „Fehler“ weil er keine Verbindung mehr herstellen kann. In der IPS-Konsole sieht das dann so aus:
Natürlich taucht das dann auch in allen möglichen Logs aus und ich werde mit Fehler-Mails bombardiert. Also habe ich mir vor ein paar Tagen einen Error-Handler für den EG-Clientsocket gebaut um den Client Socket in einen definierten Zustand zu versetzen.
Warum?
-> IPS läuft auf einem zentralen Server, Mediaportal auf einem dedizierten PC. Wenn Mediaportal runtergefahren wird geht der Client-Socket im IPS auf Error (logisch, Client ist ja wech)
Was macht der Socket on/off/ Error-Handler?
ich habe im IPS eine Variable, die den Status des MePo-PC (online/offline) beinhaltet (wird per PING ermittelt). Diese Variable triggert bei Wertänderung ein Script, welches folgendes tut:
- wenn der MePo-PC runtergefahren wird schaltet das Script den ClientSocket ab
- wenn MePo hochgefahren wird schaltet das Script den CS ein – hierbei ist es in der Regel so, dass beim ersten Aktivieren des CS die gegenstelle im MePo-Rechner noch nicht erreichbar ist -> der CS meldet einen Fehler
- nun setzt das Script einen Timer von 10 sec auf aktiv , nach Ablauf des Timers wird das Script erneut gestartet und aktiviert den CS erneut
- das Ganze läuft solange bis entweder der Status vom CS ok ist (wenn MePo online) oder der CS deaktiviert wird (bei MePo offline)
Installation:
- Script anlegen, Code unten in das Script einkopieren
- Variablen im Konfigbereich des Scripts anpassen
- Ereignis anlegen: Zyklisch, Datumsmuster: keine, Zeitmuster: 10 sec
- Ereignis anlegen (unterhalb des Scripts): bei Variablenänderung, muss auf die Variable (nicht im Screenshot zu sehen) referenzieren die den Status des Rechners mit installiertem EG enthält (bei mir MePo)
- im Eventhandler das Script eintragen, als zu monitorende Instanz den Client Socket eintragen
- hier das Script, unten erklärend ein Screenshot der Struktur
und noch das passende Script dazu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<? // Quellen: http://www.ip-symcon.de/forum/f18/socketverbindung-geschlossen-verfuegungsstehungs-statusabfrage-9348/ ########################## Konfig ############################################## $socket_id = 54659 /*[EG MePo Client Socket]*/; $Mepo_Status = getValueBoolean(43787 /*[HaussteuerungSensoren_AktorenWohnzimmerMePo.Raketenschnecke.locStatus MePo (Ist)]*/); $inst = IPS_GetInstance(54659/*[EG MePo Client Socket]*/); $timer = 14738 /*[EG MePo Client SocketSocket on/off/ Error-Handler]*/; // Socket-Status: 102 offen, 104 geschlossen ########################## Konfig Ende ######################################### if(($inst['InstanceStatus'] != 102) && ($Mepo_Status == true)) // Fehlerbehandlung wenn CS Status = Fehler und MePo = "Ein", Aktivierung 10sec-Timer { //socket öffnen CSCK_SetOpen($socket_id,true); IPS_ApplyChanges($socket_id); IPS_SetEventActive($timer, true); } elseif (($inst['InstanceStatus'] == 102) && ($Mepo_Status == true)) // wenn MePo = "Ein" und Clientsocket "OK" dann Timer deaktivieren { //Timer deaktivieren IPS_SetEventActive($timer, false); } elseif (($Mepo_Status == false) && ($inst['InstanceStatus'] != 104))// wenn MePo = "Aus" und Clientsocket Fehler { //Socket schliessen |
1 2 3 4 5 6 7 8 9 10 |
CSCK_SetOpen($socket_id,false); IPS_ApplyChanges($socket_id); IPS_SetEventActive($timer, true); } else { //Timer deaktivieren IPS_SetEventActive($timer, false); } ?><br /><br /> |
und noch der Link zum entsprechenden IPS Foren-Thread: klick