Dynamische Website auf Embedded Webserver

BlackDevil

Neues Mitglied
09. Mai 2009
282
0
0
Sprachen
Servus

Man stelle sich einen kleinen Webserver vor. Der soll vorzugsweise auf einem Mega32 realisiert werdenn. An diesen sollen mehrere Module angesteckt und hinzugefügt werden können.
Will heißen:
Es gibt mehrere verschiedene Module. Beschränken wir uns mal auf mehrere Module mit verschieden vielen Schaltern. Die weren über I2C angeklemmt.
Jedes der Module hat eine Bibliothek mit einer structure die die Adresse und wichtigsten Eigenschaften sowie die Methoden beinhaltet, wie eine Klasse.
Es gibt auf dem Webserver eine Seite "Hinzufügen". Dort wähle ich in einer Combobox zum Beispiel "Schaltermodul, 3Schalter aus", gebe ihm die I2C Adresse und sage "hinzufügen". Auf dem Prozessor wird dann ein Objekt vom Typ "switch_3ch" einer Verketteten Liste hinzugefügt (kann man am besten verwalten denke ich).

Diese Liste stell ich in einer Listbox oder einer Tabelle dar. Klicke ich auf einen Eintrag in der Tabelle seh ich dann unten mehrere Optionen, wie zum Beispiel "CH1 On/Off" und welchen Zustand dieser Kanal hat.

Geht das mit HTML? Oder mit einer anderen Plattform unabhängigen Sprache?
Oder ist es einfacher, wenn ich jedem der Modul Bibliotheken eine passende Webseite zur Seite stelle und diese wie alles andere mit dem Erzeugen eines neuen Moduls mit generiert wird? Dann wird der Speicher aber schnell voll...

Was ich mic hauch noch frage: Wie kann ich mit einem Button/Link/Check Box auf Register zugreifen? Und wie funktioniert das wenn ich die Website auf externen Speicher, wie I2C Memory, SPI Memory oder SD Speicherkarte packen will und nicht übe dne PC drauf zugreifen kann (SD Karte fällt da klar raus die kann ich in dne PC stopfen)?

Ich hoffe auf Hilfe :) Ansonsten scheitert das Programm daran das ich ich weis wie ich die Dynamik reinbringe...
 
Hallo Schwarzteufel

Also über HTML wirst du nicht direkt auf die Register zugreifen können, aber ich schätze mal dass die Software auf den ganzen AVR Webservern so ausgelegt ist dass man die Daten, die ein (HTML-)Formular an den Server (zurück)übermittelt, über einfache Funktionen auslesen kann und danach in einen String die Antwort(HTML-Seite) reinschreibt. Dieser Antwort-String lässt sich dann sicher mit einer weiteren unkomplizierten Funktion als Antwort absenden.
Es ist(Vermutung) inetwa so als ob das ganze Programm schon geschrieben ist, und du nur eine Funktion ausfüllen musst die dann bei einer Anfrage aufgerufen wird und, unter Beachtung der Hardware und des Formulars, eine Entsprechende HTML-Seite generiert.

Common Gateway Interface sagt dir was?
Der Webserver des NGW100(AVR32) hat soetwas, du schreibst eine Ausführbare Datei und kopiert sie in den CGI-Ordner des Webservers, wenn du diese Datei nun wie eine HTML-Seite über den Browser aufrufst wird alles was von dem Programm über Printf ausgegeben wurde wie eine HTML-Datei angezeigt.

Beliebt für diese Aufgaben ist auch das NSLU2 mit irgendwelchen Linux-Distributionen drauf(Unslung oder so).
 
Eine Aufgabe dieses Semester sollte es sein einen WebServer ans laufen zu bringen. Das wurde leider nix, Quellcode hab ihc dennoch:

Code:
	//anschauen httpd.c ab Zeile 124 und 172
	//Port Schalten und Status %PORTA0 bedeutet PORTA PIN0
	"<input type=\"checkbox\" name=\"OUT\" value=\"A\" %PORTA0>\r\n"
	"<span class=\"Stil2\">Port A Pin 0</span></p>\r\n"
	"<p align=\"left\">\r\n"
	
	//Port Schalten und Status %PORTA1 bedeutet PORTA PIN1
	"<input type=\"checkbox\" name=\"OUT\" value=\"B\" %PORTA1>\r\n"
	"<span class=\"Stil2\">Port A Pin 1</span></p>\r\n"
	"<p align=\"left\">\r\n"
	
	//Port Schalten und Status %PORTA2 bedeutet PORTA PIN2
	"<input type=\"checkbox\" name=\"OUT\" value=\"C\" %PORTA2>\r\n"
	"<span class=\"Stil2\">Port A Pin 2</span></p>\r\n"
	"<div align=\"left\">\r\n"

und an der oben genannten Stelle steht
Code:
//HTTPD_STACK löschen
void httpd_stack_clear (unsigned char index)
{
	http_entry[index].http_header_type =0;
	http_entry[index].first_switch = 0;
	http_entry[index].http_auth = HTTP_AUTH_DEFAULT; // Zeile 124
	http_entry[index].new_page_pointer = 0;
	http_entry[index].old_page_pointer = 0;
	http_entry[index].post = 0;
	http_entry[index].auth_ptr = http_auth_passwort;
	http_entry[index].post_ptr = post_in;
	http_entry[index].post_ready_ptr = post_ready;
	http_entry[index].hdr_end_pointer = rx_header_end;
	#if USE_CAM
	http_entry[index].cam = 0;
	#endif //USE_CAM				
	HTTP_DEBUG("\r\n**** NEUE HTTP ANFORDERUNG ****\r\n\r\n");	
	return;
}

Code:
				http_entry[index].hdr_end_pointer = rx_header_end;

Ich verstehs nich ^^ Ich kenn die Befehle bei der Webpage nicht mal. Es muss aber doch irgendwie mal irgendwo ne Hilfe geben ... e sgibt soviele die einen Webserver gebaut haben aber keine "Anleitung" ^^
Und irgendwie musses doch möglich sein das Dynamisch zu gestalten ohne riesig viel Speicher zu verlieren...


Noch mal zum Szenario:
Die Stakeholder möchten ein Gerät das am LAN Hängt und an das sie nach belieben Module anklemmen. Module sollen sein: Dimmer (Phasenanschnittssteuerung) mit 1, 2 oder 3 Kanälen und Schalter mit 1-8 Kanälen (und 16-5A pro Kanal)
Ethernet => I2C Gateway Quasi
 
Sorry Teufel ich blick jetzt gar nicht mehr durch.

Was hast du eigentlich vor? Irgendwie sind die bisherigen Informationen recht dürftig.
Was hast du schon? Hardware? Codeschnipsel?
Hast du denn schon mal irgendeinen Webserver am laufen gehabt? (z.b. XAMPP für Windows)
Schon mal irgendeine Anwendung für das CGI eines solchen geschrieben?
Woher hast du die Codeschnipsel?
Wie sieht denn eigentlich dein Kenntnisstand dazu aus?
Willst du einen der fertigen AVR-Webserver(z.b. der von Ulrich Radig) und deren Hardware erweitern, oder eine komplette Neuentwicklung wagen?
Hast du dir schon mal mit einem Sniffer den Verkehr zwischen Webserver und Browser angesehen?
Wieviel hast du denn schon mit AVRs realisiert?
Was meinst du mit "Ich kenn die Befehle bei der Webpage nicht mal."?

Ich gebe zu Protokoll das ich auf dem Gebiet wenig Erfahrung habe, aber immerhin habe ich mich etwas in die Materie Eingelesen und mich an Beispiele gewagt. Eigentlich ist Dirk für Soetwas der bessere Ansprechpartner.(Wobei ich glaube von Knickohr ein Bild des NSLU2 hier im Forum gesehen zu haben.)
 
Ich hatte mal einen Apache am laufen und einen Linux Server - ist aber ohne belang wenn ich einen Embedded ATmega Webserver laufen lassen möchte.

Realisiert hab ich nix, ich will was selbst bauen.

Ich will einen Webserver an den ich diverse Module über I2C anklemme. Ich möchte dann auf einer Webseite "Hinzufügen" auf dem Server über eine Combobox "Schalter, 3Kanal" auswählen, die Adresse eingeben und "hinzufügen" drücken. Dann ist das Modul Einsatzbereit. Auf einer Seite "Vorhandene" Module ist eine Liste mit den einzelnen Modulen zu sehen. Wähle ich eines an sehe ich die Optionen dafür (Bei Schalter, 3 Kanal entsprechend 3 mal Checkbox für An/Aus) oder ich hab in der Tabelle jeweils eine Spalte für die entsprechenden Optionen.
Dynamisch halt.

Die Codeschnipsel oben sind von dem Webserver Versuch der für dieses Semester angesetzt war der aber Zeitmäsig nich hingehauen hat. Die Codeteile sind von Ulrich Radig - sein Name steht oben im Kopf.

Erfahrung? Temperatursensor auslese über I2C und senden der Daten über USART (RS232), Verwendung und Programmierung eines Ringpuffers, anschliesen eines externen RAMs über XMEM.
 
Ich hatte mal einen Apache am laufen und einen Linux Server - ist aber ohne belang wenn ich einen Embedded ATmega Webserver laufen lassen möchte.
Es wäre aber doch von Belang wenn man das "ATmega" weglassen würde.

Was ich aber eigentlich wissen wollte ist ob mit dem Prinzip des CGI vertraut bist.(selber mal eine kleine Anwendung geschrieben hast) Damit liesen sich solche Dinge auf kleinen Linux-Systemen (z.b.NGW100) relativ einfach realisieren.





Ich will einen Webserver an den ich diverse Module über I2C anklemme. Ich möchte dann auf einer Webseite "Hinzufügen" auf dem Server über eine Combobox "Schalter, 3Kanal" auswählen, die Adresse eingeben und "hinzufügen" drücken. Dann ist das Modul Einsatzbereit. Auf einer Seite "Vorhandene" Module ist eine Liste mit den einzelnen Modulen zu sehen. Wähle ich eines an sehe ich die Optionen dafür (Bei Schalter, 3 Kanal entsprechend 3 mal Checkbox für An/Aus) oder ich hab in der Tabelle jeweils eine Spalte für die entsprechenden Optionen.
Dynamisch halt.
Gut, Jetzt hab ichs kapiert.

Das mit dem Dynamisch ist seltsam, ich hab mir den Ulrich Radig Code jetzt zehn Minuten lang angesehen und sehe (noch)keinen Ansatz wie man da dynamische Webseiten reinbekommt. Ich meine wenn irgendwo ganz klar ersichtlich wäre, welche Funktion auf Anfrage eine Webseite(Antwort-Paket) erzeugt und wie man die (Formular-)Daten die über GET oder POST kommen ausliest, wäre es einfach. So fällt mir nur ein kleines Linux-System ein.

Die Codeschnipsel oben sind von dem Webserver Versuch der für dieses Semester angesetzt war der aber Zeitmäsig nich hingehauen hat. Die Codeteile sind von Ulrich Radig - sein Name steht oben im Kopf.
Den Verweis zu Ulrich Radig finde ich aber in keinem deiner Posts.

Ich reiche das Thema an Leute weiter die soetwas mal mit einem AVR durchgezogen haben.
 
Code:
/*----------------------------------------------------------------------------
 Copyright:      Radig Ulrich  mailto: mail@ulrichradig.de
 Author:         Radig Ulrich
 Remarks:        
 known Problems: none
 Version:        24.10.2007
 Description:    Webserver Applikation

 Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 
 GNU General Public License, wie von der Free Software Foundation veröffentlicht, 
 weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder 
 (nach Ihrer Option) jeder späteren Version. 

 Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, 
 daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, 
 sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT 
 FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. 

 Sie sollten eine Kopie der GNU General Public License zusammen mit diesem 
 Programm erhalten haben. 
 Falls nicht, schreiben Sie an die Free Software Foundation, 
 Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. 
------------------------------------------------------------------------------*/
#include "httpd.h"
#include "webpage.h"
#include "lcd.h"
#include "ntp.h"

struct http_table http_entry[MAX_TCP_ENTRY];

//Hier wird das codierte Passwort aus config.h gespeichert.
unsigned char http_auth_passwort[30];

unsigned char post_in[5] = {'O','U','T','='};
unsigned char post_ready[5] = {'S','U','B','='};
unsigned char PORT_tmp = 0;
char dstr[24]={"No Time...             "};

Du hast den Ulrich nich gefunden weil ich nur den relevanten Teil gepostet hab ;)


Naja, der vom Ulrich is nich dynamisch. Sonst könnte ich ja einfach seine Software nehmen und gut ist ;)

Socket Programmierung (TCP und UDP Zugriff auf Time Server) hab ich unter Linux schon programmiert,ja.

Meinst du mit Linux und Apache einen Webserver mit Linux und 32Bit Prozessor? Wäre natürlich eine alternative aber etwas heavy ....
 
Du hast den Ulrich nich gefunden weil ich nur den relevanten Teil gepostet hab ;)
Achso.

Naja, der vom Ulrich is nich dynamisch. Sonst könnte ich ja einfach seine Software nehmen und gut ist ;)
Naja wenn du dir den Code etwas länger anschaust findest du sicher eine Möglichkeit das ganze etwas dynamischer zu machen. (mir fehlt dazu der Nerv)

Socket Programmierung (TCP und UDP Zugriff auf Time Server) hab ich unter Linux schon programmiert,ja.
Ich meinte speziell das Common Gateway Interface, das ist etwas anderes. Schau mal bei Wikipedia nach. Ist im Grunde wie eine EXE-Datei deren Ausgaben nicht in einer Konsole erscheinen sondern als HTML-Dokument angezeigt werden. Die Daten, die über Formulare(GET oder POST) reinkommen sind dabei auch leicht verfügbar. Dazu muss man nichts über Sockets oder ähnliches wissen.

Meinst du mit Linux und Apache einen Webserver mit Linux und 32Bit Prozessor? Wäre natürlich eine alternative aber etwas heavy ....
Genau das mein ich. So heavy ist das gar nicht. Der Webserver ist schnell konfiguriert. Und über ein paar Printfs ein bisschen HTML auszugeben schafft man auch leicht.
Die ausführbaren Dateien die über das CGI aufgerufen werden werden laufen leider nicht ewig(erst wenn die wieder beendet sind wird die Paket versandt). Das heißt: Jedes mal wenn eine Anfrage an den Server kommt und dieser die entsprechende Executable aufruft müsste diese, von einem ständig laufendem Prozess der die Hardware(I2C) verwaltet, Daten anfordern bzw. diesen mit Daten füttern. Ürigens braucht das NGW100 glaub ich nur etwa 2 Watt.
 
Hallo zusammen,

ich hab zwar auf nem AVR noch keinen Webserver zum laufen gebracht aber
dafür unter Linux mit Apaache schon genügend CGIs mit Perl oder PHP oder
Bash zusammengebastelt.

Ich habe folgende Befürchtung ... Mit den dynamischen Webseiten bringst du
den ATmega32 zum platzen ;) Der Speicher von der kleinen Büchse wird für
die dynamischen Strukturen die du da anlegen willst bei weiten nicht
ausreichen. Ich würde mindestens auf nen ATmega128 hochgehen und ihm
evtl sogar noch ein externes EEPROM oder sogar externes SRAM spendieren
wo die Datenbank mit den konfigurierten I2C-Devices und den zugehörigen
Daten drinliegen.Je nach I2C-Gerätetyp (Dimmer, Temperatursensor, ...)
benötigst Du andere HTML-Seiten und die mußt du auch noch an
verschiedene sich verändernde (je nach Konfiguration) I2C-Adressen koppeln.
Das ist für nen kleinen Mikrokontroller ne ganze Menge an Daten.

Gruß
Dino
 
Hallo zusammen,

ich hab zwar auf nem AVR noch keinen Webserver zum laufen gebracht aber
dafür unter Linux mit Apaache schon genügend CGIs mit Perl oder PHP oder
Bash zusammengebastelt.

Ich habe folgende Befürchtung ... Mit den dynamischen Webseiten bringst du
den ATmega32 zum platzen ;) Der Speicher von der kleinen Büchse wird für
die dynamischen Strukturen die du da anlegen willst bei weiten nicht
ausreichen. Ich würde mindestens auf nen ATmega128 hochgehen und ihm
evtl sogar noch ein externes EEPROM oder sogar externes SRAM spendieren
wo die Datenbank mit den konfigurierten I2C-Devices und den zugehörigen
Daten drinliegen.Je nach I2C-Gerätetyp (Dimmer, Temperatursensor, ...)
benötigst Du andere HTML-Seiten und die mußt du auch noch an
verschiedene sich verändernde (je nach Konfiguration) I2C-Adressen koppeln.
Das ist für nen kleinen Mikrokontroller ne ganze Menge an Daten.

Gruß
Dino

Das ist mal eine Aussage. Naja mit externem Speicher hab ich so oder so gerechnet. Gibts ja hübschen von Atmel mit SPI Schnittstelle wo man schnell 8, 16, 24MB zusammen hat.

Mit heavy meinte ich eigentlich auch nur das 32Bit Prozessoren mit Linux drauf wohl viel zu viel für so ein Gateway sind.Das hat ja auser der Webseitendarstellung nix zu tun. Aber wenn die Website blöd zu bauen ist und eigentlich nur über Linux dann is das ja eh doof...

Hm ... ich hatte befürchtet das das schwer bis unmöglich wird^^
 
Hallo,

Du kannst eigentlich im Flash nur Vorlagen für jeden Typ den man an die I2C
anschließen könnte anlegen und mußt dann im EEPROM ne Tabelle anlegen
an welcher I2C-Adresse welcher Typ angeschlossen ist. Diese Tabelle wird dann
über die Konfigurations-Website angelegt und geändert. Aus diesen Daten
mußt du dann Die Webseite im SRAM dynamisch zusammenbauen und senden.
So stell ich mir das ungefähr vor.

Gruß
Dino
 
Ich hätte eine Verkettete Liste verwendet und in diese die einzelnen structs der Module angehängt. Und das ganze dann zB in externen Flash.

Laut dem Ulrich Radig Forum ist es wohl möglich den Inhalt er Seiten zu verändern, so auch Tabellen zu vergrößern.
 
Hallo,

Ich hätte eine Verkettete Liste verwendet und in diese die einzelnen structs der Module angehängt. Und das ganze dann zB in externen Flash.
da hat wohl jeder so seine eigenen Methoden ;-) Mach es so wie es dir am
besten liegt und mit der Methode, die dich am besten zum Ziel führt.

Laut dem Ulrich Radig Forum ist es wohl möglich den Inhalt er Seiten zu verändern, so auch Tabellen zu vergrößern.
Wie gesagt. Ich hab zwar schon genug mit dem Apache gebastelt aber bei
den embedded Webservern hab ich noch keine Erfahrung. Das war jetzt nur
nen Ablauf wie man es machen könnte.

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)