Dahili sensörden sıcaklığı bir HTML sayfasında nasıl görüntülerim?


14

Ben sadece içine giriyorum ve temp SSH üzerinden görüntülemek iken, ben Apache2 çalıştıran Pi benim kurulum küçük web sayfasında görüntülemek için mücadele ediyorum. Bu örneği http://www.raspberrypi.org/phpBB3/viewtopic.php?t=35487&p=310038 cgi-bin dizininde bazı AJAX ve komut dosyası içeren bir örnek izledim, ancak bunu söylerken bir hata alıyorum $ was not definedve gerçekten clueless JavaScript ile, hatanın nerede olduğu hakkında hiçbir fikrim yok. Cgi-bin dizini olup olmadığını merak ediyorum. Sadece oluşturdum ve komut dosyaları için kullanımını etkinleştirmek için özel bir şey yapmak zorunda olup olmadığım hakkında bilgi bulamadım. Birisi bana bu soruyu cevaplayabilir mi? İlgili ise, Raspbian'ın en son sürümünü kullanıyorum.

Sonunda, bir veritabanı ve grafik değerlerini günlüğe kaydetmek istiyorum, ama önce ilk şeyler. :)

Ana soru, web sitemdeki sıcaklığı dahili sensörden nasıl görüntüleyebilirim?

DÜZENLE

Eve geldiğimde ilk öneriyi daha sonra deneyeceğim, ama çabucak iyi görünen ikinci öneriyi (Lenik) aldım. Çalışması için bazı düzenlemeler yapmak zorunda kaldım. Komut dosyası rrd dosyasını oluşturmaz bu yüzden komut dosyasında kullandığı sözdizimini kullanarak el ile oluşturdum. UPDATEKomutu, kendisine iletilen değeri beğenmediğinden de değiştirdim . Ben de bir hata attı çünkü widthbölümü GRAPHkomuttan kaldırmak zorunda kaldı . Sonunda, cpdosyayı web sitesinin resimler dizinine yerleştirecek şekilde ekledim ve ekledim*/5 * * * * /home/root/scripts/temprec.sh >/dev/null 2>&1crontab'ım için her 5 dakikada bir çalışır. Çalışıyor gibi görünüyor, ancak şimdiye kadar sadece 4 örnekle kesin olarak bilmek zor. Bir saat içinde, düzenlemelerimin işe yaraması halinde daha iyi bir fikrim olacak.

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

Yanıtlar:


16

$, JQuery kullanmaya çalışıyormuş gibi geliyor . Bu durumda, indirip yüklemek de isteyebilirsiniz.

Pi'de olduğunuz için Tornado kullanarak kendi web uygulamanızı yazmaya çalışmanızı tavsiye ederim . Python (Pi'nin en sevdiği dil) kullanılarak yazılmıştır ve onu kullanarak web uygulamaları oluşturmayı her zaman çok kolay buluyorum.

Sadece 'sudo apt-get install python-tornado' kullanarak yükleyin. Sadece başka bir forum gönderisinden bir işlev alarak deneyebileceğiniz (test edemedim) minimalist bir kasırga web uygulaması yazdım :

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

Bu programı ( chmod +x yourprogram.py ; ./yourprogram.py) çalıştırırsanız , tarayıcınızı http: //raspberrypi.local: 8888 / adresine yönlendirip çıktıyı görebilmeniz gerekir.

Güncelleme: Yukarıdaki betiği evde denedim ve işe yarıyor. Hoş değil, ama bir başlangıç!


Bunun için teşekkürler. Bu gece eve döndüğümde bir deneyeceğim çünkü arkasındaki fikri seviyorum.
Trido

13

Bir süre önce aynı sorun hakkında " Raspberry Pi :: RRDTOOL ile CPU sıcaklığının izlenmesi " adlı bir makale yazdım . Benim çözümüm CPU'dan sıcaklık almak, onu robin veritabanına kaydetmek ve .PNG dosyası olarak güzel bir grafik oluşturmak, web sayfasına koymak oldukça kolay - sadece istediğiniz yere kopyalamak. Umarım faydalı bulursunuz.

resim açıklamasını buraya girin


1
Bunun için teşekkürler. Düzenlemek zorunda kaldım, ama çalıştım ve bash komut dosyası ve RRD hakkında çok az şey bildiğim yeni şeyler öğretti. Görevimi, yaptığım şeyi yansıtacak şekilde düzenledim ve umarım bu, bunu nasıl yapacağını bilmek isteyen başka birine yardımcı olur.
Trido

2

RPH'nizdeki verileri alıp aktarabileceğinize ve GitHub'daki bu paketle tarayıcıya yerleştirebileceğinize inanıyorum .

Bir grafik şöyle görünür: https://plot.ly/~jensb89/12/ .

Grafiğinizi oluşturduktan sonra, bu snippet ile bir iframe olarak gömebilirsiniz:

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

URL'nizi kodda değiştirmek istersiniz. Herhangi bir sorununuz varsa bana bildirin veya herhangi bir konuda yardımcı olabilirim. Ayrıca, bu pakette kullanılan Plotly'nin bir parçasıyım.

İşte böyle görünüyor:

resim açıklamasını buraya girin


Bu gerçekten hoş görünüyor.
Trido

1

Buradaki diğer cevaplar harika. Bir kabuk betiği ve PHP kullanarak benim çözüm aşağıdaki gibidir:

Raspbian Wheezy'de bunu yaptığımı lütfen unutmayın, bu yüzden tüm kodumun konumu /var/www/. Jessie kullanıyorsanız, '/ var / www / html /' içinde olması gerekir

Öncelikle kullanıcıyı root'a geçirelim (süper kullanıcı):

  • sudo su (ve şifrenizi girin)

doğru yere gidin:

  • cd /var/www/ (Hışıltılı)

Şimdi orada yeni bir dizin oluşturun:

  • mkdir scripts

Doğru özellikleri verin:

  • chmod 755 scripts/

Şimdi içinde yeni bir dosya oluşturun, 'temp.sh' diyelim

  • nano scripts/temp.sh

Aşağıdaki kodu girin:

#!/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- Enterkaydetmek ve çıkmak için.

Şimdi bu dosyanın niteliklerini ayarlayın:

  • chmod 755 scripts/temp.sh

Şimdi yeni bir dizin oluşturun

  • mkdir include/

Set 's özelliklerini

  • chmod 744 include/

Tamam, şimdi betiği çalıştıralım ve çıktısını test edelim:

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

Bunun gibi bir şey görüntülemelidir:

53.5

Müthiş! Şimdi, bunu dakikada bir çalıştıralım. Crontab'da yeni bir satıra gireceğiz.

  • crontab -e

Aşağıdaki satırı dosyanın altına yapıştırın

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

Ctrl+X- Y- Enterkaydetmek ve çıkmak için.

Şimdi sıcaklıkların görüntüleneceği Sayfayı düzenlememiz gerekiyor. PHP dosyasını düzenlemeye gidiyoruz:

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

Ve bunu <div>seçiminize ekleyin:

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

Bunu yapacak. Sayfanızı yeniden yükleyin ve CPU ve GPU sıcaklıklarının görüntülendiğini görmelisiniz.

Ek bonus: Ayrıca her seferinde sayfanın yüklenmesini zorlamak istiyorum (tarayıcının sıcaklığı önbelleğe almasını önlemek) Bunu yapmak için, dosyanın başlangıcında aşağıdaki PHP'yi de ekliyorum:

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

Notlar: Bunun benim için çalışmasının nedeni, bir şirket "gösterge tablosunda" görüntülenmesi, ofisimdeki bir TV'de bir sürü grafik gösteren bir sayfa yukarı (sunucu durumu, kullanıcı numaraları, yük ortalamaları vb.), vb). Pi'yi Kiosk Modunda (Iceweasel kullanarak önyüklemede tam ekran tarayıcı) olacak şekilde ayarladım ve otomatik olarak aşağıya doğru kaydırılan tek bir sayfa gösterdim. Yukarıdan oraya ulaşmak yaklaşık 4 ila 5 dakika sürer ve sonra dibe vurduğunda otomatik olarak yeniden yüklenir. Bu nedenle, sıcaklık göstergesini istemci tarafı bir teknoloji kullanarak güncelleme ihtiyacımdan vazgeçerek ara sıra yeniden yükleniyor. Ayrıca kullanıcı aracısı (kaydırma yok, köşede şimdiki zaman yok, altta yeniden yükleme yok) dayalı farklı CSS / JS kullanarak görüntülenecek şekilde ayarladım, ancak bu sürümde, '

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.