Как отобразить температуру с внутреннего датчика на странице 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.

В конце концов, я хочу записать значения в базу данных и график из нее, но обо всем по порядку. :)

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

РЕДАКТИРОВАТЬ

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

#!/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 (любимый язык Pi), и мне всегда очень легко создавать веб-приложения с его использованием.

Просто установите его, используя '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, о которых я мало знаю. Я отредактировал свой пост, чтобы отразить то, что я сделал, и, надеюсь, это поможет кому-то еще, кто хочет знать, как это сделать.
Trido

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, которая использовалась в этом пакете.

Вот как это выглядит:

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


Это выглядит действительно красиво.
Trido

1

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

Пожалуйста, обратите внимание, что я сделал это на Raspbian Wheezy, так что расположение всего моего кода находится в /var/www/. Если вы используете Джесси, она должна быть в '/ var / www / html /'

Во-первых, давайте переключим пользователя с правами суперпользователя:

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

добраться до нужного места:

  • cd /var/www/ (Свистящие)

Теперь создайте новый каталог там:

  • 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.