前編 ではSORACOM Airと太陽光パネルで作る完全スタンドアローンな計測システムを、主にハードウエアの面から記述しましたが、今回はソフトウェア編です。
前編に記載のとおり、デバイス側は Raspberry Pi Model B+、3GPI 、slee-Piを使用しました。
※前編で記載してませんでしたが、温湿度センサは SHT21 を使用してます
本投稿からのお問い合わせが多く、「Pi-field(パイフィールド)」という名称で、製品化致しました。
詳細は、こちらを参照ください。
今回、ソフトウエア編となりますが、ソフトウエア環境として、クライアント側は fluentd、サーバ側は Google Drive を使用しました。以下、個別に説明を進めます。
サーバ側設定
Google Drive に Fluent Dashboard をセットアップしました。
Fluent Dashboard+Norikraでリアルタイムダッシュボードを7分で作る話 #dockerjp を参考にしました。
サーバサイドに疎いので視覚化が簡単そうなものにしましたが、今回のシステムでは URL が分かれば POST できてしまうので少し不安です。。。デモなどで使う間だけ動作させる分には何とかなると思いますが注意したいです。
あくまでも簡易的な動作確認用のものとご留意ください。
Raspberry Pi 設定
##slee-Pi のセットアップ
slee-Pi を動作させるために必要なパッケージのインストールを行います。
$ sudo bash -c 'echo "deb http://mechatrax.github.io/sleepi ./" > /etc/apt/sources.list.d/sleepi.list'
$ sudo apt-get update
$ sudo apt-get install sleepi-archive-keyring
$ sudo apt-get update
$ sudo apt-get install sleepi-firmware sleepi-utils sleepi-monitor
$ sudo reboot
slee-Pi を i2c 接続の RTC として認識させるためリブートを行います。
##fluentd のセットアップ
fluentd に fluent-plugin-https-json を組み合わせて送信します。
fluentd と fluent-plugin-https-json をインストールして設定ファイルを作成します。
$ sudo apt-get install ruby-dev
$ sudo gem install fluentd fluent-plugin-https-json --source http://rubygems.org/ --no-ri --no-rdoc
$ fluentd --setup ./fluent
sudo gem install
実行時にエラーが出ますが、インストールは完了しています。1
/home/pi/ で作業を行ったので、/home/pi/fluent に設定ファイルが作成されました。
/home/pi/fluent/fluent.conf に以下の設定を追記してデータを Google Drive に送るようにします。
<match demo.**>
type https_json
use_https true
buffer_path /tmp/buffer
buffer_chunk_limit 256m
buffer_queue_limit 128
flush_interval 3s
endpoint <<ENDPOINT URL>>
</match>
<<ENDPOINT URL>> には Fluent Dashboard を導入した '現在のウェブ アプリケーションの URL:' を記述します。
SHT21 のセットアップ
jaques/sht21_python を使ってセンサの値を取得します。
動作には、i2c-tools のパッケージが必要になりますが、sleepi-utils のインストール時にインストール済みです。
wget https://raw.githubusercontent.com/jaques/sht21_python/master/sht21.py
ダウンロードした sht21.py は、i2c0 を使うので Raspberry Pi B+ で使うために i2c1 に変更します。
137行目の
with SHT21(0) as sht21:
を
with SHT21(1) as sht21:
に書き換えます。
SORACOM Air の設定
3GPI で SORACOM Air が使えるように APN を設定します。
$ sudo nmcli con add type gsm ifname "*" con-name SORACOM apn soracom.io user sora password sora
送信
/etc/rc.local の exit 0 の前に以下の内容を追記して10分ごとに送信するようにします。
sleepictl --set alarm "+10min"
fluentd -q -c /home/pi/fluent/fluent.conf &
sleep 30
printf '%d\n' `sleepictl --get voltage` | awk '{print "{\"Vin\":\""$1/1000.0"\"}"}' | fluent-cat demo.sleepi_LINE
printf '%s ' `/home/pi/sht21.py` | awk '{printf "{\"Temp\":\"%.2f\",\"Humi\":\"%.2f\"}", $2, $4}' | fluent-cat demo.sht21_LINE
sleep 30 && shutdown -h now &
10分後に slee-Pi のアラームを設定します。
fluentd が起動するのに時間がかかるので30秒ほど待ちます。
読み出したデータを awk で整形して fluent-cat で送ります。
まとめ
以上、ハードウエア構成中心の前編 に続いて、今回はソフトウエア周りを中心に記載しました。ソフトウエアエンジニアの方からすると、もっと上手いやり方とか、突っ込みどころ多々と思いますが(汗)、ハードウエアの開発等なく、市販品の組合せで動作する完全スタンドアローンな計測システムが、比較的カンタンに実現できることはご理解頂けたのではないかと思います。
メカトラックスではこれからも、ソフトウエアエンジニアの方がハードを意識することなくカンタン活用できるハードウエアを展開していきます。
ご意見、ご質問等、こちらからお気軽にお問い合わせください。
また、メカトラックスの公式facebookページにも情報等随時掲載してまいりますので、こちらにも「いいね!」など宜しくお願い致します。
-
raspbian jessie のパッケージに含まれる SSL の証明書が古いようです。
http://guides.rubygems.org/ssl-certificate-update/ ↩