Was muss ich tun, damit mein Raspberry Pi in Echtzeit eine Webseite mit Einstellrädern für die CPU-Temperatur, die CPU-Auslastung usw. hostet?

27

Ich bin gut mit Unix-Befehlen und Skripten, aber ich habe fast keine Web-Erfahrung. Ich habe ein Skript, das die Metriken erfasst, an denen ich interessiert bin, z. B. die CPU-Auslastung oder die Systemtemperatur, und alle 10 Sekunden eine Datei aktualisiert. Ich möchte mein iPad auf eine lokale Website verweisen, die von meinem Raspberry Pi gehostet wird und deren grafische Darstellung in Echtzeit aktualisiert wird.

Ich habe vor dem Einrichten eines einfachen Apache-Webservers gearbeitet und kann HTML und JavaScript schreiben. Außerdem bin ich verloren und brauche jemanden, der mich in die richtige Richtung weist.

jake9115
quelle
2
Ihre Frage ist etwas zu weit gefasst. Möchten Sie eine schnelle und schmutzige Lösung finden, oder möchten Sie ein Minimalprogramm programmieren, das auch auf kleinen eingebetteten Linux-Systemen funktioniert?
Basile Starynkevitch
Ich habe anfangs nach etwas Schnellem und Schmutzigem gesucht, aber die Verfügbarkeit der unten erwähnten sehr netten Werkzeuge hat mich jetzt mehr interessiert.
Jake9115
Zu Ihrer Information gibt es auch einen Raspberry Pi Stack: raspberrypi.stackexchange.com
Todd Wilcox
github.com/firehol/netdata ist sehr einfach einzurichten. Habe es aber nicht auf einem Pi getestet
Der Hochstapler

Antworten:

30

Ich verwende dafür Grafana mit InfluxDB auf meinem Raspberry Pi 3. Beide sind relativ einfach einzurichten und miteinander zu verbinden. Sie funktionieren sogar gut in Docker- Containern auf dem Raspberry Pi.

Ich streame alle meine Updates in InfluxDB, sobald sie generiert werden. Dann macht Grafana die ganze grafische Arbeit, um sie in einem schönen visuellen Format anzuzeigen. Ich habe ein einfaches Dashboard nur für mein altes iPad mit seinem kleineren Bildschirm entworfen.

Es klingt nach viel Installation und Overhead, sieht aber auf jeden Fall hübsch aus.

Geben Sie hier eine Bildbeschreibung ein

0xACE
quelle
Sehr cool. Haben Sie Screenshots Ihrer Grafana-Monitore? Nur neugierig.
jake9115
Jep. Könnte nicht viel Sinn machen, dieser ist eine Mischung aus Dingen. Schnappte auf meinem Computer, also nicht so groß, wie es auf dem iPad aussieht.
0xACE
Sieht toll aus, kann es kaum erwarten, meine einzurichten! Ich habe einen 16-Knoten-Orange-Pi-Server, für den dies perfekt ist. Danke noch einmal.
jake9115
(Off Topic) Ich habe Ihre andere Frage bezüglich des Zusammenfügens der Pi zu etwas gesehen, das aussah wie ein einzelnes Board mit mehreren Kernen. Ich wollte gerade eine Nachricht senden, dass der HPC-Mitarbeiter an der Hochschule, an der ich arbeite, ein System eingerichtet hatte, erinnerte sich dann aber, dass er einen "Sohn des Grid-Motors" verwendete, der nicht das tut, wonach Sie gesucht hatten.
0xACE
1
@ 0xACE Wenn man bedenkt, dass es auf einem Pi ist, ist es eine ziemlich schlechte Idee, den Apache-Server auch mit Anfragen zu spammen. Auch die 10er beziehen sich auf das aktuelle Setup der Fragesteller, während sie etwas schnelleres wollen.
Jdwolf
9

Um ein leichtes und sehr einfaches Web-Überwachungs-Dashboard zu haben, um die Überwachungsseite auf Ihrem Raspberry einzurichten (und zu erweitern), haben Sie RPi-Monitor .

Es enthält einige Standardeinstellungen und die Konfiguration bearbeitet hauptsächlich einige einfache Textdateien. Ich habe es einfach konfiguriert, um Feuchtigkeitsgraphen von einem DTH21 hinzuzufügen.

img_link img_link2

Rui F Ribeiro
quelle
2
Ich schätze den Beitrag; Dies scheint sehr leicht und vielleicht eine gute Wahl für die grafische Darstellung zu sein, während ich lerne, einige der komplexeren Lösungen hier einzurichten. Vielen Dank!
jake9115
Bitte schön. Ich habe es fast 3 Jahre zu Hause benutzt. Siehe verwandte Frage electronics.stackexchange.com/questions/236530/…
Rui F Ribeiro
6

Für Echtzeitanwendungen im Web ist WebSocket das beste Tool . In der Regel werden diese auf dem Anwendungsserver implementiert, nicht auf dem Webserver. Apache bietet jedoch eine Möglichkeit, Websockets zu vertreten. Dies kann leicht Aktualisierungen pro Sekunde oder in einem Teil der Sekunde zur Verfügung stellen.

Welche Bibliothek Sie auf dem Anwendungsserver verwenden, hängt davon ab, welche Webplattform Sie verwenden möchten. Eine beliebte Bibliothek für Node.js ist beispielsweise Socket.IO.

Auf der Clientseite können Sie eine Verbindung wie folgt einrichten:

socket = new WebSocket("ws://website.net:8282");

socket.addEventListener('message', function (event) {
    var message = event.data;
    // Code to update site
});

Auf der Serverseite mit Node.js unter Verwendung der grundlegenden WebSocket-Bibliothek:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8282 });
wss.on('connection', function connection(ws) {
  dataOnUpdateEvent(function(event) {
    var data = event.getdata();
    var message = parseData(data);
    ws.send(message);
  });
});
jdwolf
quelle
1
Danke für die Idee. Dies ist sehr nützlich, sieht aber nach viel Grundlagenarbeit aus, was verständlich ist.
jake9115
2
@ jake9115 Nun, Ihre Frage schien darauf hinzudeuten, dass Sie daran interessiert sind, diesen Antrag selbst zu stellen.
JDWOLF
2
Ehrlich gesagt wollte ich es eigentlich selbst codieren, aber diese Grafana sieht so gut aus, dass ich das Rad hier nicht neu erfinden möchte. Trotzdem danke!
jake9115
4

Sie können sich auch Node-RED https://nodered.org ansehen. Raspbian ist ab Lager erhältlich

Hier ist ein Dashboard, das ich gebaut habe Bildbeschreibung hier eingeben

jwygralak67
quelle
Ich werde mich darum kümmern, danke für den Beitrag.
jake9115
1
Ich verwende Node-Red für mein Setup, aber die Verlaufsdaten sind nur gültig, solange Ihre Instanz ausgeführt wird. Das heißt, wenn Sie keine der historischen Messwerte erneut bereitstellen (oder den Strom verlieren), beginnen Ihre Diagramme von vorne. Diese Funktion hat mich veranlasst, mich tatsächlich bei InfluxDB anzumelden.
0xACE
Ah, schön zu wissen. Historische Daten sind mir wichtig. Mir gefällt sehr gut, wie Ihre Grafiken auch andere webbasierte Informationen wie Bitcoin-Preise enthalten. Das ging über meinen ursprünglichen Rahmen hinaus, aber nicht mehr.
jake9115
Ja, in diesem Beispiel füge ich sogar Daten aus einer App ein, die ich im iOS App Store habe (für Pfadfinder, die gute Wendungen machen) und die Daten in Google Fire Base speichert. Das ist die Karte unten. Ich benutze Node Red, um die Daten von der Feuerbasis zu ziehen und in den Zustrom zu schieben, damit es nicht nur Zustrom und Grafana sind.
0xACE
2

Ich verwende phpSysInfo , um alle meine Linux-Server / -Computer zu überwachen, und ich mag es wirklich, wie einfach es ist. Die Einstellungen sind auch sehr einfach zu verstehen und Sie können Ihre eigene Bildwiederholfrequenz einstellen.

McMuffin
quelle
1

Wenn Sie in C oder C ++ codieren möchten, können Sie eine HTTP- Serverbibliothek wie libonion oder Wt verwenden, um Ihren speziellen HTTP-Server zu codieren (möglicherweise mit sqlite für die Datenbank). Sie sollten dann das HTTP- Protokoll (einschließlich HTTP-Cookies und HTTP-Headern ) und HTML5 gut verstehen .

Möglicherweise möchten Sie Ajax- und WebSocket- Techniken verwenden (WebSockets werden von libonion & Wt unterstützt. Ajax gibt normale HTTP-Anforderungen aus, die durch JavaScript-Code initiiert werden, der im Client-Browser ausgeführt wird.). Sie könnten HTML5 Canvas und / oder SVG für Grafiken verwenden. Möglicherweise finden Sie einige nützliche HTML5- Webframeworks . die meisten von ihnen benutzen Javascript, DOM, HTML5, ....

Basile Starynkevitch
quelle