OT: Embedded Webserver Datenvisualisierung

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

Reply to
Johannes Schöller
Loading thread data ...

Hallo Johannes,

schau mal folgenden Tag an:

formatting link
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

Reply to
Florian Pfanner

Das ist kein HTML. Ansonsten Florians Antwort oder in den HTML-NGs.

Gruß, Nick

--
Motor Modelle // Engine Models
http://www.motor-manufaktur.de
Reply to
Nick Müller

Vielleicht reicht dir sogar schon ein Refresh-Meta-Tag?

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

Reply to
Johannes Bauer

Eine Alternative zum periodischen Refresh ist der Server-Push, eben mal Tante Google gefragt:

formatting link

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

Reply to
Helge Böhme

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.

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

Reply to
Johannes Schöller

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

Reply to
Frank Esselbach

Hallo,

Vorerst nur ein einfacher Balken oder vielleicht ein Graph (wie die CPU-Auslastung beim Windows-Taskmanager).

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

Reply to
Johannes Schöller

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

Reply to
Johannes Frank

Hallo Johannes,

Johannes Schöller hatte folgende News

43524ca7$0$12642$ snipped-for-privacy@tunews.univie.ac.at zu berichten:

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

Reply to
Jan Bartels

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:

Reply to
Michael Schöberl

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.