CSV Datei von Netzwerk (Server) in Array einlesen

Hallo,
das gibt mein erstes Projekt mit Arduino (Wasserausgabe).

Beschreibung:
Eine Person hält ihren RFID-Tag über das Lesegerät
( PN532 via RS232 an Waveshare "ESP32-S3-ETH", 8Mb Ram 16Mb Flash),
die Software sucht in einem Array ( UID[1000][8] ) nach der entsprechenden UID 7 stellig.

Wenn gefunden, Überprüft sie das 8te Byte in der Zeile im Array.
Bei einer 0 wird eine Grüne LED
eingeschaltet, und ca. 8 Sek. gewartet das eine Taste gedrückt wird.
Wird in dieser Zeit die Taste gedrückt, (der Ausgebende Mensch hat "Grün gesehen"),
dann wird das 8te Byte in der entsprechenden Zeile vom Array auf 1 gesetzt.
Ansonsten wird wieder in den Lesemodus übergegangen und gewartet.

Wird die UID gefunden und das 8te Byte ist schon 1,
wird eine Rote LED für ca. 3Sek. eingeschaltet,
Und es geht wieder in den Lesemodus. Ebeso wenn die UID nicht gefunden wird.
Soweit noch kein Problem.

Das Problem:
Die UID´s werden in einer Exceltabelle auf einem Remote-Desktop verwaltet,
und als .csv Datei auf den Server exportiert.
Diese ist immer gleich groß, heist immer gleich, und ist immer am gleichen Ort,
1000 Zeilen mit 8 Werten pro Zeile, durch Koma getrennt.

Welche Möglichkeiten habe ich, diese CSV Datei durch meinen ESP einlesen zu lassen,
und in das Array zu Packen. ?
Da ich über den Server pratisch nichts weiß,
suche ich möglichst viele unterschiedliche Arten des Zugriffs auf die Datei,
die mit dem ESP und Arduino (einfach) möglich sind,
da ich dann unseren Admin fragen kann welche genehm und möglich ist.
Wobei ich befürchte das Sicherheit eine Rolle spielt.
Also Benutzername, Passwort, verschlüsselt.

Weil, wenn das nicht geht, brauche ich mir um das unterbringen der Daten in dem Array,
wie auch immer, und Speichern in einem FRAM
( falls kein Netztwerk für aktuelle Daten nach Einschalten verfügbar ist)
keine Gedanken zu machen.

Vielen Dank.
Gruß Jochen

Dann wird das wohl nichts werden. Einige Grundinformationen, welche Dienste (FTP, Webserver, ...) dort zur Verfügung stehen, musst Du Dir vorher beschaffen, sonst kannst Du gleich mit einer Liste möglicher Netzwerkdienste, die Du Dir zusammen googelst zu Deinem Admin gehen und die ihn vorlegen und abhaken lassen, was er anbietet.

Gruß Tommy

Hallo,

vielen Dank für die schnelle Antwort, ich nahm einfach an, das Arduino nur eine sehr
eng begrenzte Auswahl an Möglichkeiten für dieses Problem hat.
Daher meine Frage nach Möglichkeiten.

Gefunden in bezug auf Arduino habe ich bisher HTTP(S), FTP und UDP.
Wobei bei UDP eine eigene Fehlerkorrektur nötig zu seien scheint, und daher gleich
wieder ausscheidet.

Ich werde unserem Admin mal ne Mail schicken was er "Anbieten" kann.

Vielen Dank
Gruß Jochen

Keine Ahnung, wie sensibel deine UID Liste oder deine IT-Umgebung ist.
Du könntest wohl einen https oder einen sftp client anbieten, nachdem du dich da auf der esp-Seite schlau gemacht hast.

Wenn das geklärt ist, könntest du dir sagen lassen, dass der Rest sicher einfacher geht, als UIDs in deine 1000×8 Felder csv-Datei zu packen und wieder da raus zu holen.

Weitere Details (Wann wird das "bereits gelesen" Feld wieder rückgesetzt? Wann wird die Datei wieder neu gelesen? Was heißt Wasserausgabe? ... ?) sind mir in deinem Beitrag übrigens unklar.

Warum nicht umgekehrt ?
Lass dir doch die Datei einfach zuschicken.

Hallo,
vielen Dank für deine Antwort,

die UID´s sind völlig unkritisch, es geht tatsächlich um die Ausgabe von Mineralwasser.
1 Flasche pro Nase am Tag. :grinning_face:

Die IT-Umgebung ist kritisch. Weit mehr als 100 Remote-Desktops, und besondere
Personenbezogene Daten, sowie Webauftritt, E-Mail usw. halt ein Firmennetzwerk.

Wenn HTTPS und SFTP ohne Probleme mit Arduino möglich ist, hört sich gut an.

Gelöscht wird das 8te Byte was ich mal als Status Byte bezeichne, weil da bestimmt
noch wer was anderes möchte, durch ein Extra RFID-Tag z.B. am Nächsten Tag.

Die Datei soll im Idealfall beim Einschalten einmal gelesen werden, das Gerät
bleibt über den Tag an, und bei fehlendem Netzwerk sollen die daten des Vortages
aus einem FRAM kommen.

CSV Datei habe ich genommen weil ich beim querlesen so vieler Infos, auch über einen
CSV-Parser gestolpert bin,der das wohl kann,und weil Excel diese Problemlos exportieren kann.

Excel als Dateneingabe ist die einzige Option. Und ich bekomme den Export mit ein
paar Zeilen VBA sicher für Egal welchen Anwender sicher hin.

Gruß Jochen

Frage, wenn die UIDs heute schon in einem Excel sind, wie kommen diese in das Excel?

Und habe ich das richtig verstanden, du willst auch Daten vom ESP zurückschreiben ... "das 8te Byte"?

Moin @jochen69 ,

die Herausforderung, die es zu meistern gilt, sehe ich auch eher bei den Sicherheitsanforderungen, nämlich der Hard- und Software-Schnittstelle zur Firmen-IT und ggf. den besonderen Anforderungen des Datenschutzes.

Weiß der/die Admin schon, was Du planst und hat sein/ihr ok gegeben?

Wer möchte sich schon gerne eventuelle Sicherheitsprobleme einbauen (lassen), ohne sich zumindest auf einen renommierten Lieferanten berufen zu können. Die Chance nimmt mit der Größe der Firma exponentiell ab. Vergleichbares gilt für den Datenschutz; wenn das Tracking (wer hat wann wie oft den Wasserspender benutzt) nicht explizit und strafbewehrt ausgeschlossen ist, wird der Datenschutz resp. eine Personalvertretung ablehnen.

Technisch ist vieles machbar, aber ob man diese administrativen Hürden zur Freigabe überwinden kann, steht auf einem anderen Blatt.

Eine grundsätzliche Abklärung mit der IT-Administration und deren prinzipielle Zustimmung sowie auch mit dem/der Datenschutzbeauftragten sollte auf jeden Fall der erste Schritt sein, sonst arbeitest Du ggf. für die Tonne (oder Deinen privaten Wasserspender).

Gruß
ec2021

Hallo,
danke für deine Antworten,

@HotSystems
ich hätte nicht die geringste Idee, wie ich meinem ESP die Datei zuschicken sollte.
Da es mehrere Geräte geben wird, und diese auch an wechselnden Netzwerkanschlüssen
betrieben werden.

@noiasca
Die UID´s sind heute nicht in einer Tabelle, die Tabelle wird für diesen Zweck angelegt.
Excel weil alle die Möglicherweise diese Liste pflegen müssen, ein wenig Excel können.
Die Daten kommen durch eine Person die diese pflegt in die Liste, sie schreibt den
Namen rein geht in das Feld für die UID und liest über einen Reader die UID aus.
Dann bekommt die entsprechende Person ihren Chip.

Nein das Statusbyte soll nicht zurückgeschrieben werden, dieses bleibt local gespeichert.
Der Aufwand dafür wäre zu gross, und die Ausgabestellen sind soweit getrennt, das
keiner 8 Km fährt um ne 2te Flasche Wasser zu bekommen. :smiley:
Es gibt Leute die haben Anspruch darauf und andere halt nicht, und der Anspruch kann sich ändern, daher die Exceltabelle wo dieses hinterlegt wird.

Falls es einen Betriebsrat gibt, sollte auch der frühzeitig mit ins Boot geholt werden.

Gruß Tommy

Genau! Sehe ich auch so:

Die grundsätzliche technische Umsetzung ist mit einem ESP32 eine überschaubare Menge Arbeit aber sicher kein Problem.

P.S.: Grundsätzlich spricht m.E. auch nichts gegen die Verwendung von UDP, die häufig beschworene "unsichere" Datenübertragung spielt dann eine Rolle, wenn ich Massendaten übertragen will, bei denen es auf die (genaue) Reihenfolge ankommt. UDP, wo alles in ein Paket passt und ggf. eigener Empfangsbestätigung tut's in der Regel auch. Ein UDP-Paket könnte über 8190 binäre 8-Byte-UUID übertragen, bei eloquentem Ausschreiben der UUIDs (001.002.003.004.005.006.007.008_) mit 8 Trennzeichen - wären es immer noch über 2000 UUIDs pro UDP-Datagramm.

Der ESP hat ein FileSystem, welches auch vom Netz erreichbar sein kann / muss.
Dafür muss natürlich auch einiges eingerichtet werden.
Das sollte zusammen mit dem Netzwerk Admin zu machen sein.
Auch bei mehreren Geräten.

Der ESP32 hat ein eigenes Dateisystem LittleFS, von dem aus Daten verschickt oder abgeholt werden können. Ich verschicke beispielsweise Stromdaten zu einer Festplatte, die an einer Fritz!Box hängt. Auf der Fritz!Box ist ein FTP-User eingerichtet. Das ist also mit User und Passwort geschützt. Abgesehen von administrativen und sonstigen Hürden sollte das auch bei Dir funktionieren.

Kleine Überschneidung mit @HotSystems, aber wir meinen Dasselbe :smiley:

Genau...
und das Thema mit mehreren Geräten lässt sich einfach lösen, wenn ein Gerät die Datei erhällt und diese per TCP den anderen zuschickt.

Hallo,
vielen Dank für die guten Anregungen,

ja, der Admin hat die grundsätzliche Möglichkeit das ich auf ein Datei auf dem Server
mit meinen ESP's zugreifen kann bejaht.
Und natürlich wird dieser weitreichend mit eingebunden. Geht auch gar nicht anderst.

Bezüglich des Trackings sehe ich da weniger ein Problem, solange man glaubhaft machen
kann das keine Daten zurückgeschrieben und dauerhaft gespeichert werden.
Sieht das Konzept auch nicht vor.

Datenschutzbeaftragter und Personalvertretung kommen ins Spiel wenn die Funktion gegeben
ist und keine Änderungen z.B. am Protokoll mehr nötig sind.
Wobei Datenschutz und Admin Kollegen sind und daher schon von vorneherein alles
korrekt sein muss.

Die Datei auf die die ESP´s zugreifen enthält nur 8 Byte pro Person 7 für die UID eins
für den Status, und es gibt keine Rückmeldung.
Die einzige verbindung zwischen UID und Person ist die Excel Tabelle. Welche in einem
sicherem Umfeld liegt.

Ich sage mal so, ich werde die Technik viel eher fertig haben, als das es eine
Entscheidung über den Einsatz gibt, nur für den Versuch es weiterzuführen war schon
eine Powerpoint Präsentation notwendig.

Das mit dem Filesystem, hatte ich drüber nachgedacht, aber es muss DAU-tauglich sein,
Exceltabelle auf, Name und UID rein, auf Button Exportieren drücken Datei schliesen.
Ich denke einfach mal das die Freigabe auf dem Server sicherer zu gestallten ist,
als eine Freigabe eines FS auf einem ESP. Daher dieser Ansatz.

Wenn UDP möglich ist, werde ich es wieder auf die Liste setzen welche ich dem Admin
Mailen werde, mal schauen was er sagt.

Da habe ich schon wieder viel zu Googeln.

Vielen Dank
Gruß Jochen

Ich stelle mir den Ablauf etwas so vor:

  • Datei wird auf dem Server verändert.
  • Die Datei wird beispielsweise täglich automatisch in das Dateisystem LittleFS kopiert.
  • Das Programm liest die Datei und wertet sie aus.

Da muß sich niemand mit auskennen, außer Dir natürlich im Fehlerfall.

Mein Sammeln von Stromverbrauchsdaten läuft auch, wenn ich im Urlaub bin :blush:

Und welcher DAU muss da was dran machen ?
Wenn es einmal eingerichtet ist, sollte das ohne weiteres Zutun funktonieren.
Zudem kann eine Automatik auf dem Server die Datei bei Änderung direkt versenden.

... Dabei wird auch der Status "Hat ihr Wasser heute schon geholt" rückgesetzt.
Dieser Status wird nur lokal an der Ausgabestation für den Rest des Tages gespeichert.

Mehr wird an personenbezogenen Daten nicht gespeichert, zwischen mehreren Stationen ausgetauscht, oder zum Server zurückgeschrieben.

Mehrere solche Geräte arbeiten also unabhängig voneinander. Im einfachsten Fall gibt es eine gemeinsame Datei, d.h. dass sich jeder Besitzer eines Chips sein Wasser an jeder Ausgabestelle holen kann, auf Wunsch auch an mehr als einer Station.

Alternativ wäre eine eigene Liste je Station zu führen...

... oder der Abholstatus müsste an alle Stationen gemeldet werden
... oder der Status müsste zentral verwaltet werden, was eine permanente Netzwerk-Verbindung erfordert.

Hallo,

Ja, das mit dem localen FS würde gehen, ich sehe da nur einige Probleme.

Die Geräte sind nicht immer an. Sondern werden zu bestimmten Zeiten, die nicht immer
gleich sind eingeschaltet.

Die Automatisierung des Dateiuploads muss durch den Admin eingerichtet werden.
(der will Geld für Jeden Tastendruck zusätzlich) oder noch schlimmer ne Freigabe vom Chef.
Und der will da nicht drüber nachdenken.

Was der Admin zu verteilte Dateisystemen im Netzerk sagt der er nicht unter Kontrolle
hat möchte ich nicht nachdenken.

Also ich denke insgesamt ist (nicht für mich) die eine Datei zum lesen auf dem Server,
das einfachste und kleinste Übel für den Admin.

Vielen Dank
Gruß Jochen

werde ich aber für andere Projekte gebrauchen können.

Man sollte auch in Betracht ziehen, dass sie mal aus Versehen über Nacht durchlaufen.

Entweder der ESP holt sich eine Uhrzeit aus dem Netz, oder er definiert nach 16 Stunden und danach alle 24 h einen neuen Tag.