¿Cómo visualizo la temperatura del sensor interno en una página HTML?

14

Me estoy metiendo en esto y, aunque puedo mostrar la temperatura a través de SSH, estoy teniendo dificultades para mostrarla en la pequeña página web que configuré en mi Pi con Apache2. Seguí este ejemplo http://www.raspberrypi.org/phpBB3/viewtopic.php?t=35487&p=310038 que incluía algo de AJAX y un script en el directorio cgi-bin, pero recibo un error que dice eso $ was not definedy no tengo ni idea con JavaScript, no tengo idea de dónde radica el error. Me pregunto si podría ser el directorio cgi-bin. Lo acabo de crear y no pude encontrar información sobre si tenía que hacer algo especial para permitir su uso para los scripts. ¿Alguien puede responder esa pregunta por mí? Si es relevante, estoy ejecutando la última versión de Raspbian.

Eventualmente, quiero registrar los valores en una base de datos y graficar desde ella, pero primero lo primero. :)

La pregunta principal es ¿cómo puedo mostrar la temperatura en mi página web desde el sensor interno?

EDITAR

Intentaré la primera sugerencia más tarde esta noche cuando llegue a casa, pero rápidamente obtuve la segunda (Lenik) que parece estar funcionando bien. Sin embargo, tuve que hacer algunas ediciones para que funcione. El script no creó el archivo rrd, así que lo creé manualmente usando la sintaxis que utilizó en el script. También modifiqué el UPDATEcomando ya que no le gustaba el valor que se le estaba pasando. Tuve que eliminar la widthparte del GRAPHcomando porque arrojó un error también. Luego, al final, agregué un cparchivo para que coloque el archivo en el directorio de imágenes del sitio web y luego agregué*/5 * * * * /home/root/scripts/temprec.sh >/dev/null 2>&1a mi crontab para que se ejecute cada 5 minutos. Parece estar funcionando, pero con solo 4 muestras hasta ahora es difícil saberlo con certeza. Dentro de una hora más o menos tendré una mejor idea si mis ediciones han funcionado.

#!/bin/bash
#
# update .rrd database with CPU temperature
#
# $Id: update_cputemp 275 2013-05-16 05:20:56Z lenik $
# Thanks to Lenik @ Raspberrypi.stackexchange.com.
cd /path/to/scripts
# read the temperature and convert .59234. into .59.234. (degrees celsius)
TEMPERATURE=`cat /sys/class/thermal/thermal_zone0/temp`
TEMPERATURE=`echo -n ${TEMPERATURE:0:2}; echo -n .; echo -n ${TEMPERATURE:2}`
/usr/bin/rrdtool update cputemp.rrd N:$TEMPERATURE
/usr/bin/rrdtool graph cputemp.png DEF:temp=cputemp.rrd:cputemp:AVERAGE LINE2:temp#00FF00
cp /path/to/scripts/cputemp.png /path/to/website/images
Trido
fuente

Respuestas:

16

El $ suena como si estuvieras tratando de usar jQuery . Si este es el caso, es posible que desee descargarlo e instalarlo también.

Como estás en Pi, también recomendaría que intentes escribir tu propia aplicación web con Tornado . Está escrito usando Python (el idioma favorito de Pi), y siempre me resulta muy fácil crear aplicaciones web con él.

Simplemente instálelo usando 'sudo apt-get install python-tornado'. Acabo de escribir una aplicación web tornado minimalista, que puedes probar (no podría probar), tomando una función de alguna otra publicación del foro :

#!/usr/bin/env python

import tornado.ioloop
import tornado.web
import os

class MainHandler(tornado.web.RequestHandler):
    def getCPUtemperature( self ):
        res = os.popen('vcgencmd measure_temp').readline()
        return(res.replace("temp=","").replace("'C\n",""))

    def get(self):
        self.write( "Temperature: %s" % ( self.getCPUtemperature() ) )

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

Si ejecuta este programa ( chmod +x yourprogram.py ; ./yourprogram.py), debería poder apuntar su navegador a http: //raspberrypi.local: 8888 / y ver el resultado.

Actualización: acabo de probar el script anterior en casa, y funciona. No es agradable, ¡pero es un comienzo!

Arne
fuente
Gracias por esto. Cuando llegue a casa esta noche, lo intentaré porque me gusta la idea que hay detrás.
Trido
13

Hace algún tiempo escribí un artículo " Raspberry Pi :: Monitoreando la temperatura de la CPU con RRDTOOL " sobre el mismo problema. Mi solución incluye recibir la temperatura de la CPU, guardarla en la base de datos round-robin y crear un buen gráfico como archivo .PNG, que es bastante fácil de poner en la página web, simplemente cópielo donde quiera. Espero que lo encuentres útil.

ingrese la descripción de la imagen aquí

lenik
fuente
1
Gracias por esto. Tuve que editarlo, pero lo puse a funcionar y me enseñó algunas cosas nuevas sobre scripting de bash y RRD de las que sé poco. Edité mi publicación para reflejar lo que hice y espero que esto ayude a alguien más que quiera saber cómo hacer esto.
Trido
2

Creo que podría obtener y transmitir los datos de su RPi e incrustarlos en el navegador con este paquete en GitHub .

Así es como se ve un gráfico: https://plot.ly/~jensb89/12/ .

Una vez que haya generado su gráfico, puede incrustarlo como un iframe con este fragmento:

<iframe id="igraph" src="https://plot.ly/~abhishek.mitra.963/1/400/250/" width="400" height="250" seamless="seamless" scrolling="no"></iframe>

Querrá intercambiar su URL en el código. Avíseme si tiene algún problema o puedo ayudarlo con algo. Además, soy parte de Plotly, que se utilizó en este paquete.

Así es como se ve:

ingrese la descripción de la imagen aquí

Matthew Sundquist
fuente
Esto se ve muy bien.
Trido
1

Las otras respuestas aquí son fantásticas. Mi solución, usar un script de shell y PHP es la siguiente:

Tenga en cuenta que hice esto en Raspbian Wheezy, por lo que la ubicación de todo mi código está en /var/www/. Si está utilizando Jessie, deberá estar en '/ var / www / html /'

En primer lugar, cambiemos de usuario a root (superusuario):

  • sudo su (e ingrese su contraseña)

llegar a la ubicación correcta:

  • cd /var/www/ (Ruidoso)

Ahora cree un nuevo directorio allí:

  • mkdir scripts

Dale los atributos correctos:

  • chmod 755 scripts/

Ahora cree un nuevo archivo en él, llamémoslo 'temp.sh'

  • nano scripts/temp.sh

Ingrese el siguiente código:

#!/bin/bash

cpuTemp0=$(/opt/vc/bin/vcgencmd measure_temp)
cpuTemp0=${cpuTemp0//\'C/}
cpuTemp0=${cpuTemp0//temp=/}

echo CPU: $cpuTemp0 > /var/www/include/temp.txt

Ctrl+X- Y- Enterpara guardar y salir.

Ahora configure los atributos de ese archivo:

  • chmod 755 scripts/temp.sh

Ahora crea un nuevo directorio

  • mkdir include/

Establecer sus atributos

  • chmod 744 include/

OK, ahora vamos a ejecutar el script y probar su salida:

  • cd scripts/
  • ./temp.sh
  • cd ../include/
  • cat temp.txt

Debería mostrar algo como esto:

53.5

¡Increíble! Ahora, hagamos que se ejecute una vez por minuto. Entraremos en una nueva línea en el Crontab.

  • crontab -e

Pegue la línea de abajo en la parte inferior del archivo

* * * * * /var/www/scripts/temp.sh

Ctrl+X- Y- Enterpara guardar y salir.

Ahora necesitamos editar la página en la que se mostrarán las temperaturas. Así que vamos a editar el archivo PHP:

  • cd /var/www/
  • nano index.php

E inserte esto en el <div>de su elección:

<?php require_once("include/temp.txt"); ?>&#176;C

Eso lo hará. Simplemente vuelva a cargar su página y debería ver las temperaturas de CPU y GPU que se muestran.

Bonificación adicional: también me gusta forzar que la página se cargue cada vez (evitar que el navegador almacene en caché la temperatura) Para hacer esto, también incluyo el siguiente PHP al comienzo del archivo:

<?php
    header("Cache-Control: no-cache, no-store, must-revalidate");
    header("Pragma: no-cache");
    header("Expires: 0");
?>

Notas: La razón por la que esto funciona para mí es que se muestra en el "tablero" de la compañía, una página en un televisor en mi oficina que muestra un montón de gráficos (estado del servidor, números de usuario, promedios de carga, etc., etc. etc) He configurado el pi para que esté en modo Kiosk (navegador de pantalla completa en el arranque usando Iceweasel) y muestro una sola página que se desplaza automáticamente hacia abajo. Tarda entre 4 y 5 minutos en llegar desde la parte superior y luego se recarga automáticamente una vez que toca el fondo. Por lo tanto, se recarga de vez en cuando, evitando la necesidad de actualizar la pantalla de temperatura utilizando una tecnología del lado del cliente. También lo configuré para que se vea usando diferentes CSS / JS basados ​​en el agente de usuario (sin desplazamiento, sin hora actual en la esquina, sin recarga en la parte inferior), pero en esa versión, yo '

Jim
fuente