Node-REDで車IoTのデータを取ってみた

# はじめに

車の任意保険でドライブレコーダー特約があります。
特約に加入するとドライブレコーダーが送られてきて車に装着していますが、とある日、安全運転診断レポートが送られてきました。

![スクリーンショット 2021-04-12 19.45.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/c27d163d-c83d-46d5-9ae0-6129f61674a9.png)

ドライブレコーダーにはモバイルSIMが内蔵されていて、位置情報や運転状況(加速度、各速度など)の情報が定期的に保険会社へ送信されていることを認識しました。

![スクリーンショット 2021-04-12 19.46.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b92d0ead-bc0a-7db4-72ad-1d1a6e7f05bf.png)

これらのデータは直接確認することができず、どのようなデータが取れるのか Node-RED を使用して車IoTのデータを取得してみました。

# 準備

車載側はモバイル版Node-REDを使用します。
iOS版はNode-PAD、Android版はRedMobileです。

- Node-PAD 1.2.1
- RedMobile 7.1.4

![スクリーンショット 2021-04-12 20.00.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f4790c7e-51fd-cef3-5dcd-2f60cf865751.png)

## モバイル版のノード

モバイル版Node-REDにはスマートフォンに備わっているセンサーからデータを取得できるノードが存在します。

![スクリーンショット 2021-04-12 20.03.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a7cef097-2601-2b64-0462-fc339d91def1.png)

# 手順

今回はlocationノードを使用して位置情報を取得して、地図データにマッピングしてみます。
モバイル版Node-REDで取得した位置データをMQTTブローカー経由でPCのNode-REDに表示します。

![スクリーンショット 2021-04-12 20.25.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ce9985b6-caa7-6ba2-a641-f76c535ce279.png)

## モバイル版Node-REDフロー

Node-PAD(iOS版)のlocationノードは毎秒位置データを出力します。
毎秒だとデータ量が多いので、delayノードを使用して流量を抑えます。
今回は5秒毎に位置データを送信することにしました。

RedMobile(Android版)のlocationノードはそのままでは位置データが出力されません。
subscribeノードを使用して、Android OSの位置データを購読(subscribe)する必要があります。
injectノードとsubscribeノードを接続して位置データの出力を開始すると、locationノードは5秒毎に位置データを出力します。出力を停止する場合は、unsubscribeノードを使用します。

![スクリーンショット 2021-04-12 20.27.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4f5a64f4-cf81-3442-7704-e30e6c9d5e07.png)

## MQTTブローカー

今回は無償で利用できるshiftr.ioを使用しました。

https://www.shiftr.io

![スクリーンショット 2021-04-12 20.35.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ce5756a0-6550-363b-e619-534186a10a5e.png)

他にはbeebotteも無償で利用可能です。

https://beebotte.com/home

## PCのNode-REDフロー

地図データの表示にはweb-worldmapノードを使用しました。
ブラウザで
http://127.0.0.1:1880/worldmap
へアクセスすると地図が表示されます。

https://flows.nodered.org/node/node-red-contrib-web-worldmap

![pc_flow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b7c859b4-1a9b-75ec-b034-5e7e4bf17f3c.jpeg)

スタート地点の表示がヨーロッパとなっているため、プロパティのStartパラメータの緯度(Latitude)・経度(Longitude)と縮尺(Zoom)の値を設定します。
BasemapはOpenStreetMapを選択しました。

![スクリーンショット 2021-04-12 20.50.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/0322c396-c3b2-f770-e274-d5bdb7bdacc7.png)

残念ながら、Node-PAD(iOS版)とRedMobile(Android版)とで、locationノードが出力するJSONフォーマットが異なりますので、それぞれchangeノードでweb-worldmapノードでピン表示可能なフォーマットへ変換します。

### Node-PAD(iOS版)用changeノード

![iPhone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/797b7619-c106-de0e-b7f7-d67e02658905.png)

### RedMobile(Android版)用changeノード

![スクリーンショット 2021-04-12 20.45.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4972ebef-0d72-325a-e4a6-52726f6efd9f.png)

# 取得したデータの表示

モバイル版Node-REDから送信された位置データをMQTT経由でPC版Node-REDで受信して、地図データへ表示した結果です。

![スクリーンショット 2021-04-12 19.44.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/e43a8c26-a3aa-f1f6-955e-0b56eb35d3fc.png)

# まとめ

専用機材やアプリ開発をしなくても、普段使用しているスマートフォンやPCでNode-REDフローを作成するだけで位置データの取得から地図データへの表示ができました。
ジャイロデータ(加速度、角速度)も合わせて取得すれば車IoTのデータを見える化できると思います。

では、良きNode-REDライフを！