Jump to content

REST Zugriff auf Wifi Extension?


kstaehle
 Share

Recommended Posts

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

Link to comment
Share on other sites

  • 3 weeks later...

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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'));
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

  • Thanks 1
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

 Share

×
×
  • Create New...