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
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
@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 | [...]
|
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
> 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.
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
> 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 );
Hallo Pete, könntest Du bitte die vollständige HTML Datei (bis <\HTML>) hereinstellen.
Natürlich ist FTP nicht einfacher als HTTP. Schon einfach, weil man min. 2 offene Sockets benötigt für Command und Data.
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.
> 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.
helga schrieb: > Hallo Pete, > > könntest Du bitte die vollständige HTML Datei (bis <\HTML>) > hereinstellen. Ja, gerne :-) Auf den Webserver habe ich keinen Zugriff, das sperrt der Provider. Daher müssen die Dateien in ein bestimmtest Verzeichnis beim Server hochgeladen werden.
Ich hatte mal ein Projekt mit TFTP gesehen. Windows hat zum Beispiel einen TFTP Client on Board. Wenn ein Webserver auch TFTP kann, wäre das vielleicht ein einfacherer Weg.
Viktor N. schrieb: > FTP ist viel gefaehrlicher, denn es beinhaltet einen zugriff auf das > Filesystem. 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.
SummerWilli schrieb: > Wenn ein Webserver auch TFTP kann, wäre das > vielleicht ein einfacherer Weg. TFTP ist ein Minimal-FTP ohne Authentifizierung etc. Nicht sehr sinnvoll für einen weltweiten Zugriff.
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.
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. Hier noch einmal der gewünschte Anwendungsfall: STM32(Daten)--(upload)-->Webspace(1&1)<--(http-request)--Browser
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.