¿Qué debo hacer para que mi Raspberry Pi aloje una página web con diales que indican la temperatura de la CPU, la carga de la CPU, etc., en tiempo real?

27

Soy bueno con los comandos y secuencias de comandos de Unix, pero casi no tengo experiencia web. Tengo un script que toma métricas que me interesan, como la carga de la CPU o la temperatura del sistema, y ​​actualiza un archivo cada 10 segundos. Me gustaría apuntar mi iPad a un sitio web local alojado por mi Raspberry Pi, que tiene una representación gráfica actualizada de estos datos en tiempo real.

He trabajado antes de configurar un servidor web Apache simple, y puedo escribir HTML y JavaScript. Además de eso, estoy perdido y necesito que alguien me señale en la dirección correcta.

jake9115
fuente
2
Tu pregunta es demasiado amplia. ¿Desea una solución rápida y sucia, o desea codificar un programa mínimo que se adapte incluso a los pequeños sistemas integrados de Linux?
Basile Starynkevitch
Inicialmente estaba buscando algo rápido y sucio, pero la disponibilidad de herramientas muy buenas que se mencionan a continuación ahora me tiene más interesado.
jake9115
FYI también hay una pila de Raspberry Pi: raspberrypi.stackexchange.com
Todd Wilcox
github.com/firehol/netdata es muy fácil de configurar. Sin embargo, no lo he probado en un Pi
Der Hochstapler

Respuestas:

30

Utilizo Grafana con InfluxDB para esto en mi Raspberry Pi 3. Ambos son relativamente fáciles de configurar y conectar entre sí. Incluso funcionan bien en contenedores Docker en la Raspberry Pi.

Transmito todas mis actualizaciones a InfluxDB a medida que se generan. Luego Grafana hace todo el trabajo gráfico de mostrarlos en un agradable formato visual. Diseñé un tablero simple solo para mi viejo iPad con su pantalla más pequeña.

Suena como una gran cantidad de instalación y gastos generales, pero seguro que se ve bonito.

Ingrese la descripción de la imagen aquí

0xACE
fuente
Muy genial. ¿Tienes alguna captura de pantalla de tus monitores Grafana? Sólo curioso.
jake9115
Sip. Puede que no tenga mucho sentido, este es un revoltijo de cosas. Ajustado en mi computadora, por lo que no tiene el tamaño que se ve en el iPad.
0xACE
¡Parece increíble, no puedo esperar para configurar el mío! Tengo un servidor naranja pi de 16 nodos para el que será perfecto. Gracias de nuevo.
jake9115
(fuera del tema) Vi tu otra pregunta sobre unir los Pi en algo que parecía una sola placa con múltiples núcleos. Estaba a punto de enviarle una nota de que el chico de HPC en la universidad en la que trabajo había establecido un sistema, pero luego recordó que estaba usando "hijo de motor de red" que no hace lo que estaba buscando.
0xACE
1
@ 0xACE Considerando que está en un pi, es una muy mala idea enviar spam al servidor apache con solicitudes también. Además, el 10 se refiere a la configuración actual de los solicitantes, mientras que quieren algo más rápido.
jdwolf
9

Para tener un panel de monitoreo web liviano y muy fácil para configurar (y extender) la página de monitoreo en su Raspberry, tiene RPi Monitor .

Viene con algunos valores predeterminados y la configuración está editando principalmente un par de archivos de texto simples. Lo configuré fácilmente para agregar gráficos de humedad de un DTH21.

img_link img_link2

Rui F Ribeiro
fuente
2
Agradezco la contribución; Esto parece realmente liviano y tal vez una buena opción gráfica mientras aprendo a configurar algunas de las soluciones más complicadas aquí. ¡Gracias!
jake9115
De nada. Lo he usado durante casi 3 años en casa. ver pregunta relacionada electronics.stackexchange.com/questions/236530/…
Rui F Ribeiro
6

Para aplicaciones en tiempo real en la web, la mejor herramienta es WebSocket . Por lo general, estos se implementan en el servidor de aplicaciones, no en el servidor web, pero Apache proporciona una forma de proxy de sockets web. Esto podría proporcionar fácilmente actualizaciones por segundo o por segundo.

La biblioteca que use en el servidor de aplicaciones depende de la plataforma web que desee usar, pero, por ejemplo, una popular para Node.js es Socket.IO.

En el lado del cliente, puede configurar una conexión como esta:

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

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

En el lado del servidor con Node.js usando la biblioteca básica de 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
fuente
1
Gracias por la idea Esto es muy útil, pero parece mucho trabajo preliminar, lo cual es comprensible.
jake9115
2
@ jake9115 Bueno, tu pregunta parecía sugerir que estabas interesado en hacer esta aplicación tú mismo.
jdwolf
2
Honestamente, realmente tenía el objetivo de codificarlo yo mismo, pero esa grafana tiene un aspecto tan hábil que no quisiera reinventar la rueda en este caso. Gracias sin embargo!
jake9115
4

También puede mirar Node-RED https://nodered.org. Se comercializa en Raspbian

Aquí hay un tablero que construí ingrese la descripción de la imagen aquí

jwygralak67
fuente
Lo investigaré, gracias por la contribución.
jake9115
1
Utilizo Node-Red con mi configuración, pero los datos históricos solo son válidos mientras se ejecuta su instancia. Es decir, si vuelve a desplegar (o pierde energía) ninguna de las mediciones históricas se mantiene, todos sus gráficos comienzan de cero. Esa característica es lo que me llevó a comenzar a iniciar sesión en InfluxDB.
0xACE
Ah, es bueno saberlo. Los datos históricos son importantes para mí. Realmente me gusta cómo sus gráficos incluso incorporan otra información basada en la web, como los precios de bitcoin. Eso estaba más allá de mi alcance inicial, pero ya no.
jake9115
Sí, ese ejemplo incluso incluyo datos de una aplicación que tengo en la tienda de aplicaciones de iOS (para los Boy Scouts que hacen buenos giros) que almacena sus datos en la base de Google Fire. Ese es el mapa en la parte inferior. Uso el nodo rojo para extraer los datos de la base de fuego y empujarlos a la afluencia, por lo que no todo es afluencia y grafana.
0xACE
2

Uso phpSysInfo para monitorear todos mis servidores / computadoras Linux, y realmente me gusta lo simple que es. La configuración también es muy fácil de entender y puede establecer su propia frecuencia de actualización.

McMuffin
fuente
1

Si desea codificar en C o C ++, puede usar alguna biblioteca de servidor HTTP como libonion o Wt para codificar su servidor HTTP especializado (quizás usando sqlite para la base de datos). Entonces debe comprender bien el protocolo HTTP (incluidas las cookies HTTP y los encabezados HTTP ) y HTML5 .

Es posible que desee utilizar las técnicas Ajax y WebSocket (WebSockets son compatibles con libonion & Wt, Ajax proporciona solicitudes HTTP ordinarias iniciadas por el código JavaScript que se ejecuta en el navegador del cliente). Puede usar el lienzo HTML5 y / o SVG para gráficos. Puede encontrar útiles algunos marcos web HTML5 ; la mayoría de ellos usan Javascript, DOM, HTML5, ...

Basile Starynkevitch
fuente