Forum: Mikrocontroller und Digitale Elektronik Webservice auf einem Mikrocontroller


von S. H. (sheuser)


Lesenswert?

Hi,

hat jemand schonmal probiert, einen Webservice auf einem Mikrocontroller 
laufen zu lassen? Also komplett mit XML-RPC oder SOAP und evtl. sogar 
Registrierung beim Broker... als Hardware wollte ich einen Atmega 644 
auf dem Board von Ullrich Radig verwenden.

Ist das Overkill oder machbar, und auch halbwegs flott?

Zum Hintergrund: ich will die I/O Pins des Atmegas über das Netzwerk 
steuern. Letztendlich soll es darauf hinauslaufen, das ich 
beispielsweise alle Lampen im Zimmer vom Rechner aus der Ferne schalten 
kann. Um das ganze dynamisch erweitern zu können bräuchte ich nen 
Webservice auf jedem Atmega. So nach dem Motto ich hänge einen zweiten 
Atmega in das Netzwerk, der irgendwas steuert, und der meldet dann 
selbstständig den Webservice zum Steuern beim Broker an. Der Broker 
selbst läuft auf einem Via Epia Board. Der Broker wiederrum generiert 
aus der WSDL die GUI (mittels SWT oder wiederrum einem Webserver) zum 
schalten, das ganze passiert in Java.

: Gesperrt durch User
von Εrnst B. (ernst)


Lesenswert?

SOAP wird etwas haarig, wegen dem nötigen XML-Parser incl. XML-Namespace 
Support...
Evtl kann man etwas tricksen, und statt nem XML-Parser ne handvoll 
Regexp verwenden... Schön ist das dann aber nichtmehr.
Ich würd eher ein kleines eigenes Protokoll für die einzelnen Devices 
nehmen, und die Umsetzung auf einen Webservice zentral machen.
Registrierung neuer Devices könnte man am DHCP-Server abziehen, wenn die 
sich dort eine IP holen.

von Rik (Gast)


Lesenswert?

Hallo,

die Idee ist nachvollziehbar. Ist natuerlich totaler Overkill um ein 
paar Lampen zu steuern, quasi mit Wasserstoffbomben auf Spatzen 
geschossen, aber einen Aspekt finde ich interessant: Ist es moeglich 
(bzw. gibt es das schon?) einen Xml-Parser auf einem AVR zu 
implementieren. Also: Na klar, wenn man genug RAM dran haengt und 
Rechenzeit egal ist, dann natuerlich. Aber ich meinte eine brauchbare 
Loesung. Stephan, wenn du dich sowieso gerade mit dem Thema befasst, 
dann untersuch das doch mal. Wuerde mich wirklich interessieren.

Gruss!
Rik

von Εrnst B. (ernst)


Lesenswert?

Einen DOM-Parser kann man wohl vergessen, wg. der nötigen dynamischen 
Speicherverwaltung.

Ein abgespeckter SAX-Parser könnte jedoch passen, hätte auch den Vorteil 
dass man nie das gesamte Dokument im Ram braucht, weder den Source noch 
den Parse-Tree. Man könnte also Stückchenweise, wie die TCP-Pakete 
kommen, parsen.

Auswertung dann über State-Machine an den SAX-Callbacks, die sich die 
nötigen Werte in Variablen rauszieht...

von Simon K. (simon) Benutzerseite


Lesenswert?

Ja, für ein paar Lampen schalten ist ein XML Webservice definitiv 
absoluter Overkill. Hierfür würde ich eher vorschlagen ein eigenes 
Protokoll basierend auf UDP zu verwenden und auf dem Mikrocontroller 
einen UDP-Server laufen zu lassen, der die empfangenen Daten analysiert 
und dementsprechend die Ausgänge schaltet. Alternativ kann man das aber 
auch per HTTP-POST machen.

Bei meinem Webserver:
Beitrag "ENC28J60 (Mikro-)Web-Server die Nächste"

wird beim Klick auf den Absenden Button der Beispielapplikation ein 
HTTP-POST Request vom Browser losgeschickt der die Ausgänge setzt. Sowas 
lässt sich auch sehr leicht mit curl (Kommandozeile) machen.
http://curl.haxx.se/

von S. H. (sheuser)


Lesenswert?

Mir ist klar das es für ein paar Lämpchen übertrieben ist... es geht 
darum, eine Proof-of-Concept Implementierung zu bauen. Es soll also 
wirklich ein Webservice laufen, alles andere wäre zu trivial...

Ich hab ein Paper gefunden zu dem Thema, aber hier gehts (nur) um SOAP:

http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel5/9203/29178/01316691.pdf?arnumber=1316691

sobald ich durch bin werde ich mal eine Zusammenfassung posten.

@Ernst: Ich stimme zu, ein SAX Parser sollte machbar sein.

@Simon: Ich werd mir deinen Webserver mal genauer anschaun, grade das 
uip bei dir läuft gefällt mir :)

von Rik (Gast)


Lesenswert?

> es geht darum, eine Proof-of-Concept Implementierung zu bauen

Pioniergeist finde ich gut!

Wenn du das mit einem AVR hinbekommst, dann ziehe ich meine saemtlichen 
Huete vor dir :-) Mit etwas groesseren Mikrocontrollern (waren glaube 
ich 16-Bitter von Fujitsu) hab ich soetwas schonmal in einer 
Dissertation gesehen.

von S. H. (sheuser)


Lesenswert?

Rik wrote:
>> es geht darum, eine Proof-of-Concept Implementierung zu bauen
>
> Pioniergeist finde ich gut!
>
> Wenn du das mit einem AVR hinbekommst, dann ziehe ich meine saemtlichen
> Huete vor dir :-) Mit etwas groesseren Mikrocontrollern (waren glaube
> ich 16-Bitter von Fujitsu) hab ich soetwas schonmal in einer
> Dissertation gesehen.

Hast du die Dissertation zufällig noch irgendwo? Bisher habe ich nur mit 
den Atmegas gearbeitet, aber das wäre schonmal ein Anfang.

von Simon K. (simon) Benutzerseite


Lesenswert?

Stephan Heuser wrote:
> Mir ist klar das es für ein paar Lämpchen übertrieben ist... es geht
> darum, eine Proof-of-Concept Implementierung zu bauen. Es soll also
> wirklich ein Webservice laufen, alles andere wäre zu trivial...

Sag das doch gleich! Würde mich auch mal interessieren ob so etwas mit 
dem AVR möglich ist. :-)

von S. H. (sheuser)


Lesenswert?

Ich hab jetzt zwei Papers überflogen, die beide der Meinung sind, es 
wäre so nicht sinnvoll.

Beide argumentieren mit der Komplexität. Die einen schlagen ein Gateway 
vor, das zischen SOAP und beispielsweise CAN Bus übersetzt. Die 
Mikrocontroller kommen dann an den CAN Bus.

Die anderen definieren ein XML-Unterformat und parsen das mit Regular 
Expressions. Letztendlich steht wieder irgendwo ein Rechner, der die 
WSDL entsprechend erzeugt und die Registrierung am Broker für den 
Mikrocontroller vornimmt.

Edit: XML parsen mit Regular Expressions: 
http://www.cs.sfu.ca/~cameron/REX.html

von Rik (Gast)


Lesenswert?

Hi!

Ich finde den Titel der Arbeit leider nicht mehr. :-/

Zur Frage der *Sinnhaftigkeit*: Es ist doch wohl eher eine Frage der 
Zeit, bis die Geraete, die heute noch ueber alle moeglichen 
verschiedenen Kommunikationssysteme verbunden sind, sich alle ins Web 
eingliedern werden. Die Protokolle der Computernetze finden immer 
weiteren Einzg in kleine Mikrocontrollersysteme. Das sieht man doch 
schon hier im Forum: Mit einem 8-Bitter und einem einzigen weiteren 
hochintegrierten IC kann sich jeder seinen eigenen Webserver basteln. 
Guck mal in die Industrie: Werkzeugmaschinen und Roboter haben schon 
alle LAN und falls es die Umgebung irgendwie zulaesst sogar WLAN 
(Siemens bietet ihr "industrielles WLAN" jetzt sogar mit 
Verschluesselung an g )

Wegen "Verwendung von XML-Untermengen": Meiner Meinung nach ein fauler 
Kompromiss. Der Sinn von Standards ist, dass jeder mit jedem kann. So 
braucht man dann doch wieder einen Protokolluebersetzer dazwischen.

von 3356 (Gast)


Lesenswert?

Ich hab kuerzlich einen Webserver geschrieben, der hat Seiten abgespult 
und inline-skripte ausgefuehrt. Ab einem Mega32 mit serieller Anbindung.

von S. H. (sheuser)


Lesenswert?

Rik wrote:
> Zur Frage der *Sinnhaftigkeit*: Es ist doch wohl eher eine Frage der
> Zeit, bis die Geraete, die heute noch ueber alle moeglichen
> verschiedenen Kommunikationssysteme verbunden sind, sich alle ins Web
> eingliedern werden. Die Protokolle der Computernetze finden immer
> weiteren Einzg in kleine Mikrocontrollersysteme. Das sieht man doch
> schon hier im Forum: Mit einem 8-Bitter und einem einzigen weiteren
> hochintegrierten IC kann sich jeder seinen eigenen Webserver basteln.
> Guck mal in die Industrie: Werkzeugmaschinen und Roboter haben schon
> alle LAN und falls es die Umgebung irgendwie zulaesst sogar WLAN
> (Siemens bietet ihr "industrielles WLAN" jetzt sogar mit
> Verschluesselung an g )

Ich stimme voll zu.

>
> Wegen "Verwendung von XML-Untermengen": Meiner Meinung nach ein fauler
> Kompromiss. Der Sinn von Standards ist, dass jeder mit jedem kann. So
> braucht man dann doch wieder einen Protokolluebersetzer dazwischen.

Die Frage ist letztendlich, ob es machbar ist und schnell genug auf 
einem "kleinen" Atmega laufen wird. Spätestens wenn die Kommunikation 
gesichert werden soll kommt man eh an die Grenzen denke ich. Insofern 
würde ich als Selbstbastel-Insellösung, die dann auch auf einem Atmega 
laufen soll fast, zu der abgespeckten-XML Variante tendieren. Ein 
Rechner läuft eh als Broker, der könnte dann auch die Registrierung der 
Nodes übernehmen. Und die Kommunikation per SOAP würde dann nach außen 
auch korrekt funktionieren, da die Requests und Replies ja SOAP 
entsprechen.

Wenn man an das große Ganze denkt ist das natürlich nicht so richtig 
top.

von Rik (Gast)


Lesenswert?

>Die Frage ist letztendlich, ob es machbar ist und schnell genug auf
einem "kleinen" Atmega laufen wird. Spätestens wenn die Kommunikation
gesichert werden soll kommt man eh an die Grenzen denke ich.

Ja das stimmt. Ich habe einen Webserver fuer Steuerungsaufgaben in der 
Gebauedeautomation mit einem ATmega32 gebaut. Dazu habe ich auch ein 
kryptographisches Protokoll entworfen und implementiert. Das Protokoll 
verwendet den Data Encryption Standard. Fuer kurze Befehlssequenzen von 
einigen Bytes reicht der Durchsatz von Verschluesselung und 
Protokollhandshakes gerade noch so. Aber wenn ich mir vorstelle, dass 
der AVR "nebenbei" noch eine XML-Datei in einen Baum parsen soll 
(fehlendes RAM einmal ignoriert)... Fuer solche Aufgaben sind, um bei 
Atmel zu bleiben, wohl AT91SAM7XC512'er besser geeignet.

von 3356 (Gast)


Lesenswert?

Die Datenpackete in einer Gebaeudeautomation sind verschluesselt ? 
Interessant. Und der Nutzen davon ? Das Bastler nicht daran rummachen 
koennen ?

von Rik (Gast)


Lesenswert?

> Die Datenpackete in einer Gebaeudeautomation sind verschluesselt ?
Interessant. Und der Nutzen davon ? Das Bastler nicht daran rummachen
koennen ?

Naja, "Bastler" im weitesten Sinne. Mein System verwendet als 
Kommunikationssystem die in einem Gebaeude bereits vorhandene 
LAN-Infrastruktur. "Gebaeude" sind dabei nicht nur Wohn- sondern auch 
Nutzbauten. Du hast also ein Netzwerk mit potentiell einigen hundert 
Usern, die alle mit einem PC im selben Netz haengen wie das 
Automationssystem. Die Versuchung beim verhassten Kollegen im Buero 
nebenan die Klimaanlage voll aufzudrehen ist da gross ;-)

von noname (Gast)


Lesenswert?


von Purzel H. (hacky)


Lesenswert?

Also ich hab's schon mal gemacht. Dh einen HTML Server mit AJAX drauf. 
Das war's dann etwa. Mehr wuerd ich overkill betrachten.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Stephan Heuser schrieb:
> Ist das Overkill oder machbar, und auch halbwegs flott?

Prinzipiell ist das auch nicht "schwieriger" als eine HTML Seite 
auszuliefern, solange du auf alzu strickte Prüfungen und ein einfaches 
Dokumentenmodell setzt ist der Parser auch nicht weiter tragisch.

von MarioT (Gast)


Lesenswert?

Stephan Heuser schrieb:
Datum: 03.06.2008 22:26

von Frank K. (fchk)


Lesenswert?

Stephan Heuser schrieb:
> Ich hab jetzt zwei Papers überflogen, die beide der Meinung sind, es
> wäre so nicht sinnvoll.
>
> Beide argumentieren mit der Komplexität. Die einen schlagen ein Gateway
> vor, das zischen SOAP und beispielsweise CAN Bus übersetzt. Die
> Mikrocontroller kommen dann an den CAN Bus.
>
> Die anderen definieren ein XML-Unterformat und parsen das mit Regular
> Expressions. Letztendlich steht wieder irgendwo ein Rechner, der die
> WSDL entsprechend erzeugt und die Registrierung am Broker für den
> Mikrocontroller vornimmt.

Von den Kosten her ist es fast egal, ob Du Dich auf einem Mega644 
abmühst oder zwei Nummern größer beispielsweise auf einem PIC32MX695 
einsteigst. Ein Mgea644p kostet bei Farnell 8.32€, ein PIC32MX695H 
kostet 11.32€ und ist um Zehnerpotenzen leistungsfähiger.

Also: Was soll der Geiz?

fchk

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.