Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋼) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

REST Zugriff auf Wifi Extension?

Featured Replies

Geschrieben

Hallo Zusammen,

ich habe mir die Wetterstation mit Weather Bricklet, Master Brick und Wifi Extension zugelegt.

Alles funktioniert einwandfrei mit dem Brick Viewer ĂŒber USB und direkt ĂŒber TCP/IP.

Nur habe ich mir wohl im Vorfeld meiner Kaufentscheidung die Prinzipien der Schnittstellenabstraktion nicht genau genug angeschaut - zur Sicherheit, folgen Fragen:

Bietet die Wifi-Extension tatsĂ€chlich selbst keine REST-API ĂŒber HTTP, obwohl ja ein Web-Server drauf lĂ€uft?

Und kann ein Stapel mit Wifi-Extension nur dann als MQTT-Publisher agieren, wenn auf einem weiteren/anderen Controller mit dem MQTT-API-Binding das Tinkerforge Protocol gewrapt wird?

Oder gibt's evtl. eine "fertige" Firmwarealternative, die das kann, oder vilt. irgendein Firmware-Hack?

Mir scheint das so naheliegend...!?!

 

Gruß

Klaus

  • 3 weeks later...
Geschrieben
  • Autor

Hallo liebes Forum und Supportteam,

ich weiß nicht, ob ich zu ungeduldig bin und möchte eigentlich nicht als NervensĂ€ge in die ThinkerForge-Annalen eingehen...
Aber ich frage mich tatsĂ€chlich, ob ich eine etwas zu naive Frage gestellt habe, oder ein Thema aufgegriffen habe, das außer mir wirklich keinen interressiert?

Um meinen Frieden mit der Sache zu schließen, wĂŒrde ich mich ĂŒber irgendein Feedback freuen... 😳 egal, ob von einem anderen AnfĂ€nger, der mein Interesse nachvollziehen kann und mir seine EinschĂ€tzung mitteilt, oder von einem Experten, der mir mit einem kurzen Satz meine Illusionen nimmt.

Ich hoffe ich habe jetzt nicht die Etikette des Forums verletzt 😹

 

Freundliche GrĂŒĂŸe

Klaus

Geschrieben

Hallo Klaus,

die WIFI Extension dient nur dazu, einen Stapel aus Bricks und Bricklets per WLAN erreichbar zu machen. Wenn Du die Daten der Wetterstation per MQTT an einen Broker senden möchtest, muss irgendwo in Deinem Netzwerk ein StĂŒck Software laufen, welche dass ĂŒbernimmt.

GrĂŒĂŸe
Chris

Geschrieben
  • Autor

Danke Chris, fĂŒr die prompte Antwort!

...und der Web-Server, der auf der WIFI-Extension lÀuft, kann tatsÀchlich nur die Angaben zu seinem Netzwerkstatus als HTML liefern?

 

Gruß
Klaus

Geschrieben

Hallo Klaus,

ja, bzw. halt auch die Einstellungen Ànder. Mehr aber nicht.
Ich glaube der Aufwand, die Firmware aufzubohren, ist nicht ohne.

Hast Du nen Pi oder Server in Deinem Netzwerk laufen? Dann ist nen Python-Script, bzw. direkt MQTT ja schnell zusammengeschrieben.

GrĂŒĂŸe
Chris

Geschrieben
  • Autor

Hallo Chris,

ich hab ne alte Synology laufen und meine bescheidene Hausautomation (haupts. ein Arduino um ein paar Relais zu schalten) dezentral organisiert.
D.h. alles was es zu steuern gibt, ist per REST ĂŒber http erreichbar und es braucht somit nicht unbedingt einen Server. Alles was zeitgesteuert passieren soll, macht der cron-job der Synology mit einem PHP-Script.

Ich hatte jetzt die Absicht das PHP-Binding ohne Installation auf der Synology zu verwenden, weil ich es so verstanden habe, dass der Zugriff auf das Masterbrick ĂŒber die WIFI-Extension keinen Brick Deamon erfordert - mit der Installation dessen auf der Disk Station wollte ich mich eher nicht auseinander setzen.

Das hat leider auf Anhieb nicht geklappt - hab aber auch noch nicht viel Zeit und Aufmerksamkeit investiert.

 

Gruß
Klaus

Geschrieben

Hallo Klaus,

was meldet denn das PHP-Script? Ich habe gerade keine WIFI Extension zur Hand, um das zu testen.

GrĂŒĂŸe
Chris

Geschrieben
  • Autor

Hallo Chris,

erst mal vielen Dank fĂŒr Dein Interesse und ich freu mich, dass Du Dich meinem Problem annimmst.

Das PHP-Script meldet ĂŒberhaupt nichts. Der Browser lĂ€dt, und lĂ€dt, und lĂ€dt...
Ich vermute, dass beim kopieren der Bindings noch was zu beachten ist, das ich ĂŒbersehen habe (wenngleich man da eigentlich nicht viel falsch machen kann).

Aber so sehr ich mir eine Antwort auf meine ursprĂŒngliche Frage hier im Forum gewĂŒnscht habe, so wenig Zeit habe ich seither selbst in meine Test gesteckt 🙄 (hatte irgendwie die Hoffnung, dass es doch per REST, ohne ein "StĂŒck Software" außerhalb geht).

Sobald ich wieder was daran gemacht habe, werde ich es berichten - und mich freuen, wenn es dann auch noch Dein Interesse weckt 😊

 

Gruß
Klaus

Geschrieben
  • Autor

Nachdem ich ExampleCallback.php und den Tinkerforge-Ordner in ein Verzeichnis auf dem Webserver kopiert habe und IP-Adresse, Port und UID gesetzt habe, erhalte ich folgenden Fehler beim Aufruf von ExampleCallback.php:

Fatal error: Uncaught exception 'Exception' with message 'Could not connect socket: Connection timed out' in /volume1/web/WeatherStation/Tinkerforge/IPConnection.php:655
Stack trace:
#0 /volume1/web/WeatherStation/Tinkerforge/IPConnection.php(912): Tinkerforge\ExtensionSocket->__construct('192.168.178.39', 4223)
#1 /volume1/web/WeatherStation/ExampleCallback.php(77): Tinkerforge\IPConnection->connect('192.168.178.39', 4223)
#2 {main}
  thrown in /volume1/web/WeatherStation/Tinkerforge/IPConnection.php on line 655

Um den Timeout zu ĂŒberwinden, versuche ich den Socket in einer Schleife mehrfach zu verbinden und erhalte dann folgenden Fehler:

Warning: socket_last_error() expects parameter 1 to be resource, boolean given in /volume1/web/WeatherStation/Tinkerforge/IPConnection.php on line 1154

Fatal error: Uncaught exception 'Tinkerforge\NotConnectedException' with message 'Could not send request: Success' in /volume1/web/WeatherStation/Tinkerforge/IPConnection.php:1153
Stack trace:
#0 /volume1/web/WeatherStation/Tinkerforge/IPConnection.php(464): Tinkerforge\IPConnection->send('ƒℱ???ÿ(?')
#1 /volume1/web/WeatherStation/Tinkerforge/IPConnection.php(536): Tinkerforge\Device->sendRequest(255, '', 33)
#2 /volume1/web/WeatherStation/Tinkerforge/BrickletOutdoorWeather.php(389): Tinkerforge\Device->checkValidity()
#3 /volume1/web/WeatherStation/ExampleCallback.php(81): Tinkerforge\BrickletOutdoorWeather->setStationCallbackConfiguration(true)
#4 {main}
  thrown in /volume1/web/WeatherStation/Tinkerforge/IPConnection.php on line 1153

Auf meiner DiskStation lÀuft PHP Version 5.3.29.

Hat jemand einen Tipp? Oder kannst Du mal einen Blick darauf werfen, Chris?

 

Vielen Dank vorab!

 

Gruß
Klaus

 

Geschrieben

Welche Version der PHP Bindings verwendest du? Die Zeilennummern passen nicht zur aktuellen Version 2.1.29. Teste mal bitte mit 2.1.29.

Ich kann auf die Schnelle kein PHP 5.3 auftreiben. Ich habe das Problem versucht in einem Docker Container mit PHP 5.5.38 nachzustellen, aber es funktioniert hier.

Dein eigentliches Problem ist, dass die WIFI Extension nicht unter 192.168.178.39 erreichbar zu sein scheint. Kannst du den Stapel unter 192.168.178.39 mit Brick Viewer erreichen?

Den zweiten Fehler den du dann siehst kann ich nicht nachvollziehen. Es scheint keine Verbindung zu bestehen dennoch versuchen die Bindings eine Nachricht auf einen geschlossenen Socket zu senden. Eigentlich sollte Tinkerforge\Device->sendRequest in diesem Fall Tinkerforge\IPConnection->send gar nicht aufrufen.

Geschrieben
  • Autor

Hallo photron,

Danke fĂŒr Deine Hinweise. Die WIFi-Extension ist ĂŒber die IP erreichtbar - sowohl deren Web-Browser, als auch mit dem Brick-Viewer.

Die Version des Bindings kontrolliere ich nochmal - allerdings ist der Download erst 2-3 Wochen alt.
Zu ĂŒberlegen wĂ€re vielleicht auch, die PHP-Version auf der Disk Station upzudaten - allerdings weiß ich nicht, ob das auf meiner alten DS ohen Weiteres klappt. Alternativ wĂŒrde ich dann mal PHP unter Windows verwenden.

Ich habe den Eindruck, dass die WIFI-Extension sehr trĂ€ge reagiert, wenn man auf deren Web-Browser zugreift (wobei mit dem Brick-Viewer alles recht zackig geht), deshalb hatte ich fĂŒr möglich gehalten, dass die Connection in einen Timeout lĂ€uft und habe in IPConnection.php mit einer Schleife einen "eigenen" Timout realisiert und mache mehrere Verbindungsversuche nacheinander.

Vielleicht habe ich da einen Fehler eingebaut, so dass der Constructor ohne Fehler zurĂŒckkehrt, obwohl keine Verbindung hergestellt werde konnte - und daher rĂŒhrt dann der zweite Fehler...!? Sorry, war etwas spĂ€t gestern...🙄

 

Gruß
Klaus

Geschrieben
1 hour ago, kstaehle said:

Vielleicht habe ich da einen Fehler eingebaut, so dass der Constructor ohne Fehler zurĂŒckkehrt, obwohl keine Verbindung hergestellt werde konnte - und daher rĂŒhrt dann der zweite Fehler...!? Sorry, war etwas spĂ€t gestern...🙄

Das erklÀrt einiges...

Am besten machst du deine Schleife in deinem Code der IPConnection.connect() aufruft anstatt IPConnection.php zu verÀndern. Aber eigentlich sollte das gar nicht nötig sein.

Bei einem "Connection timed out" Fehler wĂŒrde ich erwarten, dass die IP Adresse die du angegeben hast ĂŒberhaupt nicht erreichbar ist, z.B. weil sie falsch ist oder ein Routing-Problem vorliegt, so dass diese von deiner Disk Station aus gar nicht erreichbar ist.

Kannst du von der Disk Station aus 192.168.178.39 per ping erreichen? Oder ist auf der Disk Station vielleicht eine Firewall eingerichtet die ausgehenden Netzwerkverkehr blockiert? Oder ist das PHP auf der Disk Station beschrÀnkt und darf keine Netzwerkverbindung aufbauen?

Geschrieben
  • Autor
Am 3.11.2021 um 16:24 schrieb photron:

Kannst du von der Disk Station aus 192.168.178.39 per ping erreichen? Oder ist auf der Disk Station vielleicht eine Firewall eingerichtet die ausgehenden Netzwerkverkehr blockiert? Oder ist das PHP auf der Disk Station beschrÀnkt und darf keine Netzwerkverbindung aufbauen?

Also ein ping funtioniert von der Disk Station aus, auf 192.168.178.39 und laut phpinfo ist Sockets Support enabled.

Laut Dateiname des ZIP-Files verwende ich die Bindings in der Version 2.1.29.

Was ich aber ĂŒberhaupt nicht verstehe ist, dass der Aufruf von ExampleCallback.php hĂ€ufig in einem endlos ladenden Browser-Fenster endet.
Ich muss dann teilweise mehrere Tabs öffnen, bis mit der URL dann der o.g. Fehler angezeigt wird.

Wie kann ich denn testen, ob die Disk Station grundsÀtzlich Netzwerkverbindungen aufbauen kann/darf?

Geschrieben

Die PHP Beispiele sind nicht als CGI-Programme gedacht, sondern als Kommandozeilen-Programme.

Im CGI Modus darf ein PHP Programm maximal 30 Sekunden laufen, ansonsten wird es abgebrochen. Alle Callback Beispiele laufen aber bis du sie per Tastendruck abbrichst. Daher ist es nicht verwunderlich, wenn du Probleme mit einem Callback Beispiel im CGI Modus hast.

FĂŒr den CGI Modus sind Callbacks ungeeignet, weil du nicht auf einen Callback warten kannst/willst. Dort solltest du Getter verwenden. Also solltest du dir die Simple Beispiele ansehen. Dort musst du dann diese Zeile entfernen, die das Beispiel davon abhĂ€lt sich zu beenden bevor du das mit einem Tastendruck gestattest.

fgetc(fopen('php://stdin', 'r'));
Geschrieben

Hallo Klaus,

sorry fĂŒr die spĂ€te Antwort. War kurzfristig mal ein paar Tage im Urlaub 😁.

Generell halte ich PHP fĂŒr sowas ggfs. fĂŒr nicht so schön/ungeeignet. Du kannst auf der DS ja auch Python installieren. Das finde ich fĂŒr solche Sachen einfach praxistauglicher. Kann Dir da auch gerne bei helfen.

GrĂŒĂŸe
Chris

Geschrieben
  • Autor
Am 5.11.2021 um 16:14 schrieb photron:

Im CGI Modus darf ein PHP Programm maximal 30 Sekunden laufen, ansonsten wird es abgebrochen.

Das erklĂ€rt Einiges... 😂 Danke photron!!

Da bin ich echt froh, dass ich bei den AnfĂ€ngerfragen gepostet habe... denn obwohl ich - wie durch diesen Fehler offensichtlich wird - recht wenig Übung mitbringe, hĂ€tte ich gleich skeptisch sein sollen, weil mir ja bewusst war, dass ich die Werte von der Wetterstation pollen will und das nicht wirklich zu den registrierten Callbacks passt - das hĂ€tte mir schon auch merkwĂŒrdig vorkommen sollen.
Und wie die RĂŒckgaben des Callbacks, den Weg in ein Browserfenster finden sollen, habe ich mit nicht klar gemacht.

Auf alle FĂ€lle funktioniert ExampleCallback.php von der Komandozeile der Disk Station aus und jetzt auch ein kleines CGI-Skript im Browserfenster mit getStationData().

Am 8.11.2021 um 10:51 schrieb Backdraft007:

Generell halte ich PHP fĂŒr sowas ggfs. fĂŒr nicht so schön/ungeeignet. Du kannst auf der DS ja auch Python installieren. Das finde ich fĂŒr solche Sachen einfach praxistauglicher. Kann Dir da auch gerne bei helfen.

...und Danke fĂŒr das freundliche Angebot, Chris!
Ich möchte aber vorerst bei meinem PHP-Script bleiben, weil wie ich weiter oben schon beschrieben habe, lÀuft da bei mir schon was, das von verschiedenen Stellen, per Cron-Job gesteuert,

 

Daten einsammelt und in eine Datenbank schreibt. Dort möchte ich die von der Wetterstation gepollten Daten einfĂŒgen.

Herzlichen Dank euch beiden!

 

Am 5.11.2021 um 16:14 schrieb photron:

Also solltest du dir die Simple Beispiele ansehen.

Vieleicht noch ein Support-Tipp aus AnfÀngerperspektive:
"Simple Beispiele" habe ich nicht gefunden - außer es ist damit die Beschreibung der API-Grundfunktionen gemeint.
Da wĂŒrde dem AnfĂ€nger dann tatsĂ€chlich ein vorgefertigtes Beispiel helfen, das dem ExampleCallback.php eine Pollingvariante gegenĂŒber stellt (vlt. mit einem kurzen Hinweis auf die CGI-CLI-Problematik?) - nur so als Anmerkung...

Viele GrĂŒĂŸe
Klaus

Geschrieben
16 minutes ago, kstaehle said:

"Simple Beispiele" habe ich nicht gefunden

Stimmt, beim Outdoor Weather Bricklet gibt es nur das Callback Beispiel. Normalerweise gibt es auch immer ein Simple Beispiel das mit einem Getter Aufruf arbeitet. Zum Beispiel, das hier fĂŒr das Ambient Light Bricklet 3.0:

https://www.tinkerforge.com/de/doc/Software/Bricklets/AmbientLightV3_Bricklet_PHP.html#simple

So ein Beispiel fehlt fĂŒr das Outdoor Weather Bricklet. Ich nehme das mal auf die TODO Liste auf.

Join the conversation

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

Gast
Reply to this topic...

Account

Navigation

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.