Panel de monitorización para Raspberry Pi con Node.js

Panel de monitorización para Raspberry Pi con Node.js

panel monitorizacion raspberry pi nodejs highcharts tutorial head

¡Hola queridos lectores! Hoy no traigo un tutorial. Voy a enseñaros un proyecto en el que he estado trabajando un par de días. Explicaré cómo instalarlo y cómo usarlo.

Se trata de un panel de monitorización para Raspberry Pi que he desarrollado en Node.js. Hace ya unos días publiqué un tutorial sobre cómo graficar la temperatura de la CPU de la Raspberry Pi con Node.js y Highcharts. Este artículo es la continuación de dicho tutorial. He añadido varias gráficas, como el uso de memoria o la carga de la CPU. Es una aplicación en tiempo real.

Imaginad que queréis probar un programa que habéis desarrollado. Necesitáis saber cómo se comporta la Raspberry Pi mientras ejecuta vuestro software. Con este panel de monitorización podréis ver el estado de vuestra placa en tiempo real.

El proceso de instalación es muy sencillo. Lo explicaré a continuación:

0. Actualizar la Raspberry Pi

sudo apt-get update && sudo apt-get upgrade

1º. Instalar Node.js, NPM y Git en la Raspberry Pi

sudo apt-get install nodejs npm git

 2º. Clonar el repositorio del proyecto

Clonad el proyecto en el directorio que queráis:
git clone https://github.com/GeekyTheory/Raspberry-Pi-Status.git

 3º. Entramos en el directorio que acabamos de crear

cd Raspberry-Pi-Status

 4º. Instalamos las dependencias del proyecto

npm install
Si todo funciona correctamente, pasamos al punto 5º. En caso de error, introducimos el siguiente comando (gracias Libor):
npm config set registry http://registry.npmjs.org/
Ahora volvemos a ejecutar:
npm install

5º. Ejecutamos el proyecto

nodejs server.js

 6º. Abrimos en el navegador la dirección de la Raspberry Pi en el puerto 8000

En el navegador tendremos que abrir la dirección de la Raspberry Pi escuchando en el puerto 8000. Mi IP es 192.168.1.9, así que abriré lo siguiente: 192.168.1.9:8000 Finalmente, veremos el panel de control en tiempo real trabajando y monitorizando nuestra Raspberry Pi: panel monitorización raspberry pi nodejs El código lo podéis encontrar en el siguiente enlace: https://github.com/GeekyTheory/Raspberry-Pi-Status Os dejo un vídeo de explicación de la instalación y demostración de funcionamiento: Espero que os guste el tutorial. Si tenéis cualquier duda, sugerencia o lo que sea, dejad un comentario.

[ACTUALIZACIÓN 05-01-2014]

Añadido el Up Time y lista de procesos al panel de monitorización. Autor: Alorma Captura de pantalla: panel monitorizacion raspberry pi node js ¡Un saludo!

30 comentarios


Moises Serrano · Hace 1 año

Saludos, exelente tutorial, funciona a la perfeccion en mi rpi2 :D

Matias Nabarro · Hace 1 año

Mario, gracias por compartir. Estoy iniciandome en el desarrollo web con un propósito/proyecto particular: un visualizador de información en tiempo real corriendo en la Rpi3. He seguido el paso a paso y logro ver el panel de status en mi PC (en la misma red que la Pi) pero no así en la Pi mediante Epiphany. Cuando apunto a la dirección, me muestra en texto el contenido del archivo js, no lo intepreta. Lo primero que pensé es que estaría de alguna forma deshabilitado el soporte para js pero; direccionando una web cualquiera, por ejemplo www.highcharts.com, veo todo el contenido sin problemas. No entiendo por que mi navegador Chrome lo ve bien pero Epiphany no. Te agradezco si me das una mano con el tema. Saludos desde Neuquén, Argentina.

Alex · Hace 1 año

Que navegador utilizas?

Angy · Hace 1 año

hola, al momento de clonar me pide un username y un password, que puedo hacer?? un saludo

Panel de monitorización para Raspberry Pi con Node.js | Bitácora del Capitán · Hace 1 año

[…] https://geekytheory.com/panel-de-monitorizacion-para-raspberry-pi-con-node-js/ […]

Luis · Hace 1 año

hola recien lo instale y me ha gustado pero note que en el uptime no sale como deberia dice: 1:51,1user, revise el server.js y encontre esto child = exec("uptime | tail -n 1 | awk '{print $3 $4 $5}'" solo lo edite un poco para mi version de la raspberry ("Raspbian GNU/Linux 8 (jessie)") child = exec("uptime | awk '{print $1}'" y ahora lo muestra bien 02:01:41

antonio · Hace 1 año

Hola A fecha de hoy a alguien le funciona este tutorial. yo estoy teniendo problemas cuando ejecuto, npm install se queda pillado,

Vicente Retamal · Hace 2 años

Hola, al instalar queda pegado en npm http 200 http://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz y no termina la instalación, ya lleva unos 20 minutos en esa etapa. Alguna idea de por qué pasa esto? (soy nuevo con la RasPi) Saludos!

Rubén Navarro · Hace 2 años

Habría alguna forma de añadir un pass para no poder acceder directamente al monitor? Gracias

J_4lexander · Hace 2 años

Por favor me indica qué librería se usa para hacer esos gráficos? Necesito convertir en gráficos unos datos de GPIO BeagleBone Black. Gracias.

Jafet Juan · Hace 2 años

Para los que tienen problemas al instalar las dependencias con npm por culpa de la versión de nodejs (nodejs -v) simplemente ejecutar estos comandos y reiniciar la raspberry pi: wget http://node-arm.herokuapp.com/node_latest_armhf.deb sudo dpkg -i node_latest_armhf.deb sudo reboot

Guest · Hace 2 años

Para los que tienen problemas con la versión de node.js (nodejs -v) y no pueden instalar varios packages por esta razón simplemente ejecutar estos comandos y reiniciar la dpi: wget http://node-arm.herokuapp.com/node_latest_armhf.deb sudo dpkg -i node_latest_armhf.deb sudo reboot

tezma90 · Hace 2 años

Hello, can you suggest me a way to start the monitoring panel at boot? I tried adding a nodejs /mypath/server.js to /etc/rc.local but the page is visualized without any data

Javi Sanchez · Hace 2 años

Se puede hacer lo mismo pero con sensores de temperatura externos? tipo LM35 o DS18b20?

Mario Pérez Esteso · Hace 2 años

Hola Javi. Sí, creo que sí. Lo investigo y si puedo hago un post. Si sacas tú algo, a ver si nos iluminas.

Cisko.fr · Hace 2 años

top -d 0.5 -b -n2 | grep 'Cpu(s)'|tail -n 1 | awk '{print $2 + $4}' Give me always "99" I wrote a function to calculate CPU usage from /proc/stat that works fine for me. PREV_TOTAL=0; PREV_IDLE=0; setInterval(function(){ child = exec("cat /proc/stat | grep '^cpu '", function (error, stdout, stderr) { if (error !== null) { console.log('exec error: ' + error); } else { CPU = stdout.match(/[0-9]+/g); IDLE=CPU[3] TOTAL=CPU.reduce(function(pv, cv) { return (parseInt(pv) + parseInt(cv)); }, 0); DIFF_IDLE = IDLE - PREV_IDLE; DIFF_TOTAL = TOTAL - PREV_TOTAL; DIFF_USAGE = (1000 * (DIFF_TOTAL - DIFF_IDLE) / DIFF_TOTAL)/10; PREV_TOTAL=TOTAL; PREV_IDLE=IDLE; //Es necesario mandar el tiempo (eje X) y un valor de temperatura (eje Y). var date = new Date().getTime(); socket.emit('cpuUsageUpdate', date, parseFloat(DIFF_USAGE.toFixed(2))); } });}, 10000);

Álvaro Valdebenito · Hace 2 años

Muy bueno el tutorial. Estoy construyendo una estación de monitoreo de la calidad del aire. Voy a usar tu tutorial como base para la gratifica de los datos.

Dani · Hace 3 años

Muy bueno el script, pero para correrlo por background como deberiamos hacer? Gracias!

TUTORIAL RASPBERRY PI - CÓMO PUBLICAR UNA WEB MEDIANTE GIT | Geeky Theory · Hace 3 años

[…] instalar la Raspberry Pi, montar nuestro servidor, y trastear un poco con él, puede que se nos ocurra montar nuestra propia […]

luisdiazugena · Hace 3 años

Ya esta arreglado, un pequeño fallo al instalar los npm en la carpeta... he desinstalado y vuelto a instalar y todo perfecto!

luisdiazugena · Hace 3 años

hola! un genial tutorial, pero cuando llego a la ultima parte, me pone esto en el terminal... root@raspberrypi:/home/pi/Raspberry-Pi-Status# npm install root@raspberrypi:/home/pi/Raspberry-Pi-Status# ls index.html node_modules package.json README.md server.js root@raspberrypi:/home/pi/Raspberry-Pi-Status# cd node_modules root@raspberrypi:/home/pi/Raspberry-Pi-Status/node_modules# ls socket.io root@raspberrypi:/home/pi/Raspberry-Pi-Status/node_modules# cd .. root@raspberrypi:/home/pi/Raspberry-Pi-Status# nodejs server.js module.js:337 throw new Error("Cannot find module '" + request + "'"); ^ Error: Cannot find module 'zeparser' at Function._resolveFilename (module.js:337:11) at Function._load (module.js:279:25) at Module.require (module.js:359:17) at require (module.js:375:17) at Object. (/home/pi/Raspberry-Pi-Status/node_modules/socket.io/node_modules/socket.io-client/node_modules/active-x-obfuscator/index.js:1:78) at Module._compile (module.js:446:26) at Object..js (module.js:464:10) at Module.load (module.js:353:32) at Function._load (module.js:311:12) at Module.require (module.js:359:17) root@raspberrypi:/home/pi/Raspberry-Pi-Status# alguna idea de como puedo arreglarlo?

bedia · Hace 2 años

a mi me ocurre exactamente lo mismo! alguna solucion? :)

hawk007_7 · Hace 1 año

Solucionado: https://github.com/GeekyTheory/Raspberry-Pi-Status/issues/5 Hacer: npm install socket.io-client

diego · Hace 3 años

muy bueno!! consulta cuando cierro el ssh dejo de tener la pagina como puedo hacer para que no pase.? gracias y saludos

yavimaya · Hace 3 años

Hola, Intento instalar este monitor , pero me da el siguiente error: root@raspberrypi:~/Raspberry-Pi-Status# npm install npm ERR! Couldn't read dependencies. npm ERR! Error: ENOENT, open '/root/Raspberry-Pi-Status/package.json' npm ERR! You may report this log at: npm ERR! npm ERR! or use npm ERR! reportbug --attach /root/Raspberry-Pi-Status/npm-debug.log npm npm ERR! npm ERR! System Linux 3.10.25+ npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" npm ERR! cwd /root/Raspberry-Pi-Status npm ERR! node -v v0.6.19 npm ERR! npm -v 1.1.4 npm ERR! path /root/Raspberry-Pi-Status/package.json npm ERR! code ENOENT npm ERR! message ENOENT, open '/root/Raspberry-Pi-Status/package.json' npm ERR! errno {} npm ERR! npm ERR! Additional logging details can be found in: npm ERR! /root/Raspberry-Pi-Status/npm-debug.log npm not ok Saludos

yavimaya · Hace 3 años

Ya lo he solucionado, era una tontería. Simplemente no estaba en el directorio adecuado ;)

Alberto · Hace 3 años

Muchas gracias por compartirlo, buscaba algo parecido desde hace tiempo. Solo un par de dudas: si sale una nueva versión, ¿cómo se actualiza?, ¿habría que clonar el repositorio otra vez e instalarlo o con clonarlo nuevamente ya sería suficiente?. Y otra cosa, ¿para desinstalarlo completamente? ¿Cómo se comporta en el tema de consumo de recursos?, me da la impresión que tengo la raspi un poco saturada y no sé si esto le restaría más capacidad. Gracias!!!

Monitor de recursos para tu Raspberry Pi - Somos Binarios · Hace 3 años

[…] proyecto que hoy os presentamos está realizado por los chicos de GeekyTheory pero la verdad, al realizar la instalación en XBian (nuestra distribución habitual para Raspberry […]

Somos Binarios · Hace 3 años

Gran aplicación, estamos escribiendo un post sobre ello en nuestra comunidad ( somosbinarios.es ) donde también hablamos de Raspberry Pi nos encanta el proyecto e intentaremos contribuir con él

Mario Pérez Esteso · Hace 3 años

¡Gracias! Pasad el enlace en cuanto lo tengáis, que tengo ganas de leerlo. En cuanto a contribuir, sois libres de hacer fork del proyecto ;)

Somos Binarios · Hace 3 años

El link es este http://www.somosbinarios.es/monitor-raspberry-pi-navegador/ y he mando un commit (espero que te llegue, porque es el primero que hago y no me manejo mucho) que cambia algunas cosas. Porque en XBIan no nos funcionaba ni la temperatura ni el % de CPU y he realizado algunos cambios, que creo, ahora funcionan en todas las distribuciones

Mario Pérez Esteso · Hace 3 años

Para que me lleguen las modificaciones, tenéis que hacer un Pull Request. Si no, es como si tenéis una rama independiente de la mía. ¡Un saludo!

Somos Binarios · Hace 3 años

Ahora lo acabo de hacer, sorry, es la primera vez que trabajo con esto

alebambi81 · Hace 3 años

Hello, I managed to install the panel and I can access to it but I noticed that the CPU load is always between 90-100%. I checked with the top command in another window and as you can see from the picture http://it.tinypic.com/r/svknkn/5 the CPU load is less than 1%. Am I confused? Thanks!

Mario Pérez Esteso · Hace 3 años

Hello Alebambi81. This project is still under development. The graphs show what the code read from some Linux files. It could be a bug. I'll check it out :)

Dani · Hace 3 años

Como podriamos parar el servicio? Salen constantemente las actualizaciones en la consola y es un tanto molesto. Por lo demas genial el tutorial! PD: tengo ocupado el 85% de la memoria, y en el top de aplicaciones me aparece el Apache, significa que es el que mas consume no? Hay otros servidores web mas eficientes? Un saludo!

Libor Gabaj · Hace 3 años

I got an error npm ERR! Error: failed to fetch from registry: socket.io I had to execute the command (see http://stackoverflow.com/questions/12913141/installing-from-npm-fails) npm config set registry http://registry.npmjs.org/ before npm install. Probably, it is not only a problem at my raspi and it should be mentioned in the tutorial.

Mario Pérez Esteso · Hace 3 años

Thank you for the tip Libor. I will update the post to add your info.

Alorma · Hace 3 años

Muchisimas grácias! Tengo un par de dudas! Com se podria tener más e un servicio activo? cambiando el puerto y ya esta? -- >Me respondo ami mismo, si asi funciona. Como puedo acceder al GPIO? Podrias poner algun tutorial usando NodeJs?

Mario Pérez Esteso · Hace 3 años

Por cierto, acabo de ver el pull request que has hecho. ¡Mola! Gracias por el aporte ;)

Mario Pérez Esteso · Hace 3 años

Hola Alorma. Sí, en cuanto tenga un rato quiero hacer cosas con los GPIO (son fechas complicadas). ¡Un saludo!

rauloc04 · Hace 3 años

Muy bueno el tutorial, yo seguí el de la gráfica de temperatura y funciona muy bien, lo que me gustaría es poner arrancar el servidor cuando inicie mi Raspberry y también poder acceder a la pagina de la monitorización desde Internet fuera de la red local. Si me pueden hacer el favor de decirme como hacerlo, se lo agradecería. Un saludo y gracias por el aporte.

Mario Pérez Esteso · Hace 3 años

Hola Rauloc04. Para acceder al panel desde fuera de la red local tiene que abrir los puertos en tu router y redirigirlos a tu Raspberry Pi. En este caso sería el puerto 8000. Luego, simplemente introduce en el navegador tu dirección IP pública. ¡Un saludo!

Deja un comentario