Як відобразити температуру від внутрішнього датчика на HTML-сторінці?


14

Я просто впадаю в це, і в той час як я можу відображати темп через SSH, я бореться з відображенням його на маленькій веб-сторінці, яку я налаштовував на моєму Pi Apache2. Я наслідував цей приклад http://www.raspberrypi.org/phpBB3/viewtopic.php?t=35487&p=310038, який включив деякий AJAX та скрипт у каталог cgi-bin, але я отримую помилку про те, що $ was not definedце справді безглуздо. з JavaScript, я не маю поняття, де криється помилка. Мені цікаво, чи може це бути каталог cgi-bin. Я просто створив її і не міг знайти інформацію про те, чи потрібно робити щось особливе, щоб дозволити його використання для сценаріїв. Хтось може відповісти на це питання для мене? Якщо це доречно, я запускаю останню версію Raspbian.

Врешті-решт, я хочу занести значення в базу даних та графік з неї, але спочатку все. :)

Головне питання - як я можу відображати температуру на своїй веб-сторінці із внутрішнього датчика?

EDIT

Я спробую першу пропозицію пізніше сьогодні ввечері, коли повернусь додому, але я швидко дістав другий (Леник), який, здається, працює добре. Мені довелося внести деякі зміни, щоб змусити його працювати. Сценарій не створить файл rrd, тому я створив його вручну за допомогою синтаксису, який він використовував у сценарії. Я також змінив UPDATEкоманду, оскільки їй не сподобалося значення, яке передається їй. Мені довелося видалити widthчастину з GRAPHкоманди, тому що вона також призвела до помилки. Потім наприкінці я додав cpтак, щоб він розмістив файл у каталозі зображень веб-сайту, а потім додав*/5 * * * * /home/root/scripts/temprec.sh >/dev/null 2>&1до мого crontab, так що він працює кожні 5 хвилин. Здається, це працює, але поки що лише 4 зразки важко знати напевно. Протягом години або більше я буду мати кращу ідею, чи мої правки спрацювали.

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

Відповіді:


16

$ Звучить так, ніби ви намагаєтеся використовувати jQuery . У такому випадку ви можете також завантажити та встановити його.

Оскільки ви перебуваєте в Pi, я також рекомендую спробувати написати власну веб-програму за допомогою Tornado . Він написаний за допомогою Python (улюблена мова Пі), і мені завжди дуже легко створювати веб-додатки, використовуючи його.

Просто встановіть його за допомогою "sudo apt-get install python-tornado". Я щойно написав мінімалістичний веб-додаток для торнадо, який ви можете спробувати (я не міг цього перевірити), взявши функцію з іншого повідомлення на форумі :

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

Якщо ви запускаєте цю програму ( chmod +x yourprogram.py ; ./yourprogram.py), ви повинні мати змогу вказати свій браузер на http: //raspberrypi.local: 8888 / і побачити вихід.

Оновлення: я просто спробував вищевказаний сценарій вдома, і він працює. Не приємно, але це початок!


Дякую за це Коли я повернуся додому сьогодні, я збираюся дати йому відгук, тому що мені подобається ідея, що стоїть за ним.
Трідо

13

Деякий час тому я написав статтю " Raspberry Pi :: Моніторинг температури процесора за допомогою RRDTOOL " про ту ж проблему. Моє рішення включає температуру прийому від центрального процесора, збереження його в базі даних з круглим роботом та створення хорошого графіка у вигляді .PNG-файлу, який досить просто розмістити на веб-сторінці - просто скопіюйте його куди завгодно. Сподіваюся, вам це стане в нагоді.

введіть тут опис зображення


1
Дякую за це Мені довелося це відредагувати, але я змусив його працювати, і це навчило щось нове про сценарії bash та RRD, про які я мало знаю. Я відредагував свій пост, щоб відобразити те, що я зробив, і, сподіваюся, це допомагає комусь, хто хоче знати, як це зробити.
Тридо

2

Я вважаю, що ви могли захопити та передавати дані зі свого RPi та вставляти їх у браузер із цим пакетом на GitHub .

Ось як виглядає графік: https://plot.ly/~jensb89/12/ .

Створивши графік, ви можете вбудувати його як кадр із цим фрагментом:

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

Ви захочете поміняти своєю URL-адресою в коді. Повідомте мене, якщо у вас є якісь проблеми або я можу допомогти у будь-чому. Також я є частиною Plotly, яку використовували в цьому пакеті.

Ось як це виглядає:

введіть тут опис зображення


Це виглядає дійсно приємно.
Трідо

1

Інші відповіді тут фантастичні. Моє рішення з використанням сценарію оболонки та PHP полягає в наступному:

Зверніть увагу, я це робив на Raspbian Wheezy, тому місце розташування всього мого коду знаходиться /var/www/. Якщо ви користуєтесь Джессі, вона повинна бути в '/ var / www / html /'

По-перше, дозволяє переключити користувача на root (супер користувач):

  • sudo su (і введіть свій пароль)

дістатися до потрібного місця:

  • cd /var/www/ (Wheezy)

Тепер створіть там новий каталог:

  • mkdir scripts

Надайте правильні атрибути:

  • chmod 755 scripts/

Тепер створіть у ньому новий файл, давайте назвемо його "temp.sh"

  • nano scripts/temp.sh

Введіть наступний код:

#!/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зберегти та вийти.

Тепер встановіть атрибути цього файлу:

  • chmod 755 scripts/temp.sh

Тепер створіть новий каталог

  • mkdir include/

Встановити це атрибути

  • chmod 744 include/

Гаразд, тепер давайте запустимо скрипт і протестуємо його вихід:

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

Він повинен відображати щось подібне:

53.5

Дивовижно! Тепер давайте почнемо це запускати раз на хвилину. Ми введемо новий рядок у Crontab.

  • crontab -e

Вставте нижній рядок у нижній частині файлу

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

Ctrl+X- Y- Enterзберегти та вийти.

Тепер нам потрібно відредагувати сторінку, на якій будуть відображатися температури. Тож ми переходимо до редагування файлу PHP:

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

І вставте це у <div>свій вибір:

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

Це зробить це. Просто перезавантажте сторінку, і ви побачите відображення темпів процесора та графічного процесора.

Доданий бонус: Я також люблю змушувати сторінку завантажуватися кожен раз (не дозволяти браузеру кешувати температуру) Для цього я також включаю наступний PHP на самому початку файлу:

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

Примітки. Причина, яка працює для мене, полягає в тому, що вона відображається на "інформаційній панелі" компанії, на сторінці телевізора в моєму кабінеті, яка показує цілу купу графіків (статус сервера, номери користувачів, середні показники завантаження тощо, тощо, тощо) тощо). Я налаштував пі, щоб він був у режимі кіоску (повноекранний браузер під час завантаження за допомогою Iceweasel) і показав одну сторінку, яка автоматично прокручується донизу. Щоб дістатися туди зверху, потрібно приблизно від 4 до 5 хвилин, а потім автоматично перезавантажується, як тільки потрапить на дно. Таким чином, воно перезавантажується раз у раз, минаючи потребу оновити показ температури, використовуючи технологію на стороні клієнта. Я також налаштував його переглядати за допомогою різних CSS / JS на основі агента користувача (без прокрутки, немає поточного часу в куті, немає перезавантаження внизу), але в цій версії я '

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.