FTP Client (Dateien auf Webspace hochladen)

OP #3110335
Lesenswert?

Hallo,
hat jemand schon einmal von einem AVR oder STM32 Board Messdaten per 
FTP-Client auf einen Webspace übertragen?

Ich wollte mit einem STM32F107 Messwerte sammeln und dann alle 5 Minuten 
auf einen öffentlichen Webspace hochladen.

Ich finde allerdings kein Beispiel für so etwas. Hat jemand vielleicht 
einen Tipp für mich?

Viele Grüße,
Pete
#3110386
Lesenswert?

Pete K. schrieb:
> Hallo,
> hat jemand schon einmal von einem AVR oder STM32 Board Messdaten per
> FTP-Client auf einen Webspace übertragen?

Warum FTP?
Eine TCP Implementierung findest du ja sicher, dann machst du dir ein 
PHP Skript für den Webspace, und sendest deine Daten als HTTP GET 
Request (für ein paar Messwerte)
Oder als HTTP Post Request, wenn du wirklich daten hast (> 4kByte).

Das ist ziemlich einfach...
http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol

[EDIT]: Diesen String musst du noch selbst zusammensetzten, und ggf. 
ecodieren.
> GET /wiki/Spezial:Search?search=Katzen&go=Artikel HTTP/1.1
> Host: de.wikipedia.org

Post gibt etwas mehr zu tun, ist aber auch noch simpel.

Sag was du genau machen willst, was du schon hast etc. dann wir dir ggf. 
geholfen, deine Frage ist viel zu unpräzise.


mfg Andreas
OP #3110440
Lesenswert?

@Andreas: Da ich per Google wenig über einen FTP-Client auf einem µC 
finden konnte muss es wohl auch anders besser gehen...

Bisher habe ich einen STM32F107RC mit OneWire TempSensoren und einer 
Photodiode für einen EHZ Stromzähler am Laufen.

Der nächste Schritt ist die Anbindung des DP83848 sowie eines Displays.
Auf den DP83848 warte ich zurzeit noch.

Die Messdaten sollen dann irgendwie auf meinen Webspace bei einem 
öffentl. Provider hochgeladen werden, damit sie von überall verfügbar 
sind.

Die Grafik der Messwerte wird mit den google chart tools in der 
erzeugten HTML-Datei beim Aufruf visualisiert:
1
<html>
2
<head>
3
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
4
<script type="text/javascript">
5
google.load("visualization", "1", {packages:["corechart"]});
6
google.setOnLoadCallback(drawChart);
7
function drawChart() {
8
var data = new google.visualization.DataTable();
9
data.addColumn('timeofday', 'time');
10
data.addColumn('number','0');
11
data.addColumn('number','1');
12
data.addColumn('number','2');
13
data.addColumn('number','3');
14
data.addRows([[[12,49,28],24.8,24.8,25.0,24.5
15
],
16
[...]
#3110538
Lesenswert?

Pete K. schrieb:
> @Andreas: Da ich per Google wenig über einen FTP-Client auf einem µC
> finden konnte muss es wohl auch anders besser gehen...
>
> Bisher habe ich einen STM32F107RC mit OneWire TempSensoren und einer
> Photodiode für einen EHZ Stromzähler am Laufen.

Ok, also definitiv wenig Daten, kannst du per HTTP GET machen.

> Der nächste Schritt ist die Anbindung des DP83848 sowie eines Displays.
> Auf den DP83848 warte ich zurzeit noch.

Keine Ahnung, ich habe bisher nur einemal einen ENC28J60 verwendet, und 
da habe ich eintlich nichts selbst gemacht, war alles "geklaut"

> Die Messdaten sollen dann irgendwie auf meinen Webspace bei einem
> öffentl. Provider hochgeladen werden, damit sie von überall verfügbar
> sind.

Ich (Informatiker) nehm für sowas immer HTTP, Serverseitig machst du ein 
kleines PHP Skript, wenn du viele Daten hast am einfachsten mit einer 
Datenbank, z.B. MySQL. (hast du ja warscheinlich zur Verfügung)

Ansonsten bietet sich in deinem Falle auch ein Logfile an, also alle 
Daten einfach Zeilenweise in ein File schreiben.

(Kannst du PHP?)

> Die Grafik der Messwerte wird mit den google chart tools in der
> erzeugten HTML-Datei beim Aufruf visualisiert:
>
>
1
> <html>
2
> <head>
3
> <script type="text/javascript"
4
> src="https://www.google.com/jsapi"></script>
5
> <script type="text/javascript">
6
> google.load("visualization", "1", {packages:["corechart"]});
7
> google.setOnLoadCallback(drawChart);
8
> function drawChart() {
9

10
--> Diesen Teil hier generierst du aus der Datenbank / dem File.
11

12
> ],
13
> [...]
14
>

HTTP Funktioniert ganz einfach, du öffnest eine Verbindung zur 
IP-Adresse des Servers auf Port 80, dafür findest du sicher eine TCP 
Lib.

Danach sendest du als String deinen HTTP Request.

> GET /stromzaeler/log.php?wert=%i&key=Geheim HTTP/1.1
> Host: meinedomain.de <-- Ganz wichtig, sonst landest du nicht auf deinem 
Webspace
> (2 * \r\n) dann sollte der Webserver antworten

Die erste Zeile kannst du z.B. mit sprintf aufbereiten, ich würde noch 
ein "Passwort" oder sowas mitliefern, damit nicht jeder einfach 
manipulieren kann. Sicher ist das ganze jedoch so nicht.

Danach sollte der Webserver mit
> HTTP/1.1 200 OK
antworten

Testen kannst du das ganz einfach mit telnet auf der Konsole.

Viel Spass!


mfg Andreas
Gast #3110588
Lesenswert?

> Warum FTP?

Weil FTP so einfach ist, ein wesentliche einfacheres Protokoll als http, 
und entsprechend weniger Software zu programmieren ist.
Wenn man schin einen TCP/IP Stack hat und einen Socket öffnen kann (das 
braucht man für http sowieso), ist FTP sehr simpel, simpel wie print. 
Allerdings gibt es bei FTP (wie bei jeder Kommunikation) Wartezeiten, 
und die andere Seite kann auch mal gar nicht mehr antworten. Daher 
sollte man die Anfragen mit time out versehen. Auf einem uC kann man wie 
in ienem eigenen thread einfach Häppchenweise in der 
Programm-Hauptschleife machen: Wenn (vom FTP Transfer) was anliegt, mach 
was. Denn die Einzelaktionen sind kurz.
#3110611
Lesenswert?

MaWin schrieb:
>> Warum FTP?
>
> Weil FTP so einfach ist, ein wesentliche einfacheres Protokoll als http,
> und entsprechend weniger Software zu programmieren ist.

Ich habe oben das komplette HTTP GET Beispiel gepostet, 2 Zeilen (incl. 
Platzhalter) und 2 Leerzeilen.

Poste doch einfach das einfachere FTP Beispiel, würde den TO sichere 
interessieren, und mich auch!



mfg Andreas
Gast #3110744
Lesenswert?

> Ich habe oben das komplette HTTP GET Beispiel gepostet

Nein, du hast in beiden Beispielen einen gigantischen Unterbau 
vorausgesetzt.

Ein FTP-Get funktioniert quasi identisch, man liefert noch username und 
Password und type und mode mit, und holt dann einfach x Byte ab bzw. 
sendet sie.

socket=open(unc,21); // FTP port ist 21
send(socket,"USER username\r\nPASS Password\r\nMODE S\r\nTYPE A\r\n")
send(socket,"RETR /directory/filename.ext\r\n")
do { n = recv(sock, buf, len, 0); buf+=n; len-=n; } whule ( n>0 );
Gast #3110849
Lesenswert?

FTP ist viel gefaehrlicher, denn es beinhaltet einen zugriff auf das 
Filesystem. Waehrend ein Http request von einem haendler in eine 
datenbank geschrieben wird. Quasi mit den Plastikhandschuhen wie eine 
Giftflasche angefasst wird.
Gast #3111011
Lesenswert?

> Natürlich ist FTP nicht einfacher als HTTP.

Sagenwersmalso: Die sind beide dermaßen einfach, dass sich ein 
Komplexitätsvergleich gar nicht erst lohnt.

Ergo nimmt man das was auf der Gegenseite eh schon da ist.
Persönliche Seite #3111494
Lesenswert?

Stefan Rand schrieb:
> Das muß nicht das "echte" Dateisystem sein, das kann man ganz trivial
> ebenso auf eine Datenbank abbilden. Der Unterschied zu HTTP existiert
> wirklich nur in deiner Fantasie.

Aber nur, wenn man vollen Zugriff auf den Server hat. In 99,99999% aller 
Fälle greift man direkt auf den Webspace zu. Man schickt sogar meist 
sein Adminpasswort mit, weil es keine Nutzerverwaltung gibt.

Viel einfacher ist ein PHP-Skript, welches auf ein GET entsprechend 
regiert.
Persönliche Seite #3111518
Lesenswert?

Pete K. schrieb:
> Christian H. schrieb:
>> Viel einfacher ist ein PHP-Skript, welches auf ein GET entsprechend
>> regiert.
>
> Und wie willst Du das PHP-Skript auf dem Websever von, sagen wir mal,
> 1&1 zum Laufen bekommen? Cronjobs sind da nicht zugänglich.
Sind auch nich nötig.

> Hier noch einmal der gewünschte Anwendungsfall:
>
> STM32(Daten)--(upload)-->Webspace(1&1)<--(http-request)--Browser

STM32 -> HTTP GET/POST -> Webspace Skript (Mit Datenbank) <- HTTP GET <- 
Browser

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren