ドロイド君のIoT化。IFTTTとMQTTについて

前回の記事にて、ドロイド君のIoT化について触れました。

その際、②~③部分に関連する技術として「IFTTT」と「MQTT」という単語が登場しました。今回はこれについて、まとめてみたいと思います。

参考サイトとして、こちら(※1)でベースを学ばせて頂きました。具体的な設定方法やソースコード含めて、全てわかりやすく解説されております。ありがとうございました!

・・・ん?私の存在意義は??

涙が出そうなので、ここでは【初心者向け】として、各技術の概要について、なるべく簡単に説明しようと思います。

また、GoogleHomeとドロイド君(メインマイコンはESP32)がどう絡んでくるのか、についても触れたいと思います。

IFTTTとは

各種Webサービス同士が連携できるよう、仲介役を担ってくれるサービスの事です。

IFTTTのサイト(※2)にてユーザ登録すると、色々なサービスの連携を設定できるようになります。

このIFTTT、「IF This Then That」の略称で、イフト、と読むのが一般的との事。(※3)

日本語で考えると「もし A なら B」となり、この A と B の部分に、各種Webサービスを設定できる、という感じになります。

例えば、
 「A: この辺で雨が降りそうなら(お天気サービス)」 ⇒ 「B: Lineで通知して」
 「A: メールに添付ファイルがあれば」 ⇒ 「B: Dropboxに保存して」
のように、A と B に異なるWebサービスを設定できるわけです。

このような A と B の組み合わせを「アプレット(旧称:レシピ)」と呼び、自分で作ることもできるし、誰かが作った便利なアプレットを使うこともできます。

GoogleHomeからドロイド君への通知(IFTTTのみの場合)

IFTTTのみを利用した場合の連携イメージ

さてこのIFTTT、A の部分にGoogleHome(中身はGoogleAssistant)も指定可能となっています。

例えば、
「A: GoogleHomeから言葉がきたら」⇒「B: ツイートして(Twitter)」
みたいな。

より詳細な設定もできて、今回は「A: GoogleHomeの言葉がドロイド君という文字で始まっていたら、それ以降の文字が対象」という設定にしています。

さて、問題はB の部分。ドロイド君は、公式なWebサービスでもなんでもないので、B に何を設定したものか…。

ドロイド君(ESP32)は、WIFIを内蔵しているため、インターネットに繋がること自体はできます。

なので、例えばTwitterのつぶやきを常に監視していれば、自分向けのメッセージが来たかどうかを知ることはできるのですが…。あまりスマートじゃないですよね。

Webhookの活用

こんなときに活用できる仕組みの一つに「Webhook」があります。

これを使用すると「B: 指定したURLに情報(POSTリクエスト)を送る」という動作が可能となります。

POSTリクエストと言うと難しいですが、例えば、よくネット通販の際に、Webページで氏名や住所を入力して、送信ボタンを押しますよね。あれもPOSTの一種です。

通販の場合は、氏名や住所情報が通販のWebページに送信されているわけですが、先ほどのWebhookを活用すると「GoogleHomeからの情報を指定したURLに送信する」という使い方ができるわけです。

なので、例えば自宅でWebサーバを立てて公開すれば、そこに向けて通知を送る、なんて使い方ができます。

以上の解説の参考サイトとして、こちら(※4)で学ばせて頂きました。GoogleHome連携のためのIFTTT設定手順やESP32を使った作品等、とても勉強になりました。ありがとうございました!

MQTTとは

さて、そうはいっても「自宅Webサーバを公開する」というのは、なかなかにして敷居が高いわけです。

これを解決する手段のひとつとして「外部のサーバを利用し、そこと事前に接続しておき、メッセージがきたら通知してもらう」という手があります。

IFTTT+MQTTを利用した場合の連携イメージ

これを実現可能な仕組みのひとつとして「MQTT」というものが存在します。

MQTTとは「Message Queue Telemetry Transport」の略(そうでないとの噂もあり?※5)で、通信プロトコルの一種です(※6)。

特徴として「シンプル、軽量」ということで、IoTに向いた仕組みの一つとして注目されています(※7)

また、Pub/Sub型モデル(※8)をとっており、メッセージの送受信を仲介してくれるサーバーのことをメッセージ・ブローカーと呼んでいます。

あまり細かい仕組みを述べるほどの知識がないため、詳しく知りたい方は参考サイト様をご覧になってみてください。(と、逃げる)

メッセージブローカー選び

さて、メッセージブローカーとして運営しているサービスが既にいくつかあるようなのですが、サービス選びの必須条件として、先ほど登場した「POSTリクエスト」に対応していることが挙げられます。

このPOSTリクエストは、RESTというWebサービスの設計モデルの一部(※9)なので、つまりは、RESTに対応している必要がある、ということです。

ということで、今回はBeebotte(※10)を使ってみました。RESTでアクセスできて、かつ1日に50,000メッセージまでなら無料とのことで、用途にはピッタリかと。
(50,000メッセージ/日ということは、2秒に1回、ドロイド君とお話しできますね!)

詳しい設定方法はここでは触れず、ドロイド君動作時の簡単な流れだけ列挙しておきます。
----
0. 事前にIFTTTのB の部分を「B: ブローカー宛に通知する」に設定
1. ドロイド君が起動した際に、ブローカーに事前に接続。
2. GoogleHomeへ音声入力すると、IFTTT経由でブローカーへメッセージを配信。
3. ブローカーは、接続中のドロイド君に向けて、メッセージを配信。
----

以上、長くなりましたが、ここで述べたかったことは「自宅Webサーバを立てなくても、MQTTの仕組みを使えば、GoogleHomeからの通知を受け取れるのよ」という事です。

おわりに

さて、大分長くなってしまいましたが、(そしてうまく説明できているのか…)今回はIoT関連の要素技術を紹介してみました。

初心者向けに簡単に、といいつつ、結構専門用語が出てきている気が。すみません。

自分も勉強しつつなので、間違っている部分等があれば、恐縮ですがご教授頂けると幸いです。

どうぞ、よろしくお願い致します。

参考サイト

※1: IFTTTのトリガーおよびアクションをESP8266で実行する。「Qiita(@mayfair)」様(https://qiita.com/mayfair/items/e761c788a9d8787bc610)
※2: IFTTT公式(https://ifttt.com)
※3: IFTTT(Wikipedia)(https://ja.wikipedia.org/wiki/IFTTT)
※4: GoogleHomeMiniを使って、声でESP32のLEDを光らせてみた「mgo-tec電子工作」様(https://www.mgo-tec.com/blog-entry-esp32-googlehome-ifttt-webhooks-blynk.html)
※5: MQTTとはなんだったのか「GitHub(@voluntas)」様(https://gist.github.com/voluntas/e0a90f3e22316144ed3a)
※6: MQTT の基本知識「IBM developerWorks」様(https://www.ibm.com/developerworks/jp/iot/library/iot-mqtt-why-good-for-iot/index.html)
※7: MQTTとは「KAMOME Engineering」様(https://kfep.jp/solution/iot-mqtt/mqtt)
※8: Pub/Subメッセージングモデル「HITACHI」様(http://itdoc.hitachi.co.jp/manuals/link/cosmi_v0870/APKC/EU070377.HTM)
※9: REST入門 基礎知識「Qiita@TakahiRoyte」様(https://qiita.com/TakahiRoyte/items/949f4e88caecb02119aa)
※10: Beebotte公式(https://beebotte.com/)