tfRookie Geschrieben February 28, 2021 at 14:57 Share Geschrieben February 28, 2021 at 14:57 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! Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
rtrbt Geschrieben March 1, 2021 at 08:31 Share Geschrieben March 1, 2021 at 08:31 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 Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
tfRookie Geschrieben March 1, 2021 at 13:13 Autor Share Geschrieben March 1, 2021 at 13:13 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? Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
photron Geschrieben March 1, 2021 at 18:03 Share Geschrieben March 1, 2021 at 18:03 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. Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
tfRookie Geschrieben March 1, 2021 at 18:23 Autor Share Geschrieben March 1, 2021 at 18:23 Danke dir, das werd ich so machen - ich war davon naiverweise davon ausgegangen, dass zu viele timeouts intern in $ipcon auch einen disconnect ausloesen. Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
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.