🦟

Mosquittoの使い方メモ

に公開

DockerからMosquittoに接続する

普通のやり方

多かれ少なかれdockerを使ってる人はいると思うので念のためメモする。

~$ docker ps #起動+コンテナ名の確認
~$ docker exec -it <コンテナ名> bash

もしもbashが使えないときはshで接続し、aptでbashをインストールする。

~$ docker exec -it <コンテナ名> sh
~$ apt update
~$ apt install bash -y

Composeを使ったやり方

1.ファイルの準備

~$ mkdir mosquitto
~$ cd mosquitto
~$ mkdir config
~$ mkdir data
~$ mkdir log

最終的なファイル構成はこんな感じになっている。

mosquitto/
│── docker-compose.yml
│── config/
│   └── mosquitto.conf
│── data/ (データ保存用)
│── log/ (ログ保存用)

2.docker-compose.ymlを編集する

~$ nano docker-compose.yml
version: '3.8'
services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto-mqtt
    ports:
      - "1883:1883"  # MQTT 通信用ポート
    volumes:
      - ./config/mosquitto.conf:/mosquitto/config/mosquitto.conf
      - ./data:/mosquitto/data
      - ./log:/mosquitto/log

Websocketが使いたい人は9001を通信用ポートに追加する。
ネットワーク設定が必要なら各自でどうぞ

3.mosquitto.confの編集する

persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log

# MQTTのリスニングポート
listener 1883
allow_anonymous true

匿名ログインを許可しない場合はallow_anonymous falseにする

Websocketが使いたい人は以下も追加する

# WebSocketを有効化する場合
listener 9001
protocol websockets

4.コンテナを起動する

~$ cd mosquitto
~$ docker-compose up -d

Mosquittoに接続(購読)する

Mosquittoに接続するにはmosquitto_subを使う。

そのまま接続する

例:

~$ mosquitto_sub -h <接続先IPアドレス> -t <トピック名>
  • -h <接続先IPアドレス>:ブローカーのアドレスを入れる
  • -t <トピック名>:トピック名を入れる 下に例あり

接続したいトピックがtest/topicのときは、

例:

~$ mosquitto_sub -h <接続先IPアドレス> -t test/topic

ユーザー名とパスワードを使う

もちろんユーザー名、パスワードがともにあっていなければ使うことはできない。

例:

~$ mosquitto_sub -h <接続先IPアドレス> -t <トピック名> -u <ユーザー名> -P <パスワード>
  • -h <接続先IPアドレス>:ブローカーのアドレスを入れる
  • -t <トピック名>:トピック名を入れる
  • -u <ユーザー名>:認証に使うユーザー名
  • -P <パスワード>:認証に使うパスワード

-d(デバック)オプション

Mosquittoにはデバックオプションがあり、これを付け加えることによって、よりいろいろな情報を見ることができる。

例:

~$ mosquitto_sub -h <接続先IPアドレス> -t <トピック名> -d
  • -d:デバック情報を表示する

Mosquittoに送信する

コマンドライン上でMosquittoにメッセージを送信することができる。
メッセージを送信するときはmosquitto_pubを使う。

例:

~$ mosquitto_pub -h <接続先IPアドレス> -t <トピック名> -m "Hello world!"
  • -m "Hello world!":メッセージを"で囲んでメッセージを入れる

もちろんユーザー名パスワードも使える。

例:

~$ mosquitto_pub -h <接続先IPアドレス> -t <トピック名> -m "Hello world!" -u <ユーザー名> -P <パスワード>

パスワードの設定

Mosquittoでパスワードファイル(password_file)が使われている場合はmosquitto.confを使うことで、パスワードが使える。

mosquittoの設定変更

~$ password_file /etc/mosquitto/passwd

これでMosquittoがファイルを参照して認証を行う。

パスワードファイルの作成・変更

~$ sudo mosquitto_passwd /etc/mosquitto/passwd <ユーザー名>

接続しているクライアントを確認する

ブローカーに接続しているクライアントはmosquitto_ctrlで確認できる。

例:

~$ mosquitto_ctrl clients

Discussion