Co muszę zrobić, aby mój Raspberry Pi hostował stronę internetową z pokrętłami wskazującymi temperaturę procesora, obciążenie procesora itp. W czasie rzeczywistym?

27

Jestem dobry w uniksowych poleceniach i skryptach, ale prawie nie mam doświadczenia w sieci. Mam skrypt, który pobiera dane, które mnie interesują, takie jak obciążenie procesora lub temperatura systemu i aktualizuje plik co 10 sekund. Chciałbym skierować iPada na lokalną stronę internetową obsługiwaną przez mój Raspberry Pi, która ma aktualizację graficzną tych danych w czasie rzeczywistym.

Pracowałem przed skonfigurowaniem prostego serwera WWW Apache i mogę pisać HTML i JavaScript. Poza tym jestem zagubiony i potrzebuję kogoś, kto wskaże mi właściwy kierunek.

jake9115
źródło
2
Twoje pytanie jest trochę za szerokie. Czy potrzebujesz szybkiego i brudnego rozwiązania, czy też chcesz napisać minimalny program, który pasuje nawet do małych systemów wbudowanych w Linuksa?
Basile Starynkevitch,
Początkowo szukałem czegoś szybkiego i brudnego, ale dostępność bardzo ładnych narzędzi wymienionych poniżej teraz mnie bardziej interesuje.
jake9115,
Do Twojej dyspozycji jest także Raspberry Pi Stack: raspberrypi.stackexchange.com
Todd Wilcox
github.com/firehol/netdata jest bardzo łatwy w konfiguracji. Jednak nie testowałem tego na Pi
Der Hochstapler

Odpowiedzi:

30

Używam Grafana z InfluxDB do tego na moim Raspberry Pi 3. Oba są stosunkowo łatwe w konfiguracji i łączą się ze sobą. Działają nawet dobrze w pojemnikach Docker na Raspberry Pi.

Wszystkie moje aktualizacje przesyłam strumieniowo do InfluxDB w miarę ich generowania. Następnie Grafana wykonuje całą pracę graficzną, wyświetlając je w ładnym formacie wizualnym. Zaprojektowałem prosty pulpit dla mojego starego iPada z jego mniejszym ekranem.

Wygląda na to, że jest dużo instalacji i narzutów, ale na pewno wygląda ładnie.

Wpisz opis zdjęcia tutaj

0xACE
źródło
Bardzo fajny. Czy zdarza ci się mieć zrzuty ekranu z monitorów Grafana? Po prostu ciekawy.
jake9115,
Tak. To może nie mieć większego sensu, ten jest miszmaszem rzeczy. Zatrzaskiwał się na moim komputerze, więc nie wielkości, jak wygląda na iPadzie.
0xACE
Wygląda niesamowicie, nie mogę się doczekać, aby skonfigurować mój! Mam 16-węzłowy pomarańczowy serwer pi, do którego będzie to idealne rozwiązanie. Dzięki jeszcze raz.
jake9115,
(nie na temat) Widziałem twoje inne pytanie dotyczące łączenia Pi w coś, co wyglądało jak pojedyncza tablica z wieloma rdzeniami. Już miał wysłać notatkę, że facet z HPC na uczelni, w której pracuję, skonfigurował system, ale potem przypomniał sobie, że używa „syna silnika sieciowego”, który nie robi tego, czego szukałeś.
0xACE
1
@ 0xACE Biorąc pod uwagę, że jest to pi, to całkiem zły pomysł, aby spamować serwer apache również żądaniami. Również 10s odnosi się do aktualnej konfiguracji pytających, podczas gdy chcą czegoś szybciej.
jdwolf
9

Aby mieć lekki i bardzo łatwy pulpit do monitorowania sieci, aby skonfigurować (i rozszerzyć) stronę monitorowania na swoim Raspberry, masz Monitor RPi .

Ma kilka ustawień domyślnych, a konfiguracja polega głównie na edycji kilku prostych plików tekstowych. Skonfigurowałem go łatwo, aby dodać wykresy wilgotności z DTH21.

img_link img_link2

Rui F. Ribeiro
źródło
2
Doceniam wkład; wydaje się to bardzo lekkie i może być dobrym wyborem graficznym, podczas gdy uczę się konfigurować niektóre bardziej zaangażowane rozwiązania tutaj. Dzięki!
jake9115,
Zapraszamy. Używam go od prawie 3 lat w domu. patrz powiązane pytanie electronics.stackexchange.com/questions/236530/…
Rui F Ribeiro
6

Najlepszym narzędziem do aplikacji internetowych w czasie rzeczywistym jest WebSocket . Zazwyczaj są one zaimplementowane na serwerze aplikacji, a nie na serwerze WWW, ale Apache zapewnia sposób na serwery proxy. Może to z łatwością zapewnić aktualizacje na sekundę lub na sekundę.

Biblioteka, której używasz na serwerze aplikacji, zależy od platformy internetowej, z której chcesz korzystać, ale na przykład popularną biblioteką dla Node.js jest Socket.IO.

Po stronie klienta możesz skonfigurować takie połączenie:

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

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

Po stronie serwera za pomocą Node.js przy użyciu podstawowej biblioteki WebSocket:

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
źródło
1
Dzięki za pomysł. Jest to bardzo przydatne, ale wygląda na dużo gruntu, co jest zrozumiałe.
jake9115,
2
@ jake9115 Heh cóż, twoje pytanie wydawało się sugerować, że jesteś zainteresowany samodzielnym stworzeniem tej aplikacji.
jdwolf
2
Szczerze mówiąc, naprawdę chciałem sam go zakodować, ale ta grafana jest tak gładka, że ​​nie chciałbym na nowo wymyślać koła w tym. W każdym razie dzięki!
jake9115,
4

Możesz także spojrzeć na Node-RED https://nodered.org Jest dostępny na Raspbian

Oto panel, który zbudowałem wprowadź opis zdjęcia tutaj

jwygralak67
źródło
Przyjrzę się temu, dzięki za wkład.
jake9115,
1
Używam Node-Red z moją konfiguracją, ale dane historyczne są ważne tylko tak długo, jak długo działa instancja. Oznacza to, że jeśli ponownie wdrożysz (lub stracisz moc), żadne historyczne pomiary nie zostaną zachowane, Twoje wykresy zaczną od nowa od zera. Ta funkcja skłoniła mnie do rozpoczęcia logowania do InfluxDB.
0xACE
Ach, miło wiedzieć. Dane historyczne są dla mnie ważne. Naprawdę podoba mi się to, że twoje wykresy zawierają nawet inne informacje internetowe, takie jak ceny bitcoin. To było poza moim początkowym zakresem, ale już nie.
jake9115
Tak, w tym przykładzie włączyłem nawet dane z aplikacji, którą mam w iOS App Store (dla harcerzy, którzy robią dobre zwroty), która przechowuje te dane w bazie Google Fire. To mapa na dole. Używam czerwonego węzła do pobierania danych z bazy ogniowej i wpychania ich do napływu, więc nie wszystkie napływają i grafana.
0xACE
2

Używam phpSysInfo do monitorowania wszystkich moich serwerów / komputerów z Linuksem i naprawdę podoba mi się to, jakie to proste. Ustawienia są również bardzo łatwe do zrozumienia i można ustawić własną częstotliwość odświeżania.

McMuffin
źródło
1

Jeśli chcesz kodować w C lub C ++, możesz użyć biblioteki bibliotek HTTP, takich jak libonion lub Wt, aby zakodować swój wyspecjalizowany serwer HTTP (być może używając sqlite do bazy danych). Następnie powinieneś dobrze zrozumieć protokół HTTP (w tym pliki cookie HTTP i nagłówki HTTP ) oraz HTML5 .

Możesz użyć technik Ajax i WebSocket (WebSockets są obsługiwane przez libonion & Wt, Ajax wysyła zwykłe żądania HTTP inicjowane przez kod JavaScript działający w przeglądarce klienta). Możesz użyć HTML5 canvas i / lub SVG do grafiki. Przydatne mogą być niektóre frameworki HTML5 ; większość z nich używa Javascript, DOM, HTML5, ....

Basile Starynkevitch
źródło