Nano Cloud Service

LordLAN

New member
Hallo zusammen,
ich finde toll was hier geleistet wird und interessiere mich sehr für den Nano v1.
Wie funktioniert das denn vom Prinzip her mit dem Cloud Service? Läuft auf dem Nano ein Webserver, der die Informationen inkl. Webinterface hostet oder werden die Daten an einen externen Server gesendet?
 

Phantomias2006

Entwickler
Hallo zusammen,
ich finde toll was hier geleistet wird und interessiere mich sehr für den Nano v1.
Wie funktioniert das denn vom Prinzip her mit dem Cloud Service? Läuft auf dem Nano ein Webserver, der die Informationen inkl. Webinterface hostet oder werden die Daten an einen externen Server gesendet?
Beides 😉

Du hast den Webserver inkl. Webinterface direkt auf der Nano. Darin kannst du die Settings vornehmen.
Und separat kannst du die Cloud aktivieren. Dann werden parallel dazu die Daten zum Server gepushed und du kannst die auch von außerhalb deines Netzwerkes einsehen. Aber nur sehen! nichts verstellen.

Das läuft direkt auf der Nano:
https://demo.wlanthermo.de
 

LordLAN

New member
Ok, das leuchtet mir ein, danke!
Aber was ist denn, wenn der Cloudserver -warum auch immer- irgendwann mal endgültig abgeschaltet wird? Dann kann ich diese Funktion nicht mehr nutzen. Gibt es dafür Pläne, z.B. die Anbindung an OwnCloud o.ä. zu ermöglichen?
 

Phantomias2006

Entwickler
Ok, das leuchtet mir ein, danke!
Aber was ist denn, wenn der Cloudserver -warum auch immer- irgendwann mal endgültig abgeschaltet wird? Dann kann ich diese Funktion nicht mehr nutzen. Gibt es dafür Pläne, z.B. die Anbindung an OwnCloud o.ä. zu ermöglichen?
Es läuft mqtt drauf. Damit kannst du dir deine Daten auf jeden mqtt server pushen wie du willst...
Post automatically merged:

Und es ist alles OpenSource... Du kannst jederzeit die Nano FW selber umschreiben bzw. auch die Cloud auf einen eigenen Server installieren.
 

s.ochs

BOFH
Ab den v1.x.x Softwareversionen muss man nicht mal was im Source-Code umschreiben, nur den Link zum Server abändern.
 

mnx

New member
Hallo zusammen,

hab es wahrscheinlich nur noch nicht gefunden, du (@s.ochs) schreibst, ab v1.x kann man die Cloud URL abändern. Ich hab gerade neu den nano v1+ und hatte überlegt eure cloud von github mal auf einem eigenen Server laufen zu lassen. Dazu müsste ich soweit ich das verstehe eben genau diese URL ändern können.

Kleiner Hinweis wäre cool ;)

p.s. wenn ich das soweit durchstiegen habe wollte ich mir mal eine Anbindung an z.B. Check_MK und oder Grafana/Graphite anschauen.
 

s.ochs

BOFH
Hast du vermutlich nicht gefunden, da es bisher nur im Code selbst dokumentiert ist. Ändern kann man den Link schon immer, aber in den neuen Versionen kann man es auch, ohne selbst den Code umschreiben zu müssen. Schau dir erstmal die Ausgabe von "IPdesNano/url.json" an. Du solltest da eine Textausgabe im Browser in Form eines JSON-Objekts sehen. Darin enthalten sind mehrere Links, jeweils unterteilt in "host" und "page". Das dritte Wertepaar gehört zur cloud. Die Werte können über die Schnittstelle "IPdesNano/setapi" geändert werden. Dafür musst du das vorherige JSON-Objekt nehmen, host und page anpassen und das geänderte Objekt an die setapi-Schnittstelle schicken. Machbar z. B. mit Postman. Bin gerade nicht sicher, ob das url.json schon als "url"-Objekt ausgeben wird, ansonsten muss man das Objekt noch entsprechend verpacken. Bin zur Zeit unterwegs, kann dir erst heute Abend ein Beispiel schreiben.
 

Phantomias2006

Entwickler
Hast du vermutlich nicht gefunden, da es bisher nur im Code selbst dokumentiert ist. Ändern kann man den Link schon immer, aber in den neuen Versionen kann man es auch, ohne selbst den Code umschreiben zu müssen. Schau dir erstmal die Ausgabe von "IPdesNano/url.json" an. Du solltest da eine Textausgabe im Browser in Form eines JSON-Objekts sehen. Darin enthalten sind mehrere Links, jeweils unterteilt in "host" und "page". Das dritte Wertepaar gehört zur cloud. Die Werte können über die Schnittstelle "IPdesNano/setapi" geändert werden. Dafür musst du das vorherige JSON-Objekt nehmen, host und page anpassen und das geänderte Objekt an die setapi-Schnittstelle schicken. Machbar z. B. mit Postman. Bin gerade nicht sicher, ob das url.json schon als "url"-Objekt ausgeben wird, ansonsten muss man das Objekt noch entsprechend verpacken. Bin zur Zeit unterwegs, kann dir erst heute Abend ein Beispiel schreiben.
Und ich bin mir auch nicht sicher ob die Cloud einfach so läuft. Da hat sich einiges geändert und ich weiß nicht ob ich das hinterlegte DB Schema angepasst ist...
 

s.ochs

BOFH
Das der Cloud-Link veränderbar ist, ist im Grunde ja auch nur ein Nebenprodukt des Server-Umzugs. Wir mussten feststellen, dass ein Permanentlink im Code nicht so flexibel ist - wer hät es gedacht ;).

Als User bieten einem die http- und mqtt-API eigentlich genug Möglichkeiten die Daten vom Nano abzurufen. Da kann man sich das Ändern des Links sparen und hat auch noch mehr Möglichkeiten, weil man nicht an die Intervallzeiten der Cloud gebunden ist.
 

mnx

New member
Hab es gerade mal für spaß mit einem cUrl versucht...
Bash:
curl -i --user user:password -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{"api":{"host":"api.wlanthermo.de","page":"/"},"note":{"host":"api.wlanthermo.de","page":"/"},"cloud":{"host":"mein.server.tld","page":"/"}}' http://IPdesNano/setapi
Das hat aber keinen Effekt gehabt.

Hab dann mal aus der Doku folgendes probiert...
Code:
curl -i --user user:password -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{"ap":"NANO-AP2"}' http://IPdesNano/setsystem
Das wiederum hat funktioniert.
Scheint der cUrl an sich also schon mal nicht falsch zu sein. (Kleine Anmerkung, vllt. in die Doku schreiben, das man immer den kompletten JSON schicken muss. Mit nur der Änderung des AP hat er eigentlich alles bebehalten ausser der "unit", was merkwürdigerweise dazu geführt hat, das die min/max Schwellwerte aller Fühler (selbst nach zurückstellen auf Celsius) Minus Werte hatten.)

Mach ich da was falsch?

Ansonsten schon OK, wenn die Cloud im Git nicht "aktuell" ist. Fand die Idee, das wenn ihr schon alles so schön offen anbietet, das selbst zu betreiben ganz Charmant. Gar nicht mal wegen der Verfügbarkeit sondern eher wegen der Graphen. Aber ich denke, da werde ich wenn ich Zeit haben mal mit Graphite/Grafana und oder Check_MK rumspielen
 

s.ochs

BOFH
Das wiederum hat funktioniert.
Scheint der cUrl an sich also schon mal nicht falsch zu sein. (Kleine Anmerkung, vllt. in die Doku schreiben, das man immer den kompletten JSON schicken muss. Mit nur der Änderung des AP hat er eigentlich alles bebehalten ausser der "unit", was merkwürdigerweise dazu geführt hat, das die min/max Schwellwerte aller Fühler (selbst nach zurückstellen auf Celsius) Minus Werte hatten.)
Danke für den Hinweis. Bei /setsystem ist es eigentlich so, wie es im Wiki steht: Link
Es können also entweder das ganze System-JSON oder auch nur einzelne Parameter davon geschickt werden. Die Schnittstelle ist dafür ausgelegt. Allerdings hat sich da wohl ein kleiner Bug eingeschlichen, sodass ein Fehlen von "unit" einen Fehler hervorruft. Weil die Unit dann nicht mehr gesetzt ist. Werde ich korrigieren.

Das hat aber keinen Effekt gehabt.
Die Schnittstelle /setapi erwartet ein "url"-Objekt. Musst also die Ausgabe von url.json in ein weiteres JSON einbetten: {"url":{...}}.
 

mnx

New member
Ah, das meintest du mit "url" Objekt :)
So klappt es in sofern, als das die Änderungen dann bei url.json sichtbar sind. im Frontend des Nano unter IoT steht aber weiter die Ursprüngliche, Daten kommen da aber nicht mehr an. Wenn man nicht noch einiges an Voodoo mit der "Cloud Seite" machen muss, kommt da aber auch nichts rein.
hatte jetzt zumidest die config mit der db connection angepasst. Ohne Doku ist mir das aber glaub ich zu viel reverse engineering :D;)
Kann jetzt beim Hoster auch nicht so toll ins Log schauen ob überhaupt ein Request vom Nano ankommt (was ich fast nicht glaub).

Falls es sich also beim entwickeln mal ergibt, dass mehr zum Eigenbetrieb zu optimieren, wäre das schon eine feine Sache. ;)
Grad das Thema time series daten für komplexere Graphen Darstellung mit Zoom, Skalierung etc. fände ich sehr interessant. :)
 

Phantomias2006

Entwickler
unter IOT steht immer die Adresse da das Hardcoded im GUI ist. Du bist der erste der das versucht. Theoretisch müsste es aber funktionieren. Der Serverwechsel ging ja auch Problemlos. Was hast du alles am Server hochgeladen? Minimal brauchst du api.wlanthermo.de und cloud.wlanthermo.de

Vl kannst mal ein paar Screenshots der Struktur schicken und eventuell mir die Adressen. Dann jag ich meine Postman Collection mal drauf.
Post automatically merged:

Aja, und das DB schema hast Importiert was dabei liegt in Git oder?
 
Zuletzt bearbeitet:

mnx

New member
Hatte tatsächlich einfach erst mal alles hochgeladen.
in der config.inc.php hab ich die DB Verbindung angepasst und das mysql.sql Schema in die DB importiert.
Das logs Verzeichnis musste ich manuell erstellen.
Wenn ich die API im Browser manuell aufrufe steht in eurem Log "[ERROR]: (checkDeviceJson) JSON device bad"

1398

Hab das ganze jetzt auch mal innerhalb meines Netzes ausprobiert. Wenn ich die API Url von Hand aufrufe sehe ich im apache access log das ich da was aufrufen wollte. In eurem Log sehe ich dann "[ERROR]: JSON invalide", klar, hab ihm ja kein mitgegeben. Komisch allerdings, das sich die Meldung von der beim Hoster unterscheidet.

wie dem auch sein, ich sehe da aber in beiden Fällen keine An-/Aufrufe vom nano.

ich schicke dir mal die API url per PN
 

s.ochs

BOFH
So klappt es in sofern, als das die Änderungen dann bei url.json sichtbar sind.
Kann sein, dass du danach nochmal neustarten musst. Ansonsten sollte es passen. Kannst dir auch mal das Log von der Seriellen Schnittstelle ansehen. Da müsste man einen kurzen Hinweis beim Versenden an die Cloud sehen. Für mehr Info muss man aber die Firmware mit erweitertem Log selbst flashen.
Post automatically merged:

Ach, und nach dem Neustart am besten mal überprüfen, ob der geänderte Link noch in url.json steht. Eventuell ist da aktuell noch eine Server-Aktualisierung drin.
 

Scorpion

New member
Ich habe auf meinem Webserver folgende Ordner inkl. Inhalt hochgeladen:
  • api.wlanthermo.de
  • cloud.wlanthermo.de
  • include
  • logs (leerer Ordner erstellt)
sowie config.inc.php und die Zugangsdaten entsprechend angepasst. Datenbank habe ich auch erstellt. Mit einem Testscript und Aufruf von saveData.php konnte ich auch erfolgreich Datensätze in die Datenbank speichern. Und sie werden auch angezeigt wenn ich den Ordner cloud mit dem entsprechenden token aufrufe.

Auf dem nano hatte ich ursprünglich folgende URL (Ausgabe /url.json):
{"url":{"api":{"host":"api.wlanthermo.de","page":"/"},"note":{"host":"api.wlanthermo.de","page":"/"},"cloud":{"host":"api.wlanthermo.de","page":"/"}}}
Mit diesen URLs hat cloud.wlanthermo.de auch einwandfrei funktioniert.

Nun habe ich jeweils die Adressen api.wlanthermo.de ersetzt durch meine Adressen vom Webserver und mittels POST an setapi auf dem Nano gespeichert. Diese hat es auch übernommen. Leider kann ich auf meinem Webserver in den logs aber keinerlei Aktivitäten resp. Aufrufe feststellen. Irgendwie scheint mir das Nano die neuen URLs nicht aufzurufen. Ich habe beim Nano nach dem setapi auch ein restart gemacht, aber ohne Erfolg.

Was könnte hier das Problem sein ?
 

s.ochs

BOFH
Wie genau sieht deine Adresse aus? Was hast du in url.json eingetragen? Wenn du die Links hier nicht posten willst, verfremde sie leicht, sodass die Struktur aber noch stimmt oder schick sie mir per PN.
Es muss klar zwischen der Hostadresse und dem Pfad am Host unterschieden werden. Wenn du im Browser IP/url.json aufrufst, solltest du auch sehen, welche Adressen aktuell drin stehen. Beim Systemstart werden diese Adressen ausgelesen und verwendet.
 

Phantomias2006

Entwickler
Ich habe auf meinem Webserver folgende Ordner inkl. Inhalt hochgeladen:
  • api.wlanthermo.de
  • cloud.wlanthermo.de
  • include
  • logs (leerer Ordner erstellt)
sowie config.inc.php und die Zugangsdaten entsprechend angepasst. Datenbank habe ich auch erstellt. Mit einem Testscript und Aufruf von saveData.php konnte ich auch erfolgreich Datensätze in die Datenbank speichern. Und sie werden auch angezeigt wenn ich den Ordner cloud mit dem entsprechenden token aufrufe.

Auf dem nano hatte ich ursprünglich folgende URL (Ausgabe /url.json):
{"url":{"api":{"host":"api.wlanthermo.de","page":"/"},"note":{"host":"api.wlanthermo.de","page":"/"},"cloud":{"host":"api.wlanthermo.de","page":"/"}}}
Mit diesen URLs hat cloud.wlanthermo.de auch einwandfrei funktioniert.

Nun habe ich jeweils die Adressen api.wlanthermo.de ersetzt durch meine Adressen vom Webserver und mittels POST an setapi auf dem Nano gespeichert. Diese hat es auch übernommen. Leider kann ich auf meinem Webserver in den logs aber keinerlei Aktivitäten resp. Aufrufe feststellen. Irgendwie scheint mir das Nano die neuen URLs nicht aufzurufen. Ich habe beim Nano nach dem setapi auch ein restart gemacht, aber ohne Erfolg.

Was könnte hier das Problem sein ?
Schau mal bitte in das Logfile deines Webservers. Im Header der Nano gab es noch einen Bug wudurch Apache anders konfiguriert werden muss. Hast du beim Server den Telegram Branch verwendet?
Post automatically merged:

Den Serverbranch inkl. DB Schema bitte verwenden:

Und auf der Nano bitte folgende „beta FW“ aufspielen:
 
Zuletzt bearbeitet:

Scorpion

New member
Schau mal bitte in das Logfile deines Webservers. Im Header der Nano gab es noch einen Bug wudurch Apache anders konfiguriert werden muss. Hast du beim Server den Telegram Branch verwendet?
Im Logfile vom Webserver ist leider nichts zu sehen (keine Aufrufe). Beim Server habe ich den master Branch genommen.

Den Serverbranch inkl. DB Schema bitte verwenden:
Ok, werde ich machen

Und auf der Nano bitte folgende „beta FW“ aufspielen:
Da bin ich gerade am Anschlag. Verwende Arduino nun zum ersten mal und versuche das Projekt mit dieser Anleitung einzurichten: https://github.com/WLANThermo-nano/WLANThermo_nano_Software/wiki/Arduino_IDE
Aber der develop branch hat einen völlig anderen Ordner Struktur. Muss ich den Ordner Struktur vom master branch verwenden und die files aus dem develop branch kopieren ?
 
Oben Unten