【Python + Vue.js + Mosquitto】MQTTをさわってみるよ Part.1
2019.10.21
こんにちは、せんだです。
10月も後半に入ってきて、涼しい?季節になってきましたね。
秋ということで、先日娘が通う幼稚園の運動会があり、張り切って綱引きに出場したのですが一種目出ただけで、体にガタがくるあたり老いを感じますね…
さて、今回からMQTTを使ってちょっとしたものを作ってみたいと思います。(本当にちょっとですよ)
最終的には以下のものを作ってみたいと思っています。
早速ですが今回はMosquittoのインストールと初期設定をやってみたいと思います。
今回やること
- Mosquittoのインストール
- MosquittoをMQTT over Websocketに対応させる
- パスワードを設定する
- 動作確認
環境
OS:Ubuntu 18.04.3
それでは早速やっていきます。
といきたいところですがそもそもMQTTとは何なのか?について軽く触れておきたいと思います。
MQTTとは1999年にIBM社とEurotech社のメンバーにより考案されたプロトコルでシンプル、軽量、省電力という強みを持ったIoTやM2Mを実現する際に重宝されているプロトコルです。
何でもhttpのトラフィックの10分の1だそうで、通信量やCPU負荷、電力消費量などを従来の10分の1に抑えることができるとのこと。
MQTTはPublisher(メッセージの送信側)とSubscriber(メッセージの受信側)に分かれているのですが、PublisherとSubscriberを中継するのがMQTTブローカーです。
では、インストールしてみましょう。
Mosquittoのインストール
1 2 | $ apt install mosquitto $ apt install mosquitto-clients |
インストール自体は以上で終わりです。
続いてMQTT over Websocketの設定をします。
MosquittoをMQTT over Websocketに対応させる
今回はクライアントにWebブラウザも想定している(vue-mqttの部分です)のでMQTT over Websocketの設定を行います。下記の通り、ちょっと設定ファイルに追記します。
1 2 3 4 5 6 7 | $ vim /etc/mosquitto/mosquitto.conf # /etc/mosquitto/mosquitto.conf listener 1883 listener 3000 protocol websockets |
デフォルトの1883番ポートに加えて、3000番ポートでwebsocketつなぐよと言う記述をします。記述したら一度再起動して設定を反映させます。
1 | service mosquitto restart |
パスワードを設定する
ここまでの設定で既にMQTTブローカーとして動作するはずですが、さすがに誰でも繋げる状況って何だか不安になっちゃいますよね?
というわけで、Mosquittoに認証用のユーザーとパスワードを設定してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # パスワードファイルを作成します $ vim /etc/mosquitto/password.txt # userとpasswordを記述します [user]:[password] 例) senda: hwPRDZ5Z # パスワードを変換します $ mosquitto_passwd -U password.txt # 変換後こんな感じになります senda:$6$HckbKFL0OGQJmO3u$Q1Yjbrs8Qhlgll/v3umaT0ZcLNsFkODPaoUaBqvIjTOyp23XcnIp3Ps+E/UQwmg93GCwxA4Yd5uEN6aAOBjy4Q== # パスワードの設定情報を追記します $ vim /etc/mosquitto/mosquitto.conf # /etc/mosquitto/mosquitto.conf allow_anonymous false password_file /etc/mosquitto/password.txt # 設定の反映 $ service mosquitto restart |
動作確認
さて、ここまで設定したら最後に動作確認をします。subscriber用とpublisher用にターミナルを2つ使って確認します。
subscriber
1 2 3 4 5 6 | $ mosquitto_sub -d -t test -u senda -P hwPRDZ5Z Client mosqsub/24340-senda sending CONNECT Client mosqsub/24340-senda received CONNACK Client mosqsub/24340-senda sending SUBSCRIBE (Mid: 1, Topic: test, QoS: 0) Client mosqsub/24340-senda received SUBACK Subscribed (mid: 1): 0 |
-t オプションで購読する(受信する)トピックを指定しています。
トピックと言うのはsubscriberが受信するメッセージを識別する為のものと考えてください。今回の例だと「test」と言うトピックが指定されているメッセージを受信するという事になります。
publisher
1 2 3 4 5 | $ mosquitto_pub -d -t test -m 'Hello!' -u senda -P hwPRDZ5Z Client mosqpub/24343-senda sending CONNECT Client mosqpub/24343-senda received CONNACK Client mosqpub/24343-senda sending PUBLISH (d0, q0, r0, m1, 'test', ... (6 bytes)) Client mosqpub/24343-senda sending DISCONNECT |
subscriberと同様に-t オプションでトピックを指定しています。subscriber側が「test」と言うトピックのメッセージを受信するので、同じ「test」を指定しています。
publisherからコマンドを実行したタイミングでsubscriber側のターミナルに「Hello!」と表示されていれば動作確認完了です。
subscriber
1 2 3 4 | Client mosqsub/24340-senda sending PINGREQ Client mosqsub/24340-senda received PINGRESP Client mosqsub/24340-senda received PUBLISH (d0, q0, r0, m0, 'test', ... (6 bytes)) Hello! |
まとめ
今回はまずMQTT通信の橋渡しを行う、MQTTブローカーのインストールと設定をしてみました。
次回は実際にMQTTクライアントの実装をしてみたいと思います。
それでは、また!
↓↓↓ぜひチェックしてください
~提供中のヒューマンセンシング技術~
◆人物検出技術
歩行者・来店者数計測やロボット搭載も
https://humandetect.pas-ta.io
◆視線検出技術
アイトラッキングや次世代UIに
https://eyetrack.pas-ta.io
◆生体判定技術
eKYC・顔認証のなりすまし対策を!
https://bio-check.pas-ta.io
◆目検出技術
あらゆる目周りデータを高精度に取得
https://pupil.pas-ta.io
◆音声感情認識技術
会話から怒りや喜びの感情を判定
https://feeling.pas-ta.io
◆虹彩認証技術
目の虹彩を利用した生体認証技術
https://iris.pas-ta.io