たそらぼ

日頃思ったこととかメモとか。

mosqiitoでMQTT(AWS IoTに向けて)

AWS IoTにメッセージを送りたかったので、mosqiitoを使ってMQTTをPublishすることに。
mosqiitoはMQTTプロトコルOSSで、homebrewから簡単に入る。

mosquitto.org

環境

macOS Sierra v10.12.5
Homebrew 1.8.2

mosqiitoのインストール

brew install mosquitto

なんかmosquittoだけ"/usr/local/opt/mosquitto/sbin/mosquitto"に入ったので、
パスが通っているところにシンボリックリンクを貼って呼べるようにした。

動作確認

ターミナルを3つ立ち上げとく。

##ターミナル1で実行
#メッセージブローカー
mosquitto

##ターミナル2で実行
#Subscribe
mosquitto_sub -t test

##ターミナル3で実行
#Publish
mosquitto_pub -t test -m "message"

上手くいくと、ターミナル3に"message"と表示されるはず。

-t はトピックの指定、 -m はメッセージの内容。
詳細は次。

Publish-Subscribe方式

下記サイトがわかりやすい(とはいえ、自分でやってみるまで分からなかったけど。。。)
Pub/Subメッセージングモデル
出版-購読型モデル - Wikipedia

f:id:tasotasoso:20181119222747p:plain

Publisherからパブリッシュされたメッセージ("message")は、メッセージブローカーでトピック(test)に登録される。
Subscriberはメッセージブローカーからトピック(test)に登録されたメッセージ("message")をサブスクライブする。

起動時のエラー

なんかエラーが出た。

・・・
Opening ipv6 listen socket on port 1883.
Error: Address already in use

下記サイト
Mosquito Error:Address already in use - Raspberry Pi Forums
でも説明があるが、前のmosquittoが立ち上がったまんまでポートを塞いでるっぽい。
よく分からないけど、とりあえずkillしとくと上手くいきました。



もともと、IoTというくらいなので、ラズパイとかでやるもんなのかと思ってたけど、
mosqiito入れるだけでMacでできて面白かった。
Pub/Sub方式はサイトを読んでるだけだとピンと来なかったので、
やっぱしプロトコルは使って覚えるべし、という感じでした。