MQTTプロトコルってなに?修行中の現場で出てきたIoTの話
MQTTプロトコルってなに?修行中の現場で出てきたIoTの話
EC関連のお仕事なので、ずっとWEB側で過ごしてきた私。
それも「ひとり店長」なので出品業務はもちろん開発系も一人で行ってきました。
で、修行の必要性を感じプログラミングのお仕事を探し出したのですが、ついに出会ってしまいました【 Iot 】に。
もう知らない単語ばかり出てきてわけわからない。
その中の一つが今回記事にする【 MQTT 】です。
MQTTとは【 IoT 】でよく使う通信プロトコルの事
デバイス / サーバの間でデータの受け渡しを行い回線繋げっぱなしでPUB/SUB提供します。
HTTPだと毎回ヘッダー情報が付与されますが、MQTTではこれが不要なためパケット量が少なくて済むのもメリット。また通信失敗時には再Publichまで行ってくれる優れものです。
https://www.sunbit.co.jp/blog/2019/11/21802/
WebブラウザではMQTTを直接受信することはできないので、WebSocketを利用して通信します。
これをMQTT over WebSocketと言います。
MQTTの接続イメージ
MQTTは複数のデバイスからの同時接続が可能です。それを可能にしているのが【MQTT Broker】でPublishされた値はMQTT Broker を経由してSubscribeしている別Clientに送信されます。
また、複数Clientが同じTopicをSubscribeすることもできるため、一斉に値を変える信号を受信させることも可能です。
AWSの機能の中にある【 AWS IoT (Iot Core)】がMQTT Brokerにあたり、AWS IoT内にある【MQTT テストクライアント】は図で言うところの Device の1つとなります。
MQTTBrokerに使われるライブラリ
AWS IoT が最も簡単に扱えるMQTT Brokerだと思います。
しかし、運用費はかかるのでその他のものをDockerで構築しようと情報収集しました。
まずBrokerですが次のようなものがありました。
次に、情報収集サイトのリストです。
- https://qiita.com/pocket8137/items/0205b7a1c0b38890523e
- https://take6shin-tech-diary.com/mqtt-docker/
- https://isurunuwanthilaka.medium.com/get-into-mqtt-in-2-minutes-python-docker-5d4e8b55cf1c
- https://qiita.com/koichi_baseball/items/8fa9e0bdbe6d0aebe57d
- https://monoist.atmarkit.co.jp/mn/articles/1605/23/news017_2.html
- https://www.denshi.club/make/iot/mqtt/
- https://qiita.com/narutaro/items/e48def9dca38036f01f9
- https://qiita.com/github0013@github/items/7c410216b74f29919da8
- https://www.sinetstream.net/server/brokers/mosquitto%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86.html
- http://www.steves-internet-guide.com/mqtt-websockets/
安易に手を出すとサーバー壊す可能性がありますので要注意。
「Dockerで立てるから不具合起こったら削除すればいいし」そんな軽い気持ちでDockerによるBroker構築実験を行ったのですが、結果としてサーバー壊しました。
SSH接続が頻繁に切れてサーバーに指示が出来ない状態。
OS入れ直しで修復しましたが、貯めてたデータなくなってしまいました。
私の案件探し用ポートフォリオ生成システムのデータ(SQL)入ってたので泣けてきましたが、まぁ急ぎで必要なものでもないので「真っ新にしてデータ作り直そう」と…。
Dockerだからと侮ってはだめですね。
DB(MySQL)に格納する方法
MQTTWebSocketを使うといいそうです。
この場合、ブラウザのJSクライアントが窓口となります。
【MySQL Connector/Python 】あたりが選択肢となりそうです。
とはいえ、AWSIoTが一番簡単
時間があってコストをかけたくない場合はDocker構築で知識とスキルをためるのが良いと思います。
ただ、今回の案件ではとにかく時間がなかったため、AWSIoTに頼ることにしました(というか頼ることになりました)
超楽です!(AWSIoTを使ってみた感想)
詳細についてはボリュームが大きいため別記事にてまとめますが、AWSIoT(IoT Core)はMQTTBrokerとしてしっかり確立しているため、ココに対してPublishする仕組みが作れれば、あとはIoTCore内のACT Ruleでよしなにしていく感じで実装できてしまいます。
基本はDynamoDBへの登録となるのだと思いますが、SQSやLambdaなどに飛ばすルールも構築できるので実装について様々な形が作れると思います。
まとめ
初のMQTT案件であり「MQTTってそもそも何?」からスタートしましたが、この2週間でダイブ理解してきたと思います。依然として納期厳しいですけどね…。
それでも新しいことは楽しい!
-
前の記事
laravel8.x:変わりすぎて戸惑った仕様についての備忘録 2021.05.06
-
次の記事
自分のPCをMQTTClientにするツール:MQTT.fx 2021.06.18
コメントを残す