LoRaWAN 対応 やわらか無線センサー ハッテトッテ®️ で室内環境をセンシング ~ Part II
※本ブログは、DIC 株式会社(以降、DIC 社)様協賛による企画記事です。あらかじめご了承ください。
コロナ感染防止策としての”密”の把握、頻発する大規模災害への迅速な対応、少子高齢化による家族・地域社会の役割見直しなど、身近なところに様々な社会課題があります。無尽蔵に働ける人がいて、無尽蔵に予算があれば、解決策も多岐にわたると思います。
実際には、生産年齢人口や税収入の減少から、投資可能なリソースは非常に制限されつつあります。このような中、いかに効率よく、かつ低コストで、”モノ”をセンシングし、有益な”コト”につなげていくかが、非常に重要になります。
今回は、3 部連載企画として、屋内空間の状態を手軽に効率的にモニタリングできるデザインコンシャスな LoRaWAN 対応屋内温度・湿度・照度センサーデバイスハッテトッテ® のご紹介をしていきたいと思います。
前回、第 1 回では、LoRaWAN 界隈の動向、 ハッテトッテ® の製品概要紹介、実際に利用する際に必要なモノの概要について触れました。
第 2 回(本投稿)では、前回紹介したモノを使って、ハッテトッテ® のデータを可視化するための準備をしたいと思います。画面キャプチャ多数使い、丁寧に説明します。
次回、第 3 回(最終回)は、IoT の醍醐味の可視化の実現です。また、これまでに触れられなかった Tips や補足的な情報をお伝えします。
4. 環境準備
前回(第 1 回)でご紹介しましたが、これから作っていく環境の全体構成を再掲載します。
4.1. ハッテトッテ® の設定
電源 ON 以外にやることはありません。さまざまな設定が可能であり、設定ツール(Windows10 上で動作)から Bluetooth® Low Energy 経由で行います。ただ、動かしてみる、という観点では特に設定を変更する必要はありません。
ちなみに、設定ツールで設定できる項目は以下のようなもの(一部掲載)があります。
電源ボタンは、本体中央部よりやや左より(センサー開口部と反対方向)にあります。軽く押さえながら指を動かすと、押下スイッチのボタンの凹凸が見つかると思います。
スイッチの場所の裏側も押さえながら、ハッテトッテ® を指で挟むような形で、表側からスイッチを 3 秒ほど長押しです。これで電源が入ります。
電源が入ると、LED が緑色に 1 秒ほど光ります。1 秒点灯 → 消灯を確認したら、スイッチから指を離してください。電源が ON の状態になっています。
なお、デフォルト設定では、ハッテトッテ® は 5 分に 1 回、センサー情報を上位サーバ側へ送信します。
4.2. ゲートウェイ Dragino LPS8-JP の設定
LPS8-JP の設定手順です。
- LPS8-JP 本体の電源を入れる。(USB Type-C ケーブル、電源アダプタが付属)
- LPS8-JP にルータと Ethernet ケーブルで繋げる。(WiFi 接続も可能です)
- 同一 LAN 内のパソコンのブラウザから管理画面にアクセスする。
- (オプション)各種設定をする前に、ファームウェアを最新化する。
- 「LoRa」「LoRaWAN」タブで、適切な設定項目を入れて保存する。
4.2.1. 管理画面へアクセス
管理画面へは、ブラウザでアクセスできます。
http://IP アドレス:8000
もし、ルータによってゲートウェイに割り当てられた IP アドレスがわからない場合は、WiFi で P2P で繋げます。 パソコンで、WiFi の SSID に、“dragiono-xxxxxx"なるものが見えていると思います。これに接続してください。 WiFi で接続できた後、ブラウザでアクセスします。
http://10.130.1.1:8000
P2P での WiFi 接続時のパスワード、管理画面へのログインアカウント情報の詳細は、公式マニュアル(日本語、英語)をご参照ください。
4.2.2. LoRa の設定
”Radio Settings"の"Frequency Plan(周波数プラン)“は、日本向けの設定を選ばなければいけません。
”Radio Settings"の"Frequency Plan(周波数プラン)“は、日本向けの"AS923-1”を選択してください。位置情報は、適宜。
ゲートウェイ LPS8-JP に設定した"AS923-1"ですが、デフォルトで利用する周波数(8 つ)が、ハッテトッテ® がデフォルトで利用する周波数と同一です。問題なく接続できます。
全ての設定が終わったら、“Save&Apply"ボタンを押下してください。
4.2.3. LoRaWAN の設定
次に、LoRaWAN タブで、“LoRaWAN – Semtech UDP"を選択。
“Primary LoRaWAN Server"の"Service Provider"と"Server Address"を設定します。
なお、”Gateway ID“は、変更しないでください。この値は、次節"無償利用可能な LNS TTN V3 の設定”で使います。
“Server Provider"は、“The Things Network V3"を選択です。つまり、ここで、LoRaWAN ネットワークサーバ(LNS)の種類を選択することになります。
“Server Address"では、実際の LNS のアドレスを設定します。LNS の種類として、“The Things Network V3"を選択している場合、3 つ候補が現れます。次節"無償利用可能な LNS TTN V3 の設定”で説明しますが、自身で選択した TTN V3 のクラスターを選択します。(図は、eu1 クラスターを選択しています。)この時点で、すでに3つのうち、好きなものを選んでおいても良いです。
全ての設定が終わったら、“Save&Apply"ボタンを押下してください。
4.3. 無償利用可能な LNS TTN V3 の設定
4.3.1. TheThingsNetwork への登録
何はともあれ、世界最大の LoRaWAN コミュニティ The Things Network に参加しましょう。
必要事項は、ユーザ名(お気に入りのもので、既存ユーザと重複なければ大丈夫です)、メールアドレス、パスワードを設定します。 登録が完了すると、ユーザ名のところから、“Console"を選択すると、クラスターを選択するコンソール画面に飛びます。
お好きなクラスター(あるいは、ゲートウェイの設定時に選んだもの)を選択してください。
4.3.2. ゲートウェイの登録
この時点で、TTN V3 の Web コンソール画面が見られるようになっていると思います。
まず、トップ画面右側の「ゲートウェイ」を選択してください。ゲートウェイを登録していきます。
登録項目は4つです。
- “所有者”
- “ゲートウェイ ID”
- “ゲートウェイ EUI”
- “周波数プラン”
“所有者"は、自分のアカウント名が入力済みのはずです。 “ゲートウェイ ID"は、TTN V3 内で唯一である必要があります。適当に入力してみてください。
“ゲートウェイ EUI"は、ゲートウェイの設定の"LoRaWAN"タブに出てきた"Gateway ID"を入力してください。
“周波数プラン”は、“Asia 920-923 MHz with LBT"を選択してください。
設定が完了したら、画面最下部にある「ゲートウェイの作成」ボタンを押下です。
ゲートウェイが TTN V3 に繋がれば、ゲートウェイの一覧上で、“接続済"と表示されます。
4.3.3. アプリケーションの作成
ここで「このアプリケーションってなに?」と少し疑問が出てくると思います。
複数の(単一種類でも、複数種類でも)デバイスノードを一括りにする概念で、TTN V3 上の「アプリケーション」単位で、外の世界へとインテグレートすることなります。
いずれにしても、デバイスノードを登録するためには、まず、アプリケーションを作成しなければいけません。
まず、画面右上「+アプリケーションの追加」ボタンを押下します。
“所有者”は、入力済みのはずです。必須なのは、“アプリケーション ID"です。“Gateway ID"同様に、TTN V3 内で唯一のものでなければいけません。適当に入力してみてください。画面下部の「アプリケーションの作成」を押下します。 これで、デバイスを登録するための”箱”ができました。
4.3.4. デバイスノードの登録
いよいよ、やっと、ハッテトッテ® の出番です。 「アプリケーションの作成」後に表示される画面の右下に、「+デバイスの追加」ボタンが見えると思います。ここを押下してください。
「LoRaWAN デバイスリポジトリから」と「手動で」という2つのタブがあります。今回は、「手動で」タグを選んでください。何やら、多くの設定項目が出てきました。
登録項目は 7 つ。
- “周波数プラン”
- ”LoRaWAN バージョン”
- “地域パラメータのパージョン”
- “DevEUI”
- “AppEUI”
- “AppKey”
- “エンドデバイス ID”
“周波数プラン”は、ゲートウェイ登録時と同じです。“Asia 9200-923 MHz with LBT"です。
“LoRaWAN バージョン"は、ハッテトッテ®
の仕様に従い、“MAC V1.0.2”を選択。
“地域パラメータのバージョン"は、“Rev A"でも"Rev B”のどちらを選択しても構いません。
次からは、プルダウンからの選択ではなく、16 進列を入力していきます。 “DevEUI"は、LoRaWAN デバイスを製造するメーカーが責任を持って、LoRaWAN の世界で唯一になるようにルールに従って付与する値です。パッケージや本体のシールなどに記載があるはずです。あるいは、調達先から情報が提供されます。ハッテトッテ® は、裏側に記載がありますので、その値を入力していきます。
LoRaWAN では、LNS とデバイス管理は P2P で暗号化通信をしております。“AppEUI"と"AppKey"は、、そのためのデータになります。ハッテトッテ® の場合はマニュアルに記載があります。その値を入力します。(設定ツールで変更も可能です。)
最後に、画面下部の「Register end devide」ボタンを押下して、デバイス登録を完了します。
デバイスノードが、TTN V3 に無事に接続されると、一覧画面で接続されたことがわかります。
4.3.5. デコーダの登録
ここまでくると、ハッテトッテ® から届くデータを、TTN V3 の管理画面上で見ることができます。 先程作成したアプリケーション画面の左カラムの「ライブデータ」タブを選びます。全ての設定が正しく行われており、それぞれが動作している場合、この画面に通信されたデータが表示されるようになります。 通信データが見当たる場合、「アップリンクデータメッセージの転送」という部分を押下してみてください。画面左側に、通信データが JSON 形式で表示されます。
その中の一部が、デバイスノードからのデータになります。
“uplink_message"に含まれる"frm_payload"の部分に着目してください。まさに、これがハッテトッテ® から送られてきたデータになります。ただし、Base64 型式になっており、見た目では中身がさっぱりわかりません。 このデータをそのまま可視化しても全く意味がありません。Base64 形式のデータを、16 進列に変換し、ハッテトッテ® の技術仕様書と照らし合わせると中身がわかってきます。
(Base64 形式) HbcPCdIGvgNgC0YAAAAAAAAAAAAAAA==
(16 進列) 1D B7 0F 09 D2 06 BE 03 60 0B 46 00 00 00 00 00 00 00 00 00 00 00
仕様書には、この 16 進列の意味が記述されています。
この仕様と照らし合わせながらデータを解釈し、温度、湿度、照度などを算出するのは大変です。
そこで、TTN V3 内で、デコーダと呼ばれるプログラムを登録することで、この値をデコードして(人間がすぐにみてわかる形に変換する)表示してくれるようになります。
先程作成したアプリケーション画面の左カラムに「ペイロードフォーマッター - アップリンク」タブが見つかると思います。ここで、デコーダとなるプログラムを登録します。デバイスメーカが提供してくれる場合もありますが、なければ仕様書に従って自分で記述する必要があります。
ハッテトッテ® は、設定や上位側からの指示で、送信してくるデータの中身が異なります。今回は、一番シンプルな通常の場合のデータ仕様に合わたデコーダをサンプルとして掲載します。
function decodeUplink(input) {
let bytes = input.bytes;
// データコード
var bytes_0_2 = bytes[0].toString(2);
bytes_0_2 = ("00000000" + bytes_0_2).slice(-8);
var data_code = bytes_0_2.substr(0, 4);
data_code = parseInt(data_code, 2);
// シーケンス番号
var seq_0 = bytes_0_2.substr(4, 4);
var bytes_1_2 = bytes[1].toString(2);
bytes_1_2 = ("00000000" + bytes_1_2).slice(-8);
var seq_1 = bytes_1_2;
seq = parseInt(seq_0 + seq_1, 2);
// フォーマットタイプ
var bytes_2_2 = bytes[2].toString(2);
bytes_2_2 = ("00000000" + bytes_2_2).slice(-8);
var format_type = bytes_2_2.substr(0, 3);
format_type = parseInt(format_type, 2);
var f_ti = bytes_2_2.substr(3, 1); // 温度データ 0: 無効 1: 有効
var f_bv = bytes_2_2.substr(4, 1); // 湿度データ 0: 無効 1: 有効
var f_lv = bytes_2_2.substr(5, 1); // 照度データ 0: 無効 1: 有効
var f_hv = bytes_2_2.substr(6, 1); // 電池電圧データ 0: 無効 1: 有効
var f_tv = bytes_2_2.substr(7, 1); // 計測間隔 0: 短 1: 長
// 温度[℃]
var bytes_3_2 = bytes[3].toString(2);
bytes_3_2 = ("00000000" + bytes_3_2).slice(-8);
var bytes_4_2 = bytes[4].toString(2);
bytes_4_2 = ("00000000" + bytes_4_2).slice(-8);
var temp = parseInt(bytes_3_2 + bytes_4_2, 2) / 100;
// 湿度[%]
var bytes_5_2 = bytes[5].toString(2);
bytes_5_2 = ("00000000" + bytes_5_2).slice(-8);
var bytes_6_2 = bytes[6].toString(2);
bytes_6_2 = ("00000000" + bytes_6_2).slice(-8);
var hum = parseInt(bytes_5_2 + bytes_6_2, 2) / 100;
// 照度[lx]
var bytes_7_2 = bytes[7].toString(2);
bytes_7_2 = ("00000000" + bytes_7_2).slice(-8);
var bytes_8_2 = bytes[8].toString(2);
bytes_8_2 = ("00000000" + bytes_8_2).slice(-8);
var ill = parseInt(bytes_7_2 + bytes_8_2, 2);
// 電池電圧[V]
var bytes_9_2 = bytes[9].toString(2);
bytes_9_2 = ("00000000" + bytes_9_2).slice(-8);
var bytes_10_2 = bytes[10].toString(2);
bytes_10_2 = ("00000000" + bytes_10_2).slice(-8);
var bat_v = parseInt(bytes_9_2 + bytes_10_2, 2) / 1000;
return {
data: {
data_code: data_code,
seq: seq,
format_type: format_type,
F_TI: f_ti,
F_BV: f_bv,
F_LV: f_lv,
F_HV: f_hv,
F_TV: f_tv,
Temperature: temp,
Humidity: hum,
Illuminance: ill,
BatV: bat_v
},
warnings: [],
errors: []
};
}
このプログラムを、TTN V3 の当該アプリケーションの「ペイロードフォーマッター - アップリンク」の部分に登録(コピペ)してください。なお、デコーダのタイプは、JavaScriptです。 登録後、再度ライブデータをみます。
確かに、何やら、見た目でわかるようになっています。
やっとデータが見られるようになったところで、第 2 回は終わります。
次回、第 3 回(最終回)は、IoT の醍醐味の可視化の実現です。また、これまでに触れられなかった Tips や補足的な情報をお伝えします。