Como faço para exibir a temperatura do sensor interno em uma página HTML?

14

Estou apenas entrando nisso e, embora eu possa exibir a temperatura via SSH, estou tendo dificuldades para exibi-la na pequena página da Web que eu configurei no meu Pi executando o Apache2. Eu segui este exemplo http://www.raspberrypi.org/phpBB3/viewtopic.php?t=35487&p=310038, que incluía algum AJAX e um script no diretório cgi-bin, mas recebo um erro dizendo isso $ was not definede sendo realmente sem noção com JavaScript, não tenho idéia de onde está o erro. Eu estou querendo saber se poderia ser o diretório cgi-bin. Acabei de criar e não consegui localizar informações sobre se eu precisava ou não fazer algo especial para permitir o uso de scripts. Alguém pode responder a essa pergunta para mim? Se for relevante, estou executando a versão mais recente do Raspbian.

Eventualmente, quero registrar os valores em um banco de dados e fazer um gráfico a partir dele, mas primeiro as primeiras coisas. :)

A principal questão é como posso exibir a temperatura na minha página da Web a partir do sensor interno?

EDITAR

Tentarei a primeira sugestão mais tarde, hoje à noite, quando chegar em casa, mas rapidamente consegui a segunda (Lenik), que parece estar funcionando bem. Eu tive que fazer algumas edições para fazê-lo funcionar. O script não criaria o arquivo rrd, então eu o criei manualmente usando a sintaxe que ele usou no script. Também modifiquei o UPDATEcomando, pois ele não gostou do valor que estava sendo passado para ele. Eu tive que remover a widthparte do GRAPHcomando porque também gerou um erro. Depois, no final, adicionei um cppara que ele coloque o arquivo no diretório de imagens do site e depois adicionei*/5 * * * * /home/root/scripts/temprec.sh >/dev/null 2>&1no meu crontab, para que seja executado a cada 5 minutos. Parece estar funcionando, mas com apenas 4 amostras até agora, é difícil saber com certeza. Dentro de uma hora, terei uma idéia melhor se minhas edições funcionarem.

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

Respostas:

16

O $ parece que você pode estar tentando usar o jQuery . Se for esse o caso, convém fazer o download e instalar também.

Como você está no Pi, também recomendo tentar escrever seu próprio aplicativo da Web usando o Tornado . Ele foi escrito usando Python (a linguagem favorita do Pi) e sempre acho muito fácil criar aplicativos da Web usando-o.

Apenas instale-o usando 'sudo apt-get install python-tornado'. Acabei de escrever um aplicativo web tornado minimalista, que você pode experimentar (não pude testá-lo), executando uma função de outro post do fórum :

#!/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 você executar este programa ( chmod +x yourprogram.py ; ./yourprogram.py), poderá apontar seu navegador para http: //raspberrypi.local: 8888 / e ver a saída.

Atualização: Eu apenas tentei o script acima em casa e ele funciona. Não é legal, mas é um começo!

Arne
fonte
Obrigado por isso. Quando eu chegar em casa hoje à noite, vou tentar, porque gosto da idéia por trás disso.
Trido
13

Algum tempo atrás, escrevi um artigo " Raspberry Pi :: Monitorando a temperatura da CPU com RRDTOOL " sobre o mesmo problema. Minha solução inclui receber temperatura da CPU, salvá-la no banco de dados round-robin e criar um bom gráfico como arquivo .PNG, que é bastante fácil de colocar na página da Web - basta copiá-la para onde quiser. Espero que você ache útil.

insira a descrição da imagem aqui

lenik
fonte
1
Obrigado por isso. Eu tive que editá-lo, mas o fiz funcionar e ele ensinou algumas coisas novas sobre o bash scripting e o RRD sobre os quais sei pouco. Editei minha postagem para refletir o que fiz e espero que ajude alguém que queira saber como fazer isso.
Trido 30/07/2013
2

Eu acredito que você pode pegar e transmitir os dados do seu RPi e incorporá-los no navegador com este pacote no GitHub .

Aqui está a aparência de um gráfico: https://plot.ly/~jensb89/12/ .

Depois de gerar seu gráfico, você pode incorporá-lo como um iframe neste snippet:

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

Você deseja trocar seu URL no código. Deixe-me saber se você tiver algum problema ou eu posso ajudar com qualquer coisa. Além disso, faço parte do Plotly, que foi usado neste pacote.

Veja como fica:

insira a descrição da imagem aqui

Matthew Sundquist
fonte
Isso parece muito bom.
Trid #
1

As outras respostas aqui são fantásticas. Minha solução, usando um script de shell e PHP, é a seguinte:

Observe que fiz isso no Raspbian Wheezy; portanto, a localização de todo o meu código está em /var/www/ . Se você estiver usando Jessie, ele precisará estar em '/ var / www / html /'

Primeiro, vamos mudar o usuário para o root (superusuário):

  • sudo su (e digite sua senha)

chegar ao local correto:

  • cd /var/www/ (Chiado)

Agora crie um novo diretório lá:

  • mkdir scripts

Dê a ele os atributos corretos:

  • chmod 755 scripts/

Agora crie um novo arquivo nele, vamos chamá-lo de 'temp.sh'

  • nano scripts/temp.sh

Digite o seguinte 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-Enter para salvar e sair.

Agora defina os atributos desse arquivo:

  • chmod 755 scripts/temp.sh

Agora crie um novo diretório

  • mkdir include/

Defina seus atributos

  • chmod 744 include/

OK, agora vamos executar o script e testar sua saída:

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

Ele deve exibir algo como isto:

53.5

Impressionante! Agora, vamos executar isso uma vez por minuto. Entraremos em uma nova linha no Crontab.

  • crontab -e

Cole a linha abaixo na parte inferior do arquivo

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

Ctrl+X- Y-Enter para salvar e sair.

Agora precisamos editar a página na qual as temperaturas serão exibidas. Então vamos editar o arquivo PHP:

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

E insira isso na <div>sua escolha:

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

Isso fará isso. Basta recarregar sua página e você verá os tempos de CPU e GPU sendo exibidos.

Bônus adicional: eu também gosto de forçar o carregamento da página a cada vez (evite que o navegador armazene em cache a temperatura). Para fazer isso, também incluo o seguinte PHP no início do arquivo:

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

Observações: A razão pela qual isso funciona para mim é que ela é exibida no "painel" da empresa. Uma página em uma TV do meu escritório que mostra vários gráficos (status do servidor, números de usuários, médias de carga, etc, etc, etc). Configurei o pi para estar no modo Kiosk (navegador de tela cheia na inicialização usando o Iceweasel) e mostro uma única página que rola automaticamente até a parte inferior. Demora cerca de 4 a 5 minutos para chegar lá de cima e, em seguida, recarrega automaticamente quando atinge o fundo. Por isso, ele é recarregado de vez em quando, ignorando a necessidade de atualizar a exibição de temperatura usando uma tecnologia do lado do cliente. Também configurei para ser visualizado usando CSS / JS diferentes, com base no agente do usuário (sem rolagem, sem hora atual no canto, sem recarregar na parte inferior), mas nessa versão, eu '

Jim
fonte