世間を騒がせているIoTといえばセットでmqttが出てくるので勉強がてら構築してみます。
構成は以下の通り。今回はクライアントもサーバも1台で動作確認します。
- Raspberry pi 3
- Rasbian Stretch
MQTTサーバの構築
MQTTのサーバ(ブローカ)としてmosquittoをインストールします。
またクライアント用にmosquitto-clientsをインストールします。
$ sudo apt install mosquitto パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下の追加パッケージがインストールされます: libev4 libwebsockets8 提案パッケージ: apparmor 以下のパッケージが新たにインストールされます: libev4 libwebsockets8 mosquitto アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。 238 kB のアーカイブを取得する必要があります。 この操作後に追加で 538 kB のディスク容量が消費されます。 続行しますか? [Y/n] y (中略) mosquitto (1.4.10-3) を設定しています ... systemd (232-25+deb9u1) のトリガを処理しています ... man-db (2.7.6.1-2) のトリガを処理しています ... $ sudo apt install mosquitto-clients パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下の追加パッケージがインストールされます: libc-ares2 libmosquitto1 以下のパッケージが新たにインストールされます: libc-ares2 libmosquitto1 mosquitto-clients アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。 173 kB のアーカイブを取得する必要があります。 この操作後に追加で 348 kB のディスク容量が消費されます。 続行しますか? [Y/n] y (中略) libmosquitto1:armhf (1.4.10-3) を設定しています ... mosquitto-clients (1.4.10-3) を設定しています ... libc-bin (2.24-11+deb9u1) のトリガを処理しています ...
mosquittoサーバの起動
特に設定をしなくても起動できるので起動してみます。
$ sudo systemctl start mosquitto $ sudo systemctl status mosquitto ● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker Loaded: loaded (/etc/init.d/mosquitto; generated; vendor preset: enabled) Active: active (running) since Tue 2017-10-17 00:31:34 JST; 12min ago Docs: man:systemd-sysv-generator(8) CGroup: /system.slice/mosquitto.service └─8284 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf 10月 17 00:31:34 raspi3-01.iot.local systemd[1]: Starting LSB: mosquitto MQTT v3.1 message broker... 10月 17 00:31:34 raspi3-01.iot.local mosquitto[8278]: Starting network daemon:: mosquitto. 10月 17 00:31:34 raspi3-01.iot.local systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker. $ sudo systemctl enable mosquitto mosquitto.service is not a native service, redirecting to systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable mosquitto $
動作確認
試しにメッセージのやりとりができるか確認してみます。
testトピックをサブスクライブする。
$ mosquitto_sub -h localhost -t test
新しくコンソールを開いてtestトピックにメッセージを送る。
$ mosquitto_pub -h localhost -t test -m "testmessage"
サブスクライズしたコンソールに「testmessage」が表示されればOK。
パスワードを設定する
このままでは誰でも送信、受信が可能なためパスワードを設定する。
パスワードが平文で流れちゃってるのでセキュリティ的にはお察し。
本当は証明書などで管理するのが良いのですが、今回は割愛。
$ sudo vi /etc/mosquitto/mosquitto.conf # 最下行に追記 allow_anonymous false password_file /etc/mosquitto/mosquitto_password
パスワードファイルを作成する。
$ sudo mosquitto_passwd -c /etc/mosquitto/mosquitto_password ユーザ名
Password:
Reenter password:
mosquittoを再起動する
$ sudo systemctl restart mosquitto
接続確認
testトピックでサブスクライブできるか確認する。
$ mosquitto_sub -h localhost -t test -u ユーザ名 -P パスワード
$ mosquitto_pub -h localhost -t test -u ユーザ名 -P パスワード -m "testmessage"