Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi, Daten über Webserver downloaden


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 Manuel N. (manuelambaum)


Lesenswert?

Hi,

Ich möchte einen Webserver auf meinem Raspberry Pi aufsetzen. Ziel ist 
es, einen Datenlogger zu erstellen und diese Daten dann grafisch auf 
meinem Webserver darzustellen. Cool wäre es nun, wenn ich die Daten 
direkt über den Webserver auf meinen PC runterladen könnte. Also dass 
ich die Daten als .csv Datei oder so erhalte.

Gibt es dazu irgendwelche Beispiele im Internet oder weiss jemand, wie 
ich diese Sache angehen soll?

Danke

von Sebastian R. (sebastian_r569)


Lesenswert?

Manuel N. schrieb:
> Gibt es dazu irgendwelche Beispiele im Internet oder weiss jemand, wie
> ich diese Sache angehen soll?

Ja. Dein Programm, das für das Logging zuständig ist, muss einfach 
zyklisch die Daten zusammen mit einem Zeitstempel in eine CSV-Datei 
kippen. Die kannst du dann bei Bedarf herunterladen.

von Manuel N. (manuelambaum)


Lesenswert?

Sebastian R. schrieb:
> Manuel N. schrieb:
>> Gibt es dazu irgendwelche Beispiele im Internet oder weiss jemand, wie
>> ich diese Sache angehen soll?
>
> Ja. Dein Programm, das für das Logging zuständig ist, muss einfach
> zyklisch die Daten zusammen mit einem Zeitstempel in eine CSV-Datei
> kippen. Die kannst du dann bei Bedarf herunterladen.

Danke für deine Antwort. Wie nennt sich der Fachbegriff für "bei Bedarf 
herunterladen"? Nach welchem Stichwort kann im Internet suchen, damit 
ich herausfinde wie das geht, die Daten so downzuloaden?

von Sebastian R. (sebastian_r569)


Lesenswert?

Manuel N. schrieb:
> Nach welchem Stichwort kann im Internet suchen, damit
> ich herausfinde wie das geht, die Daten so downzuloaden?

Kommt halt drauf an, was du unter "downloaden" verstehst.
Da ist alles von SCP, FTP bis hin zu HTTP bei. Am Ende ist es halt nur 
die Datei an der richtigen Stelle zur Verfügung stellen, wo der User sie 
erwartet.

von Εrnst B. (ernst)


Lesenswert?

Manuel N. schrieb:
> Wie nennt sich der Fachbegriff

"Klicken"?

Der Anwender klickt mit dem Mauszeiger auf den Link zum CSV, und sein 
Webbrowser startet den Download?

Du musst die Datei mehr oder weniger einfach nur in den Webserver-Ordner 
legen, der Rest ist Standardfunktionalität.

: Bearbeitet durch User
von Manuel N. (manuelambaum)


Lesenswert?

Εrnst B. schrieb:
> Manuel N. schrieb:
>> Wie nennt sich der Fachbegriff
>
> "Klicken"?
>
> Der Anwender klickt mit dem Mauszeiger auf den Link zum CSV, und sein
> Webbrowser startet den Download?

Und wie binde ich das ganze ein? Hinter diesem Button wird ja etwas 
stecken, was den Download auslöst. Wie geht das?

von Εrnst B. (ernst)


Lesenswert?

Manuel N. schrieb:
> Wie geht das?

Das ist Standardfunktionalität von Webbrowser und Webserver. Die machen 
das, was sie immer machen, wenn ein Link geklickt wird. Für einen 
"Download" passiert da nix magisches extra.

von Sebastian R. (sebastian_r569)


Lesenswert?

Manuel N. schrieb:
> Wie geht das?
1
<a h ref='http://example.com/logfile.csv' download>Logfile herunterladen</a >

Erzwingt den Download, anstatt nur weiterzuleiten.

: Bearbeitet durch User
von Klaus P. (kpi6288)


Lesenswert?

Manuel N. schrieb:
> Und wie binde ich das ganze ein?

Der Button ist einfach ein Link. Du solltest aber in Deinem Webserver 
den korrekten MIME Type für CSV Dateien festlegen, z.B. application/csv 
oder text/csv.

"MIME Type Download CSV" sollte als Suchbegriff ausreichen.

von Dirk B. (dirkb2)


Lesenswert?

Oder du schreibst ein Script in (z.B.) PHP, dass die Daten dann 
zusammenstellt und anbietet.

Unter "CSV dowload PHP" wird sich was anpassbares finden.

von Rüdiger B. (rbruns)


Lesenswert?

oder ein Directory anzeigen lassen, für z.B. Tageslogs.

von Uwe K. (ukhl)


Lesenswert?

Dirk B. schrieb:
> Oder du schreibst ein Script in (z.B.) PHP, dass die Daten dann
> zusammenstellt und anbietet.

Nicht komplizierter machen als es ist.

HTTP ist sehr einfach. Die CSV wird einfach im Ordner bzw. Unterordner 
abgelegt, wo auch deine HTML-Seite zu finden ist. Wobei die HTML-Seite 
nicht zwingend erforderlich ist. Ist nur etwas komfortabler.

Und dann, wie Sebastian geschrieben hat als Link auf der HTML-Seite 
anbieten.

Oder direkt im Browser
1
http://example.com/logfile.csv
 abrufen.

Es ist so einfach. HTTP ist der Inhalt egal. Ob es nun HTML, XML, JSON, 
CSV etc. ist. Aber der Browser schaut aber auf den MIME-Type und das 
Extention, um was Sinnvolles damit anzufangen.

Das wirst Du dann schon merken, wenn Du den Link aufgerufen hast. Dann 
kannst Du noch mal nachfragen, wenn Du nicht weiterkommst.

Einfach machen. Apache rauf und los geht’s.

Ja es gibt hunderte andere Möglichkeiten. Pyton als Web-Server etc. 
Vergiss es erstmal. Keine Lösung suchen, wenn es noch kein Problem gibt. 
Solange es nur Lokal und nicht im Internet bereitgestellt wird, brauchst 
Du dir keinen Kopf machen.

von Dirk B. (dirkb2)


Lesenswert?

Uwe K. schrieb:
> Die CSV wird einfach im Ordner bzw. Unterordner
> abgelegt,

Es wurde nicht erwähnt, ob die Daten überhaupt als CSV vorliegen.

Der TO schrieb nur was von Datenlogger und Webserver. Da kann auch eine 
Datenbank mit im Spiel sein.

Aus der Datenbank muss man die Daten dann nur raus bekommen.
Ist damit im Grunde aber einfacher als immer eine CSV-Datei zu 
durchsuchen.

von Ich A. (alopecosa)


Lesenswert?

Uwe K. schrieb:
> Oder direkt im Browserhttp://example.com/logfile.csv
>  abrufen.

Dann kann es dir aber durchaus passieren das die der Browser das csv 
einfach direkt im Browser anzeigt.

Über einen gesetzten Link mit passendem mime type wird der download 
"erzwungen" ... Ist also schon die richtige herangehensweise.

Und natürlich kann man das a href auch einfach nackt in ein textfile 
schreiben und das dann .html nennen, einen ordentlichen html body sollte 
man aber doch wenigstens aussen rum basteln, also doctype etc.  Ist ja 
nun wirklich kein Hexenwerk.

Für HTML5 ist das ganze ja nun wirklich easy
1
<!DOCTYPE html>
2
<html lang="de">
3
  <head>
4
    <meta charset="utf-8">
5
    <title>Titel</title>
6
  </head>
7
  <body>
8
9
  </body>
10
</html>

Und dabei braucht man das charset nicht mal zwingend.

von Ich A. (alopecosa)


Lesenswert?

Dirk B. schrieb:
> Es wurde nicht erwähnt, ob die Daten überhaupt als CSV vorliegen.

Seh ich anders.

Manuel N. schrieb:
> Cool wäre es nun, wenn ich die Daten
> direkt über den Webserver auf meinen PC runterladen könnte. Also dass
> ich die Daten als .csv Datei oder so erhalte.


sorry für doppelpost.

: Bearbeitet durch User
von Ein Vorschlag (Gast)


Lesenswert?

Hast du dir schon eine Datenbank ausgesucht?

Gibt ein Paket, https://oss.oetiker.ch/rrdtool . Eine Sammlung von 
Datenbank- und Webserver-Modulen. Ideal für Datenlogger auf einer 
Linux-Platine.

Da findest du unzählige Beispiele, wie du mit diesen Tools CSV zusammen 
stellst und über Webserver auslieferst.

von Karl Käfer (Gast)


Lesenswert?

Manuel N. schrieb:
> Ich möchte einen Webserver auf meinem Raspberry Pi aufsetzen. Ziel ist
> es, einen Datenlogger zu erstellen und diese Daten dann grafisch auf
> meinem Webserver darzustellen. Cool wäre es nun, wenn ich die Daten
> direkt über den Webserver auf meinen PC runterladen könnte. Also dass
> ich die Daten als .csv Datei oder so erhalte.
>
> Gibt es dazu irgendwelche Beispiele im Internet oder weiss jemand, wie
> ich diese Sache angehen soll?

Deine Beschreibung liest sich für mich ein wenig verwirrend. Ich 
verstehe, dass Dein RasPi Daten sammeln soll, die dann am Ende grafisch 
visualisiert werden sollen. Die Daten sollen zudem auf einen PC 
heruntergeladen werden können. Ist das so korrekt?

Die übrigen Teile Deiner Ausführungen bleiben mir allerdings verborgen, 
und genau dort fangen meine Verständnisprobleme an. Daher frage ich 
einfach mal:

1.) Was genau soll der Webserver auf dem RasPi tun -- soll er nur die 
vorhandenen Daten zum Download anbieten oder bereits eine Website mit 
den Visualisierungen der Daten anbieten?

2.) Warum sollen die Daten auf den PC heruntergeladen werden? Möchtest 
Du sie dort umfangreicher mit einer Software wie Tableau, Grafana, 
Elasticsearch / Kibana oder meinethalben gnumeric, LibreOffice Calc oder 
Excel weiter analysieren und / oder visualisieren? Oder dient dieser 
Download nur Backupzwecken?

3.) Nehme ich richtig an, dass die Daten nicht live vom RasPi zum PC 
transferiert, sondern auf dem RasPi zwischengespeichert werden sollen? 
Wenn ja, wie lange sollen sie gepuffert werden, und was sollte dann 
passieren, wenn der PC die Daten einmal nicht im vorgesehenen Zeitraum 
herunterladen konnte?

4.) Um welche Datenmengen geht es, also: wieviele Sensoren gibt es (und 
soll es in Zukunft geben), wie oft werden diese ausgelesen?

5.) Hast Du Dir Gedanken über ein Housekeeping gemacht? Daten verlieren 
meistens mit zunehmendem Alter an Wert, und bevor Dir die Festplatte 
Deines RasPi oder Deines PC überlaufen, sollten alte Daten konsolidiert 
und / oder irgendwann gelöscht werden. Welche Strategie hast Du Dir 
dafür überlegt?

6.) An welche Art von Visualisierungen hast Du dabei gedacht? Statische 
oder eher interaktive, einfache oder aufwändige?

Hier wurde zwar bereits PHP empfohlen, das Deine Daten sicherlich als 
CSV-Daten oder auch mit einer passenden Bibliothek wie Flot, JqPlot, 
JqWidgets oder Ähnlichen in schicken Plots ausliefern kann. Bezüglich 
der Aufbereitung der Daten, statistischen Analysen, Maschinellem Lernen 
und datenbasierter Entscheidungsfindung zweifellos viel leistungsfähiger 
wäre allerdings Python mit seiner Statistikbibliothek Pandas, statischen 
und dynamischen Visualisierungsbibliotheken wie Matplotlib, Seaborn, 
Bokeh, Plotly und Plotly Express, und umfangreichen wissenschaftlichen 
Bibliotheken wie numpy, scipy, und den auf scipy aufbauenden scikits. 
Diese Werkzeuge erfreuen sich in der professionellen Datenanalyse und 
-Visualisierung grösster Beliebtheit und lassen keinerlei Wünsche offen 
-- ausser, dass man sie natürlich erlernen und beherrschen muss, um sie 
zu benutzen. Selbstverständlich gibt es auch mächtige und performante 
Webframeworks für Python, genannt seien hier nur das relativ einfache 
Flask, aber auch sehr mächtige Lösungen wie Django oder Zope.

Du siehst: die eigentliche Frage ist, was Du eigentlich machen willst 
und ob Du dafür womöglich bereit bist, dafür eine Programmiersprache zu 
erlernen.

von Uwe K. (ukhl)


Lesenswert?

Ich A. schrieb:
> Uwe K. schrieb:
>> Oder direkt im Browserhttp://example.com/logfile.csv
>>  abrufen.
>
> Dann kann es dir aber durchaus passieren das die der Browser das csv
> einfach direkt im Browser anzeigt.

Aber wir sind dann einen großen Schritt weiter. Der Rest ist hühnerkram.
Auch den Browser kann man beibringen, wie er mit der Datei umgehen soll. 
Da gibt es mehrere Möglichkeiten.

Ein Schritt nach dem anderen. Explodieren wird es nicht.

von Jobst Q. (joquis)


Lesenswert?

Dazu brauchst du nicht mal einen Webserver. Aktiviere ssh , dann kannst 
du mit Winscp unter Windows oder mit dem Midnight Commander (mc) unter 
Linux beliebige Dateien downloaden und uploaden.

https://www.elektronik-kompendium.de/sites/raspberry-pi/1906281.htm

: 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.