Forum: PC-Programmierung Datenübertragung ESP32 auf NAS


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Mario (sodalit)


Lesenswert?

Hallo zusammen,

ich möchte mir dieses Jahr eine Wetterstation bauen und habe Fragen zur 
Datenübertragung.

Hintergrund: Ich möchte aufgenommene Messdaten alle 5 min per ESP32 und 
WLAN verschicken. Am Ende möchte ich die Daten in einer Textdatei auf 
meiner am Heimnetzwerk angeschlossenen NAS (Synology) abspeichern. Nur 
der Weg dazwischen ist mir etwas unklar. Mit Herumgooglen bin ich auf 
verschiedene Lösungsansätze gekommen, aber man sucht sich da schnell ins 
Nirvana und ich möchte ungern 10 Stunden Zeit in den falschen Weg 
investieren.

Ideen:

1) ESP32 loggt sich direkt am Router-WLAN ein und überträgt die Daten 
per FTP auf die NAS. Von Synology gibt es wohl Anleitungen dafür, sollte 
also machbar sein. Da ich den ESP gerne mit der Arduino IDE 
programmieren möchte, weiß ich allerdings nicht, ob es dort den 
entsprechenden Code gibt. Zudem müsste ich wohl am Router wieder 
entsprechende Portfreigaben einrichten und ich möchte mir eigentlich 
kein Sicherheitsproblem ins Haus holen, weil auf der NAS auch 
empfindliche Daten liegen. Außerdem müsste ich irgendwo noch einen 
korrekten Zeitstempel in die Daten kriegen.

2) Zwischenstation mit Raspberry Pi 4: Diesen könnte ich per LAN an den 
Router / Heimnetzwerk hängen und ihm einen WLAN Stick geben. Der RP4 
spannt ein eigenes WLAN Netz auf, und bekommt dort die Daten vom ESP. Ob 
das geht und einfacher / besser ist, keine Ahnung.

3) Eine mir unbekannte Lösung, die Ihr kennt.

Vielleicht kennt Ihr für mein spezielles Anliegen ja die beste Lösung. 
Ich hoffe eine eher einfach umsetzbare Lösung zu finden ohne viel 
Schnickschnack. Die Hauptarbeit bei diesem Hobby-Projekt soll eigentlich 
nicht auf der IT liegen.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Warum in einer "Textdatei"? Ist doch Kindergarten.

Auf einer Synology läuft ganz bequem (über die App-Verwaltung zu 
installieren) eine SQL-Datenbank "MariaDB 10.x" (Nachfolger/Fork von 
MySQL, 100% befehls-kompatibel).
Das bekannte Tool PHPMyAdmin kann auf dem selben Weg installiert und zur 
Erstellung und Rechte-Vergabe auf die Datenbank benutzt werden.

Man kann nun auf zwei Arten mit der Datenbank kommunizieren:

a) man lässt zusätzlich auf der Synology ein PHPSkript laufen (welches 
vom ESP32 per HTTP-Request aufgerufen wird) und das erledigt dann die 
Kommunikation bzw. Eintragung in die Datenbank

b) der ESP32 kommuniziert direkt selbst mit der DB-Engine über deren 
natives TCP-Protokoll auf Port 3306/3307. Das finde ich persönlich 
wesentlich eleganter. Mit SQL müsstest du dich so oder so beschäftigen.

Für den ESP32 gibts mehrere Libs für den direkten Kontakt, um mit 
MariaDB bzw. MySQL zu kommunizieren, das hier z.B.:

https://github.com/ChuckBell/MySQL_Connector_Arduino

Aber da gibts bestimmt noch 100 andere Varianten ...

: Bearbeitet durch User
von Helmut -. (dc3yc)


Lesenswert?

Ich habe einen RasPi direkt im Heimnetz hängen, auf dem NodeRed läuft. 
Angeschlossen eine Datenbank. Mit NodeRed kann man auch schön 
visualisieren oder zusätzlich Heimautomation betreiben.

von Mario (sodalit)


Lesenswert?

@ Frank. E:
Danke schon mal für die Infos. Ich hatte diese Version beim selber 
googlen auch schon gefunden, waren mir dann aber zuviele neue Begriffe 
(klingt kindisch, ist aber ein guter Hinweis, ob die Lösung eher schnell 
geht oder lange dauert). Deswegen das Ding mit der Textdatei, das ginge 
prinzipiell schnell und ich kann es nach Belieben öffnen.

Allerdings möchte ich später auch mal eine Wetteranzeige im Wohnzimmer 
anzeigen, und Fernzugriff wäre auch nice. Vielleicht schaue ich mir das 
doch mal noch genauer an. Zumindest wenn es gut ausformulierten Code 
gibt, den ich nur etwas anpassen müsste.

@ Helmut:
Würde das dann so laufen mit LAN/WLAN, wie ich oben gemeint hatte?

von Kevin M. (arduinolover)


Lesenswert?

Bei ESP nimm Homeassistent mit ESP Home. Das liefert all deine 
Anforderungen Out of the Box mit.

von Thomas W. (Gast)


Lesenswert?

Moin, -

es ist erstaunlich dass noch keiner MQTT vorgeschlagen hatte: ESP32 
libraries in verschiedener Geschmacksrichtungen (auch gut dokumentiert).

@TO: Hast Du Dir die Stromversorgung ueberlegt? WLAN geht ueber 4pi, der 
Stromverbrauch der WLAN-Sender/Empfaenger beim Verbindungsaufbau ist im 
Bereich von 150-200mA.

Gruesse

Th.

von Mario (sodalit)


Lesenswert?

@Kevin M.:
Sieht interessant aus, werde ich mal einen Blick darauf werfen.

@Thomas W.:
Die Stromversorgung werde ich in der ersten Ausbaustufe per Netzteil 
bereitstellen, dann bin ich nicht limitiert. Langfristig wäre zwar 
Solarzelle nett, aber das muss richtig ausgelegt werden, speziell für 
den Winter. Und ich weiß noch nicht, was ich alles brauche, z.B. auch 
einen Lüfter für das Gehäuse zur Temperaturmessung.


Vielen Dank für die Antworten bisher. Jetzt stehe ich allerdings wieder 
vor dem gleichen Problem wie vorher. Diese Begriffe hatte ich beim 
selber googlen auch fast alle gefunden und mir war das zu 
unübersichtlich, weil ich mit keiner der Lösungen bisher zu tun hatte 
und nicht wirklich abschätzen kann, was davon für mich das richtige ist. 
Aber vielleicht muss ich da einfach durch.

von Helmut -. (dc3yc)


Lesenswert?

Mario schrieb:
> @ Helmut:
> Würde das dann so laufen mit LAN/WLAN, wie ich oben gemeint hatte?

Also bei mir hängt der Raspi per LAN am Router und die ESPs hängen per 
WLAN im Netz. Die senden ihre Daten per MQTT an NodeRed, das sie auch in 
die Datenbank weiterleitet. Da die ESPs ziemliche Stromfresser sind, 
hängen die alle per 5V-Wandwarzen an 230V. Meine außerhäusigen 
Wettersensoren, die auch Stromfresser sind (z.b. Regensensor wg. Heizung 
und ähnliche) werden mit 12V versorgt. Dann gibt's Temperatursensoren, 
die hängen an Solarzellen und LiFePO4-Akkus. Die sind mit LoRa und 
Arduino Pro-Mini ausgestattet und senden die Daten an ein zentrales 
Gateway, das die Daten per WLAN und MQTT an den RasPi weiterleitet. LoRa 
deswegen, weil die Sender sehr stromsparend sind und eine große 
Reichweite haben.
Mit NodeRed mache ich auch die Visualisierung. Da gibt es so viele 
PlugIns, dass für alle Anwendungsfälle was passendes zu finden ist.

: Bearbeitet durch User
von Mario (sodalit)


Lesenswert?

@Helmut:
Das klingt schon sehr interessant. Ich möchte aber die Daten definitiv 
auf der NAS haben und mit beliebigen Geräten (PC, Laptop, extern per 
openVPN, µC) darauf zugreifen können. Aber ich glaube, so machst du das 
nicht, oder?

von Philipp K. (philipp_k59)


Lesenswert?

Nodered ist eine Applikation von NodeJS, NodeJS ist quasi die Javascript 
Version für den Host, damit kann man zum Beispiel einen http Socket 
erstellen der Json als Post Daten annimmt und in sqlite wegspeichert.

Dazu kann man dann noch die Daten mit Charts als Browserseite 
visualisieren.

Das steckt quasi alles nur anders in node-red.

von Sebastian (Gast)


Lesenswert?

Helmut -. schrieb:
> Also bei mir hängt der Raspi per LAN am Router und die ESPs hängen per
> WLAN im Netz. Die senden ihre Daten per MQTT an NodeRed, das sie auch in
> die Datenbank weiterleitet

Helmut -. schrieb:
> Die sind mit LoRa und Arduino Pro-Mini ausgestattet und senden die Daten
> an ein zentrales Gateway, das die Daten per WLAN und MQTT an den RasPi
> weiterleitet.

So mache ich es auch. Bei mir ist die Datenbank auf dem RasPi 
Postgresql. Alle Telegramme über MQTT sind in JSON und enden in einer 
Tabelle mit zwei Spalten: Zeitstempel und Jsonb. Davon wird dann alles 
abgeleitet.

Ach, und noch ein Detail: mosquitto läuft bei mir auf dem zentralen 
Router unter OpenWRT und ist dadurch in allen VLANs erreichbar.

LG, Sebastian

von Mario (sodalit)


Lesenswert?

Hallo zusammen,

ich wollte mal ein Update geben, weil ich das Ganze mittlerweile zum 
Laufen gebracht habe. Vielen Dank nochmal für die verschiedenen 
Vorschläge.

Ich bin im Großen und Ganzen dem Vorschlag von Frank E. gefolgt mit 
Lösung a). Dazu bin ich erst mal diesem Beispiel gefolgt:
https://esp32io.com/tutorials/esp32-mysql

Dort installiert man eine Datenbank auf einem PC und erstellt dort das 
php-Skript. Der ESP32 wird über Arduino IDE 2 programmiert, verbindet 
sich mit meinem WLAN und schickt eine http-Anweisung (im Endeffekt 
$_GET) an das php-Skript. Das hat gut funktioniert.

Dann war der nächste Schritt, statt dem PC meine Synology NAS zu nehmen. 
Hierzu habe ich MariaDB installiert und greife mit phpMyAdmin darauf zu 
und erstelle dort Benutzer und Datenbanken / Tabellen. Aktuellen 
Zeitstempel kann man dort auch leicht einstellen.
Um das php-Skript auch auf der NAS zu haben, habe ich dort noch einen 
Webserver installiert. Für Neulinge: es gibt viele Anleitungen im 
Internet, wie das geht. Letztendlich waren aber die Infos von Synology 
selbst die richtigen.

Nun läuft das alles, und ich kann Werte von ESP32 auf eine NAS-Datenbank 
schicken.

Nächster Schritt wird das Auslesen der Daten, am besten mit einer 
schönen Oberfläche. Habe hier im Moment Grafana im Blick.

von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

Genauso habe ich es auch gerade gemacht... Schlicht und einfach, da ein 
Webserver und ein Datenbankserver sowieso schon im Netz hängt, bloß mit 
einem Pico W statt eines ESP32:

PicoW sammelt Temperatur und Luftfeuchte:

Daten per http://n.n.n.n/data.php?id=1&typ=1&value=12.34 an den 
Webserver schicken. Dort warten ein Script, welches die Daten aufwertet 
und an eine MySQL weiterleitet. Fertsch...

Ich habe erst mit MQTT "rumprobiert" - nunja - das ist schon nen bissle 
overkill wenn man nur ein Sensor abfragen will. In der Cloud kostet es 
was und zu Hause habe ich zwar nen Container dafür erstellt. Aber die 
Daten aufzubereiten oder an meinen DB Server durchzureichen - da hat es 
dann irgendwie gescheitert.

EDIT: Jaaa... ich habe den Schreibfehler im Bild auch gerade gesehen :-D

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.