IoTハブアプリケーションとは
スマート家電やスマートホームが一般的になり、IoT機器が広く売られるようになっています。
このような機器に対して決まった時刻になったら動作するようにしたり、一定の条件で動作するようにしたりするには、IoT機器を束ねて決められた通りに指令を送るハブのようなアプリケーションが必要になります。
例えばGoogleHomeアプリなどでは、Google Nest HubなどにGoogleHome対応のIoT機器を登録すればアプリから操作のスケジューリングしたり連携させたりすることができます。
ところで、IoT機器の中にはAPIを公開しているものもあります。
例えばSwitchBot社は販売している製品ごとにBLE経由でどのような操作ができるかを公開しています。
APIというよりかはBLE通信をするための仕様といった感じのものですが、これを参考にすればハブ機能をもつアプリケーションを自分で作ることができるのでは?と考えました。
そこで今回このようなAPIを利用して、RaspberryPiのようなマイコン上で動くIoT機器のハブ機能を提供するアプリケーションを作りました。
せっかく作ったので使い方をこの記事で紹介したいと思います。
リポジトリ
使い方
セットアップ
- BLE機器の設定
config/ディレクトリにあるtemplate_config.jsonをコピーしてconfig.jsonを作成します。
config.jsonに以下のフォーマットで接続したいBLE機器のMACアドレスを追加します。
現在対応している機器はSwitchBotのスマート電球、ボット、人感センサーの三種類です。使用しないものについては空にします。
"devices":
{
"woBulb":
{
"mac": "xx:xx:xx:xx:xx:xx"
},
"woHand":
{
"mac": "xx:xx:xx:xx:xx:xx"
},
"woMotionSensor":
{
"mac": "xx:xx:xx:xx:xx:xx"
}
},
MQTTブローカーの設定
config/config.jsonに以下のフォーマットでMQTTブローカーの設定を追加します。
- ローカルネットワークだけで使うのであれば、このハブアプリを入れるマイコンに一緒に入れてもいいと思います。mosquittoなどを使えば簡単にブローカーを立ち上げることができます。
ブローカーのIPアドレスとポート番号は必須です。
TLS接続をする場合はCA証明書のパスを追加します。また、クライアント証明もする場合はクライアント証明書、クライアント鍵のパスを追加します。必要がない場合は空にします。
"mqtt":
{
"brokerIpv4": "127.0.0.1",
"brokerPort": 1883,
"caCert": "",
"clientCert": "",
"clientKey": ""
}
ビルドとインストール
一番上のディレクトリで以下のmakeコマンドを実行し、ビルドします。
$ make
ビルドが成功したら以下のコマンドでこのアプリケーションをiotdevicehubサービスとしてインストールすることができます。
$ make install
アンインストールする場合は以下のコマンドを実行します。
$ make uninstall
実行とサンプルコマンド
ビルドしてできたバイナリIotDeviceHubを実行するか、インストール後に以下を実行してサービスを起動するとアプリケーションが立ち上がります。
$ ./IotDeviceHub
#OR
$ systemctl daemon-reload
$ systemctl start iotdevicehub
その後設定したMQTTブローカーに対して"exec_bot"という名前のトピックをPUBLISHすると、SwitchBotボットに接続されている場合はスイッチ動作をします。
AndroidであればIoT MQTT PanelというアプリがMQTTのクライアントとして使うことができます。
ブローカーのIPアドレスを指定して接続できるようになると、TopicのPUBLISHやSUBSCRIBEがウィジェットのような形で自由に設定できます。
対象機器
- SwitchBot
- スマート電球
- ボット
- 人感センサー
もしBLE機器を追加したい場合はdevices/ディレクトリにあるBleDeviceHandler.cppにあるBleDeviceHandlerクラスを継承して独自の機器を追加することができます。
改造の方法はまた別の記事で説明しようと思います。
