Hallo Freunde der Bastelleidenschaft, Ein C-Programm auf einem Raspberry Pi misst den Aktuellen stromverbrauch meiner Wohnung und mittelt 10 min Werte und schreibt diese in eine Datenbank auf dem Raspberry Pi. Mit einem PHP Programm lese ich diese Datenbank aus und mache Bunte Diagramme auf meinem Webserver... auch auf dem Raspberry Pi. Jetzt würde ich gern den Momentanverbrauch auch auf der Webseite anzeigen lassen aber nicht alle Paar Sekunden in eine Datei als zwischenspeicher schreiben auf der SD-Karte. Gibt es eine Möglichkeit eine im C-Programm definierte Variable auch aus PHP auszulesen? z.B. Über eine Feste Adresse im Arbeitsspeicher oder das das C-programm direkt die Webseite manipuliert? Ich möchte das ich damit schnell und direkt am Laptop Stromfresser sehen kann wenn ich die ein und ausstecke und nicht erst im 10 Minuten Mittel. Gruß Dennis
Warum nicht in eine Datei schreiben? Das Betriebssystem chached das sowieso, effektiv wird das also im Arbeitsspeicher hin- und hergetauscht. Für die fünf Byte ist das außerdem sowieso alles komplett irrelevant. Shared Memory ist wenn du fünf Gigabyte die Sekunde hin- und herreichen willst. Für sowas ist das total overkill. Ansonsten gibt es noch diverse weitere Möglichkeiten, zum Beispiel eine named pipe, oder dbus. Aber Datei ist für diesen Zweck das angemessenste.
Hast du dir mal rrdtool als Datenbank angesehen? Oder mach eine zweite Datenbank, die nur die einzelnen Messwerte der letzten 10 Minuten enthält
Sven B. schrieb: > Ansonsten gibt es noch diverse weitere Möglichkeiten, zum Beispiel eine > named pipe, oder dbus. Aber Datei ist für diesen Zweck das > angemessenste. Eine named pipe ist dafür sinnvoller als eine Datei und von jeder Programmiersprache aus sehr einfach zu nutzen.
Ich würde ein tempfs empfehlen, also ein kleines Filesystem, was im Ram liegt. Das belastet nicht die SD-Karte, ist schnell und man kann normal auf die Dateien zugreifen. Wie das geht steht z.B. in http://www.zdnet.com/article/raspberry-pi-extending-the-life-of-the-sd-card/
Guten morgen, vielen dank für die zahlreichen Vorschläge. Ich werde mich mal einlesen
Rolf M. schrieb: > Sven B. schrieb: >> Ansonsten gibt es noch diverse weitere Möglichkeiten, zum Beispiel eine >> named pipe, oder dbus. Aber Datei ist für diesen Zweck das >> angemessenste. > > Eine named pipe ist dafür sinnvoller als eine Datei und von jeder > Programmiersprache aus sehr einfach zu nutzen. ... dann schreibt er jeden Messwert in die pipe. Wenn er Abends ins Bett geht und Morgens das erste mal die Seite aufruft ist die Pipe voll weil die Ganze nacht reingeschrieben wurde. Wenn er schnell nacheinander die Daten haben will gibts noch keine weil sie Leergelaufen ist. Klingt jetzt nicht sehr plausibel. Ich würde ne extra Tabelle mit der InMemory-Engine vorschlagen.
Ich verwende für einen ähnlichen Zweck das Verzeichnis /run/shm. Das ist eine "Ramdisk". Dass die Dateien nach dem Reboot fort sind, dürfte dich zumindest beim aktuellen Messwert wenig stören.
Dennis schrieb: > Jetzt würde ich gern den Momentanverbrauch auch auf der Webseite > anzeigen lassen aber nicht alle Paar Sekunden in eine Datei als > zwischenspeicher schreiben auf der SD-Karte. Wenn der Momentanverbrauch der Verbrauchswert ist, der zum Zeitpunkt des Seitenaufrufs vorliegt, oder? Wenn dem so ist, muss du damit den Wert auch zu diesem Zeitpunkt ermitteln, also den entsprechenden Sensor genau zu diesem Zeitpunkt auslesen etc..
Ich mache exakt das gleiche mit einem Raspberry Pi. Allerdings schreibe ich einfach alle zehn Sekunden die Messwerte in die Datenbank. Damit habe ich über PHP auf der Webseite auch immer einen aktuellen Wert (im worst case 10 Sekunden alt, aber so schnell ändert sich der Stromverbrauch nicht). Das läuft seit etwa zwei Monaten problemlos und die SD Karte wird erst nach Jahren voll. Wäre vielleicht auch eine einfache Lösung für dich.
Guest schrieb: > Das läuft seit etwa zwei Monaten problemlos und die SD Karte wird erst > nach Jahren voll. Allerdings sollte man aufpassen. SD-Karten sind für einen derartigen Dauerbetrieb nicht gedacht und gehen dann schnell defekt. Einem Pi, der 24/7 am laufen ist, würde ich (bzw habe ich) das System auf USB-Stick bzw. externe Festplatte kopiert. Die SD Karte wird nur noch zum Booten benötigt um von dort das Bootdevice zu holen.
Ist in einem USB-Stick nicht genau dieselbe Art Speicher verbaut wie in einer SD-Karte?
Sven B. schrieb: > Ist in einem USB-Stick nicht genau dieselbe Art Speicher verbaut wie in > einer SD-Karte? Gute Frage. Hab ich noch nie recherchiert. .... sieht wohl so aus. Nur gut, dass ich eine externe Platte angeschlossen habe :-) Glück gehabt.
Ich habe eine Wetterstation auf einem Pi am laufen und schreibe die Winddaten mit, dort wird aber immer nur ein Mittelwert alle 10Min in die Datenbank geschrieben sowie ein 3Sek maximal und minimalwert in einem 10Min fenster. Warum speicherst du für eine Langzeiterfassung in so kurzen intervallen?
Das Programm soll die daten für eine Langzeiterfassung sammeln. Dazu misst es die Zeit zwischen zwei impulsen vom S0 Ausgang meines Stromzählers. Nach jedem Impulse kann ich den Momentanverbrauch ausgeben. Daher ist die Zeit variabel. Die Messwerte werden über 10 min gemittelt und dann in eine Datenbank geschrieben. Nur für den Momentanverbrauch will ich den aktuellen Wert auf der Webseite Anzeigen lassen der dann halt nur ein paar sekunden alt ist und bei einem Stromfresser verkürzt sich die Zeit zwischen zwei impulsen erheblich so das ich 2-3 Werte pro Sekunde erreichen Kann. Der Zähler hat 1000Imp / KWh am S0 Ausgang.
Sven B. schrieb: > Ist in einem USB-Stick nicht genau dieselbe Art Speicher verbaut > wie in einer SD-Karte? Ausschlaggebend ist der Controller auf der Karte. Der sorgt dafür, dass die Flash-Blocks in etwa gleichmäßig abgenutzt werden. Auf diese Weise erzielt man eine hohe Lebensdauer des Flash-Speichers.
Uhu U. schrieb: > Sven B. schrieb: >> Ist in einem USB-Stick nicht genau dieselbe Art Speicher verbaut >> wie in einer SD-Karte? > > Ausschlaggebend ist der Controller auf der Karte. Der sorgt dafür, dass > die Flash-Blocks in etwa gleichmäßig abgenutzt werden. Auf diese Weise > erzielt man eine hohe Lebensdauer des Flash-Speichers. Ja. Aber wenn das Linux in /var/log jeden Tag ein paar Zig-megabyte Log Files erstellt, dann ist in ein paar Wochen/Monaten recht schnell Ende. So man einigen Berichte im Web trauen kann.
:
Bearbeitet durch User
Dennis schrieb: > Ein C-Programm auf einem Raspberry Pi misst den Aktuellen stromverbrauch > meiner Wohnung und mittelt 10 min Werte und schreibt diese in eine > Datenbank auf dem Raspberry Pi. > > Mit einem PHP Programm lese ich diese Datenbank aus und mache Bunte > Diagramme auf meinem Webserver... auch auf dem Raspberry Pi. Warum mach Dein C-Programm nicht einfach einen LISTEN auf einem bestimmten Port und das PHP-Programm holt sich per CONNECT den aktuellen Wert, dann, wenn dieser gebraucht wird?
Ich würde jetzt nicht eine extra Schnittstelle suchen, für die du erst noch die Handler schreiben musst. Wenn dein C und dein PHP Programm bereits die Datenbank brauchen, würde ich diese auch für die Momentanzeiten brauchen. Dazu einfach eine neue Tabelle erstellen mit der engine "Memory" und um die SD Karte musst du dir keine Gedanken machen.
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.