【Python + Vue.js + Mosquitto】MQTTをさわってみるよ Part.1

2019.10.21

MQTTをさわってみるよ

 

 

こんにちは、せんだです。

 

10月も後半に入ってきて、涼しい?季節になってきましたね。

秋ということで、先日娘が通う幼稚園の運動会があり、張り切って綱引きに出場したのですが一種目出ただけで、体にガタがくるあたり老いを感じますね…

 

 

さて、今回からMQTTを使ってちょっとしたものを作ってみたいと思います。(本当にちょっとですよ)

 

最終的には以下のものを作ってみたいと思っています。

  • MQTTブローカー:Mosquitto
  • MQTTクライアント1:Vue.js + vue-mqtt
  • MQTTクライアント2:Python + paho

     

     

    早速ですが今回はMosquittoのインストールと初期設定をやってみたいと思います。

     

    今回やること

    1. Mosquittoのインストール
    2. MosquittoをMQTT over Websocketに対応させる
    3. パスワードを設定する
    4. 動作確認

     

    環境

    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クライアントの実装をしてみたいと思います。

     

    それでは、また!


    Top