自宅に設置したRaspberry Pi と外部サービスと連携する場合、Raspiをインターネットに晒してHTTP等でリクエストを受けられるプログラムを稼働させておく必要があったりするが、次を組み合わせればインターネットに晒すことなく、外部からメッセージを受信することができる。
- Beebotte
- Node-RED
以下にその方法を記述する。
beebotte の設定
Beebotte はIoT向けのクラウドサービス。REST API や MQTTをサポートして、接続された機器にリアルタイムでメッセージを通知することができる。
今回はこのサービスをMQTTブローカーとして利用する。
1日50000メッセージまでならフリープランで利用できる。個人ユースには十分だと思う。
まずはアカウントを登録する。フリープランならユーザ名、メールアドレスとパスワードだけで登録できる。
特に迷うところはないと思う。登録後、確認のメールが届くのでメールに記載されたリンクを踏めば先にすすめる。
アカウント作成後はチャネルとリソースを登録するよう促される。
これも特に難しいところはないと思う。
Channel名とresource名で REST API や MQTTのエンドポイントが決まる。
そのことを踏まえて、任意の名前をつければ良い。
登録するとこんな感じ。
発行される Channel Token
は後にNode-REDと接続する場合に必要となる。
スクショの例だと、メッセージをpublishするREST API のURLは次のようになる。
http://api.beebotte.com/v1/data/publish/MyIoT/light_at_bed_room?token=[Channel Token]
Beebotteの管理画面には動作確認に便利なコンソールも備わっているので APIを叩かなくても、コンソールを使ってメッセージを送信を試すことができる。
Beebotte に Node−REDで接続
NodeREDではデフォルトで MQTTがサポートされている(というかもともとMQTTのためのツールだったそうな)。
Beebotte と連携するには mqtt in ノードを利用する。
mqtt in ノードのサーバ設定は次の通り。
ユーザ名に token:[Channel Token]
を設定するのが肝。
設定項目 | 設定値 |
---|---|
サーバ | mqtt.beebotte.com |
ポート | 8883 |
SSL/TLS接続を使用 | ON |
ユーザ名 | token:[Channel Token] |
トピックには [Channel名]/[resource名]
を設定する。
設定が正しく、beebotte に接続できる場合にはフローのデプロイ後、次のようにノードに 接続済 と表示される。
動作確認
さて、Beebotteからメッセージを受信する動作確認をするには、例えば、次のようなフローを作って、Beebotteのコンソールからメッセージを送信してみてNode-REDのデバッグコンソールでメッセージを観察してみれば良い。
その後は…
ここまでできれば、あとは BeebotteのAPIをIFTTTから叩くなり、自分のプログラムからメッセージを送れば、手元で動いているRaspberry Pi等で稼働する Node-REDでメッセージをリアルタイムで受信することができる。
自宅で使う場合でも、機器やサーバをインターネット側に晒さなくてもリアルタイムにメッセージを受けられるところがよい。
受けたメッセージの内容によりNode-REDのフローで様々な処理を実行することもできる。
例えば、家電のリモコンの赤外線信号を出力できれば、ホームオートメーションも可能だろう。
Google Homeからの音声入力で電灯のON/OFFができるだけでも実際やってみると結構便利だったりする。