Forum: Haus & Smart Home Daten von ESP32 an Fritzbox senden - FTP oder SMB?


von Fritz G. (fritz65)


Lesenswert?

Hallo,

ich möchte die von meinem Stromzähler (Easymeter Q1DB) über die 
D0-Schnittstelle ausgesandten Daten aufzeichnen. Meine Idee wäre, einen 
handelsüblichen Infrarotkopf (z.B. Hichi) mit TTL-Ausgang zu nehmen und 
die Daten per ESP32-WiFi an meine Fritzbox zu senden.

Die klassischen, im Netz zu findenden Anleitungen verwenden einen Raspi 
Pi als Datenempfänger, auf den ich gerne verzichten würde. Erstens ist 
der nicht ganz billig, zweitens verbraucht er beim Dauerbetrieb einiges 
an Energie und passt nicht auf die Hutschiene im Zählerschrank.
Ich würde also die daten ohne Umweg über den Raspi direkt auf die 
Fritzbox schicken. Dort würden sie auf dem angeschlossenen NAS-Stick 
gespeichert. Als Protokoll kämen FTP und SMB in Frage, die Fritz kann 
beides. Welches wäre hier die beste Lösung?

Programmieren würde ich am liebsten in C/C++, mit Lua oder Python kenne 
ich mich nicht so recht aus.

FTP-client Libraries für ESP32 scheint es einige für das 
Arduino-Framework zu geben, bei SMB konnte ich bisher nur etwas für das 
IDF-Framework finden.

FTP hat den Nachteil, dass es nur Files verschiebt, die Daten müssen 
also zuvor auf dem ESP32 als File abgelegt werden, was bei häufigem 
Schreiben das Flash verschleißt. Mit SMB könnte ich die Daten direkt in 
ein File auf dem NAS schreiben. Außerdem gilt FTP als unsicher, Username 
und Passwörter könnten von einem bösen Nachbarn abgefangen werden. Ich 
sehe das aber eher als theoretisches Problem.

Hat jemand schon mal eine Datenkommunikation ESP32->FritzNAS erfolgreich 
hinbekommen?

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Fritz G. schrieb:
> Als Protokoll kämen FTP und SMB in Frage, die Fritz kann
> beides. Welches wäre hier die beste Lösung?

FTP. Ein sauberer Dateitransfer, während SMB ein Gemischtwarenladen ist.

> FTP hat den Nachteil, dass es nur Files verschiebt, die Daten müssen
> also zuvor auf dem ESP32 als File abgelegt werden,

Wieso? Da schreibst du den Teil halt um und tust nur so als ob die Daten 
von einer Datei kommen. Statt dessen sendest du sie aus dem RAM.

> Außerdem gilt FTP als unsicher, Username
> und Passwörter könnten von einem bösen Nachbarn abgefangen werden.

Ja, aber SMB hatte auch mehr als genug Sicherheitsprobleme in der 
Vergangenheit. Wenn es dich wirklich stört nimm FTPS statt FTP. Kann die 
FB auch.

von Monk (roehrmond)


Lesenswert?

Hannes J. schrieb:
> Wenn es dich wirklich stört nimm FTPS statt FTP. Kann die FB auch.

Die WiFi Verbindung zwischen ESP und Fritzbox ist bereits verschlüsselt.

Wenn die libs nur Files verschieben können,  dann würde ich erwägen, das 
FTP Protokoll selbst "zu Fuss" zu implementieren. Es ist eigentlich ganz 
simpel auf Text-Kommandos basierend.

: Bearbeitet durch User
von Uwe B. (uwebre)


Lesenswert?

Fritz G. schrieb:
> ich möchte die von meinem Stromzähler (Easymeter Q1DB) über die
> D0-Schnittstelle ausgesandten Daten aufzeichnen. Meine Idee wäre, einen
> handelsüblichen Infrarotkopf (z.B. Hichi) mit TTL-Ausgang zu nehmen und
> die Daten per ESP32-WiFi an meine Fritzbox zu senden.

Tasmota und MQTT. Alles schon fertig.

Uwe

von Εrnst B. (ernst)


Lesenswert?

Uwe B. schrieb:
> Tasmota und MQTT. Alles schon fertig.

Er will ja auf einen Extra-Rechner im Netz verzichten.

Bei OpenWRT ist es kein Problem, einen mqtt-server, Datenbank, 
Visualisierung, ... auf dem Router mitlaufen zu lassen. Die Fritzbox ist 
da weniger offen.

Da würde ich mir auch FTP anschauen.

Evtl. hat die Fritzbox da großzügige Timeouts, dass man einmal bei 
ESP-Start eine Datenverbindung aufbauen kann (USER, PASS, PASV, APPE 
data.csv) und dann die Daten gemütlich, so wie sie eben vom Zähler 
eintrudeln, über die Datenverbindung raussenden kann, um das CSV-File zu 
verlängern.

von Fritz G. (fritz65)


Lesenswert?

Uwe B. schrieb:
> Tasmota und MQTT. Alles schon fertig.
Habe ich auch schon kurz reingeschaut. Allerdings ist mir nicht klar 
geworden, wie damit die Daten per MQTT in mein NAS gelangen sollen. MQTT 
braucht doch einen Broker, der die Messwerte empfängt und weiterleitet. 
Die Fritzbox kann das meines Wissens nicht, ich muss also  einen 
öffentlichen Broker in der Cloud, z. B. HiveMQ bemühen. Das 
konterkariert ja geradezu die Idee von Tasmota, alle Daten lokal zu 
halten. Und wie kommen die Werte dann vom Broker auf den NAS? Oder kann 
Tasmota auch direkt FTP oder SMB, ohne über MQTT zu gehen?

Vielleicht denke ich hier zu kompliziert, aber in der Tasmota - Doku 
kann ich dazu nichts finden. Die scheint mir mehr eine Sammlung von 
Kochrezepten als eine grundlegende Darstellung der Funktionalität zu 
sein.

von Sönke P. (s03nk3)


Lesenswert?

Daten per FTP auf der Fritzbox zu speichern ist vielleicht gar nicht so 
schlecht, wenn man rein mit dem Vorhandenen auskommen will.

Bei FTP gibt es u.a. das "APPE" (append) Kommando 
(https://datatracker.ietf.org/doc/html/rfc959), mit dem sich Daten an 
ein File anhängen lassen.
Ggf. auch mal ALLO (allocate) anschauen, ob das - falls implementiert - 
Sinn beim Schreiben in Chunks über eine unzuverlässige Verbindung macht 
(so dass die Datei immer um eine Vielzahl von Datensätzen erweitert 
wird).

Möglicherweise hat der FTP-Server der Fritte auch weitere Kommandos 
eingebaut, z.B. REST 
(https://datatracker.ietf.org/doc/html/rfc3659#section-5), um an 
bestimmten Stellen mit STOR weiterzuschreiben.

Als FTP-Client für ESP32 und die Arduino-Umgebung findet man z.B. 
https://github.com/ldab/ESP32_FTPClient was gar nicht so übel gecodet 
aussieht und leicht erweiterbar um REST und ALLO wäre.

: Bearbeitet durch User
von Le X. (lex_91)


Lesenswert?

Fritz G. schrieb:
> FTP hat den Nachteil, dass es nur Files verschiebt, die Daten müssen
> also zuvor auf dem ESP32 als File abgelegt werden, was bei häufigem
> Schreiben das Flash verschleißt. Mit SMB könnte ich die Daten direkt in
> ein File auf dem NAS schreiben. Außerdem gilt FTP als unsicher, Username
> und Passwörter könnten von einem bösen Nachbarn abgefangen werden. Ich
> sehe das aber eher als theoretisches Problem.

Über welches Protokoll gibt denn Die Fritzbox den USB-Stick im Netzwerk 
frei?
Über SMB?
Wenn ja dann kannst du für die Strecke Fritz <=> ESP auch SMB benuzten, 
weils dann eh egal ist. Dafür musst du dich nicht mit den 
Unzulänglichkeiten der ESP-FTP-Libs plagen.

von Monk (roehrmond)


Lesenswert?

Le X. schrieb:
> Über welches Protokoll gibt denn Die Fritzbox den USB-Stick im Netzwerk
> frei? Über SMB?

Ja, denn im Eröffnungsbeitrag steht:

Fritz G. schrieb:
> Als Protokoll kämen FTP und SMB in Frage, die Fritz kann beides.

von Fritz G. (fritz65)


Lesenswert?

Le X. schrieb:
> Fritz G. schrieb:
>> FTP hat den Nachteil, dass es nur Files verschiebt, die Daten müssen
>> also zuvor auf dem ESP32 als File abgelegt werden, was bei häufigem
>> Schreiben das Flash verschleißt. Mit SMB könnte ich die Daten direkt in
>> ein File auf dem NAS schreiben. Außerdem gilt FTP als unsicher, Username
>> und Passwörter könnten von einem bösen Nachbarn abgefangen werden. Ich
>> sehe das aber eher als theoretisches Problem.
>
> Über welches Protokoll gibt denn Die Fritzbox den USB-Stick im Netzwerk
> frei?
> Über SMB?
> Wenn ja dann kannst du für die Strecke Fritz <=> ESP auch SMB benuzten,
> weils dann eh egal ist. Dafür musst du dich nicht mit den
> Unzulänglichkeiten der ESP-FTP-Libs plagen.

Bitte nicht darüber wundern, dass ich den schon etwas angestaubten 
Thread wieder aus der Versenkung hole, ich möchte hier aber mal kurz 
berichten.

Inzwischen habe ich das Projekt umgesetzt und es läuft seit knapp einer 
Woche stabil. Programmiert habe ich den ESP32 mit der IDF, was sich als 
erstaunlich simpel und geradlinig herausgestellt hat.
Im FreeRTOS laufen zwei Tasks, die eine sammelt die Zählerdaten, 
extrahiert daraus die Momentanleistung und schickt diese als 
16bit-Integer an die andere Task. Von Zeit zu Zeit werden noch 
Timestamps eingestreut. Die empfangene Task sammelt die Messwerte und 
baut alle 10 Minuten eine FTP-Verbindung zur Fritzbox auf, um die Daten 
dort per APPEND an das Logfile anzuhängen. Alle 24h wird ein neues 
Logfile angelegt, die einzelnen Files sind knapp 90kB groß. Der 
FTP-Client ließ sich ohne Nutzung fertiger Libs schnell und einfach 
direkt programmieren, das dazu nötige Protokoll ist ja sehr simpel. So 
konnte ich auch auf ein Dateisystem auf der Client-Seite verzichten.

Eine Verschlüsselung des FTP-Datenverkehrs gibt es nicht, schließlich 
bleibt alles im lokalen Netz. Für die Funkstrecke vertraue ich voll auf 
die WPA2-Verschlüsselung.

Oder habe ich da was in punkto Sicherheit übersehen?

von Oliver S. (oliver_s797)


Lesenswert?

Fritz G.,
schön zu hören das das so schnell (jedenfalls aus meiner Sicht) geklappt 
hat.
Ich bin nicht ganz so versiert mit den Protokollen, hatte mir aber auch 
schon gedacht, das man die Zählerdaten oder auch andere Messwerte an die 
Fritzbox senden könnte und da ablegt, ohne noch einen Zwischenhändler zu 
versorgen, der dann auch immer gepflegt werden will. Ich wäre sehr an 
dem (funktionierenden) Code interessiert und gegebenenfalls an Hinweisen 
wie man die ESP IDF so aufsetzt, dass man das Projekt kompiliert bekommt 
:-).
Ich habe keinen Stromzähler mit D0, das würde/müsste ich dann für einen 
Puls-Zähler mit Zeitstempeln ändern.

von Benedikt L. (Firma: Dem Ben seine Leiche) (dembenseineleiche) Flattr this


Lesenswert?

MQTT und dann auf einen öffentlichen Server senden wenn du partut keinen 
eigenen Raspberry/Server möchtest.

Ehrlich: Man kann nicht das eine haben und das andere wollen! Gut 
gemeinter Rat, machs orntlich oder noch besser lass es bleiben. Es 
bringt dir nichts!

von Marc S. (mirfaelltkeinerein)


Lesenswert?

Benedikt L. schrieb:
> MQTT und dann auf einen öffentlichen Server senden wenn du partut keinen
> eigenen Raspberry/Server möchtest.
>
> Ehrlich: Man kann nicht das eine haben und das andere wollen! Gut
> gemeinter Rat, machs orntlich oder noch besser lass es bleiben. Es
> bringt dir nichts!

Sorry, aber was soll denn der Kommentar? Es ist doch wohl 
offensichtlich, dass das im Heimnetz bleiben soll und die Daten direkt 
vom Zähldingsi zur Fritzbox. Warum soll man da mit MQTT und weiteren 
Server rumhampeln? Ist doch Blödsinn...

von Fritz G. (fritz65)


Lesenswert?

Marc S. schrieb:
> Benedikt L. schrieb:
>> MQTT und dann auf einen öffentlichen Server senden wenn du partut keinen
>> eigenen Raspberry/Server möchtest.
>>
>> Ehrlich: Man kann nicht das eine haben und das andere wollen! Gut
>> gemeinter Rat, machs orntlich oder noch besser lass es bleiben. Es
>> bringt dir nichts!
>
> Sorry, aber was soll denn der Kommentar? Es ist doch wohl
> offensichtlich, dass das im Heimnetz bleiben soll und die Daten direkt
> vom Zähldingsi zur Fritzbox. Warum soll man da mit MQTT und weiteren
> Server rumhampeln? Ist doch Blödsinn...

Inzwischen ist das Problem gelöst, mit FTP funktioniert es seit 1 Monat 
problemlos. War ein Wochenende Programmierarbeit, aber dank der guten 
Dokumentation des ESP IDF ging es recht flott von der Hand und ich 
konnte mir das Geld für den teuren Raspi sparen. Damit wäre es auch 
nicht ganz ohne Programmieren abgegangen, denn der MQTT-Server hat 
keinen integrierten FTP-Client.

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.