Jak wyświetlić temperaturę z czujnika wewnętrznego na stronie HTML?

14

Wchodzę w to i chociaż mogę wyświetlać temperaturę przez SSH, mam problem z wyświetlaniem jej na małej stronie, którą skonfigurowałem na moim Pi z Apache2. Podążyłem za tym przykładem http://www.raspberrypi.org/phpBB3/viewtopic.php?t=35487&p=310038, który zawierał AJAX i skrypt w katalogu cgi-bin, ale pojawia się błąd, mówiąc o tym $ was not definedi będąc naprawdę nieświadomy z JavaScriptem nie mam pojęcia, gdzie leży błąd. Zastanawiam się, czy mógłby to być katalog cgi-bin. Właśnie go stworzyłem i nie mogłem znaleźć informacji o tym, czy muszę zrobić coś specjalnego, aby umożliwić jego użycie w skryptach. Czy ktoś może odpowiedzieć na to pytanie? Jeśli jest to istotne, korzystam z najnowszej wersji Raspbian.

W końcu chcę zarejestrować wartości w bazie danych i z nich wykres, ale najpierw muszę zacząć. :)

Główne pytanie brzmi: jak mogę wyświetlić temperaturę na mojej stronie internetowej z czujnika wewnętrznego?

EDYTOWAĆ

Wypróbuję pierwszą sugestię później wieczorem, kiedy wrócę do domu, ale szybko dostałem drugą (Lenik), która wydaje się działać dobrze. Musiałem jednak wprowadzić pewne zmiany, aby go uruchomić. Skrypt nie utworzyłby pliku rrd, więc utworzyłem go ręcznie, używając składni użytej w skrypcie. Zmodyfikowałem również UPDATEpolecenie, ponieważ nie podobało mu się przekazywana wartość. Musiałem usunąć tę widthczęść GRAPHpolecenia, ponieważ spowodowało to również błąd. Następnie na końcu dodałem cptak, że umieszcza plik w katalogu obrazów witryny, a następnie dodaje*/5 * * * * /home/root/scripts/temprec.sh >/dev/null 2>&1do mojego crontab, więc działa co 5 minut. Wygląda na to, że działa, ale jak na razie tylko 4 próbki trudno jest na pewno wiedzieć. W ciągu około godziny znajdę lepszy pomysł, jeśli moje zmiany zadziałały.

#!/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
źródło

Odpowiedzi:

16

$ Brzmi, jakbyś próbował użyć jQuery . W takim przypadku możesz również pobrać i zainstalować.

Ponieważ jesteś na Pi, poleciłbym również próbę napisania własnej aplikacji internetowej za pomocą Tornado . Jest napisany przy użyciu Pythona (ulubionego języka Pi) i zawsze bardzo łatwo jest tworzyć aplikacje internetowe przy jego użyciu.

Wystarczy zainstalować przy użyciu „sudo apt-get install python-tornado”. Właśnie napisałem minimalistyczną aplikację internetową Tornado, którą możesz wypróbować (nie mogłem jej przetestować), pobierając funkcję z innego postu na forum :

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

Jeśli uruchomisz ten program ( chmod +x yourprogram.py ; ./yourprogram.py), powinieneś być w stanie skierować przeglądarkę na http: //raspberrypi.local: 8888 / i zobaczyć wynik.

Aktualizacja: Właśnie wypróbowałem powyższy skrypt w domu i działa. Nie fajnie, ale to dopiero początek!

Arne
źródło
Dzięki za to. Kiedy wieczorem wrócę do domu, spróbuję, bo podoba mi się pomysł.
Trido
13

Jakiś czas temu napisałem artykuł „ Raspberry Pi :: Monitorowanie temperatury procesora za pomocą RRDTOOL ” o tym samym problemie. Moje rozwiązanie obejmuje odbieranie temperatury z procesora, zapisywanie jej w okrągłej bazie danych i tworzenie ładnego wykresu w postaci pliku .PNG, który dość łatwo można umieścić na stronie internetowej - wystarczy skopiować go gdziekolwiek chcesz. Mam nadzieję, że okażą się przydatne.

wprowadź opis zdjęcia tutaj

Lenik
źródło
1
Dzięki za to. Musiałem go edytować, ale działałem i nauczyłem nowych rzeczy na temat skryptów bash i RRD, o których niewiele wiem. Zredagowałem swój post, aby odzwierciedlić to, co zrobiłem, i mam nadzieję, że pomoże to komuś innemu, kto chce wiedzieć, jak to zrobić.
Trido
2

Wierzę, że możesz pobrać i przesyłać strumieniowo dane ze swojego RPi i osadzić je w przeglądarce za pomocą tego pakietu na GitHub .

Oto jak wygląda wykres: https://plot.ly/~jensb89/12/ .

Po wygenerowaniu wykresu możesz osadzić go jako element iframe za pomocą tego fragmentu:

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

Będziesz chciał zamienić swój adres URL w kodzie. Daj mi znać, jeśli masz jakieś problemy lub mogę w czymś pomóc. Ponadto jestem częścią Plotly, który został użyty w tym pakiecie.

Oto jak to wygląda:

wprowadź opis zdjęcia tutaj

Matthew Sundquist
źródło
To wygląda naprawdę ładnie.
Trido,
1

Pozostałe odpowiedzi tutaj są fantastyczne. Moje rozwiązanie, używając skryptu powłoki i PHP, jest następujące:

Pamiętaj, że zrobiłem to na Raspbian Wheezy, więc lokalizacja całego mojego kodu jest w /var/www/. Jeśli używasz Jessie, będzie musiała znajdować się w '/ var / www / html /'

Po pierwsze pozwala zmienić użytkownika na root (superużytkownik):

  • sudo su (i wprowadź swoje hasło)

dostać się do właściwej lokalizacji:

  • cd /var/www/ (Astmatyczny)

Teraz stwórz tam nowy katalog:

  • mkdir scripts

Podaj poprawne atrybuty:

  • chmod 755 scripts/

Teraz stwórz w nim nowy plik, nazwijmy go „temp.sh”

  • nano scripts/temp.sh

Wpisz następujący kod:

#!/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- Enteraby zapisać i wyjść.

Teraz ustaw atrybuty tego pliku:

  • chmod 755 scripts/temp.sh

Teraz utwórz nowy katalog

  • mkdir include/

Ustaw to atrybuty

  • chmod 744 include/

OK, teraz uruchommy skrypt i przetestujemy jego wynik:

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

Powinien wyświetlać się tak:

53.5

Niesamowite! Teraz uruchommy to raz na minutę. Wejdziemy do nowej linii w Crontab.

  • crontab -e

Wklej poniższy wiersz na dole pliku

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

Ctrl+X- Y- Enteraby zapisać i wyjść.

Teraz musimy edytować stronę, na której będą wyświetlane temperatury. Więc edytujemy plik PHP:

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

I wstaw to w wybranym <div>przez siebie:

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

To wystarczy. Wystarczy ponownie załadować stronę, aby wyświetlić procesor i procesory graficzne.

Dodano premię: lubię też wymuszać ładowanie strony za każdym razem (zapobiegaj buforowaniu temperatury przez przeglądarkę) Aby to zrobić, dołączam również następujący kod PHP na samym początku pliku:

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

Uwagi: Powodem dla mnie jest to, że jest wyświetlany na firmowym „pulpicie nawigacyjnym”, stronie w górę w telewizorze w moim biurze, która pokazuje całą masę wykresów (status serwera, numery użytkowników, średnie obciążenia itp. Itp. itp). Skonfigurowałem pi, aby znajdowało się w trybie kiosku (przeglądarka pełnoekranowa przy rozruchu za pomocą Iceweasel) i wyświetla jedną stronę, która automatycznie przewija się w dół. Dostanie się od góry zajmuje około 4 do 5 minut, a następnie następuje automatyczne ponowne załadowanie, gdy spadnie na dno. Od czasu do czasu ładuje się ponownie, omijając potrzebę aktualizacji wyświetlacza temperatury za pomocą technologii po stronie klienta. Skonfigurowałem również przeglądanie przy użyciu różnych CSS / JS opartych na kliencie użytkownika (bez przewijania, bez aktualnego czasu w rogu, bez ponownego ładowania na dole), ale w tej wersji „

Jim
źródło