ゆるい空き室モニタをつくる4(時系列DB編)

最終更新日

人感センサの情報をサーバで受取り、他のメディアに配信したり、別の場所で表示したりしたい。

ゆるい空き室モニタをつくる1(M5StickC+PIR編)

ゆるい空き室モニタをつくる1(M5StickC+PIR編)

2022.03.13

ゆるい空き室モニタをつくる2(RPi MQTT Broker編)

ゆるい空き室モニタをつくる2(RPi MQTT Broker編)

2022.03.13

ゆるい空き室モニタをつくる3(Node-RED編)

ゆるい空き室モニタをつくる3(Node-RED編)

2022.03.13

ここまでで、人感センサの値を、ほぼ(数秒単位)リアルタイムにスマホに表示するところまではできた。

しかし、実用的にはどうだろう?知りたいのは、今だけだろうか?

もしかして、たまたまセンサに反応しない位置に移動してるかもしれないし、ちょっと席を外してるかもしれない。
服を着込んで、センサに反応しにくい状態かもしれない。

ということで、センサの値を少しずつ保存して、いつでも見返す、あるいは傾向を推測できるようにする。

influxDB のsetup

データをどこに保存しよう?IoTなら時系列DB。
Node-REDのドライバがあるこということで、influxDBにする。

influxDBのinstall

sudo apt-get instaill influxdb
sudo systemctl enable influxdb

influxDB client のinstall

テストのために、command line 版をinstall

sudo apt-get install influxdb-client

DBの作成

client command でDB test を作成する。

$ influx
Connected to http://localhost:8086 version 1.6.7~rc0
InfluxDB shell version: 1.6.7~rc0
> create database test;
> show databases;
name: databases
name
----
_internal
test

influxDBのテスト

SQL系DBならここでTableを作成するところだが、時系列DBはログみたいなもので、Tableの概念はない。
あるのは、 Measurement というデータのグループ。
とはいえ、言語はSQL like なのはわかりやすくて、助かる。

create table なしに、いきなりinsertマンドを実行する。

  • MEASUREMENT sensor_pir
  • TAG … room2
  • status … on = status=true
> insert sensor_pir,topic=room2 status=true
> select * from sensor_pir;
name: sensor_pir
time                status topic
----                ------ -----
1647129672597792603 true   room2

select 結果では、TAGとFILEDの区別がつかないが、コマンドで確認できる。

FILED

> show field keys;
name: sensor_pir
fieldKey fieldType
-------- ---------
status   boolean

TAG

> show tag keys;
name: sensor_pir
tagKey
------
topic

FILEDは、人感センサのON/OFFなど計測値。TAGは topic にあたり、部屋名 room2 などを設定する。
TAGに fieldType がないのは、string固定だからかな。

Measurement の削除

create なしに使える Measurement。
ただし、作成された後、登録されたカラム(FieldKey)は、データをdeleteしても消えない。
削除するためには、 Measurement をDROPする必要がある。

DROP MEASUREMENT  Measurement名;

Node-RED 上でinfluxDBへ保存を設定

ライブラリ node-red-contrib-influxdb をinstall

influxDBへのinsert

influxdb out のパーツを利用する。

フロー図はこれ。

設定内容は、以下の通り。

  • Server … influxdbのサーバIP(ここでは同じRED-Nodeと同じ
  • influxdb port番号 … 8086
  • DB名 … sensordb
  • Measurement … sensor_pir
  • tag … 部屋名。 topic の base部分。
  • 時系列の単位 … 秒

チェック

command line でinfluxDBの内容を確認すると、こんな感じ。
うーん、単位を秒にしても、値がまるまるだけか。。

> select * from sensor_pir;
name: sensor_pir
time                status topic
----                ------ -----
1647133648000000000 false  room1
1647133652000000000 false  room1
1647133656000000000 false  room1
1647133660000000000 false  room1
1647133664000000000 true   room1

Grafana

ここまで来たらいつか来た道。

Pimoroni Enviro+ からGrafana(2/2)

Pimoroni Enviro+ からGrafana(2/2)

2020.10.22

influxDBの内容をgrafanaで表示してみる。

grafana のsetup

https://grafana.com/tutorials/install-grafana-on-raspberry-pi/

installしたら、web browserで確認

http://サーバIP:3000/

default は、 admin/admin

DataSource の設定

DataSource の設定で、influxDBを入力。

Dashboard の設定

4秒間隔の人感センサのON/OFFを詳細に表示してもしょうがないので、1分毎に何件の status=true の検知データがあったかを棒グラフで表示する。

grafanaには、いい感じのquery UXがあるが、 status=true というところが、GUIでは設定できず。
直接こんなqueryを書いた。

SELECT count("status")
FROM "sensor_pir"
WHERE ("topic" = 'room1' AND status = true) AND $timeFilter
GROUP BY time($__interval) fill(none)

graph style はこんな感じ。


それっぽいグラフが出来た。

スマホだとこんな感じ。直近30分の表示。

PCで直近1時間だと、アイキャッチの通り。
10:25くらいにちょろちょろ、11:10くらいからバシバシセンサが反応している。

つぎは完結編。

ゆるい空き室モニタをつくる5(ゆるいモニタ編)

ゆるい空き室モニタをつくる5(ゆるいモニタ編)

2022.03.13

シェアする