tfRookie Posted February 28, 2021 at 02:57 PM Posted February 28, 2021 at 02:57 PM Ich lese mit PHP Scripts Daten von Sensoren an Master Bricks, die ueber WiFi Extensions mit meinem Netzwerk verbunden sind, aus. Das funktioniert auch wunderbar, aber mehr oder weniger kurze Unterbrechnungen der Verbindung zu den Master Bricks (Neustart Router, Abstecken Master Brick, verlorene Pakete, ...) beenden meine Datensammlung dann irgendwann unsanft. Ich schaffe es leider nicht, das zu detektieren bzw. die Verbindung automatisch wiederherzustellen, sobald der Master Brick wieder online ist. Gibt es hier ein Standardrezept ("best practice") in PHP, wie man damit umgeht? Danke! Quote
rtrbt Posted March 1, 2021 at 08:31 AM Posted March 1, 2021 at 08:31 AM Der normale Weg damit umzugehen ist, dass du die Aufrufe der Brick- und Bricklet-Funktionen in try-catch-Blöcke machst. Damit kannst du dann auf TimeoutException oder andere Fehler reagieren. In PHP wird leider die Verbindung nicht automatisch wiederhergestellt, wenn sie verloren ging, das musst du also händisch machen. Du kannst dich auf das disconnected-Callback der IPConnection registrieren und dann periodisch connect aufrufen, bis es funktioniert. Die Callback-Doku findest du hier: https://www.tinkerforge.com/de/doc/Software/IPConnection_PHP.html#callbacks Wenn du eine Verbindung aufgebaut hast, kannst du dann den enumerate-Mechanismus benutzen um die Bricks und Bricklets wiederzufinden und zu konfigurieren. Es reicht wenn du das ganz am Anfang einmal registrierst, dann funktioniert das automagisch. Das ganze wird hier erklärt: https://www.tinkerforge.com/de/doc/Tutorials/Tutorial_Rugged/Tutorial.html#tutorial-rugged-approach 1 Quote
tfRookie Posted March 1, 2021 at 01:13 PM Author Posted March 1, 2021 at 01:13 PM 4 hours ago, rtrbt said: In PHP wird leider die Verbindung nicht automatisch wiederhergestellt, wenn sie verloren ging, das musst du also händisch machen. Du kannst dich auf das disconnected-Callback der IPConnection registrieren und dann periodisch connect aufrufen, bis es funktioniert. Die Callback-Doku findest du hier: https://www.tinkerforge.com/de/doc/Software/IPConnection_PHP.html#callbacks Danke dir fuer das Feedback ... leider ist es mir bisher nicht gelungen, das disconnected-Callback auszuloesen, auch wenn ich die Einheit vom Strom nehme. Auffaellig ist auch, dass $ipcon->getConnectionState immer 1 zurueckgibt (CONNECTION_STATE_CONNECTED = 1: Eine Verbindung zum Brick Daemon oder der WIFI/Ethernet Extension ist aufgebaut), auch wenn der Master Brick schon laengst offline ist. Sollte das so sein? Quote
photron Posted March 1, 2021 at 06:03 PM Posted March 1, 2021 at 06:03 PM 2 hours ago, tfRookie said: Danke dir fuer das Feedback ... leider ist es mir bisher nicht gelungen, das disconnected-Callback auszuloesen, auch wenn ich die Einheit vom Strom nehme. So funktioniert TCP/IP nicht. Eine Verbindung bleibt solange bestehen bis sie aktiv geschlossen wird. Das passiert aber beim Trennen der Stromversorgung nicht. Daher denke die IPConnection weiterhin verbunden zu sein, weil sie das rein technisch auch ist. Der aktuell beste Weg damit in deinem Fall umzugehen ist auf die Timeout Fehler zu achten. Wenn z.B. 3 Timeouts hintereinander passieren dann kannst du das als Auslöser für ein Neuverbinden nehmen und auf der IPConnection disconnect() gefolgt von connect() aufrufen. Quote
tfRookie Posted March 1, 2021 at 06:23 PM Author Posted March 1, 2021 at 06:23 PM Danke dir, das werd ich so machen - ich war davon naiverweise davon ausgegangen, dass zu viele timeouts intern in $ipcon auch einen disconnect ausloesen. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.