今回はRaspberry Piとオムロン環境センサを使用し、そのアプリケーションの自動起動や監視、遠隔更新をisaaxで実現し、ログを可視化する方法について説明します。

 

動作確認に必要なモノは下記です。

(isaax勉強会ではあらかじめ用意したSDカードを使います)

 

必要物

  • Raspberry Pi 3+
  • microUSBの電源 5V2A
  • WiFiまたは有線LAN (3, Zero W以外のモデルはUSBドングルが必要です)
  • SDカード (4GB以上)
  • オムロン環境センサ

 

使用するコードは下記2つです。

 

全体の流れ

1.Raspbian+Influxdb+Grafanaの入ったmicroSDでRaspberry Piを起動
(IPを調べるので、着席後すぐにRaspberry Piを起動し、XSHELLメンバーを呼んでください)

2.環境センサ用コードをisaax化しRaspberry Piにデプロイ

3.環境センサ用コードで取得したCSVファイルをInfluxdbに取り込み、Grafanaで可視化

 

課題1:環境センサ用コードをInfluxdbへ直接データを流し込むように編集

 

課題2:別ライブラリでの実装

 

 

課題3:受信データのフィルタリング

 

 

1.Raspbian+Influxdb+Grafanaの入ったmicroSDでRaspberry Piを起動

 

受付でお配りしたmicroSDをRaspberry Piに挿入し、LANケーブルを接続してからmicroUSBケーブルを挿して電源を入れます。

電源が入ったらIPアドレスを調べるので、スタッフをお呼びください。

 

2.環境センサ用コードをisaax化しRaspberry Piにデプロイ

 

起動したらGithub上の環境センサ用コードをフォークします。

 

フォークできたら、README.mdと同じ一番上の階層にisaax.jsonを作成します。

 

isaax.json


{
    "description": "Omron Data Collection Program",
    "scripts": {
        "start": "python ./envsensor-observer-py/envsensor_observer.py"
    }
}

 

isaax.jsonの作成が完了したら、フォークしたリポジトリを使ってisaaxプロジェクトを作成し、プログラムをデバイスへデプロイします。

isaaxプロジェクトの作成方法は、月初に行なっている勉強会用テキストの「プロジェクトの作成」を参考にしましょう。

基本的には。。。

1.githubアカウントを使ってisaaxにログイン

2.新規プロジェクトを作成(isaaxとgithubリポジトリの紐付け)

3.isaaxdをデバイスへインストール(デバイスを上記2で作成したプロジェクトに紐付け)

の3ステップです。

 

isaaxにプロジェクトを作成しisaaxdがデバイスにインストールされた時点で、github上のプログラムがRaspberry Piにデプロイされて実行されます。

 

プログラムが実行されたら、

/var/isaax/log/project.log

もしくはisaaxのデバイスログページにログが出力されます。

 

 

 

実行がうまくいくと、Raspberry Pi上に

/var/isaax/project/envsensor-observer-py/log/env_sensor_log.csv

としてセンサーから取得したログが作成されます。

 

3.環境センサ用コードで取得したCSVファイルをInfluxdbに取り込み、Grafanaで可視化

 

前項目で取得した

/var/isaax/project/envsensor-observer-py/log/env_sensor_log.csv

csvファイルをInfluxDBへ取り込むプログラムを使用し、Raspberry Pi上にインストールしてあるInfluxDBへ流し込みます。

Raspberry Pi上でgit cloneし下記書式で実行してください。


python ./csv-to-influxdb.py --dbname お好きなDB名 --input csvファイル --tagcolumns "タグ指定するカラム名" --fieldcolumns "データの入っているフィールド名をカンマ区切りで列挙" -tc 時刻のカラム名

 

今回の場合は下記になります。

 


python ./csv-to-influxdb.py --dbname test --input /var/isaax/project/envsensor-observer-py/log/env_sensor_log.csv --tagcolumns "Gateway,Address,Type" --fieldcolumns "RSSI (dBm),Distance (m),Sequence No,Battery (mV),Temperature (degC),Humidity (%%RH),Light (lx),UV Index,Pressure (hPa),Noise (dB),Discomfort Index,Heat Stroke Risk,AccelX (mg),AccelY (mg),AccelX (mg)" -tc Time

 

取り込みがうまくいくと下記のようになります。


root@raspberrypi:/var/isaax/project/envsensor-observer-py/log/csv-to-influxdb# python ./csv-to-influxdb.py --dbname test --input /var/isaax/project/envsensor-observer-py/log/env_sensor_log.csv --tagcolumns "Gateway,Address,Type" --fieldcolumns "RSSI (dBm),Distance (m),Sequence No,Battery (mV),Temperature (degC),Humidity (%%RH),Light (lx),UV Index,Pressure (hPa),Noise (dB),Discomfort Index,Heat Stroke Risk,AccelX (mg),AccelY (mg),AccelX (mg)" -tc Time
Deleting database test
Creating database test
Read 2573 lines
Inserting 2573 datapoints...
Wrote 2573, response: True
Done

 

取り込めたらローカルPCのブラウザからRaspberry Pi上のgrafana(ポート3000)にアクセスします。

 

Raspberry PiのIP:3000

 

アクセスできると下記画面が表示されます。デフォルトのログイン設定は下記です。

username:admin

password:admin

 

ログインできたら、左側の歯車のアイコンをクリックし、「Data Sources」を選択し、「Add data source」をクリックします。

 

 

Data sourceとして時系列DBであるInfluxDB(Raspberry Piにインストール済み)を指定します。

最低限設定が必要なのは下記画像の赤枠で囲った6点です。


Name:単なるラベルなのでなんでも良いです
Type:InfluxDB
URL:http://localhost:8086 #Raspberry Pi上にインストールしてあるInfluxDBを指定
Database:csvファイルを取り込む際に指定したDB
User:root
Password:root

 

設定ができたら画面下の「Save&Test」ボタンを押して保存します。

うまく接続できたら下記チェックが表示されます。

 

 

 

うまくinfluxDBとの接続設定ができたら、画面左側のウィンドウアイコン->Homeとクリックします。

 

ダッシュボードへ移動するので、次に画面右側の「New dashboard」をクリックし、「Graph」を選択します。

 

grafanaのデフォルトのデータを使用したグラフが表示されます。

表示するデータを変更するために、Panel Title -> Editをクリックします。

 

編集画面に切り替わったら、画面中央の「Data Source」のdefaultをクリックし、先ほど作成したInfluxDBのData Sourceを選択します。

 

 

選択できたら次にクエリを設定します。クエリで取り出したデータがグラフとして表示されます。

Data Source項目の直下の項目を編集し設定します。

目のアイコンの左隣のアイコンをクリックし、「Toggle Edit Mode」を選択します。

 

クエリを「SELECT * FROM value」に変更し、目のアイコンをクリックします。

一瞬SQL言語かと思いますが、SQLライクな言語だそうです。

詳しくはInfluxQLをご覧ください。

queryが動作したらグラフ下に項目名が列挙されます。

 

 

項目名が表示されているのにグラフが表示されない場合は、表示範囲がずれていたり遅延している可能性があります。

画面右上の虫眼鏡アイコンや表示期間を指定するカレンダーをいじってみましょう。

 

初期状態だとバッテリーや気圧など比較的一定のグラフが邪魔をして視認性がよく無いので、うまく表示できたら、グラフ上をドラッグして表示範囲を狭めたり、不要な項目を非表示にしてみましょう。

シフトを押しながら複数選択できるので、上記のようなグラフから必要な項目だけ選択すれば、下記のように表示することが可能です。

 

queryの時点で表示する項目だけ選別することも可能です。


SELECT "Distance (m)","RSSI (dBm)" FROM value

上記を設定すると下記のようなグラフを表示できます。

 

グラフの表示ができたら、右上の戻るボタンでダッシュボードに戻ります。

 

 

ダッシュボードへ戻ったら画面上部のフロッピーアイコンで保存します。

 

 

課題1:環境センサ用コードをInfluxdbへ直接データを流し込むように編集

 

 

フォークしたソースコードを編集し、Influxdbへ直接ログを流し込むように作り変えてみましょう。

ヒント:envsensor-observer-py/conf.py

 

 

 

課題2:別ライブラリでの実装

サンプルスクリプトはpython2でしか動作しないため、弊社でこれを改造したライブラリを作成しました。 これを使ってcsvを作成し、Influxdbに読み込ませてみましょう。

 

課題3:受信データのフィルタリング

センサーのデバイスアドレスでフィルタリングをして、自分のセンサーログのみ取り込むようにしてみましょう。

これで使用するスクリプトはどちらでも構いません。
*デバイスアドレスを調べる場合はスタッフをお呼びください

Leave a Reply

Your email address will not be published. Required fields are marked *