今まで色々な開発に携わってきたが、通信に関わるものは多くなく以前半年ほどNGNのプロジェクトに携わったのを最後にもう随分無関係になっていた。今回、MQTTの通信を利用したシステム開発のプロジェクトに携わり、そこで得た知見というかHOWTOを今後のために残しておくことにする。
このエントリーでは、「MQTTとは何か?」という部分にはフューチャーしないことにする。もし、MQTTの基本概念を知りたい方は、参照先サイトでまずは概要を理解しておくと良いと思う。
接続確認の前に、環境について
今回はローカル環境(ローカルPC、もしくはサーバにある環境のみの閉じた環境)だけでなく、ローカルPCからサーバ環境の双方向から通信を確認できるようにしたい。
段階として、ローカルPC内での通信確認、そしてサーバ環境内での通信確認、最後にローカルPCとサーバ環境の接続確認を行う。
ローカルPCとサーバにそれぞれMosquittoをインストールする
インストール自体は非常に簡単で、下記のリンクから対象となるファイルを選択すればいいだけです。 https://mosquitto.org/download/
インストールしたファイルを実行すればクライアント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の接続を確認しようとすると、なぜか上手くいきませんでした。
サーバ側で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が確認できるはずです。
モノのインターネットのコトハジメ (Shoeisha Digital First)
- 作者: 松本直人
- 出版社/メーカー: 翔泳社
- 発売日: 2016/03/02
- メディア: Kindle版
- この商品を含むブログを見る
JavaScriptではじめるIoT いろはの“い" Raspberry Piで楽々試作
- 作者: 岩永義弘
- 出版社/メーカー: リックテレコム
- 発売日: 2016/11/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
つないで つないで プログラミング Node-REDでつくる初めてのアプリ
- 作者: 日立 Node-REDエバンジェリスト,野口まゆみ
- 出版社/メーカー: リックテレコム
- 発売日: 2017/08/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る