環境センサーでセンシング編:【連載】BIツールで、働き方改革を実践してみた!番外編
▼バックナンバーはこちら▼
◇今回は番外編で、センサーの中を覗きます
本連載では、これまで環境データの計測用にオムロンの環境センサーを利用してきました。
ところでオムロンの環境センサーは「温度」や「湿度」、「光量」など複数のデータをセンシングできるのですが、第3回(本題)に入る前の番外編として今回は、オムロンの環境センサーで実際にはどのようなデータ構造になっており、どのようにデータを保有しているのかをBLE(Bluetooth Low Energy) 通信で覗いてみようと思います。
※本題の環境構築に移る前に横道に逸れて申し訳ありません。 笑
◇用意したもの
*1 「Raspbian」というOSをインストール済のカードを購入しました。
※2020年5月に「Raspbian」から「Raspberry Pi OS」に名称変更しました。
*2 必要なのは構築までなので、既存のものを流用しても構いません。
◇前提
Raspberry Pi(以後、ラズパイ)の環境設定は簡単に調べることができるため割愛しています。事前に準備していただきたい内容は以下の通りです。
◇BLE通信を試す
まずはセンサーがBLE通信をおこなっているかラズパイ上で、スキャンをしてみます。BLE対応デバイスにはBDアドレスと呼ばれる一意の識別アドレスが設定されています。アドレス情報は、購入した箱に同梱されています。
「hcitool」コマンドでデバイスを検索します。
sudo hcitool lescan
LE Scan ...
69:2F:A3:B5:CC:5A (unknown)
CD:DE:AB:02:35:29 Rbt ← 今回使用するセンサーのアドレス
「gatttool」でBLEデバイスに接続します。
※ CD:DE:AB:02:35:29 の部分は対象のアドレスに読み替えてください。
sudo gatttool -t random -b CD:DE:AB:02:35:29 -I
「connect」で接続します。
[CD:DE:AB:02:35:29][LE]> connect
どんなオプションがあるのかヘルプを確認します。
[CD:DE:AB:02:35:29][LE]> help
help Show this help
exit Exit interactive mode
quit Exit interactive mode
connect [address [address type]] Connect to a remote device
disconnect Disconnect from a remote device
primary [UUID] Primary Service Discovery
included [start hnd [end hnd]] Find Included Services
characteristics [start hnd [end hnd [UUID]]] Characteristics Discovery
char-desc [start hnd] [end hnd] Characteristics Descriptor Discovery
char-read-hnd <handle> Characteristics Value/Descriptor Read by handle
char-read-uuid <UUID> [start hnd] [end hnd] Characteristics Value/Descriptor Read by UUID
char-write-req <handle> <new value> Characteristic Value Write (Write Request)
char-write-cmd <handle> <new value> Characteristic Value Write (No response)
sec-level [low | medium | high] Set security level. Default: low
mtu <value> Exchange MTU for GATT/ATT
いろいろとありますが、今回使用するのは primary、characteristics、char-read-hnd の3つです。
まず「primary」コマンドでセンサーの主要な機能を確認します。
[CD:DE:AB:02:35:29][LE]> primary
attr handle: 0x****, end grp handle: 0x**** uuid: ab705000-********
attr handle: 0x****, end grp handle: 0x**** uuid: ab705200-********
attr handle: 0x****, end grp handle: 0x**** uuid: ab705210-********
attr handle: 0x****, end grp handle: 0x**** uuid: ab705400-********
attr handle: 0x0057, end grp handle: 0x0066 uuid: ab705010-********
attr handle: 0x****, end grp handle: 0x**** uuid: ab705110-********
attr handle: 0x****, end grp handle: 0x**** uuid: ab705030-********
attr handle: 0x****, end grp handle: 0x**** uuid: 0000fe59-********
attr handle: 0x****, end grp handle: 0x**** uuid: 0000180a-********
この結果、handle 0057 ~ 0066 に最新データが格納されていることがわかりました。
次に「characteristics」コマンドで最新データの種類を表示します。
[CD:DE:AB:02:35:29][LE]> characteristics 0057 0066
handle: 0x0058, char properties: 0x12, char value handle: 0x0059, uuid: ab705012-********
handle: 0x****, char properties: 0x12, char value handle: 0x****, uuid: ab705013-********
handle: 0x****, char properties: 0x12, char value handle: 0x****, uuid: ab705014-********
handle: 0x****, char properties: 0x12, char value handle: 0x****, uuid: ab705015-********
handle: 0x****, char properties: 0x12, char value handle: 0x****, uuid: ab705016-********
一番上の value handle: 0x0059 にセンシングデータが格納されていることがわかりました。
最後に「char-read-hnd」コマンドで指定したハンドルの値を読み取ります。
[CD:DE:AB:02:35:29][LE]> char-read-hnd 0059
Characteristic value/descriptor: 2f 9b 08 7e 17 b8 00 8d 7d 0f 00 29 0d 87 00 0b 05
よくわからない結果が返ってきました。
データフォーマットを簡単にまとめてみました。温度(Temperature) を例に試してみます。
また、マニュアルにはこのような記載があります。
リトルエンディアンの細かい説明は省略しますが、簡単に言えば「順序が逆になる」ということです。つまり、出力した結果を左から右に入れ替えます。
このようなイメージです。
温度は1Byteと2Byteで構成されています。今回だと 08 9b が対象です。この16進数を10進数に変換します。
さらに単位が 0.01 degC(摂氏)なので100で割ると22℃であることがわかりました。
このような流れでセンサの値を取得することができますが、やはり相当な労力が必要になる為、プログラミングで自動化するか、ETL製品などでノーコード(またはローコード)で取得できると便利ですよね。
さて、次回は本題に戻り、今回の BLE 通信の接続から取得までの部分をプログラミングしてみましたのでご紹介します!
BIツールの活用やデータ活用を推進しよう
BIツールを導入したものの、うまく活用できていない
データ活用を組織に定着させるためのノウハウがない
見るべき指標が複雑・多様化していて、どれを見ればよいのかわからない
ダッシュボード化の際、どのようなデータを取得すればいいかわからない
データがなかなか集められない
ビジネス課題解決のための指標を可視化し、すぐに判断したい
どのBIツールを選べばいいかわからない、選べない
という方は、まずはライトな相談から。支援内容とお問い合わせはこちらをクリック