mikrocontroller.net

Forum: PC-Programmierung CGI - Grafik erzeugen


Autor: LinuX007 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ihr Lieben!


Ich habe vor, Drehzahldaten eines Drehzahlmessers via CGI im Internet zu 
veröffentlichen. Das heißt, ich übergebe über den Parameter Daten an 
meinen Webserver.
Da ich die Drehzahldaten auf dem Webserver grafisch darstellen will (in 
Form eines Drehzahlmessers eines Autos) tut sich folgende Frage auf:

Wie kann ich mit HTML ein Bild abhängig von übergebenen Parametern 
"animieren". Einfach mehrere Bilder nehmen, die je nach Ereignis (je 
nach Drehzahl/min) veröffentlicht wird?

Es sollte schon etwas professioneller aussehen und nicht wie eine 0-8-15 
HTML-Seite ;)

Falls ich etwas finde, was meinen Vorstellungen entspricht, poste ich es 
hier.


Vielen Dank!

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm, ich würde das vlt. nicht als Grafik machen, sondern via 
javascript, da gibts im netz ein paar nette beispiele für Uhren. Die 
Daten holst du dir dann via AJAX von einem Server.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sofern es nicht mit jedem auch steinalten Browser funktionieren muss, 
könntest Du Dir mal SVG ansehen. Dazu solltest Du eine Technik anwenden, 
die geänderte Daten (in Deinem Fall also wohl die Drehzahl) ohne 
Neuladen der Seite zu aktualisieren - das Stichwort hierfür lautet Ajax.

Das allerdings setzt eine clientseitige Skriptsprache voraus, hier 
bietet sich Javascript an, denn das unterstützt so gut wie jeder 
Browser.

Autor: LinuX007 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun ich weiß jetzt nicht genau was Ajax ist. Die Daten zum Server 
übermitteln, erfolgt aber trotz Verwendung von Ajax via CGI oder?

Autor: LinuX007 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das SVG liest sich gut, das heißt ,ich könnte mit einem 
SVG-Unterstützenden Programm eine Grafik erstellen, die wird dann von 
dem SVG-unterstützendem Programm in einen Quelltext (XML).

Per CGI (Programmiersprache C) wird eine Hystere erzeugt, in der geprüft 
wird, in welcher Größe die Parameter an den Server übergeben werden. 
Sprich, ist Drehzahl zwischen 0-100, dann zeige SVG-Skript1, ist 
drehzahl höher, dann zeige SVG-Skript2 usw usw. Das heißt, ich müsste 
das SVG-Skript in CGI integrieren?!


Danke!

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LinuX007 wrote:
> Nun ich weiß jetzt nicht genau was Ajax ist. Die Daten zum Server
> übermitteln, erfolgt aber trotz Verwendung von Ajax via CGI oder?

Nicht zwingend, du kannst auch einfach periodisch eine Datei ablegen die 
die Daten vorhält.

AJAX ist einfach nur ein Modebegriff, das ganze basiert darauf das im 
"Hintergrund" ein Javascript immer wieder Daten läd (in deinem Fall 
einfach nur die Datei) und die Seite entsprechend anpasst.

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LinuX007 wrote:

> Per CGI (Programmiersprache C) wird eine Hystere erzeugt, in der geprüft
> wird, in welcher Größe die Parameter an den Server übergeben werden.
> Sprich, ist Drehzahl zwischen 0-100, dann zeige SVG-Skript1, ist
> drehzahl höher, dann zeige SVG-Skript2 usw usw. Das heißt, ich müsste
> das SVG-Skript in CGI integrieren?!

SVG ist ein vektor grafikformat welches auf XML basiert. Mit Javascript 
kannst du das XML/SVG im browser zur laufzeit modifizieren.

Autor: LinuX007 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja aber ich muss doch dem Skript dann irgendwie die Parameter zur 
Veränderung übergeben?!

Autor: LinuX007 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann eigentlich nur mit CGI funktionieren, ohne ständig neue 
Java-Skripte auf den webserver hochladen zu müssen?!

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Atme erstmal tief durch, denk ein wenig nach und frag dann google. ;) 
mit den Stichworten die bisher gefallen sind solltest du da was finden.

Autor: LinuX007 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok :)

ich habe jetzt mal nach SVG gesucht. Das ist ja dann ein statisches 
Skript, in dem einfach Daten für eine Grafik drinstehen.
Das heißt, ich müsste dann per CGI im C-Quellcode die Daten für die 
Grafik erzeugen und je nach Ereignis dem Web "veröffentlichen". Das 
erscheint mir soweit plausibel, zudem die Grafiken richtig gut aussehen 
(habe mal gegoogelt).
Ich lade mir gerade erstmal Gimp, das soll SVG unterstützen und dann 
probier ich mal was aus.

Danke!

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://de.wikipedia.org/wiki/Scalable_Vector_Graph...

Unter IE6/IE7 geht es sowieso nur mit Plugin, das ist dir schon bewusst?

Autor: LinuX007 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm hab ich wohl überlesen :( das ist nicht gut, obwohl ich keinen IE 
nutze...

Ich werde es einfach per Bilder machen. Bilder, die sich je ereignis 
einblenden.



Danke!

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Idee wäre noch, das mit einem normalen (z.B. PHP) Script und der 
meist schon auf dem Webserver installierten GD Library machen. Du 
könntest den Hintergrund der Drehzahlmessers schön in einem 
Bildverarbeitungsprogramm gestalten und auf dem Webserver ablegen. Per 
GD Library kannst du dann in PHP noch den Zeiger in den Drehzahlmesser 
reinzeichnen.
Das ganze würde sich mit nur wenigen Zeilen Code realisieren lassen.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hab ich übrigens mal was ähnliches realisiert:
http://www.fritigsclub.ch/Bierdeckel_Creator/E99_B...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny wrote:
> Da hab ich übrigens mal was ähnliches realisiert:
> http://www.fritigsclub.ch/Bierdeckel_Creator/E99_B...

Oh Gott! Das sind die Sachen im Internet, die die Welt nicht braucht. 
Sorry ;)

Trotzdem ist die Idee mit GD/ImageMagick und PHP nicht all zu schlecht 
;)

LinuX007 wrote:
> Es sollte schon etwas professioneller aussehen und nicht wie eine 0-8-15
> HTML-Seite ;)

Tja, dafür bist du selber verantwortlich und nicht irgendein CGI Script 
;)

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso sagst Du das braucht die Welt nicht?
Jetzt hat er doch gerade von meinem Knoff Hoff profitieren können.
Und schau Dir mal die grafischen Codes im Internet an für den 
"Menschlichkeitstest", die sind alle auch genau so gemacht. Also lass 
Deine verachtenden Beleidigungen und mach erst mal was besseres.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny wrote:
> Wieso sagst Du das braucht die Welt nicht?
> Jetzt hat er doch gerade von meinem Knoff Hoff profitieren können.
Wenn du das PHP Script zum Download bereitstellen würdest, könnte er das 
tatsächlich sogar!

> Und schau Dir mal die grafischen Codes im Internet an für den
> "Menschlichkeitstest", die sind alle auch genau so gemacht.
Jau, die braucht die Welt ja auch nicht ;)

> Also lass
> Deine verachtenden Beleidigungen und mach erst mal was besseres.
Ich soll was besseres machen.
Jaja, ich sag ja nicht dass du das schlecht gemacht hast. Übung hat es 
dir sicher gebracht.
Wie auch immer, war nicht all zu ernst gemeint, wobei aber das Internet 
durchaus mit solchen Seiten mal abspecken könnte *HUST.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig mir was Du besseres geleistet hast als das oder halt die Fresse.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johnny wrote:
> Zeig mir was Du besseres geleistet hast als das oder halt die Fresse.
Also so bestimmt nicht. Ist er nicht süß!? ;)

Nichts gegen dich oder deine Arbeit, aber sowas ist mit Sicherheit kein 
Problem für einen fortgeschrittenen PHP-Programmierer.
Im Prinzip die PHP Basics: Formulardaten entgegennehmen/auswerten und 
ein bisschen mit den GD-Funktionen arbeiten. Dann noch als Grafikstream 
ausgeben (inkl. korrektem Header) und fertig ist die Kiste.

Aber im Prinzip ist es genau das, was er braucht.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur bedeutet der von Simon erwähnte Ansatz, daß der Browser zyklisch die 
Seite (oder mindestens einen iframe) komplett neu laden muss, damit eine 
"dynamische" Wertedarstellung erreicht werden kann.

Das geht mit "Ajax" anders, hier läuft auf dem Client, also /im 
Browser/ ein Script, das per XMLHttpRequest zyklisch Daten vom Browser 
abholt und diese in der bereits geladenen Seite aktualisiert. Das 
bedeutet einerseits, daß weniger Daten übertragen werden müssen, und 
andererseits, daß die Aktualisierungen ohne Geflacker vonstatten gehen.

Anders, als der Name suggeriert, muss hier auch gar kein XML verwendet 
werden; die Art und Weise, auf die die übertragenen Nutzdaten verpackt 
werden, ist völlig irrelevant, nur muss das clientseitige Script in der 
Lage sein, die Daten zu verdauen.

Autor: LinuX007 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh je oh je ^^


Ich merke schon, mein Thread sorgt für (soziale) Aufregung, mehr, als 
das Thema selbst.

Jetzt nochmal sachlich:

 - Ich werde es vorerst so machen: ich habe mehrere Bilder, die 
nacheinander über den Webserver veröffentlicht werden.

 - Wenn das funktioniert, werde ich es mit SVGs machen. Im CGI-Skript 
muss dann das SVG-Skript stehen, das je nach Ereignis "verändert" wird 
und somit eine andere Grafik in Echtzeit beim Client "erzeugt".


Nun habe ich aber noch folgendes Problem auf meinem Apache-Webserver, 
vielleciht kann mir hierzu jemand eine Antwort geben:

Ich habe nun in eine Datei namens "teste_skript.c", die in einem von mir 
erstellten Ordner "cgi-bin" auf meinem Webserver liegt versucht, diese 
Datei mit dem Befehl "gcc -o 
/var/www/apache2-default/cgi-bin/teste_skript.c 
/var/www/apache2-default/cgi-bin/teste_skript.cgi" zu kompilieren.

Dann kommt folgender Fehler: "gcc: No such file or directory", "gcc: no 
input files".

Hier der Code des "teste_skript.c" (es ist ein Codebeispiel des Buches 
"C von A-Z" von Gailieocomputing):

#include <stdio.h>
#include <stdlib.h>
/* Die Kopfzeile eines Standard-HTML-Dokuments
 * titel: String, der als Titel erscheinen soll
 */
void print_html_header(char *titel) {
   printf("<html><head>\n");
   printf("<title>%s</title>\n",titel);
   printf("</head><body><pre>\n");
}
/* Das Ende eines HTML-Dokuments */
void print_html_end(void) {
   printf("</pre></body></html>\n");
}
/* Damit überhaupt ein HTML-Dokument ausgegeben wird */
void print_header(void) {
   printf("Content-Type: text/html\n\n");
}
int main(void) {
   char *p;
   print_header();
   print_html_header("Wer bin ich?");
   p = getenv("HTTP_USER_AGENT");
   if(p!=NULL)
      printf("Sie browsen mit : %s\n",p);
   else
      printf("Konnte HTTP_USER_AGENT nicht ermitteln!\n");
   print_html_end();
   return EXIT_SUCCESS;
}


Woran kann das liegen?

Danke!

Autor: Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich habe nun in eine Datei namens "teste_skript.c", die in einem von mir
> erstellten Ordner "cgi-bin" auf meinem Webserver liegt versucht, diese
> Datei mit dem Befehl "gcc -o
> /var/www/apache2-default/cgi-bin/teste_skript.c
> /var/www/apache2-default/cgi-bin/teste_skript.cgi" zu kompilieren.
> Dann kommt folgender Fehler: "gcc: No such file or directory", "gcc: no
> input files".
> Woran kann das liegen?

Weil der Syntax lautet: gcc -o OUTPUTFILE inputfile (s. man gcc)
d.h. er versucht "teste_skript.cgi" zu kompilieren, was aber noch nicht 
existiert... Vertausch mal beides.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.