底辺過ぎてちょっとビビる

26歳からIT業界にいるエンジニアが、まったく成長できてないことを確認するブログ。備忘録的に使いたいとも考えています。

【失敗あり】MQTT(Mosquitto)での接続

今まで色々な開発に携わってきたが、通信に関わるものは多くなく以前半年ほどNGNのプロジェクトに携わったのを最後にもう随分無関係になっていた。今回、MQTTの通信を利用したシステム開発のプロジェクトに携わり、そこで得た知見というかHOWTOを今後のために残しておくことにする。

このエントリーでは、「MQTTとは何か?」という部分にはフューチャーしないことにする。もし、MQTTの基本概念を知りたい方は、参照先サイトでまずは概要を理解しておくと良いと思う。

MQTTとは | かもめエンジニアリング

接続確認の前に、環境について

今回はローカル環境(ローカルPC、もしくはサーバにある環境のみの閉じた環境)だけでなく、ローカルPCからサーバ環境の双方向から通信を確認できるようにしたい。

段階として、ローカルPC内での通信確認、そしてサーバ環境内での通信確認、最後にローカルPCとサーバ環境の接続確認を行う。

f:id:starscream1999:20190214203952p:plain
まずはローカルPC内でのMosquittoの動作確認

f:id:starscream1999:20190214204034p:plain
続いて、サーバ環境内でのMosquitto動作確認

f:id:starscream1999:20190214204116p:plain
最後に(どちらでもいいが)サーバのMosquitto brokerに対してのローカルPCからの通信確認

ローカルPCとサーバにそれぞれMosquittoをインストールする

インストール自体は非常に簡単で、下記のリンクから対象となるファイルを選択すればいいだけです。 https://mosquitto.org/download/

f:id:starscream1999:20190219191442p:plain
ダウンロードページ

インストールしたファイルを実行すればクライアントPCにMosquittoがインストールされます。 インストールについての詳細は以下のサイトを参考にしてみてください。OpenSSLとpthreadsの追加インストールが必要なことが書かれています。

Windows 7 64bitにMQTT(Mosquitto)を入れるメモ – 1ft-seabass.jp.MEMO

Mosquitto(MQTT Broker)のインストール - Qiita

インストールされたMosquittoの動作確認

これ自体は非常に簡単で、Windowsならコマンドプロンプトを2つ起動(Subscribe実行用とPublish実行用)して、インストール先のフォルダへ移動し、それぞれで

  • mosquitto_sub -t test
  • mosquitto_pub -t test -m test_message

コマンドを実行してあげると、Subscriber側で「test_message」が受信されたことを確認できるはずです。

ローカルPCとサーバでのMQTT接続確認

上記のように、ローカルPC内とサーバ内でそれぞれBrokerを立ち上げて、内部でSub/Pub自体はすぐに確認ができるのですが、 ローカルPC、またはサーバ側のどちらかにBrokerを立ち上げて、お互いにMQTTの接続を確認しようとすると、なぜか上手くいきませんでした。

f:id:starscream1999:20190214204116p:plain

サーバ側でBrokerを立ち上げてローカルPC側からSub/Pubを実行する想定です。

  • mosquitto_sub -h {サーバのIP} -p 1883 -t test
  • mosquitto_pub -h {サーバのIP} -p 1883 -t test -m test_message

上記のようなコマンドを実行してもメッセージを受け取ることができません。 (コマンド自体は正しい)なぜか?

※この段階で、ローカルPC-サーバ間で問題なくMQTT通信の確認が取れていればそれは別にいいです。
自分の場合、ここで引っかかってしまった、という話ですので...

それは、サーバ側(ホスト側)の'ポートが開いていないこと'が原因だったのですね。
環境にもよりますが、TCPのポート1883を開いてあげる必要があります。もしくはファイアウォール、ウィルス対策ソフトが 邪魔をしていることも念頭に置いておいてください。

上記の問題がなければ、ホスト環境とローカル環境でMQTTのpub/subが確認できるはずです。

  

JavaScriptではじめるIoT いろはの“い

JavaScriptではじめるIoT いろはの“い" Raspberry Piで楽々試作

つないで つないで プログラミング Node-REDでつくる初めてのアプリ

つないで つないで プログラミング Node-REDでつくる初めてのアプリ