Jump to content

Recommended Posts

Posted

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!

Posted

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

  • Thanks 1
Posted
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?

Posted
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.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...