내부 센서의 온도를 HTML 페이지에 어떻게 표시합니까?


14

나는 이것에 들어가서 SSH를 통해 temp를 표시 할 수 있지만 Apache2를 실행하는 Pi에서 설정 한 작은 웹 페이지에 표시하는 데 어려움을 겪고 있습니다. 이 예제 http://www.raspberrypi.org/phpBB3/viewtopic.php?t=35487&p=310038 에 따라 cgi-bin 디렉토리에 AJAX 및 스크립트가 포함되어 있지만 그 사실 $ was not defined을 알리고 실제로는 우둔하지 않습니다. JavaScript를 사용하면 오류가 어디에 있는지 알 수 없습니다. 그것이 cgi-bin 디렉토리가 될 수 있는지 궁금합니다. 방금 그것을 만들었고 스크립트에 사용할 수 있도록 특별한 작업을 수행 해야하는지 여부에 대한 정보를 찾을 수 없었습니다. 누구든지 저에게 그 질문에 대답 할 수 있습니까? 관련이 있다면 최신 버전의 Raspbian을 실행하고 있습니다.

결국, 값을 데이터베이스에 기록하고 그로부터 그래프를 작성하고 싶지만 먼저해야합니다. :)

주요 질문은 내부 센서에서 웹 페이지의 온도를 어떻게 표시합니까?

편집하다

나는 오늘 밤 집에 도착했을 때 첫 번째 제안을 시도 할 것이지만, 빨리 작동하는 것처럼 보이는 두 번째 제안 (Lenik)을 빨리 얻었습니다. 작동하려면 편집 작업을 수행해야했습니다. 스크립트는 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를 사용하여 자체 웹 응용 프로그램을 작성하는 것이 좋습니다 . 파이썬 (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 /을 가리키고 출력을 볼 수 있어야합니다.

업데이트 : 방금 집에서 위의 스크립트를 시도해 보았습니다. 좋지는 않지만 시작입니다!


고마워 오늘 밤 집에 도착하면 그 아이디어가 마음에 들어서 갈 것입니다.
Trido

13

얼마 전에 나는 같은 문제에 관한 기사 " Raspberry Pi :: RRDTOOL로 CPU 온도 모니터링 "을 썼습니다 . 내 솔루션에는 CPU에서 온도를 받아 라운드 로빈 데이터베이스에 저장하고 멋진 그래프를 .PNG 파일로 만들어 웹 페이지에 쉽게 넣을 수 있습니다. 원하는 곳 어디에서나 복사하십시오. 도움이 되길 바랍니다.

여기에 이미지 설명을 입력하십시오


1
고마워 나는 그것을 편집해야했지만 제대로 작동했고 bash 스크립팅과 RRD에 대해 거의 알지 못하는 새로운 것들을 가르쳤다. 나는 내가 한 일을 반영하기 위해 게시물을 편집했으며 희망적으로 이것은 이것을하는 방법을 알고 싶은 다른 사람에게 도움이되기를 바랍니다.
Trido

2

RPi에서 데이터를 가져와 스트리밍하여 GitHub 의이 패키지로 브라우저에 포함시킬 수 있다고 생각합니다 .

https://plot.ly/~jensb89/12/ 그래프는 다음과 같습니다 .

그래프를 생성 한 후이 스 니펫을 사용하여 그래프를 iframe으로 포함 할 수 있습니다.

<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/. Jessie를 사용하는 경우 '/ var / www / html /'에 있어야합니다.

먼저 사용자를 루트 (수퍼 유저)로 전환 할 수 있습니다.

  • sudo su (그리고 비밀번호를 입력하십시오)

올바른 위치에 도착하십시오 :

  • cd /var/www/ (W)

이제 새 디렉토리를 작성하십시오.

  • 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

대박! 이제 1 분에 한 번 실행하도록하겠습니다. 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

그렇게 할 것입니다. 페이지를 다시로드하면 CPU 및 GPU 온도가 표시됩니다.

추가 보너스 : 또한 매번 페이지를 강제로로드하고 싶습니다 (브라우저가 온도를 캐싱하는 것을 방지하십시오) 이렇게하려면 파일 맨 앞에 다음 PHP도 포함시킵니다.

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

참고 :이 기능이 작동하는 이유는 회사 "대시 보드"에 표시되고 사무실의 TV 페이지에 전체 그래프 (서버 상태, 사용자 번호,로드 평균 등)를 표시하는 페이지가 표시되기 때문입니다. 기타). pi를 키오스크 모드 (Iceweasel을 사용하여 부팅시 전체 화면 브라우저)로 설정하고 맨 아래로 자동 스크롤되는 단일 페이지를 표시합니다. 상단에서 4 분에서 5 분 정도 소요되며 하단에 닿으면 자동으로 다시로드됩니다. 따라서 클라이언트 측 기술을 사용하여 온도 표시를 업데이트 해야하는 필요성을 무시하고 잠시 동안 다시로드됩니다. 또한 사용자 에이전트를 기반으로 다른 CSS / JS를 사용하여 볼 수 있도록 설정했습니다 (스크롤링 없음, 모서리에 현재 시간 없음, 아래쪽에 다시로드 없음).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.