Come posso visualizzare la temperatura dal sensore interno su una pagina HTML?


14

Sto solo entrando in questo e mentre posso visualizzare la temperatura tramite SSH, sto facendo fatica a visualizzarla sulla piccola pagina web che ho impostato sul mio Pi con Apache2. Ho seguito questo esempio http://www.raspberrypi.org/phpBB3/viewtopic.php?t=35487&p=310038 che includeva alcuni AJAX e uno script nella directory cgi-bin, ma ricevo un errore che lo dice $ was not defineded essendo davvero all'oscuro con JavaScript, non ho idea di dove sia l'errore. Mi chiedo se potrebbe essere la directory cgi-bin. L'ho appena creato e non sono riuscito a trovare informazioni sull'opportunità o meno di fare qualcosa di speciale per consentirne l'utilizzo per gli script. Qualcuno può rispondere a questa domanda per me? Se è pertinente, eseguo l'ultima versione di Raspbian.

Alla fine, voglio registrare i valori in un database e creare un grafico da esso, ma prima le cose. :)

La domanda principale è come posso visualizzare la temperatura sulla mia pagina web dal sensore interno?

MODIFICARE

Proverò il primo suggerimento più tardi stasera quando torno a casa, ma ho rapidamente ottenuto il secondo (Lenik) che sembra funzionare bene. Ho dovuto apportare alcune modifiche per farlo funzionare. Lo script non ha creato il file rrd, quindi l'ho creato manualmente usando la sintassi che ha usato nello script. Ho anche modificato il UPDATEcomando poiché non gli piaceva il valore che gli veniva passato. Ho dovuto rimuovere la widthparte dal GRAPHcomando perché ha generato anche un errore. Quindi alla fine, ho aggiunto un in cpmodo che collochi il file nella directory delle immagini del sito Web e quindi aggiunto*/5 * * * * /home/root/scripts/temprec.sh >/dev/null 2>&1al mio crontab in modo che passi ogni 5 minuti. Sembra funzionare, ma con solo 4 campioni finora è difficile saperlo con certezza. Entro circa un'ora avrò un'idea migliore se le mie modifiche hanno funzionato.

#!/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

Risposte:


16

$ Sembra che tu stia provando a usare jQuery . In questo caso, potresti voler scaricare e installarlo pure.

Dato che sei sul Pi, ti consiglio anche di provare a scrivere la tua applicazione web usando Tornado . È scritto usando Python (la lingua preferita di Pi), e trovo sempre molto facile creare applicazioni web che lo utilizzano.

Basta installarlo usando 'sudo apt-get install python-tornado'. Ho appena scritto un'app web tornado minimalista, che potresti provare (non ho potuto provarlo), prendendo una funzione da qualche altro post del forum :

#!/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()

Se esegui questo programma ( chmod +x yourprogram.py ; ./yourprogram.py), dovresti essere in grado di puntare il tuo browser su http: //raspberrypi.local: 8888 / e vedere l'output.

Aggiornamento: ho appena provato lo script sopra a casa e funziona. Non carino, ma è un inizio!


Grazie per questo. Quando torno a casa stasera, ci proverò perché mi piace l'idea che c'è dietro.
Trido,

13

Qualche tempo fa ho scritto un articolo " Raspberry Pi :: Monitoraggio della temperatura della CPU con RRDTOOL " sullo stesso problema. La mia soluzione include la ricezione della temperatura dalla CPU, il salvataggio nel database round robin e la creazione di un bel grafico come file .PNG, che è abbastanza facile da mettere sulla pagina Web - basta copiarlo dove vuoi. Spero che lo troverai utile.

inserisci qui la descrizione dell'immagine


1
Grazie per questo. Ho dovuto modificarlo, ma l'ho fatto funzionare e mi ha insegnato alcune cose nuove su script di Bash e RRD di cui so poco. Ho modificato il mio post per riflettere ciò che ho fatto e spero che questo aiuti qualcun altro che vuole sapere come farlo.
Trido,

2

Credo che potresti prendere e trasmettere in streaming i dati dal tuo RPi e incorporarli nel browser con questo pacchetto su GitHub .

Ecco come appare un grafico: https://plot.ly/~jensb89/12/ .

Dopo aver generato il tuo grafico, puoi incorporarlo come iframe con questo frammento:

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

Ti consigliamo di scambiare il tuo URL nel codice. Fammi sapere se hai problemi o posso aiutarti con qualsiasi cosa. Inoltre, faccio parte di Plotly, che è stato utilizzato in questo pacchetto.

Ecco come appare:

inserisci qui la descrizione dell'immagine


Sembra davvero carino.
Trido,

1

Le altre risposte qui sono fantastiche. La mia soluzione, usando uno script di shell e PHP è la seguente:

Nota che l'ho fatto su Raspbian Wheezy, quindi la posizione di tutto il mio codice è in /var/www/. Se stai usando Jessie, dovrà essere in '/ var / www / html /'

Innanzitutto consente di passare l'utente al root (superutente):

  • sudo su (e inserisci la tua password)

arrivare nella posizione corretta:

  • cd /var/www/ (Wheezy)

Ora crea una nuova directory lì:

  • mkdir scripts

Dagli gli attributi corretti:

  • chmod 755 scripts/

Ora crea un nuovo file al suo interno, chiamiamolo 'temp.sh'

  • nano scripts/temp.sh

Inserisci il seguente codice:

#!/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- Enterper salvare ed uscire.

Ora imposta gli attributi di quel file:

  • chmod 755 scripts/temp.sh

Ora crea una nuova directory

  • mkdir include/

Imposta i suoi attributi

  • chmod 744 include/

OK, ora consente di eseguire lo script e testarne l'output:

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

Dovrebbe essere visualizzato qualcosa del genere:

53.5

Eccezionale! Ora, facciamo in modo che funzioni una volta al minuto. Entreremo in una nuova riga nel Crontab.

  • crontab -e

Incolla la riga in basso nella parte inferiore del file

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

Ctrl+X- Y- Enterper salvare ed uscire.

Ora dobbiamo modificare la pagina in cui verranno visualizzate le temperature. Quindi andiamo a modificare il file PHP:

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

E inserisci questo nella <div>tua scelta:

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

Quello lo farà. Ricarica la tua pagina e dovresti vedere le temp della CPU e della GPU visualizzate.

Bonus aggiunto: Mi piace anche forzare il caricamento della pagina ogni volta (impedire al browser di memorizzare la temperatura nella cache) Per fare ciò, includo anche il seguente PHP all'inizio del file:

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

Note: La ragione per cui questo funziona per me è che viene visualizzato su una "dashboard" aziendale, una pagina su una TV nel mio ufficio che mostra un sacco di grafici (stato del server, numeri utente, medie di carico, ecc., Ecc. eccetera). Ho impostato il pi per essere in modalità Kiosk (browser a schermo intero all'avvio utilizzando Iceweasel) e mostrare una singola pagina che scorre automaticamente verso il basso. Ci vogliono circa 4 o 5 minuti per arrivarci dalla cima e poi si ricarica automaticamente quando colpisce la parte inferiore. Quindi si ricarica di tanto in tanto, evitando la necessità di aggiornare il display della temperatura utilizzando una tecnologia lato client. L'ho anche impostato per essere visualizzato utilizzando diversi CSS / JS in base all'agente utente (nessuno scorrimento, nessun orario corrente nell'angolo, nessun ricaricamento in fondo), ma su quella versione, "

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.