Seeed reTerminal の光センサーの状態を Node-RED で取得して SORACOM Inventory と SORACOM Harvest で可視化するメモ
この記事は SORACOM Advent Calendar 2021 の 9 日目の記事です。
Seeed reTerminal の光センサーの状態を Node-RED で取得して SORACOM Inventory と SORACOM Harvest で可視化するメモです。
Seeed reTerminal

reTerminal - 5インチタッチスクリーン付き Raspberry Pi CM4搭載デバイス - スイッチサイエンス
Seeed reTerminal はこちらの記事にある通りで、
Raspberry Pi Compute Module 4と 5インチIPS 静電容量式タッチスクリーンを組み合わせた拡張性の高い端末です。
1.5 GHzのクアッドコアCortex-A72搭載のRaspberry Pi Compute Module 4と、720×1280の解像度を持つ5インチのIPS静電容量式マルチタッチスクリーンを搭載し、マルチタスクを実行するのに十分な量のRAM(4 GB)と、OSをインストールするのに十分な量のeMMCストレージ(32 GB)を備えています。また、デュアルバンドの2.4 GHz/5 GHz Wi-FiおよびBluetooth 5.0 BLEによるワイヤレス接続機能を備えています。
Raspberry Pi OSがインストールされた状態で出荷されるので、電源に接続するだけで、IoT、HMI、AIのアプリケーションをすぐに作り始めることが可能です。
ということで、製造業の現場でも使えそうな堅牢なつくりでありながら Raspberry Pi + タッチスクリーン で手軽にデジタルサイネージを作れるデバイスです!
Seeed reTerminal に Node-RED をセットアップ済み
https://www.1ft-seabass.jp/memo/2021/10/25/seeed-studio-reterminal-node-red-install/
すでに Node-RED をセットアップ済みです。

インストールした Node-RED のバージョンは 2021/12 現在 2.1.1 でした。
reTerminal のセンサーを扱える node-red-contrib-reterminal をインストール
node-red-contrib-reterminal (node) - Node-RED
Node-RED にこちらのノードをインストールすると reTerminal からボタン、ブザー、LED、ライト、タッチ位置、加速度センサーなどのさまざまなデータをインストールすることができます。
このノードは私が作ったので、結構使うときにはドキドキします。
今回は光センサーを取得してみます。

パレットにノードを追加する を参考に
、右上のメニューをクリック > パレットの管理 > ノードの追加 を選択して reTerminal を検索したら、node-red-contrib-reterminal ノードが出てくるので追加します。

パレットにインストールされて、このようなノード群が出てきます。 2021/12 現在、バージョンは 0.1.1 です。
光センサーを取得してみる

こちらの Light Sensor ノードを使います。

Light Sensor ノードと debug ノードでこのようなシンプルなフローを作ります。
[
{
"id": "b791e9f1fb4f9edb",
"type": "light_sensor",
"z": "10ff09cbdba1fa58",
"name": "",
"x": 240,
"y": 180,
"wires": [
[
"e13d412137fe08a2"
]
]
},
{
"id": "e13d412137fe08a2",
"type": "debug",
"z": "10ff09cbdba1fa58",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 480,
"y": 180,
"wires": []
}
]
フローのインポート 機能でインポートと出来るフローJSONデータも置いておきます。

こちらをデプロイして実行します。

すると、debug ノードが reTerminal light sensor ノードから値を受信してバックタブで光センサーの今の状態が取得できます。
いまは照明の明るい部屋にいますね。
指で光センサーを隠して暗くしてみる
製品ページ にあるとおり光センサーはタッチスクリーンの上部にあります。

このあたりです!

よくみるとキラッと見えます!(撮影が大変だった)

ということで愚直に指で押さえてセンサーを暗く反応させてみます。

デバックタブでみてみると、指で押さえたときは暗くなり値が低くなっています。
デバイス登録時に払い出されるデバイス ID とデバイスシークレットを用意
今回は Seeed reTerminal に SORACOM SIM を挿して使うのではなく、デバイスIDとデバイスシークレットを使用してHarvestにデータを送信する方法を使います。
Getting Started: デバイスIDとデバイスシークレットを使用してHarvestにデータを送信する | SORACOM Inventory | SORACOM Users
こちらの記事の「ステップ 1: デバイスを登録する」「ステップ 2: グループの設定」を見ていきます。

デバイス登録時に払い出されるデバイス ID とデバイスシークレットをメモしておきます。
SORACOM Inventory に reTerminal の Node-RED でデータを送る
Getting Started: デバイスIDとデバイスシークレットを使用してHarvestにデータを送信する | SORACOM Inventory | SORACOM Users
引き続き、こちらの記事の「ステップ 3: HTTP リクエストの実行」を見て Node-RED に設定していきます。

いろんな送り方ができるんですが、なんとなくカッコいいと思う POST 送信でやってみます。

このようにフローを変更しました。具体的には実際に SORACOM Inventory に送る API を表現するため change ノードと http request ノードと debug ノードを追加しました。

ということで、
curl -X POST --header "x-device-secret: <シークレットキー>" -d "{\"temp\":20}" https://api.soracom.io/v1/devices/<デバイスID>/publish
の設定を参考に、change ノードで以下を設定します。ノードをダブルクリックしてプロパティを設定します。

- msg.headers.x-device-secret
- シークレットキーを設定
- msg.url
- 送信するURLを
https://api.soracom.io/v1/devices/<デバイスID>として設定 - デバイスID を記載。デバイスIDキーを間違えない。
- 送信するURLを
このように設定しました。

http request ノードを設定します。ノードをダブルクリックしてプロパティを設定します。

こちらはメソッドを POST に設定します。

デプロイをして設定を反映します。

設定がうまくいっていればデバックタブに "" というレスポンスが来ていれば送信成功です!もしエラーが返ってきていたら設定をよく確認しましょう。
[
{
"id": "b791e9f1fb4f9edb",
"type": "light_sensor",
"z": "10ff09cbdba1fa58",
"name": "",
"x": 240,
"y": 180,
"wires": [
[
"e13d412137fe08a2",
"a6a7f25b7b42e020"
]
]
},
{
"id": "e13d412137fe08a2",
"type": "debug",
"z": "10ff09cbdba1fa58",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 510,
"y": 140,
"wires": []
},
{
"id": "8caf5a1a34367db4",
"type": "http request",
"z": "10ff09cbdba1fa58",
"name": "",
"method": "POST",
"ret": "txt",
"paytoqs": "ignore",
"url": "",
"tls": "",
"persist": false,
"proxy": "",
"authType": "",
"senderr": false,
"x": 730,
"y": 220,
"wires": [
[
"3601d52018d0c077"
]
]
},
{
"id": "3601d52018d0c077",
"type": "debug",
"z": "10ff09cbdba1fa58",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 930,
"y": 220,
"wires": []
},
{
"id": "a6a7f25b7b42e020",
"type": "change",
"z": "10ff09cbdba1fa58",
"name": "",
"rules": [
{
"t": "set",
"p": "headers.x-device-secret",
"pt": "msg",
"to": "<シークレットキー>",
"tot": "str"
},
{
"t": "set",
"p": "url",
"pt": "msg",
"to": "https://api.soracom.io/v1/devices/<デバイスID>/publish",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 520,
"y": 220,
"wires": [
[
"8caf5a1a34367db4"
]
]
}
]
フローのインポート 機能でインポートと出来るフローJSONデータも置いておきます。
データが送られたので Harvest で見てみる
あとは、Harvest で今回のデバイス ID で見てみましょう!

ちゃんとデータが送られていました!

そして、光センサーの可視化で可能性を感じるのは、グラフビューでの表示ですね。
たとえばどこかの部屋や工場に reTerminal を設置したとして、明るさが取得できると、簡単な使用状況や照明の消し忘れのような稼働状況が取得してデータ分析をしたり省エネ対応をしたりと、いろいろなことができそうです!
