Bagaimana cara menampilkan suhu dari sensor internal pada halaman HTML?

14

Saya baru saja membahas hal ini dan sementara saya bisa menampilkan temp melalui SSH, saya berjuang untuk menampilkannya di halaman web kecil yang saya siapkan di Pi saya menjalankan Apache2. Saya mengikuti contoh ini http://www.raspberrypi.org/phpBB3/viewtopic.php?t=35487&p=310038 yang mencakup beberapa AJAX dan skrip dalam direktori cgi-bin, tapi saya mendapatkan kesalahan mengatakan itu $ was not defineddan menjadi benar-benar tidak mengerti dengan JavaScript, saya tidak tahu di mana letak kesalahannya. Saya bertanya-tanya apakah itu bisa menjadi direktori cgi-bin. Saya baru saja membuatnya dan tidak dapat menemukan info apakah saya harus melakukan sesuatu yang khusus atau tidak agar dapat digunakan untuk skrip. Adakah yang bisa menjawab pertanyaan itu untuk saya? Jika relevan, saya menjalankan versi terbaru dari Raspbian.

Akhirnya, saya ingin mencatat nilai ke database dan grafik dari itu, tetapi hal pertama yang pertama. :)

Pertanyaan utama adalah bagaimana saya bisa menampilkan suhu di halaman web saya dari sensor internal?

EDIT

Saya akan mencoba saran pertama nanti malam ketika saya tiba di rumah, tetapi saya dengan cepat mendapatkan yang kedua (Lenik) yang tampaknya bekerja dengan baik. Saya harus melakukan beberapa pengeditan untuk membuatnya bekerja. Script tidak akan membuat file rrd jadi saya membuatnya secara manual dengan menggunakan sintaks yang digunakannya dalam skrip. Saya juga memodifikasi UPDATEperintah karena tidak suka nilai yang diberikan padanya. Saya harus menghapus widthbagian dari GRAPHperintah karena itu melemparkan kesalahan juga. Kemudian pada akhirnya, saya menambahkan cpsehingga menempatkan file di direktori gambar situs web dan kemudian menambahkan*/5 * * * * /home/root/scripts/temprec.sh >/dev/null 2>&1ke crontab saya jadi itu berjalan setiap 5 menit. Tampaknya berhasil, tetapi dengan hanya 4 sampel sejauh ini sulit untuk mengetahui dengan pasti. Dalam satu jam atau lebih saya akan memiliki ide yang lebih baik jika pengeditan saya berhasil.

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

Jawaban:

16

$ Sepertinya Anda mungkin mencoba menggunakan jQuery . Jika ini masalahnya, Anda mungkin ingin mengunduh dan menginstalnya juga.

Karena Anda menggunakan Pi, saya juga merekomendasikan mencoba menulis aplikasi web Anda sendiri menggunakan Tornado . Itu ditulis menggunakan Python (bahasa favorit Pi), dan saya selalu merasa sangat mudah untuk membuat aplikasi web menggunakannya.

Cukup instal menggunakan 'sudo apt-get install python-tornado'. Saya baru saja menulis web-aplikasi tornado minimalis, yang bisa Anda coba (saya tidak bisa mengujinya), dengan mengambil fungsi dari beberapa posting forum lain :

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

Jika Anda menjalankan program ini ( chmod +x yourprogram.py ; ./yourprogram.py), Anda harus dapat mengarahkan browser Anda ke http: //raspberrypi.local: 8888 / dan lihat hasilnya.

Pembaruan: Saya baru saja mencoba skrip di atas di rumah, dan berhasil. Tidak bagus, tapi ini awal!

Arne
sumber
Terima kasih untuk ini. Ketika saya tiba di rumah malam ini saya akan mencobanya karena saya suka ide di baliknya.
Trido
13

Beberapa waktu lalu saya menulis artikel " Raspberry Pi :: Memantau suhu CPU dengan RRDTOOL " tentang masalah yang sama. Solusi saya termasuk menerima suhu dari CPU, menyimpannya ke dalam database round-robin dan membangun grafik yang bagus sebagai file .PNG, yang cukup mudah untuk diletakkan di halaman web - cukup salin ke mana pun Anda inginkan. Saya harap Anda akan merasakan manfaatnya.

masukkan deskripsi gambar di sini

lenik
sumber
1
Terima kasih untuk ini. Saya harus mengeditnya, tapi saya berhasil dan mengajarkan beberapa hal baru tentang bash scripting dan RRD yang saya tahu sedikit tentang. Saya mengedit posting saya untuk mencerminkan apa yang saya lakukan dan mudah-mudahan ini membantu orang lain yang ingin tahu bagaimana melakukan ini.
Trido
2

Saya yakin Anda bisa mengambil dan mengalirkan data dari RPi Anda dan menyematkannya di browser dengan paket ini di GitHub .

Begini tampilannya: https://plot.ly/~jensb89/12/ .

Setelah Anda membuat grafik, Anda dapat menyematkannya sebagai iframe dengan potongan ini:

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

Anda ingin menukar URL Anda dengan kode. Beritahu saya jika Anda memiliki masalah atau saya dapat membantu dengan apa pun. Juga, saya bagian dari Plotly, yang digunakan dalam paket ini.

Begini tampilannya:

masukkan deskripsi gambar di sini

Matthew Sundquist
sumber
Ini terlihat sangat bagus.
Trido
1

Jawaban lain di sini luar biasa. Solusi saya, menggunakan skrip shell dan PHP adalah sebagai berikut:

Harap dicatat Saya melakukan ini pada Raspbian Wheezy, sehingga lokasi dari semua kode saya di /var/www/. Jika Anda menggunakan Jessie, itu harus dalam '/ var / www / html /'

Pertama mari kita alihkan pengguna ke root (pengguna super):

  • sudo su (dan masukkan kata sandi Anda)

sampai ke lokasi yang benar:

  • cd /var/www/ (Wheezy)

Sekarang buat direktori baru di sana:

  • mkdir scripts

Berikan atribut yang benar:

  • chmod 755 scripts/

Sekarang buat file baru di dalamnya, sebut saja 'temp.sh'

  • nano scripts/temp.sh

Masukkan kode berikut:

#!/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- Enteruntuk menyimpan dan keluar.

Sekarang atur atribut file itu:

  • chmod 755 scripts/temp.sh

Sekarang buat direktori baru

  • mkdir include/

Set itu atribut

  • chmod 744 include/

OK, sekarang mari kita jalankan skrip dan uji outputnya:

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

Seharusnya menampilkan sesuatu seperti ini:

53.5

Luar biasa! Sekarang, mari kita jalankan satu menit sekali. Kami akan memasukkan baris baru di Crontab.

  • crontab -e

Rekatkan baris di bawah ini di bagian bawah file

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

Ctrl+X- Y- Enteruntuk menyimpan dan keluar.

Sekarang kita perlu mengedit Halaman di mana suhu akan ditampilkan. Jadi kita pergi mengedit file PHP:

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

Dan masukkan ini ke dalam <div>pilihan Anda:

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

Itu akan melakukannya. Cukup muat ulang halaman Anda dan Anda akan melihat CPU dan GPU temps sedang ditampilkan.

Bonus tambahan: Saya juga suka memaksa halaman untuk memuat setiap kali (mencegah browser dari caching suhu) Untuk melakukan ini, saya juga menyertakan PHP berikut di awal file:

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

Catatan: Alasan mengapa ini berhasil bagi saya adalah karena itu ditampilkan pada "dasbor" perusahaan, Sebuah halaman di TV di kantor saya yang menunjukkan sejumlah grafik (status server, nomor pengguna, rata-rata memuat, dll, dll, dll). Saya telah mengatur pi berada dalam Mode Kiosk (browser layar penuh saat boot menggunakan Iceweasel) dan menunjukkan satu halaman yang menggulir otomatis ke bawah. Dibutuhkan sekitar 4 hingga 5 menit untuk sampai ke sana dari atas dan kemudian memuat ulang secara otomatis setelah menyentuh bagian bawah. Jadi itu memuat ulang sesekali, melewati kebutuhan bagi saya untuk memperbarui tampilan suhu menggunakan teknologi sisi klien. Saya juga mengaturnya agar dilihat menggunakan berbagai CSS / JS berdasarkan agen pengguna (tidak ada bergulir, tidak ada waktu saat ini di sudut, tidak ada memuat ulang di bagian bawah), tetapi pada versi itu, saya '

Jim
sumber