MQTT(Message Queueing Telemetry Transport)はIoTなどで使われる機械と機械(PC等)で情報をやり取りする方法の名前。
MQTTブローカーという仲介するためのコンピューターを用意することで、
シリアルのように1対1だけではなく多対多で通信が可能。
MQTTでは図1のように情報をSubscribe/Publishという2つのメッセージの送受信でやり取りする。
具体的に言うとPublish(pub)はMQTTブローカーに情報(メッセージ)を送る。
Subscribe(sub)はMQTTブローカーに問い合わせてMQTTにある情報(メッセージ)を貰うという流れになっている。
しかしただsub/pubでメッセージをやり取りしようとするとメッセージが複数ある場合混線するので、 "トピック"というものが用意されていてメッセージの所属(ラベル付け)することができる(図2, 3)。 さらにトピックはディレクトリのように"/"で階層構造にすることができ、メッセージの属性をわかりやすくできる。 MQTTブローカーには様々なものがあるが、世の中ではmosquittoまたはEMQがよく使われているらしい。
mqttを導入する場合、インターネットで1番良く目にするのが、mosquittoを使った方法である。
mosquittoのライブラリ等を使ってプログラムに書き込むこともできるが、
ここでは簡単にコマンドのみで試しに使ってみる。
インストール(Debian系)
$ sudo apt install -y mosquitto mosquitto-client
自PCにてMQTTブローカーを立ち上げて、pub/subも同じPCから投げてテストする場合。 このときターミナルを2つ立ち上げて、別のターミナルでsubを投げた後にpubを投げると、 pubで投げたメッセージがsub側に表示される。
$ sudo systemctl start mosquitto
Sub側:
$ mosquitto_sub -h localhost -t <トピック>
Pub側:
$ mosquitto_pub -h localhost -t <トピック> -m <メッセージ>
インストール(Debian系)
$ curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
sudo apt install emqx
MQTT通信を行う際に、いくつかオプションを付けることができる。
参考: mosquitto_pub man page
参考: mosquitto_sub man page
さらに、mosquitto_subでは'#'を使ったtopicのワイルドカード指定も可能。
通常のMQTTでの通信は、
MQTTブローカーにアクセスできるコンピュータからトピック・メッセージの内容を覗けてしまう。
通信にTLS/SSlを使えばそれぞれの内容を秘匿できる。因みにホームページなどのアドレスにあるhttpsでもこれが使われている。
参考: MosquittoブローカのTLS(SSL)認証設定