Hallo, ich bin dabei eine Wetterstation zu bauen und möchte die Messwerte im lokalen Netzwerk anzeigen. Die Messwerte werden von einem AVR/ARM gemessen und ausgewertet und dann via I2C oder UART an das RPi weitergegeben. Meine Frage ist es nun, wie aufwendig ist es die Messwerte über einen Apache Webserver anzeigen zu lassen. Da ich über keine PHP Kenntnisse verfüge reicht eine simple Webdarstellung mit HTML/CSS. Wie bekomme ich die eingelesenen Werte in den Webserver? Gruß Felix
Je nach Raspberry Distribution sollte ein "apt-get install apache2" und das kopieren einer Textdatei mit den Werten nach /var/www schon reichen... Thomas
Hallo Felix, werden die Daten die vom AVR kommen auf dem PI schon irgendwie weiterverarbeitet? es gibt zwei Möglichkeiten: 1. Wenn neue Daten hereinkommen daraus eine Datei erstellen die dann im www-Verzeichnis von Apache landet und vom Browser direkt angezeigt werden kann. Es kann auch eine Javascriptdatei sein, deren Daten dann vom Browser verarbeitet und dargestellt werden. - wie von Thomas vorgeschlagen 2. Die eingehenden Daten speichern (Umgebungsvariable, Datei, ...) Beim Abruf der Seite über Apache ein Script (PHP, Perl, Python) aufrufen das aus den zwischengespeicherten Daten die Seite erstellt. Sascha
Vielen Dank für die Antworten. Sascha Weber schrieb: > werden die Daten die vom AVR kommen auf dem PI schon irgendwie > weiterverarbeitet? Die Daten die vom AVR kommen sind schon fertig, also Temperatur, Luftfeuchte, etc. Ich habe es mir so vorgestellt, ich schreibe auf dem RPi ein C-Programm, dass die Daten empfängt und in einer HTML Datei richtig einordnet. Diese Datei wird dann in das passende Verzeichnis kopiert und das alte überschieben. Kann ich alle diese Schritte in C machen? Das empfangen denke ich schon, aber die HTML Datei erzeugen und das verschieben/ersetzen? Gruß Felix
wobei php auch nicht schwer zu erlernen ist. du hast ja jetzt ein spezifisches problem und kannst anhand dessen erste schritte in php wagen :) vorteil davon wäre das du später mal interaktivität in die seite einbauen könntest, oder auch einen graph, z.b. mit rrdtool.
Am einfachsten geht es mit http://oss.oetiker.ch/rrdtool/ Damit lassen sich die Daten ohne Aufwand Minutenweise und als Jahresübersicht ausgeben. Daten einlesen ist auch als Skript schnell genug. Daten als Text anzeigen ist als CGI-Script auch schnell genug. Grafische Darstellung braucht auf dem Raspi ein paar Sekunden - so gerade noch erträglich. (3 Datenbanken mit 1 Update pro Sekunde ist keine gute Idee - da ist nach 1/2 Jahr die SD-Karte Schrott).
Apache halte ich für das handling von statischen Dateien auf dem kleinen Rechner für etwas oversized. Es gibt Webserver, die weniger Recourcen benötigen, zum Beispiel lighttpd, monkey, oder „busybox hhtp“ (einfach mal googlen). Eine weitere Alternative: Python ist bei den meisten Distributionen schon installiert. Der Aufruf python -m SimpleHTTPServer 8000 startet einen einfachen Webserver der Zugriff auf Files des aktuellen Verzeichnisses per hhtp erlaubt. Für ein internes Netzwerk, in dem meist nur ein paar User zugreifen, reicht so etwas meist aus. Ich persönlich nutze für ein Projekt Python plus ein kleines Webframework namens Bottle.py. Ein Python Programm holt Daten per RS232 ab und speichert sie als File. Ein zweites Python Programm mit Bottle.py bildet den Webserver und stellt die Dateien zur Verfügung. Wie in der Antwort oben schon beschrieben: Vorsicht mit dem Schreiben von Daten alle x Sekunden. Das mögen die SD Karten nicht unbedingt. Eine Karte war nach 6 Monaten hin. Ich habe mein System umgestellt: Die Datei wird zuerst in eine Ramdisk geschrieben. Alle 30min wird diese auf der SD Karte gesichert.
:
Bearbeitet durch User
c.m. schrieb: > wobei php auch nicht schwer zu erlernen ist. du hast ja jetzt ein > spezifisches problem und kannst anhand dessen erste schritte in php > wagen :) > > vorteil davon wäre das du später mal interaktivität in die seite > einbauen könntest, oder auch einen graph, z.b. mit rrdtool. Das ist richtig, aber zuerst möchte ich das ganze zum laufen bekommen und später kommt dann das Feintuning. Noch einer schrieb: > (3 Datenbanken mit 1 Update pro Sekunde ist keine gute Idee - da ist > nach 1/2 Jahr die SD-Karte Schrott). Ich habe an alle 10min bis 30 min gedacht. Klaus Hummel schrieb: > Eine weitere Alternative: Python ist bei den meisten Distributionen > schon installiert. Der Aufruf > > python -m SimpleHTTPServer 8000 > > startet einen einfachen Webserver der Zugriff auf Files des aktuellen > Verzeichnisses per hhtp erlaubt. Für ein internes Netzwerk, in dem meist > nur ein paar User zugreifen, reicht so etwas meist aus. Das Problem hierbei ist Python. Es ist bestimmt sehr praktisch, aber aus Zeitgründen möchte ich vorerst keine neue Programmiersprache lernen, sondern alles in C bzw. C++ realisieren.
Kein Problem, CGI-Skripte für einen Webserver kannst du auch in C schreiben. Ob du statische Seiten generierst, oder CGI in C schreibst - der Aufwand zur Programmierung ist der selbe. Performance musst du nur bei grafischer Darstellung berücksichtigen.
Felix L. schrieb: > Das Problem hierbei ist Python. Es ist bestimmt sehr praktisch, aber aus > Zeitgründen möchte ich vorerst keine neue Programmiersprache lernen, > sondern alles in C bzw. C++ realisieren. Es ist eigentlich prinzipiell scheißegel, in welcher Sprache du eine serverseitige Anwendung erstellst, jedenfalls wenn CGI als Schnittstelle zur Kopplung zwischen Webserver und Anwendung verwendet wird, was in deinem Szenario sicher völlig ausreichend wäre. Eine CGI-Anwendung ist eigentlich nichts anderes als ein ganz stinknormales EVA-Kommandozeilenprogramm. Und das darf natürlich auch in C oder C++ geschrieben sein. Der Server ruft startet bei einem Zugriff auf die entsprechende Webadresse die ausführbare Datei und übergibt ihr einen Haufen Parameter, teils als Kommandozeilenargumente, teils in Umgebungsvariablen, teils über stdin. Wo genau was und wie an Informationen für die Anwendung bereitgestellt wird, steht in der CGI-Spezifikation. Die Anwendung macht nun ihr Ding auf Grund der vom Webserver bereitgestellten Informationen und ballert letztlich über stdout den Quelltext einer Webseite als Ergebnis ihrer Arbeit raus, bevor sie sich beendet. Diese Ausgabe des Programms liefert der Webserver dann an den Aufrufer aus. Das ist schon das ganze "Geheimnis" serverseitiger Anwendungen. Für einen ersten Test der korrekten CGI-Konfiguration des Webservers reicht erstmal ein ganz primitives "Hello world", dem die ganzen Eingaben scheißegal sind. Der einzige Unterschied zu einem normalen "Hello world" für die Kommandozeile ist, daß die Zeichenkette eben in den (hoffentlich korrekten) Quelltext einer Webseite eingebettet sein sollte, das String-Literal fällt also ein wenig länger aus...
So ein Projekt habe ich neulich auch gemacht. Hier mal ganz vereinfacht, was ich gemacht habe: Als Webserver läuft Apache (zwar oversized, wie zuvor schon gesagt wurde, aber wer weiß, was noch dazu kommt. Die Messdaten (2x DHT22, Temperatur und Luftfeuchte) werden über ein Python-Skript in einer txt-Datei abgespeichert und in die index.html im Apache-www-Verzeichnis eingebunden und somit auf der Seite angezeigt. Weiterhin logge ich die Daten und schreibe sie über ein Python-Skript fortlaufend in eine csv-Datei. Mit der JavaScript-Library dygraph wird der Messdatenverlauf visualisiert und in die Webseite eingebunden. Wie das aussieht, sieht man auf www.dygraphs.com. Die Ausführung der beiden Python-Skripte wird über einen cronjob vorgenommen und die Webseite wird somit in festen Intervallen aktualisiert (hier: stündlich). Python dürfte hier meiner Meinung nach keine Hürde darstellen. Ich habe die Python-Skripte ohne jegliche Vorkenntnisse mit Hilfe von Google-Suchen programmiert und war damit womöglich schneller, als ich es mit C hätte sein können.
Da hätte ich eine Frage zu. Das 'rrdtool graph' ist auf dem Raspi recht träge. Hat jemand einen Vergleich rrdgraph auf Raspi vs. rrdfetch auf Raspi + dygraph auf einem modernen PC?
An diejenigen, die die mit dem CGI-Scripting von Apache auskennen: Ist es möglich, über CGI auch sudo-Befehle auszuführen? Beispiel: ich möchte auf meiner Webseite einen "Aktualisieren"-Button realisieren, der ein Python-Skript ausführt, um die Sensoren auszulesen und deren aktuelle Werte abzuspeichern. Dadurch hätte ich als Benutzer die Möglichkeit, die Messwerte bei Bedarf zu aktualisieren. Für das Auslesen der Sensoren brauche ich allerdings Zugriff auf die GPIO-Ports, der meines Wissens nach nur dem root-User gestattet ist.
Felix L. schrieb: > Das Problem hierbei ist Python. Es ist bestimmt sehr praktisch, aber aus > Zeitgründen möchte ich vorerst keine neue Programmiersprache lernen, > sondern alles in C bzw. C++ realisieren. Ich behaupte mal, dass du das Problem mit Python schon gelöst hast, während du bei C noch deine Variablen deklarierst. String-Operationen sind in C einfach hässlich!
Zugriff auf /sys/class/gpio/... ? Habe in einem Init-Script die Zugriffsrechte gesetzt. Später las ich, es würde ausreichen, den Apache User in die Gruppe gpio aufzunehmen.
Also ich habe meine Daten in eine mysql Datenbank geschrieben und dann mit www.highcharts.com auf einem Apache2 visualisiert.
Karl schrieb: > Ich behaupte mal, dass du das Problem mit Python schon gelöst hast, > während du bei C noch deine Variablen deklarierst. String-Operationen > sind in C einfach hässlich! Python lernen ist noch häßlicher! Wenn schon eine Scriptsprache für CGI, dann Perl. Aber du hast insofern Recht, als daß C für CGI-Anwendungen wirklich Scheiße ist. C läßt zu viele Freiheiten und zu viele Fehler zu (ja teilweise werden sie geradezu gefördert), so daß man allein die Verwendung von C schon als eine einzige riesige potentielle Sicherheitslücke betrachten kann.
Noch einer schrieb: > Das 'rrdtool graph' ist auf dem Raspi recht träge. Was verstehst du unter "träge"?
Hallo! Auch wenn es ziemlich langsam ist: auf dem raspberry ist wolfram installiert; das liefert Dir über die Import-Funktion und beispielsweise DateListPlot oder TemperaturGauge Bilder, die Du im Webbrowser (dafür braucht man nicht den "Moloch" apache, sondern lighttpd) anzeigen kannst. Beispiel für ein script: #!/usr/bin/wolfram -script datamin=Import["/var/www/temperatur/min.txt","List"] datamax=Import["/var/www/temperatur/max.txt","List"] datalast=Import["/var/www/temperatur/last.txt","List"] Export["/var/www/temperatur/dtherm.jpg", ThermometerGauge[datalast, {-10, 50}, GaugeLabels -> "Value", GaugeFrameStyle -> Gray, GaugeFaceStyle ->{"LightBlue"}], ImageSize ->{300,300}] Passt das für Dich? Die Möglichkeiten, Daten zu visualisieren sind ziemlich groß VG Joachim
noch etwas: wolfram braucht dafür xvfb, um Bilder zu erzeugen; das ganze mache ich über einen cronjob in einem script. im .wl liegt das wolfram-script /usr/bin/xvfb-run -s "-screen 0 640x480x24" /var/www/temperatur/dtherm.wl > /dev /null
>> Ich behaupte mal, dass du das Problem mit Python schon gelöst hast… >Python lernen ist noch häßlicher! Wenn schon eine Scriptsprache für CGI, dann Perl. Ich arbeite mit verschiedenen Sprachen und habe Python gelernt um schnell solche Skripte erstellen zu können. Die Libs sind umfangreich. Aber im Grunde meines Herzens bin ich Fan von streng typisierten Sprachen. Ich habe schon mehr Zeit bei Python beim Debuggen verbracht, als beim Korrigieren von C Compilermeldungen wg. falschen Datentypen. >Aber du hast insofern Recht, als daß C für CGI-Anwendungen wirklich Scheiße ist. Man sollte dann zumindest gescheite Libraries nutzen, die einem einiges abnehmen (womit wir meist bei C++ wären…). @Felix L: Wie hast Du es jetzt denn gelöst?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.