mosquittoコマンドのインストール・使い方
mosquittoとは
MQTT(MQ Telemetry Transport) とは、publish/subscribeモデルに基づく軽量なメッセージプロトコルです。ネットワークが不安定な場所で動作するための機能や非力なデバイスで動くための軽量化などが特徴です。
MQと名前についていますが、負荷を分散させるためのいわゆる Job Queueではありません。そういう用途にはAMQPなどを使ってください。
MQTTはメッセージの配信に特化しており、特に多数のPublisher/Subscriberを持たなければいけない用途に使われています。また、軽量な点と同期通信な点を生かして、リアルタイム通信が必要な用途にも使われています。
MQTTについてのまとめ — そこはかとなく書くよん。
ここの説明もわかりやすいです:初めての MQTT · GitHub
メッセージの送受信を行うものくらいに認識しています。ただしデバイスからメッセージを送信したり、受信させたりと言った要件に使えるためIoTを考える上ではすごく便利なものです。
モノのインターネットが騒がれ続けてきて久しいですからね。
メッセージの送受信ができるということはそれだけで命令を与えることができるということなので、ネットワークが苦手な自分もちょっと勉強しました。
websocketにも対応させれば、javascriptやnode.jsで色々出来そうです。一番に思いつくのはraspberry piやArduinoに対しての制御を行えないか?ということですね。
Amazon Goでも使ってそうだなと思っています。
www.what-a-day.net
インストール方法
homebrewを使う
Macだと基本的にhomebrewを入れておけば、かなりのソフトウェアを楽にインストールすることができます。homebrewは次のコマンドで入れれます。macだと確かデフォルトでRubyが入っていたような気がするのでたぶんいけます。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
ソフトウェア系の企業の人や情報系の人は入れておいた方がいいです。
brew install mosquitto
windowsの人はここからダウンロードすることが出来ます。
出典:Eclipse downloads - Select a mirror
Linux・UbuntuでもwindowsでもMacでも動きます。
インストール時のエラー
Error: /usr/local is not writable. You should change the ownership and permissions of /usr/local back to your user account: sudo chown -R $(whoami) /usr/local
brewで何かをインストールする時、こういうエラーが発生することがあります。
Macを買い換えた時とかによく発生させてしまい、その度に少し時間をかけて悩むのでここで潰しておきます。
このエラーが出て来ると最終的に下のように、ソフトウェアのインストールが失敗します。
==> make install Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink sbin/mosquitto /usr/local/sbin is not writable. You can try again using: brew link mosquitto
You can try again using: brew link mosquittoとか書いてありますのでこれを実行します。
brew link mosquitto
結果:
Error: Could not symlink sbin/mosquitto /usr/local/sbin is not writable.
対処法としては、だいたいこれを打ち込めばいいです。
UserNameを自分のユーザー名にしてこのコードを打ち込むと解決します。
sudo chown -R UserName:admin /usr/local/
これで /usr/localの権限を変えることに成功したので次にlinkを行います。
権限を変えてから次のコードを打たないと先ほどのようにエラーになります。
brew link mosquitto
動作確認テスト
ターミナルを2つ立ち上げます。そしてその1つで次のコマンドを実行します。mosquitto_sub -t newtopic/test -h test.mosquitto.org
残ったもう1つのターミナルに対して次のコマンドを実行します。
mosquitto_pub -t newtopic/test -h test.mosquitto.org -m "Hello"
これで最初のターミナルに「Hello」が表示されれば成功!!
mosquitto_pubは送信用
mosquitto_subは受信用として確認テストをしています。
ちなみに
ーh : 待機している/送りたいIPアドレス
ーp : ポート番号
ーm : 送るメッセージの内容
mosquitto_pub -h IPアドレス -t "newtopic/test" -p 61883 -m "送りたいメッセージ"
動作確認テストその2
ターミナルで次のコマンドを実行して見てください。mosquitto
うまく実行できれば良いですが、自分の場合は
「-bash: mosquitto: command not found」と返されてしまいました。
よく見てみると、mosquittoは/usr/local/sbinという所にいます。Macユーザはたぶんみんなそんな感じだと思います。
そのため、ターミナルで次のコマンドを打つのが正しいです。
/usr/local/sbin/mosquitto
これでエラーが出なければOK!!
またターミナルを2つ用意してはじめに次のコマンドを打ちます。mosquitto_subが受信役なので先です。それが終わったらmosquitto_pubを実行します。
「Hello2」が出てくれば成功です。
mosquitto_sub -t "topic/path"
mosquitto_pub -t "topic/test" -m "Hello2"
これで簡単にMQTTブローカーの出来上がりです。