センサーデータの送信
このチュートリアルでは、別途センサーを購入しなくても試すことができる例として Raspberry Pi の CPU に内蔵されている温度センサーの値を MONITOR™ のバリュー・エレメントに送信します
イントロダクションの「MONITOR™ の画面」で述べたとおり、デフォルトで全てのバリュー・エレメントはイナクティブなので、まずそれらの1つをアクティブに変更します
そして、Active に変更したバリュー・エレメントの "value_id" を指定してデータを MONITOR™ に送信するようにデバイスを設定します
MONITOR™ でバリュー・エレメントを アクティブ に変更
1. エレメント・メニューを開く
モバイル・コラップス・ボタン か メニュー・バー から エレメント・メニュー を開きます.
デフォルトでは ビュウ・エレメント だけがアクティブになっています , only one View Element is active
2. アクティブ に変更
バリュー・エレメント を一つ アクティブ に変更して Save します
すぐに中身のないバリュー・エレメントが表示されます
3. value_id を控える
この "value_id" を、データの送信先の指定に使用します
データを送信するようにデバイスを設定
以下で、専用のソフトウェアを利用するように設定する方法と、ご自身で取得したデータを送信するよう設定する方法の2つをご紹介いたします
専用のソフトウェアを利用する方法
Raspberry Pi の CPU 温度を取得して送信するソフト "cputemp" を利用します
コードはこちらで公開しています https://github.com/UedaTakeyuki/cputemp/releases.
1. cputemp をダウンロードして展開
pi@raspberrypi:~ $ wget https://github.com/UedaTakeyuki/cputemp/archive/v_1.0.0.zip
...
v_1.0.0.zip [ <=> ] 2.96K --.-KB/s in 0.1s
2018-09-03 18:12:44 (22.1 KB/s) - ‘v_1.0.0.zip’ saved [3028]
pi@raspberrypi:~ $ unzip v_1.0.0.zip
Archive: v_1.0.0.zip
78d2dc9ddd52936c8dfa2cb918a12879f260f9d7
creating: cputemp-v_1.0.0/
inflating: cputemp-v_1.0.0/LICENSE
inflating: cputemp-v_1.0.0/autostart.sh
inflating: cputemp-v_1.0.0/cputemp.service
inflating: cputemp-v_1.0.0/cputemp.sh
inflating: cputemp-v_1.0.0/loop.sh
inflating: cputemp-v_1.0.0/setid.sh
inflating: cputemp-v_1.0.0/setup.sh
pi@raspberrypi:~ $
2. 展開した cputemp フォルダに移動
pi@raspberrypi:~ $ cd cputemp-v_1.0.0/
pi@raspberrypi:~/cputemp-v_1.0.0 $ ls
autostart.sh cputemp.service cputemp.sh LICENSE loop.sh setid.sh setup.sh
- install depending softwares by setup.sh, with press all Y when get asked as [y/n].
pi@raspberrypi:~/cputemp-v_1.0.0 $ ./setup.sh
...
Setting up bc (1.06.95-9) ...
3. setid.sh コマンドで 先に控えた "value_id" を設定.
例として、先に控えた value_id が仮に "bzglvygr" であれば、以下のように実行します
pi@raspberrypi:~/cputemp-v_1.0.0 $ ./setid.sh bzglvygr
4. cputemp.sh コマンドをテスト.
pi@raspberrypi:~/cputemp-v_1.0.0 $ ./cputemp.sh
{"ok":true}pi@raspberrypi:~/cputemp-v_1.0.0 $
送信に成功すると {"ok":true} と表示され、この時 MONITOR™ の画面ではすぐに送信された値でグラフの描画がはじまります
{"ok":false} の場合、なにかエラーがあります
例えば、以下のように表示された場合
{"ok":false,"reason":"ValueID not valid"}
先に設定した value_id が間違っている可能性が高く、確認してみてください
5. autostart.sh コマンドで 5分間隔でデータを取得して送信するように設定
autostart.sh コマンドをパラメタ --on とともに実行すると、先に設定した cputemp.sh を 5分間隔で実行するようにデバイスに設定されます
pi@raspberrypi:~/cputemp-v_1.0.0 $ ./autostart.sh --on
Removed /etc/systemd/system/multi-user.target.wants/cputemp.service.
Created symlink /etc/systemd/system/multi-user.target.wants/cputemp.service → /home/pi/cputemp-v_1.0.0/cputemp.service.
pi@raspberrypi:~/cputemp-v_1.0.0 $ sudo systemctl status cputemp.service
● cputemp.service - Get cpu temperature data & Post to the monitor
Loaded: loaded (/home/pi/cputemp-v_1.0.0/cputemp.service; enabled; vendor pre
Active: active (running) since Mon 2018-09-03 16:55:44 JST; 1h 41min ago
Main PID: 2140 (loop.sh)
CGroup: /system.slice/cputemp.service
├─2140 /bin/bash /home/pi/cputemp/loop.sh
└─3040 sleep 5m
Sep 03 18:06:08 raspberrypi loop.sh[2140]: Dloa
Sep 03 18:06:14 raspberrypi loop.sh[2140]: [632B blob data]
Sep 03 18:11:14 raspberrypi loop.sh[2140]: {"ok":false,"reason":"no valueid"} %
Sep 03 18:11:14 raspberrypi loop.sh[2140]: Dloa
Sep 03 18:11:21 raspberrypi loop.sh[2140]: [711B blob data]
Sep 03 18:16:21 raspberrypi loop.sh[2140]: {"ok":false,"reason":"no valueid"}/ho
pi@raspberrypi:~/cputemp-v_1.0.0 $ ./autostart.sh --off
Removed /etc/systemd/system/multi-user.target.wants/cputemp.service.
Removed /etc/systemd/system/cputemp.service.
pi@raspberrypi:~/cputemp-v_1.0.0 $ sudo systemctl status cputemp.service
Unit cputemp.service could not be found.
データの送信をご自身で設定する方法
HTTP API の構文は以下です
[url] https://monitor3.uedasoft.com/postvalue.php
[method] post
[parameter] valueid: your value_id.
value: value
この API には以下の制限があります
- 送信間隔は 1分以上であること
例として value_id が abcdefgh だったとして、CPU 温度を取得して前述の API に送信するスクリプトは以下のようになります
your_value_id=bzglvygr
value=`cat /sys/class/thermal/thermal_zone0/temp`
value=`echo "scale=3; $value / 1000" | bc -l`
curl https://monitor3.uedasoft.com/postvalue.php -F valueid=$your_value_id -F value=$value
これを一定時間間隔でおこなうようにデバイスを設定する方法はいくつかあります
Linux の cron に設定する方法もありますし、下記のように while loop を回す loop.sh ファイルを作成し、
your_view_id=abcdefgh
while true; do
value=`cat /sys/class/thermal/thermal_zone0/temp`
value=`echo "scale=3; $value / 1000" | bc -l`
curl https://monitor3.uedasoft.com/postvalue.php -F valueid=$your_value_id -F value=$value
sleep 5m;
これを Linux のサービスとしてシステムの起動時に自動起動するように、定義ファイルを /etc/systemd/system/cputemp.service として作成します
以下のファイルで /path/to/loop.sh の部分をあなたのデバイスの loop.sh パスで置き換えたものが定義ファイルとして利用できます
[Unit]
Description=Get cpu temperature data & Post to the monitor
After=rc-local.service
[Service]
ExecStart=/path/to/loop.sh
Restart=always
#RestartSec=90
RestartSec=30
Type=simple
PIDFile=/var/run/cputemp.pid
[Install]
WantedBy=multi-user.target
そして、systemctl コマンドでサービスをイネーブルに設定します
sudo systemctl daemon-reload
sudo systemctl enable view.service
sudo systemctl start view.service
参考まで、以下のように loop.sh を止めることができます
sudo systemctl stop view.service
また、システムを再起動しても loop.sh が起動しないよう設定を変更するには、以下のようにサービスをディスエーブルにします
sudo systemctl disable view.service
CPU温度の MONITOR™への表示
ブラウザの MONITOR™ 画面の指定したビュー・エレメントですぐにグラフの描画がはじまります