Seite 2 von 5

Re: SD-Karte und FTP-Server

Verfasst: 14.05.2008, 19:52:18
von matwol
Hallo Wil,

danke für Deine Tipps, hab's ausprobiert. Das mit den HTML-Dateien auf der SD-Karte klappt einwandfrei. Das andere werde ich mal bei Gelegenheit ausprobieren.

Gruss Wolfgang

Re: SD-Karte und FTP-Server

Verfasst: 15.05.2008, 02:01:59
von wil
Ich möchte mal mit meinem Code zur aktuellen "offiziellen" Version aufschliessen. Im Anhang daher der Code mit den Änderungen zur Version 1.0.89 von Uli. War diesmal nicht so schwierig da nachzukommen, da meine Änderungen im Stack ja auch schon in die offizielle Version eingeflossen sind :wink:

Mein Webmodule läuft seit nunmehr zirka 2 Monaten recht stabil im Heizungskeller und tut fleissig Temparaturen messen und meine Zirkulationspumpe und Umwälzpumpe steuern. Nachdem es inzwischen ja fast Sommer geworden ist, sind die Ergebnisse aus dem Heizungskeller nicht mehr so aufregend und daher hab ich etwas Zeit gefunden mein (recht spezielles) Programm etwas zu verallgemeinern. Für Interessierte daher hier die zusätzlich eingefügten Features:
  • 1-Wire Temperatursensoren
    Mit USE_OW werden in der config.h die Routinen für einen 1-wire-bus an PD7 aktiviert. Der Port für den Bus kann in onewire.h umdefiniert werden. Verwendet habe ich den Code von Martin Thomas/Peter Dannegger. Bei mir laufen zur Zeit zehn DS18B20. Den letzten habe ich gerade letztes Wochenende an einem ca. 25 bis 30 Meter langen Klingeldraht an der Nord-Aussenwand angebracht. Funktioniert einwandfrei! (externen Pullup nicht vergessen!)
  • Scheduler
    Irgendwann will man nicht nur passiv Daten aufnehmen sondern auch aktiv reagieren. Bei mir wird die Warmwasserzirkulation und die Umwälzpumpe über das Webmodul aktiv gesteuert. Dazu gibt es auf der SD-Karte eine Datei avr.ini, die die vordefinierten Schaltzeiten der angeschlossenen Relais enthält. In der Funktion initSchaltzeiten() wird die Datei eingelesen. Das Format der Datei kann dort eingesehen und geändert werden.(Schaltzeit; Bitmaske für Wochentage; Schalter1 an/aus; Schalter2 an/aus; ...). Die Schaltzeiten sind in einem Byte codiert. Stunde mal 10 plus Minute in Zehnerschritten. Beispiel: 103 bedeutet 10h30; 104 bedeutet 10H40; 220 bedeutet 22h00.
  • Datenlogger und Sensoreingänge
    In main.c sind ein paar Zeilen als Beispiel drin, wie man auf externe Änderungen an den Eingängen reagieren kann. Auch wird dort regelmäßig die Messfunktion der 1-Wire Sensoren aufgerufen und anschließend ein Eintrag in der Logdatei geschrieben.
Zum Schluss habe ich dann noch etwas Platz im RAM schaffen müssen, da es doch recht eng wird wenn man viele Features und auch noch die Kamera aktiviert. Ist wohl noch nicht ganz optimal, aber mit dem Auslagern der CMD-Tabelle in den Flashspeicher ist wieder genug Platz frei geworden, so dass hoffentlich auch die Kamera funktioniert (hab leider keine, so dass ich nicht testen kann! Eine Rückmeldung dazu wäre ganz nett.).

Viel Spaß beim ausprobieren
wil

p.s.: Zip-Archiv enthält jetzt korrigiertes tcpsrv.c, so dass FTP wieder funktioniert.

Re: SD-Karte und FTP-Server

Verfasst: 15.05.2008, 16:09:24
von matwol
Hi Wil,

Zuerst, Deine Servererweiterung gefällt mir, drum hab' ich gleich Deine Version 1.0.89 getestet, leider wird der FTP-Server nicht gefunden. Leider sind meine Kenntnisse in 'C' noch nicht so gut um den bestimmt kleinen Fehler zu finden. Configuriert habe ich das ganze wie mit Deiner alten Version.
1. In der Config.h IP-Adressen vom Server und Router für mein System eingestellt
2. Im Makefile Prozessor und Programmer eingestellt.

Oder muss man noch etwas einstellen ?
Habe wieder die alte Version aufgespielt.
Auf der Startseite des Webservers befindet sich einen Link zur SD-Karte, mit der alten Version funktioniert's, mit der neuen nicht.
http://wolfgangwelt.dyndns.tv:8080/index.html

Gruss, Wolfgang

Re: SD-Karte und FTP-Server

Verfasst: 15.05.2008, 16:50:33
von wil
Hi matwol,

hast du die "Hardwareerweiterung" mit dem PA6 gemacht oder die entsprechenden Zeilen abgeändert? Falls du PA6 nicht angeschlossen hast und die Zeilen nicht geändert hast, ist die Abfrage auf eine gesteckte Karte immer "false". Dann greift der Code auch nicht drauf zu, da es sonst einen recht langen Timeout gibt.

Vielleicht sollte ich mal ein #define dafür in die config.h einbauen :roll:

wil

Re: SD-Karte und FTP-Server

Verfasst: 15.05.2008, 22:09:58
von Dietmar
Hallo Wil,

ich habe deine neue Version ausprobiert, kann es sein das der FTP-Server nicht mehr funktioniert und auch CMD-Telnet.
Es wird kein Befehl mehr erkannt. Rückmeldung (502 not implemented).
Die SD-Karte wird erkannt.

MFG
Dietmar

Re: SD-Karte und FTP-Server

Verfasst: 15.05.2008, 22:30:22
von wil
Hallo,

da ist mir doch noch die alte Version der tcpsrv.c reingerutscht. :shock: Der alte Code sucht die Befehlstabelle im RAM. Habe die Tabelle aber in den Flash verschoben.
Hier der aktuelle Code. Damit sollte es wieder klappen.

wil

Re: SD-Karte und FTP-Server

Verfasst: 15.05.2008, 22:44:04
von Dietmar
Hallo Wil,

danke für Deine schnelle Hilfe.

MFG
Dietmar

Re: SD-Karte und FTP-Server

Verfasst: 16.05.2008, 16:40:32
von matwol
Hi Wil,

Du hast recht, hab vergessen die entsprechenden Zeilen auszukommentieren. Jetzt funktionierts.

Nun habe ich eine neue Frage.

Habe mal probeweise eine SD-Karte und eine MMC - Karte eingesteckt. Auf beiden habe ich zum Testen eine HTML-Seite mit Namen "index.html" aufgespielt.
Habe im Projekt in "Webpage.h" folgende Zeile eingefügt (zeige hier nur die reine HTML-Anweisung).
<a href="index.html">SD - Karte</a>

Die CSV-Dateien werden auf beiden Karten erzeugt. Nur der Link funktioniert nur auf der SD-Karte. Wenn man eine Datei "index.htm" auf den Karten ablegt, dann funktioniert der Autostart ebenfals nur auf der SD-Karte.
Warum ist das so ?
Die FTP-Funktionen gehen auf beiden Kartentypen.
Kann man das Anlegen der CSV-Dateien irgendwo ausschalten?

Gruss, Wolfgang

Re: SD-Karte und FTP-Server

Verfasst: 17.05.2008, 12:34:47
von Dietmar
Hallo Wil,

mir ist aufgefallen, das der FTP-Server bei Ausgabe eines Verzeichnisses ungefähr 3 Sekunden braucht um zu antworten, der CMD-Telnet Server gibt den Verzeichnisinhalt sofort aus. Ist das Verhalten so unterschiedlich oder liegt es an den FTP-Clients.

MFG
Dietmar

Re: SD-Karte und FTP-Server

Verfasst: 17.05.2008, 20:42:01
von wil
Hallo,

@matwol
Ich kenne den Unterschied zwischen MMC und SD-Karte nicht, da ich keine MMC-Karte habe. Theoretisch sollte es für unsere Belange aber identisch sein, da meines Wissens MMC eine Teilmenge von SD ist. Ich nehme an, dass hat eher etwas mit der Formatierung und der Größe der Karten zu tun.
Das Anlegen der csv-Dateien habe ich als Beispiel codiert, wie man eine Logdatei auf die Karte schreibt. Die eigentliche Funktion steht in messung.c ganz am Ende und aufgerufen wird sie regelmäßig in der mainloop

Code: Alles auswählen

		if (machineStatus.Tlesen) {
			lese_Temperatur();
			machineStatus.LogSchreiben = true;		// danach gleich Logdatei schreiben
			machineStatus.Tlesen = 0;
		}

		if (machineStatus.LogSchreiben) {
			// schreiben
			log_status();
			machineStatus.LogSchreiben = false;
		}
Über den Timerinterrupt wird in timer.c regelmäßig das Flag "machineStatus.Tlesen" gesetzt und in obigem Code ausgeführt. Du kannst das jetzt im Timer auskommentieren oder an der obigen Codestelle was anderes reinprogrammieren, was dann regelmäßig ausgeführt wird. Das Temperaturmessen und in der Datei loggen soll nur ein Beispiel sein.

@Dietmar
Wenn du den Telnet-CMD-Modus aufrufst landest du eigentlich bei den gleichen Kommandos, die auch der FTP-Client verwendet. Nur verwendet der FTP-Client nicht den DIR-Befehl. Bei FTP werden ein Steuerkanal (da werden die Befehle übertragen) und ein Datenkanal (da werden dann die Daten übertragen) verwendet. Du kannst im FileZilla mal unter Einstellungen den Debug-Modus aktivieren. Da sieht man dann direkt, was da alles ausgetauscht wird. Zuerst versucht der Client ein paar Informationen zu bekommen, damit er dann eventuell erweiterte Befehle verwenden kann. Dann muss er den Datenkanal öffnen (das passiert mit PASV im passiven Modus) und dann kann er erst den LIST Befehl absetzen, der das Inhaltsverzeichnis dann über den Datenkanal schickt. Das braucht halt etwas länger als wenn du den DIR-Befehl direkt über den gleichen Socket schickst. :?

... übrigends, falls du viel mit FTP und der Karte experimentierts: die Auflistung der Verzeichnisse hat noch eine gravierende Macke. Es wird vom Webmodul momentan nur ein Paket geschickt. Falls also der Verzeichnisinhalt zu groß wird (zu viele Dateien in einem Verzeichnis), wird Speicher überschrieben und nix mehr angezeigt. Im Extremfall stürzt das Webmodul ab.

Gruß
wil

Re: SD-Karte und FTP-Server

Verfasst: 18.05.2008, 08:32:53
von matwol
Hi Wil,
danke für Deine Antwort.
Ich kenne den Unterschied zwischen MMC und SD-Karte nicht, da ich keine MMC-Karte habe. Theoretisch sollte es für unsere Belange aber identisch sein, da meines Wissens MMC eine Teilmenge von SD ist. Ich nehme an, dass hat eher etwas mit der Formatierung und der Größe der Karten zu tun.
Beide Karten wurden unter Windows XP mit FAT formatiert. Die MMC - Card hat 256 MB, die getesteten SD - Karten haben 1GB (Mini-SD vom Handy im SD-Adapter ) und 64 MB. Mit den SD's hat der Aufruf eines Links immer geklappt. Komisch ist nur, alles andere (löschen, kopieren, usw.) geht auch mit der MMC - Card, nur eben der Aufruf eines Links wird ignoriert. Wie gesagt, es hat mich nur interressiert, warum das so ist.

wünsch noch ein schönes Wochenende.

Gruss Wolfgang

Re: SD-Karte und FTP-Server

Verfasst: 19.05.2008, 19:10:44
von Dietmar
Hallo Wil,

ich habe festgestellt dass der FTP-Server noch ein Problem hat.
Sind mehrere Verzeichnisse auf der SD-Karte werden die Inhalte nicht immer Korrekt angezeigt.
Ich habe deine Version so abgeändert das dieses Problem nicht mehr vorkommt.

PS. dadurch sind auch die Änderungen in Version 90 und 91 nicht mehr Nötig.


MFG
Dietmar

Re: SD-Karte und FTP-Server

Verfasst: 23.05.2008, 22:21:46
von wil
Hallo Dietmar,

es ist schön, wenn jemand mitdenkt und den Code auch benutzt. Ohne Rückmeldungen kommt man sich manchmal etwas einsam vor :( Daher ist es toll wenn du da mitmachst.

Uli ist inzwischen bei 1.0.93 und durch deinen Fehlerhinweis hat es mich doch etwas angespornt auch noch ein paar weitere Macken aus dem FTP-Server auszubügeln. Habe daher einiges abgeändert. :wink:

Ich habe nochmal lange an der Verzeichnisanzeige rumprobiert und jetzt klappt bei mir die Anzeige unter FileZilla und unter IE6. Wenn man bei FileZilla mal in den Quellcode reinschaut ist es schon irre, was andere Leute für Aufwand betreiben um die unterschiedlichsten Datums- und Zeitformate in der Verzeichnisanzeige zu erkennen. Bei IE6 liegt es z.Bspl. auch an der Zeitanzeige, die keine Sekunden verträgt, wenn man im UNIX ls-Stil anzeigt :?

Also hier jetzt die Version aktuell zu Ulis 1.0.93 und mit Anzeige auch großer Verzeichnisse (das FileZille Quellcodeverzeichnis src/interface hat 163 Einträge, die richtig angezeigt werden). Download und Upload auch großer Dateien funktioniert mit FileZilla und IE6. Einzig sollte man bei FileZilla in den Einstellungen unter "Übertragungen" die "Begrenzung der Uploadgeschwindigkeit" auf max. 10 KB/s einstellen. FileZilla sendet sonst Blöcke von 128 kBytes, was auch fast 128 Packeten entspricht auf einmal. Bis die alle geschrieben sind, bekommt FileZilla sonst ein Timeout und versucht dann nochmal von vorne zu beginnen. Beim IE6 klappt es ohne irgendwelche Einstellungen 8)

Gruß
wil

Re: SD-Karte und FTP-Server

Verfasst: 24.05.2008, 07:27:49
von SeppK
Ist es eigentlich möglich den Zugriff auf den FTP-Server per Username/Password zu schützen?

Ich möchte gerne von überall auf meine Logdateien zugreifen können, aber es sollte nicht so sein, dass das jeder andere auch kann....

Mir ist noch aufgefallen, dass ich bei einem Zugriff auf den FTP-Server per Windows-Explorer kein neues Verzeichnis anlegen kann. (Fehlermeldung '550 Requested action not taken')

Noch eine Bemerkung zu dem Sourcecode:
Es arbeiten ja ausser Uli noch einige andere Leute an den Quellen. Das gibt irgendwie immer ein Kuddelmuddel bei den Versionen. Kann man das nicht per SVN organisieren. Das würde die Sache vereinfachen.

Re: SD-Karte und FTP-Server

Verfasst: 24.05.2008, 13:15:56
von wil
Hallo SeppK,
SeppK hat geschrieben:Ich möchte gerne von überall auf meine Logdateien zugreifen können, aber es sollte nicht so sein, dass das jeder andere auch kann....
Mir ist das im internen Netz etwas zu lästig. Für http habe ich es in der config.h ausgeschaltet.

Code: Alles auswählen

/** Passwort **********/
	#define HTTP_AUTH_DEFAULT	1	//Webserver mit Passwort? (0 == mit Passwort)
	
	//AUTH String "USERNAME:PASSWORT" max 14Zeichen
	//für Username:Passwort
	#define HTTP_AUTH_STRING "admin:uli1"
Für FTP müsste man den USER-Befehl in der tcpcmd.c so ändern, dass er ein Kennwort anfordert. Kann ich mal machen, da da an 3 bis 4 Stellen was einzufügen ist. Bedenke aber bitte, dass Passwörter bei FTP komplett im Klartext übertragen werden.
SeppK hat geschrieben:Mir ist noch aufgefallen, dass ich bei einem Zugriff auf den FTP-Server per Windows-Explorer kein neues Verzeichnis anlegen kann
Ich arbeite gewöhnlich mit FileZilla, daher habe ich IE nicht sonderlich debugged. IE ist ja eigentlich auch kein reiner FTP-Client :wink:
Wegen SVN gibt es hier andere Ansprechpartner, aber es liegt nicht allein am SVN... Hier werden im Prinzip zwei verschiedene Hardwareplattformen bedient und manche Leute haben schon Probleme diese auf gleichen Level (SD-Karte etc.) zu bringen. Allein beim Webmodul gibt es 2 Prozessoren mit 1 oder 2 USARTs. Manche wollen unbedingt die Kamera anschließen, -- dann gibt es halt Probleme mit nur einer USART; anderen sind Zugriffe auf externe Geräte über USART und auch über Web besonders wichtig. Es ist halt schwierig sowas in einem Quellcode mit #define für alle Wünsche konfigurierbar zu machen. Aber ich glaube bisher geht es noch einigermassen und wenn du mal in die config.h rein schaust siehst du was man da alles an und abschalten kann. Ob alle Kombinationen funktionieren kann ich allerdings grad nicht garantieren,(z.Bspl. FTP-Server ohne SD-Karte :lol: )
Außerdem ist das hier eigentlich keine fertige Applikation. Selbst Anpassungen für sein eigenes Projekt zu machen ist immer noch am besten...

Gruß
wil