OT: Embedded Webserver Datenvisualisierung

J

Johannes Schöller

Guest
Hallo,
Vorerst Entschuldigung für das OT-Posting, aber vielleicht hatte
schon mal jemand hier ein ähnliches Problem und kann mir weiterhelfen.

Ich habe hier ein Embedded Ethernet (W3100A+C167) auf dem ich einen
Webserver laufen lassen möchte welcher Daten auf einer Website periodisch
aktualisieren soll, also zum Beispiel ein Graph der alle 500ms aktualisiert
wird.

Da ich leider von Webprogrammierung keine Ahnung habe wollte ich hier
einmal nachfragen wie sowas grundsätzlich realisiert wird. Einen ganz
einfachen Webserver habe ich mal schnell geschrieben (man kann eine LED auf
dem uControllerboard über Radiobuttons im Browser ein und aussschalten),
man muss aber, um die angezeigten Daten zu aktualisieren immer die Seite neu
laden.

Meine Idee wäre es nun ein Java-Applet zu schreiben welches an den Webserver
periodisch HTML-GET Kommandos schickt, dieser Antwortet dann mit den Daten
und das Java-Applet visualisiert sie dann.
Meine Frage also: kann man das so machen bzw. ist es überhaupt sinnvoll, und
wie macht man das "professionell"?
Wichtig wäre dass das ganze halbwegs klein ist, es sollte alles
ins RAM des C167 passen.

Vielen Dank schon mal,
MfG,
Johannes
 
Hallo Johannes,

schau mal folgenden Tag an:
http://de.selfhtml.org/html/kopfdaten/meta.htm#weiterleitung
Mit diesem Tag müsstest du die HTML-Seite so konfigurieren könne, dass
sie sich selber z.B. alle 5 Sekunden neu lädt.
500ms finde ich aber extrem schnell, ich glaube nicht dass ein so
schneller Refresh viel bringt. Ich würde eher die Seite z.B. alle 5
Sekunden neu laden dann aber (falls nötig) die Messergebnisse in 500ms
Abschnitten anzeigen.

Gruß, Florian
 
Johannes Schöller <johannes_schoeller@aon.at> wrote:

Meine Idee wäre es nun ein Java-Applet zu schreiben welches an den Webserver
periodisch HTML-GET Kommandos schickt
Das ist kein HTML.
Ansonsten Florians Antwort oder in den HTML-NGs.

Gruß,
Nick
--
Motor Modelle // Engine Models
http://www.motor-manufaktur.de
 
Johannes Schöller wrote:
Da ich leider von Webprogrammierung keine Ahnung habe wollte ich hier
einmal nachfragen wie sowas grundsätzlich realisiert wird. Einen ganz
einfachen Webserver habe ich mal schnell geschrieben (man kann eine LED auf
dem uControllerboard über Radiobuttons im Browser ein und aussschalten),
man muss aber, um die angezeigten Daten zu aktualisieren immer die Seite neu
laden.
Vielleicht reicht dir sogar schon ein Refresh-Meta-Tag?

Meine Idee wäre es nun ein Java-Applet zu schreiben welches an den Webserver
periodisch HTML-GET Kommandos schickt, dieser Antwortet dann mit den Daten
und das Java-Applet visualisiert sie dann.
Meine Frage also: kann man das so machen bzw. ist es überhaupt sinnvoll, und
wie macht man das "professionell"?
Wichtig wäre dass das ganze halbwegs klein ist, es sollte alles
ins RAM des C167 passen.
Wenn du eh schon Java verwendest, würde ich nicht pollen. Stattdessen
einen Socket aufmachen (ist in Java ein Klacks, wirklcih gut gelöst!)
und dir senden lassen, was an neuen Daten aufgenommen wird.

Gruß,
Johannes
 
Hallo Johannes,

Johannes Schöller wrote:
Ich habe hier ein Embedded Ethernet (W3100A+C167) auf dem ich einen
Webserver laufen lassen möchte welcher Daten auf einer Website periodisch
aktualisieren soll, also zum Beispiel ein Graph der alle 500ms aktualisiert
wird.
Eine Alternative zum periodischen Refresh ist der Server-Push, eben mal
Tante Google gefragt:

http://wp.netscape.com/assist/net_sites/pushpull.html

Habe ich vor vielen Jahren mal gemacht, allerdings nicht im
Embedded-Bereich, sondern auf dem Amiga, aber der ist ja nach heutigen
Maßstäben auch eher nur ein kleines System.

Helge
 
Hallo,
Vielen Dank für eure Antworten.
Die Lösung über den Meta-Tag hört sich ganz gut an, die Server-Push
Methode von Helge hat bei meiner Anwendung den Nachteil dass der Socket
geöffnet bleibt und ich hardwaremäßig nur 4 Sockets zur Verfügung
habe.

Wenn du eh schon Java verwendest, würde ich nicht pollen. Stattdessen
einen Socket aufmachen (ist in Java ein Klacks, wirklcih gut gelöst!)
und dir senden lassen, was an neuen Daten aufgenommen wird.
Für die Visualisierung schnell veränderlicher Daten werde ich es so (über
den extra Socket) machen, für langsamere Sachen der Meta-Tag.

Dankeschön,
MfG,
Johannes
 
Johannes Schöller <johannes_schoeller@aon.at> wrote:

Hallo,
Vorerst Entschuldigung für das OT-Posting, aber vielleicht hatte
schon mal jemand hier ein ähnliches Problem und kann mir weiterhelfen.

Ich habe hier ein Embedded Ethernet (W3100A+C167) auf dem ich einen
Webserver laufen lassen möchte welcher Daten auf einer Website periodisch
aktualisieren soll, also zum Beispiel ein Graph der alle 500ms aktualisiert
wird.
Hallo,

wie komplex ist denn deine Grafik? Wenn es z.B. nur um einfache Grafiken
geht (z.B. Balkendiagramme), kann man einen Prototyp aus wenigen hundert
Zeichen (z.B. in Javascript kodiert) im Controller-Speicher hinterlegen
und bei der http-Auslieferung jeweils nur einige Parameter anhand der
aktuellen Werte modifizieren(z.B. Balkenlänge). Durch entsprechende Tags
im Header erreicht man auch, dass der Browser die Daten selber
aktualisiert ... 500 ms halte ich aber für eine Web-Anwendung für ein
wenig hektisch (ständiger neuer Bildaufbau), 5 Sekunden wären schon eher
angebracht, sonst handelt es sich ja schon fast um Streaming :))

Frank
 
Hallo,
wie komplex ist denn deine Grafik? Wenn es z.B. nur um einfache Grafiken
geht (z.B. Balkendiagramme), kann man einen Prototyp aus wenigen hundert
Vorerst nur ein einfacher Balken oder vielleicht ein Graph (wie die
CPU-Auslastung beim Windows-Taskmanager).

aktualisiert ... 500 ms halte ich aber für eine Web-Anwendung für ein
wenig hektisch (ständiger neuer Bildaufbau), 5 Sekunden wären schon eher
angebracht, sonst handelt es sich ja schon fast um Streaming :))
Für langsame Daten werde ich das auch machen.
Für die schnellen sowie Johannes Bauer vorgeschlagen hatt mit eigenem
Java-Applet welches eine eigene Verbindung aufbaut.
Mein Problem ist halt dass ich auf 4 Sockets begrenzt bin.
Ich könnte das Problem mit mehreren Benutzern dann fein umgehen indem ich
die Daten zB. alle 500ms per UDP-Broadcast versende und das Java-Applet
übernimmt dann die Visualisierung. Mit einer laufenden Nummer im Datenpaket
sollten auch verlorengegangene und in falscher Reihenfolge eintreffende
Pakete erkennbar sein.

MfG,
Johannes
 
On Mon, 17 Oct 2005 14:24:52 +0200, Johannes Schöller wrote:

Wenn du eh schon Java verwendest, würde ich nicht pollen. Stattdessen
einen Socket aufmachen (ist in Java ein Klacks, wirklcih gut gelöst!)
und dir senden lassen, was an neuen Daten aufgenommen wird.

Für die Visualisierung schnell veränderlicher Daten werde ich es so (über
den extra Socket) machen
Wenn ein Client aber ueber einen Proxy-Server auf Deinen Webserver
zugreift (und keine direkte Verbindung moeglich ist) wird das in die Hose
gehen. 'Personal Filewalls' koennten auch ein Problem darstellen.

Wenn du diesen Fall auch beruecksichtigen willst waere vielleicht die HTTP
GET Methode doch sinnvoller. (Vorrausgesetzt man kann im Applet die
Proxy-Konfiguration des Browsers auslesen oder die Daten irgendwie ueber
den Browser holen - kenn mich leider zuwenig mit Java aus)

Ansonsten ist die Applet-Loesung im Allgemeinen schon deswegen nicht
schlecht, weil Du damit die (evtl. rechenintensive) Grafikerstellung auf
den Client verlagerst.


(noch ein) Johannes
 
Hallo Johannes,

Johannes Schöller <johannes_schoeller@aon.at> hatte folgende News
43524ca7$0$12642$3b214f66@tunews.univie.ac.at zu berichten:

Ich habe hier ein Embedded Ethernet (W3100A+C167) auf dem ich
einen Webserver laufen lassen möchte welcher Daten auf einer
Website periodisch aktualisieren soll, also zum Beispiel ein
Graph der alle 500ms aktualisiert wird.
...
Meine Idee wäre es nun ein Java-Applet zu schreiben welches an
den Webserver periodisch HTML-GET Kommandos schickt, dieser
Antwortet dann mit den Daten und das Java-Applet visualisiert sie
dann.
Meine Frage also: kann man das so machen bzw. ist es überhaupt
sinnvoll, und wie macht man das "professionell"?
Wichtig wäre dass das ganze halbwegs klein ist, es sollte alles
ins RAM des C167 passen.
Schau Dir mal AJAX (Asynchronous JavaScript and XML) an. Wir setzen das
schon seit langem erfolgreich ein (auch schon, bevor man dieses schöne
Acronym erfunden hat). Dabei fordert der Browser per Javascript die Daten in
XML-Form an und stellt sie dar. Ggf. mußt Du einen kleinen XML-Parser in den
Webserver integrieren. Dafür gibt es genügend Bibliotheken in div.
Programmiersprachen. Notfalls reicht auch ein einfacher mit lex/yacc
erstellter Parser (so machen wir das, weil viele Bibliotheken aufgrund von
Speichermanagement o. ä. nicht infrage kamen). Das ist aber schnell
zusammengestrickt.

Der Tipp mit dem META REFRESH wird zu einer flackernden Anzeige führen.
Gerade mit hohen Refreshraten (2/s) ist das nicht erträglich.

Und wenn's nur um die Visualisierung der Daten als Balkengrafik geht, reicht
es, das width-Property eines farbigen span-Tags in Abhängigkeit des
anzuzeigenden Werts zu verändern. Dafür braucht man kein Java im Browser
laufen lassen.

Gruß,

Jan
 
ein paar Gedanken:

- wie schaut es mit der Latenz aus?
Latenz egal: evtl. könnte man bei einem Request z.B. die letzten
10 Werte übertragen und der Client macht dann die Animation mit 0.5 s
geringe Latenz: steht ein Windows/Linux Server zur Verfügung? man
könnte dort ein eigenes kleines Proxy-Programm laufen lassen, das
aus deiner Hardware liest und die Daten an viele
Clients weitergibt ...

- wie viele User sollen denn möglich sein? mehr als 3?
für langsame Sachen wäre etwas HTTP konformes praktisch um einen
Standard-Proxy-Server verwenden zu können ... bei schnellen Sachen
wirst du mit nur 4 Sockets evtl. einen eigenen "Proxy" brauchen ...

es gäbe noch ein HTTP Connection Keepalive ... man könnte also alle
0.5 s eine neue Zeile Javascript rüberschieben, die dann im Browser zu
einer veränderten Darstellung führt ...
(ich bin eher ein Fan von Javascript als reinem Java)


bye,
Michael

Johannes Schöller wrote:
Hallo,
Vorerst Entschuldigung für das OT-Posting, aber vielleicht hatte
schon mal jemand hier ein ähnliches Problem und kann mir weiterhelfen.

Ich habe hier ein Embedded Ethernet (W3100A+C167) auf dem ich einen
Webserver laufen lassen möchte welcher Daten auf einer Website periodisch
aktualisieren soll, also zum Beispiel ein Graph der alle 500ms aktualisiert
wird.

Da ich leider von Webprogrammierung keine Ahnung habe wollte ich hier
einmal nachfragen wie sowas grundsätzlich realisiert wird. Einen ganz
einfachen Webserver habe ich mal schnell geschrieben (man kann eine LED auf
dem uControllerboard über Radiobuttons im Browser ein und aussschalten),
man muss aber, um die angezeigten Daten zu aktualisieren immer die Seite neu
laden.

Meine Idee wäre es nun ein Java-Applet zu schreiben welches an den Webserver
periodisch HTML-GET Kommandos schickt, dieser Antwortet dann mit den Daten
und das Java-Applet visualisiert sie dann.
Meine Frage also: kann man das so machen bzw. ist es überhaupt sinnvoll, und
wie macht man das "professionell"?
Wichtig wäre dass das ganze halbwegs klein ist, es sollte alles
ins RAM des C167 passen.

Vielen Dank schon mal,
MfG,
Johannes
 

Welcome to EDABoard.com

Sponsor

Back
Top