内部センサーの温度を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の最新バージョンを実行しています。

最終的には、データベースに値を記録し、そこからグラフを作成したいのですが、まず最初にしたいことがあります。:)

主な質問は、内部センサーからWebページに温度を表示する方法です。

編集

私は今夜​​遅くに家に帰って最初の提案を試みますが、すぐに2番目の提案(Lenik)を取得しました。それを機能させるためには、いくつかの編集を行う必要がありました。スクリプトはrrdファイルを作成しないため、スクリプトで使用した構文を使用して手動で作成しました。UPDATE渡された値が気に入らなかったため、コマンドも変更しました。同様にエラーをスローしたためwidthGRAPHコマンドからその部分を削除する必要がありました。最後cpに、ウェブサイトの画像ディレクトリにファイルを配置するように追加し、追加しました*/5 * * * * /home/root/scripts/temprec.sh >/dev/null 2>&1crontabに追加して、5分ごとに実行されるようにします。動作しているように見えますが、これまでのところサンプルが4つしかないため、確実に知ることは困難です。1時間ほどで、編集がうまくいったかどうかをよりよく知ることができます。

#!/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を使用して独自のWebアプリケーションを作成することもお勧めします。Python(Piのお気に入りの言語)を使用して記述されており、それを使用してWebアプリケーションを作成することは常に非常に簡単だと感じています。

「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 :: Monitoring CPU temperature with RRDTOOL」を書いた。私のソリューションには、CPUから温度を受け取り、ラウンドロビンデータベースに保存し、.PNGファイルとして素敵なグラフを作成することが含まれています。これは、Webページに簡単に配置できます。役に立つと思います。

ここに画像の説明を入力してください


1
これをありがとう。私はそれを編集しなければなりませんでしたが、私はそれを機能させ、私がほとんど知らないbashスクリプトとRRDに関するいくつかの新しいことを教えました。私は自分のしたことを反映するように投稿を編集しました。これが、これを行う方法を知りたい他の誰かに役立つことを願っています。
トリド

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/ (ヒュージー)

ここに新しいディレクトリを作成します:

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

OK、スクリプトを実行して出力をテストしましょう:

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

次のように表示されます。

53.5

驚くばかり!それでは、1分間に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");
?>

注:これが私のために働く理由は、会社の「ダッシュボード」に表示されることです。私のオフィスのテレビでページ全体が表示され、サーバーステータス、ユーザー数、負荷平均などが表示されます。等)。piをキオスクモード(Iceweaselを使用した起動時のフルスクリーンブラウザー)に設定し、自動スクロールする単一ページを下に表示しました。上部からそこに到達するには約4〜5分かかり、下部に達すると自動的にリロードされます。そのため、クライアント側の技術を使用して温度表示を更新する必要をバイパスして、時々リロードします。また、ユーザーエージェントに基づいて異なるCSS / JSを使用して表示するように設定しました(スクロールなし、コーナーの現在の時間なし、下部のリロードなし)が、そのバージョンでは、

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.