Comment afficher la température du capteur interne sur une page HTML?

14

Je ne fais que commencer et même si je peux afficher la température via SSH, j'ai du mal à l'afficher sur la petite page Web que j'ai configurée sur mon Pi exécutant Apache2. J'ai suivi cet exemple http://www.raspberrypi.org/phpBB3/viewtopic.php?t=35487&p=310038 qui incluait de l'AJAX et un script dans le répertoire cgi-bin, mais je reçois une erreur en disant cela $ was not definedet en étant vraiment désemparé avec JavaScript, je n'ai aucune idée de l'endroit où se trouve l'erreur. Je me demande si ce pourrait être le répertoire cgi-bin. Je viens de le créer et je n'ai pas pu trouver d'informations sur si je devais ou non faire quelque chose de spécial pour permettre son utilisation pour les scripts. Quelqu'un peut-il répondre à cette question pour moi? Si cela est pertinent, j'utilise la dernière version de Raspbian.

Finalement, je veux enregistrer les valeurs dans une base de données et en faire un graphique, mais d'abord. :)

La question principale est de savoir comment afficher la température sur ma page Web à partir du capteur interne?

ÉDITER

J'essaierai la première suggestion plus tard ce soir quand je rentrerai à la maison, mais j'ai rapidement mis en route la deuxième (Lenik) qui semble bien fonctionner. J'ai cependant dû faire quelques modifications pour le faire fonctionner. Le script ne créerait pas le fichier rrd, je l'ai donc créé manuellement en utilisant la syntaxe qu'il a utilisée dans le script. J'ai également modifié la UPDATEcommande car elle n'aimait pas la valeur qui lui était transmise. J'ai dû supprimer la widthpartie de la GRAPHcommande car elle a également généré une erreur. Ensuite, à la fin, j'ai ajouté un cpafin qu'il place le fichier dans le répertoire images du site Web, puis ajouté*/5 * * * * /home/root/scripts/temprec.sh >/dev/null 2>&1à mon crontab donc il fonctionne toutes les 5 minutes. Cela semble fonctionner, mais avec seulement 4 échantillons jusqu'à présent, il est difficile de le savoir avec certitude. Dans environ une heure, j'aurai une meilleure idée si mes modifications ont fonctionné.

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

Réponses:

16

Le $ donne l'impression que vous essayez d'utiliser jQuery . Si tel est le cas, vous pouvez également le télécharger et l'installer.

Puisque vous êtes sur le Pi, je recommanderais également d'essayer d'écrire votre propre application Web en utilisant Tornado . Il est écrit en Python (la langue préférée du Pi), et je trouve toujours très facile de créer des applications Web en l'utilisant.

Installez-le simplement en utilisant 'sudo apt-get install python-tornado'. Je viens d'écrire une application web minimaliste sur les tornades, que vous pourriez essayer (je n'ai pas pu la tester), en prenant une fonction d'un autre post du 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()

Si vous exécutez ce programme ( chmod +x yourprogram.py ; ./yourprogram.py), vous devriez pouvoir pointer votre navigateur vers http: //raspberrypi.local: 8888 / et voir la sortie.

Mise à jour: je viens d'essayer le script ci-dessus à la maison, et cela fonctionne. Pas sympa, mais c'est un début!

Arne
la source
Merci pour cela. Quand je rentrerai ce soir, je vais essayer parce que j'aime l'idée derrière ça.
Trido
13

Il y a quelque temps, j'ai écrit un article " Raspberry Pi :: Monitoring CPU temperature with RRDTOOL " sur le même problème. Ma solution consiste à recevoir la température du CPU, à l'enregistrer dans la base de données à tour de rôle et à créer un joli graphique sous forme de fichier .PNG, qui est assez facile à mettre sur la page Web - il suffit de le copier où vous le souhaitez. J'espère que vous le trouverez utile.

entrez la description de l'image ici

lenik
la source
1
Merci pour cela. J'ai dû le modifier, mais je l'ai fait fonctionner et il a enseigné de nouvelles choses sur les scripts bash et RRD que je connais peu. J'ai édité mon message pour refléter ce que j'ai fait et j'espère que cela aide quelqu'un d'autre qui veut savoir comment faire.
Trido
2

Je pense que vous pouvez récupérer et diffuser les données de votre RPi et les intégrer dans le navigateur avec ce package sur GitHub .

Voici à quoi ressemble un graphique: https://plot.ly/~jensb89/12/ .

Une fois que vous avez généré votre graphique, vous pouvez l'intégrer comme un iframe avec cet extrait:

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

Vous voudrez échanger votre URL dans le code. Faites-moi savoir si vous avez des problèmes ou je peux vous aider avec quoi que ce soit. De plus, je fais partie de Plotly, qui a été utilisé dans ce package.

Voici à quoi ça ressemble:

entrez la description de l'image ici

Matthew Sundquist
la source
Ça a l'air vraiment sympa.
Trido
1

Les autres réponses ici sont fantastiques. Ma solution, en utilisant un script shell et PHP est la suivante:

Veuillez noter que j'ai fait cela sur Raspbian Wheezy, donc l'emplacement de tout mon code est /var/www/. Si vous utilisez Jessie, elle devra être dans '/ var / www / html /'

Permet tout d'abord de basculer l'utilisateur vers root (super utilisateur):

  • sudo su (et entrez votre mot de passe)

arriver au bon endroit:

  • cd /var/www/ (Asthmatique)

Créez maintenant un nouveau répertoire:

  • mkdir scripts

Donnez-lui les bons attributs:

  • chmod 755 scripts/

Maintenant, créez un nouveau fichier dedans, appelons-le 'temp.sh'

  • nano scripts/temp.sh

Entrez le code suivant:

#!/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- Enterpour enregistrer et quitter.

Définissez maintenant les attributs de ce fichier:

  • chmod 755 scripts/temp.sh

Créez maintenant un nouveau répertoire

  • mkdir include/

Définissez ses attributs

  • chmod 744 include/

OK, maintenant exécutons le script et testons sa sortie:

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

Il devrait afficher quelque chose comme ceci:

53.5

Impressionnant! Maintenant, faisons fonctionner cela une fois par minute. Nous allons entrer une nouvelle ligne dans le Crontab.

  • crontab -e

Collez la ligne ci-dessous en bas du fichier

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

Ctrl+X- Y- Enterpour enregistrer et quitter.

Maintenant, nous devons modifier la page sur laquelle les températures seront affichées. Nous allons donc éditer le fichier PHP:

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

Et insérez ceci dans le <div>de votre choix:

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

Cela suffira. Rechargez simplement votre page et vous devriez voir les temps CPU et GPU affichés.

Bonus supplémentaire: j'aime aussi forcer la page à se charger à chaque fois (empêcher le navigateur de mettre la température en cache) Pour ce faire, j'inclus également le PHP suivant au tout début du fichier:

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

Remarques: La raison pour laquelle cela fonctionne pour moi est qu'elle est affichée sur un "tableau de bord" d'entreprise, une page sur un téléviseur dans mon bureau qui montre tout un tas de graphiques (état du serveur, numéros d'utilisateur, moyennes de charge, etc., etc., etc). J'ai configuré le pi pour être en mode kiosque (navigateur plein écran au démarrage à l'aide de Iceweasel) et afficher une seule page qui défile automatiquement vers le bas. Il faut environ 4 à 5 minutes pour y arriver par le haut, puis se recharge automatiquement une fois qu'il atteint le fond. Il se recharge donc de temps en temps, sans passer par la nécessité de mettre à jour l'affichage de la température à l'aide d'une technologie côté client. Je l'ai également configuré pour être visualisé en utilisant différents CSS / JS basés sur l'agent utilisateur (pas de défilement, pas d'heure actuelle dans le coin, pas de rechargement en bas), mais sur cette version, je '

Jim
la source