【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のインストール
[cc_bash]
$ apt install mosquitto
$ apt install mosquitto-clients
[/cc_bash]
インストール自体は以上で終わりです。
続いてMQTT over Websocketの設定をします。
MosquittoをMQTT over Websocketに対応させる
今回はクライアントにWebブラウザも想定している(vue-mqttの部分です)のでMQTT over Websocketの設定を行います。下記の通り、ちょっと設定ファイルに追記します。
[cc_bash]
$ vim /etc/mosquitto/mosquitto.conf
# /etc/mosquitto/mosquitto.conf
listener 1883
listener 3000
protocol websockets
[/cc_bash]
デフォルトの1883番ポートに加えて、3000番ポートでwebsocketつなぐよと言う記述をします。記述したら一度再起動して設定を反映させます。
[cc_bash]
service mosquitto restart
[/cc_bash]
パスワードを設定する
ここまでの設定で既にMQTTブローカーとして動作するはずですが、さすがに誰でも繋げる状況って何だか不安になっちゃいますよね?
というわけで、Mosquittoに認証用のユーザーとパスワードを設定してみます。
[cc_bash]
# パスワードファイルを作成します
$ 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
[/cc_bash]
動作確認
さて、ここまで設定したら最後に動作確認をします。subscriber用とpublisher用にターミナルを2つ使って確認します。
subscriber
[cc_bash]
$ 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
[/cc_bash]
-t オプションで購読する(受信する)トピックを指定しています。
トピックと言うのはsubscriberが受信するメッセージを識別する為のものと考えてください。今回の例だと「test」と言うトピックが指定されているメッセージを受信するという事になります。
publisher
[cc_bash]
$ 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
[/cc_bash]
subscriberと同様に-t オプションでトピックを指定しています。subscriber側が「test」と言うトピックのメッセージを受信するので、同じ「test」を指定しています。
publisherからコマンドを実行したタイミングでsubscriber側のターミナルに「Hello!」と表示されていれば動作確認完了です。
subscriber
[cc_bash]
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!
[/cc_bash]
まとめ
今回はまず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
