生活を良くします - 怠惰なプログラミング

生活を良くします-怠惰なプログラミング

外資系でエンジニアをやっています。便利なサービスや商品、プログラミングで作ったものなどを紹介していきます

mosquittoコマンドのインストール・使い方

f:id:what_a_day:20161206163651p:plain

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の人はここからダウンロードすることが出来ます。
20161206152747
出典: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ブローカーの出来上がりです。