Forum: PC-Programmierung Entwicklung WebUI für embedded device


von Intensio (Gast)


Lesenswert?

Hallo zusammen,

ich hoffe mal, dass ich mit meiner Frage hier richtig bin. Ich soll 
zusammen mit einem Kollegen für eine embedded Device ein WebUI 
erstellen. Dieses dient zum Konfigurieren des Systems und zum 
visualisieren von Daten. Man kann sich das so wie bei seinem Router 
zuhause vorstellen.

Leider habe ich nicht wirklich Erfahrung mit der Thematik. Aufgrund der 
geringen Leistung das ARM Prozessors und des geringen Speichers (ca. 20 
MB) der uns zugewiesen wurde stellt sich für mich die Frage, welche 
Technologie man hier sinnvollerweise einsetzen kann.

Nach ein wenig Recherche stehen für mich folgende Optionen zur Auswahl:

- Webserver (lighttpd oder nginx) + PHP ( MVC Framework z.B. phalconphp)
- Python und Django
- Ruby on Rails
- LUA

Gibt es hier einen De-facto-Standard? Mit welcher Kombination hat ihr 
die Besten Erfahrungen gemacht?

von Arc N. (arc)


Lesenswert?

Intensio schrieb:
> Leider habe ich nicht wirklich Erfahrung mit der Thematik. Aufgrund der
> geringen Leistung das ARM Prozessors und des geringen Speichers (ca. 20
> MB) der uns zugewiesen wurde stellt sich für mich die Frage, welche
> Technologie man hier sinnvollerweise einsetzen kann.

Geringer Speicher? WebBrowser und Server (und dynamische Inhalte) gab's 
schon zu einer Zeit als 8 MB viel Hauptspeicher waren...

> Nach ein wenig Recherche stehen für mich folgende Optionen zur Auswahl:
>
> - Webserver (lighttpd oder nginx) + PHP ( MVC Framework z.B. phalconphp)
> - Python und Django
> - Ruby on Rails
> - LUA

Auf dem Gerät oder läuft da schon Linux oder etwas ähnliches?

> Gibt es hier einen De-facto-Standard? Mit welcher Kombination hat ihr
> die Besten Erfahrungen gemacht?

Was spricht gegen einen TCP/IP + HTTP-Stack und etwas CGI auf dem Gerät?

von Hans Ulli K. (Gast)


Lesenswert?

Intensio schrieb:
> Leider habe ich nicht wirklich Erfahrung mit der Thematik. Aufgrund der
> geringen Leistung das ARM Prozessors und des geringen Speichers (ca. 20
> MB) der uns zugewiesen wurde stellt sich für mich die Frage, welche
> Technologie man hier sinnvollerweise einsetzen kann.
>

schau dir mal das WebGUI (LuCI)von OpenWRT an.

Das basiert auf LUA und hat ein MVC Framework.
Es gibt sowas wie ein CGI Modul für Lua nennt sich Haserl

http://haserl.sourceforge.net/

<quote>
Features

    Small: The haserl binary typically compiles to less than 20KB 
(stripped). The lua language adds less than 150K if linked in 
statically.

    Parses like other scripting languages: Anything that is not enclosed 
in <% ... %> tags is sent verbatim to the client.

    Automatic FORM parsing: Form elements sent from the client are 
automatically parsed and placed into environment variables. The script 
can then reference the variables without any extra work. For lua 
scripts, the elements are placed in a global FORM[] table.

    multipart/form-data decoding: Mime data sent via the 
enctype="multipart/form-data" method is transparently decoded. This 
method is used when uploading files from the client.

    Privilege Escalation: On Linux, if haserl is installed suid root, 
then it will attempt to drop its privilege to the uid/gid of the owner 
of the cgi script. This is similar to suexec in Apache.
</quote>

von Borislav B. (boris_b)


Lesenswert?

Das schreit doch förmlich nach einem Node.js Webserver :-)

Der ist wirklich leicht zu implementieren, und dank Socket.io hat man 
sogar direkte Kommunikation zwischen Client und Server. D.h. man kann 
die Zustände des Systems in Echtzeit auf der Website anzeigen. Andersum 
können Steuerelemente auf der Website direkt Funktionen auf dem Server 
aufrufen. Hier könnte man dann auf tiefere Schichten (und so die HW) 
zugreifen.

PS: Mit jQuery Mobile kann man dann sehr leicht auch richtig schöne UIs 
zaubern, insbesondere für Smartphones und Tablets.

: Bearbeitet durch User
von Ralf Jahns (Gast)


Lesenswert?

Der mongoose Webserver http://code.google.com/p/mongoose/ ist genau für 
diesen Zweck gemacht.

Er ist klein (64 kB executeable), besteht nur aus einer C-Datei (ohne 
Abhängigkeiten) und kann leicht in eigene Programme "embedded" werden.

Hier noch die feature-Liste von der Homepage:

Works on Windows, Mac, UNIX, iPhone, Android, and many other platforms
Support for CGI, SSL, SSI, Digest (MD5) authorization, Websocket, WEbDAV
Lua server pages (PHP-like functionality using Lua) with SQLite3
Resumed download, URL rewrite, IP-based ACL, Windows service
Excluding files from serving by URI pattern (file blacklist)
Download speed limit based on client subnet or URI pattern
Small footprint: Mongoose executable size is 64 kB on Linux 2.6 i386 
system
320 kilobytes Windows executable with all of the above (including SSL, 
Lua, Sqlite) and no dependencies
Simple and clean embedding API, mongoose.h. The source is in single 
mongoose.c file to make things easy.
HTTP client functionality for embedded usage, capable of sending 
arbitrary HTTP/HTTPS requests

von Borislav B. (boris_b)


Lesenswert?

Ralf Jahns schrieb:
> Der mongoose Webserver http://code.google.com/p/mongoose/ ist genau für
> diesen Zweck gemacht.

Würde man damit den denn auch eine bidirektionale Kommunikation zwischen 
Server und Client hinbekommen? Mit Node.js ist das ja ganz einfach, aber 
was wäre hier der Ansatz?

Ich arbeite nämlich auch gerade an so einem Projekt, und fände dass das 
ein cooles Feature wäre. Leider habe ich von Webservern noch nicht so 
viel Ahnung ;-)

von Arc N. (arc)


Lesenswert?

Boris B. schrieb:
> Würde man damit den denn auch eine bidirektionale Kommunikation zwischen
> Server und Client hinbekommen? Mit Node.js ist das ja ganz einfach, aber
> was wäre hier der Ansatz?

Ja, Mongoose kann CGI und div. HTTP-Methoden GET, POST, PUT usw. und 
damit auch Ajax etc.

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
Noch kein Account? Hier anmelden.