DockerでMosquittoコンテナを作成

2022年の秋にAWS IoT CoreMQTTを使用してから、もう少し使用してみようかなと思い、自分の開発環境にも入れてみようかなと思っていました。ただ、最近はWindowsのアプリのインストールではなくDockerを使用してコンテナ環境を作って他の環境でもすぐに使えるようにしたほうがいいかなと思って、色々試してようやく使えるようになりました。あと、面倒なのでdocker-composeは使用してません。

今回使用しているのはMQTTオープンソース実装であるMosquittoを使っています。Windowsバイナリもあるので、正直それを使ったほうが楽です😁コンテナにしているので他の処理系でもほぼ同じように使えるのがいい点でしょうか。コンテナを使ってというのであればDockerでなくてもWSLを使用するという手ももちろんありかなと思います。

このMosquittoのDockerイメージは以下にあります。サイズは11MByte程度。このサイズ感ならDockerでいいですよね。

hub.docker.com

こちらのページのドキュメントにも導入の方法は書いてありますが、ちょっとだけ注意点はありますので、それも含めてメモとしていきます。

設定ファイルの準備

Mosquittoはコンテナのイメージを持ってきて起動するだけではうまくいきません。Mosquittoの設定ファイルであるmosquitto.confファイルを作成する必要があります。設定ファイルの内容については先程のコンテナ説明のページに記載されています。

設定ファイルの内容をMosquitto起動時に読み込まれるようにすればよいのですが、コンテナ起動時に設定ファイルがないとうまく起動できません。そこで今回は以前も使用したローカルファイルシステムのマウント機能(-vオプション)を使用して、Windows側のファイルシステムMosquittoの設定ファイルを配置して、起動時に読み込まれるようにします。

注意点の1点目はWindowsのパス表記の方法です。特にドライブレターを含んだパスの表記は癖があるので注意しましょう。

参考

uepon.hatenadiary.com

今回は設定ファイルをわかりやすくCドライブのルートにmosquittoというフォルダを作成し、マウントしていきます。パスの表記としてはルート部分(ドライブレターがCドライブであれば)が/c/となっているのがポイントになります(Windowsのみのtips😅)

作成したフォルダ

設定ファイルの内容

mosquitto.confの内容(コピー&ペースト用)

persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log

これで設定ファイルの準備ができました。あとはこの設定ファイルを参照するようにコンテナを作成します。

コンテナ構築・起動

実行方法もコンテナのページにかかれていますが、かなり親切にかかれています。

自分がドキュメントから変更した点は先ほどのマウント機能で(-vオプション)ドライブレターを含んだパスにしている点とホストネームの部分になります。起動コマンドに含まれているport番号1883と9001はホスト側からも共有できるようになっているので、Windows版のMosquittoをローカルホストにインストールした場合とほぼ同じように使用できるようになるかと思うのですが、実際は別マシン扱いになるので注意が必要です(後述します)。

以下の様に起動するとMosquittoコンテナが起動します。ホスト名はmymosquittoとしていますが、この名前はお好きなものに変更してください。

コンテナ構築・起動用のコマンド

PS > docker run -it -p 1883:1883 -p 9001:9001 -v /c/mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf -v /mosquitto/data -v /mosquitto/log --name mymosquitto eclipse-mosquitto

コンテナ構築・起動が無事に行われたら、あとは通信のテストを行っていきます。

MQTTの実行テスト

コンテナが起動すると自動でMosquittoのbroker(実行プログラム名はmosuquitto)が自動的に起動しています。コンテナ側のpsコマンドを使用するとプロセスの起動状態を確認することができます。ちなみに起動は以下の様にしても行うことができます。

$ mosquitto -v

ブローカの起動が確認できたら、CLIからMosquittoのsubscriber(実行プログラム名はmosquitto_sub)を起動します。テスト用のTopicはtest/topicとしています。後述のpublisher側のTopicとsubscriberのTopicが合致すると、subscriber側にメッセージが受信します。

mosquitto subscriberの起動

$ mosquitto‗sub -t test/topic

あとは別途コンソールを起動し、Mosquittoのpublisher(実行プログラム名はmosquitto_pub)を起動して、メッセージを送信すればsubscriber側でメッセージが受信されます。

mosquitto publisherの起動

$ mosquitto_pub -t test/topic -m ”hello world!”

登録されたTopicのsubscriberが複数存在していれば、brokerがsubscriber側にメッセージを送信してくれます。

今回は同一ホストでsubscriberとpublisherが起動していたので、起動時オプションにホストを指定はしていませんが、オプションスイッチで-hを指定することで起動しているホストも指定できます。Mosquittoコンテナ側はDockerホストとポートの転送設定も行っているので、Windows側のMQTTクライアントからも同様に通信を行うことが可能です。

Windows版のmosquittoからの通信テスト

では、本当にDockerホストとなっているWindows側から通信が確認できるかを試してみます。注意しないとハマります。

Windows版のMosquittoがあるのでそれをWindowsにインストールして動作を確認してみます。 以下からWindows版のMosquittoをダウンロードして、インストールを行っていきます。

mosquitto.org

mosquitto.org

ダウンロードし、ファイルを実行するとmosquittoコマンド群のインストールが行われます。

インストール① 【Next >】ボタンをクリック

インストール② 【Next >】ボタンをクリック

インストール③ 【Install】ボタンをクリック

インストール④ 【Finish】ボタンをクリック

注意点としてはmosquitto(broker)が自動起動されている点です(サービス化設定しないと立上がらないのかなと思ったのですが、起動はしているようです)。そのままではDocker側のmosquittoと重複して実行され通信ができません(Docker側に通信が届きません)。もしこの方法で通信を試すのであれば、mosquitto(broker)をPowerShellGet-Processコマンド(エリアスはps)でプロセスIDの確認を行った後、Stop-Processコマンド(エリアスはkill)で終了させてから試すようにしてください。Windows側でログを確認してもWindows側のsubscriberが起動していなければ、表示も行われないのでどこがおかしいかわかりにくいので、原因を調べるのがかなり大変でした。

PowerShellのAlias機能使用した停止する例

PS > ps  -Name mosquitto
# mosquittoプロセスのIDが4666であった場合
PS > kill -ID 4666

Windowsプロセスのmosquitto(broker)を終了させれば、Docker側のmosquitto(broker)と通信ができるのですが、まだだめです。Docker側とホスト側は別ホスト扱いになっているため、通信が制限されてしまいます。Mosquittoではデフォルトでは同一ホスト以外のbrokerとの通信しかできないようになっています。 そのため、ほかのホストからのMQTT通信を行う場合には設定ファイルであるmosquitto.conf以下のように編集していきます。最後の2行がはホストとの通信に使用する設定になります。

mosquitto.confの変更内容(コピー&ペースト用)

persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log

listener 1883
allow_anonymous true

念のため、先ほどのコンテナを削除し、再度読み込まれるようにコンテナを構築・起動を行います。

(再掲)コンテナ構築・起動用のコマンド

PS > docker run -it -p 1883:1883 -p 9001:9001 -v /c/mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf -v /mosquitto/data -v /mosquitto/log --name mymosquitto eclipse-mosquitto

このコンテナを起動し、Windows側のmosquitto_pub(publisher)でメッセージを送信すると、Dockerコンテナ側のmosquitto_sub(subscriber)にデータが受信されています。Dockerコンテナからも通信できているのがわかります。

おわりに

MQTTオープンソースの実装であるMosquittoをDockerコンテナ上で動作させることができるようになりました。これで、IoT機器などのデバイスとの通信もできるようになりました。RaspberryPiにもMosquittoがあり利用できますし、pythonからでもモジュールを使用することでプログラム内からMQTTを使用できるかと思います。

Node-REDで地図上に可視化する!(node-red-contrib-web-worldmap)

先日、Node-RED UGのイベントが名古屋にて行われ、それにスピーカーとして出席しました。

node-red.connpass.com

イベント名は「Node-RED Flow 大喜利 in 名古屋」でしたが、内容としては1つのテーマからそれに関連するNode-REDのフローを作成して、そのフローについてフリートークをしていくというものです。今回は開催地が愛知県ということもあり、交通・地図というような内容で行われました。

自分は、Node-REDのイベントでLTはたまにしていたのですが、こういうタイプのものは初めてだったので、かなり緊張していました。というのも自分が作ったのはかなり初歩的なものだったという理由もあります。

Node-REDで地図を使用するには?

今回のお題は地図と交通データだったので、Node-REDで地図を表示したり、それにピンを立てる方法などを調べてみました。

Node-REDで地図を扱うには拡張ノードであるnode-red-contrib-web-worldmapを使用することが一般的のようです。また、今回はオープンデータであるGTFSのデータ群にあるバス停データを使用しています。当然ながらバス停位置データは経度・緯度データを含んだCSVデータになっているので、CSVデータを処理するCSVノード(デフォルト)を使用しています。

自分は愛知県(全国?)の中でも一番世帯年齢が若いといわれる長久手市名古屋市の東側に隣接)のバス停データを使用し、地図(OpenStreetMap:以降OSM)にピンを立てるフローの作成を行っています。選んだ理由としては、地方は自家用車文化なのでバス停がどのように点在しているのかというのに興味があったからです。多分あんまりないんじゃないかなと…予想。

OSMの詳細に関しては以下を参考にしてください。

OSMのサイト

openstreetmap.jp

続きを読む

2022年に買った良かったもの

もう年も明けてしまったのでかなり今更感があるネタになりますが…😂

昨年も色々なものを購入しました。その中で良かったものを記載してみようと思います。 ジャンクで購入したものに関しては省いています。また、ランキング形式ではありません。

MacBook Air M1

2022年から授業でMacを使う必要があったので購入しました。

www.apple.com

今回、人生初Macではあったのですが、非常に質感も高く、処理スピードなどに関しても全く不満はありません。MacOSXだからなのか、それともプロセッサがM1になっているかからなのかはわかりません。キーボードの押し込みの薄さに関してはかなり不安がありましたが、打ち心地も非常に良い印象。問題があるとすればやはりcommandキーControlキーがあり、Windowsとのショートカットキーが異なる点です。

ここからは個人的な意見になりますがUSB Type-Cコネクタしかないのもちょっと嫌かな。とはいえ、使用していて満足感はあるなと感じています。その点がMacの普及度につながっているのだろうなとは思います。自分はガンダム的な表現をすると量産機を乗り換えるようなスタイルが好きなので、そのあたりの考え方が違うのかなと思います。

製品の品質は良いし満足度もあるので、こちらに揚げさせていただきました。M2の発表直後だったので結構安くなってました。

Amazonベーシック USBケーブル 0.9m (タイプC - マイクロB 2.0)

次は地味なものになります。USBケーブルですが、Type-Cーmicro-Bのケーブルとなります。最近はType-Cが増えてきたり、ACアダプタにもType-Cが増えてきたりという状況が増えてきました。出先でのケーブルはできるだけ本数を少なくしたいのですが、micro-B端子のデバイスがあると本数がなかなか減らすことができないという悩みがありました。そこでType-Cーmicro-Bのケーブルを前々から探していたのですが、なかなか見つかりません。古いAndroid端末、RaspberryPi 3B、micro:bitあたりがメジャーなmicro-B端子付きのデバイスですが、それらを使わないのであれば今更購入しなくてもいいのかもしれません。

一般のお店で見たことはないのですが、AmazonBasicを検索して見つかったのがこれになります。個人的には出歩くときのケーブルの本数が少なくなったので良かったと思っています。

CIO NovaPort TRIO 65W 充電器

こちらはType-AとType-CのついたPD対応充電器です。これまでもっていた充電器は65W対応のものだったのですが、Type-Cが1ポートしかないものだったので、充電時にType-A関連のものがなくてちょっと困ることがありました。そこで、充電器にType-AとType-Cに両対応しているものをさがしていました。また、できるだけ本体サイズが小さいものが欲しかったのでこちらを選択してみました。ACプラグが折り畳めるのが非常に良いです。PCメーカー製のものは折り畳めない物が多いので困ることが多かったです。

以前はこういうジャンルはAnkerさん一択に近かったのですが、最近は他のメーカーも増えてきていて、特にCIOは小さいものが多いので、個人的には気に入っています。現在は、会社の支給PCのVAIO、先程のMacBook Air、自宅のPCなどでも使用していますが、気に入ったので加えて1つ購入しています。

connectinternationalone.co.jp

ロジクール Webカメラ C920n

続いてはWebカメラです。これまでは比較的古めのWebカメラを使用していました。そのため、画質が結構暗いのです。なのでオンライン会議などでも顔が暗くなり、それを解消するために明るさを持ち上げるといったことを行い、画質が更に荒くなるといった状況でした。あと一点、卓上の物撮りをしようとするとあまり近づけないという不満もありました。

そこで、この2つの悩みを解決するために購入しました。かなり近くによってもフォーカスがしっかり決まるというのはかなり素晴らしい機能かなと思います。特に電子工作などを行っていると近くによってみたいことがおおいので、このレベルで接写ができるのはいいですね。 こちらはオートフォーカスにも対応しているので、フォーカスが外れても短時間で焦点があうのも良い点だと思います。

ロジクール Signature M650MGR ワイヤレスマウス

ワイヤレスマウスも購入していました。多ボタンのマウスに関してはかなり使っていきたいと思っているのですが、多ボタンのマウスは基本的にサイズが大きいものがおおいので、手の小さい自分にはかなり使いにくいものが多いのですよね。配置されたボタンに指が届かない…。そんな中同じ型番でサイズが2タイプあるというM650を購入してみました。レギュラーとラージがありますが、自分はレギュラーを使用しています。

www.logicool.co.jp

Xiaomi 電動 精密ドライバー ミニ 小型 電動ドライバーセット

一時期ネットで話題になっていた電動ドライバーになります。持ち運びを考えるとこのぐらいコンパクトなものでもいいのかなと思います。ビットもまとめてケースに入っているので忘れ物はなくなりそうです。あとビットの収納部分がマグネットになっているのでケースにいれてからカチャカチャと音がすることはないかなと思います。トルクはちょっとゆるいのかなと思うのですが、ネジ頭をなめてしまわないためには緩めのほうがいいのかもしれません。使用感もかなりいいと思います。

モバイルモニター 2K 13.3インチ モバイルディスプレイ ARZOPA 2560*1600

セールがあったときにやすかったので購入してみました。1080のFHDのモニタは結構お安いものが増えてきていますが、せっかく別途購入するものなので、もう少し縦の解像度が大きいといいなあと思ったので今回はARZOPAの2560*1600のモニタを購入しました。miniHDMI接続とUSB Type-C接続ができるのですが、やはりminiHDMI接続はケーブルを別途用意しないといけないことが多いのでちょっと避けたい感じですかね。

13インチのモニタですが、画質も良いですしサイズの割に大きく感じますね。出先では10インチタブレットをサブモニタにすることもありますが、家やオフィスなどでの固定した場所でのサブモニタにはいいかなと思います。本体カバーでスタンドぽいこともできるのですが、別途金属製などのスタンドがあると便利かなと思います。

アマゾンでは割引クーポンやセールがあるので、それに合わせて購入するのがいいでしょう。

dynabook GZ

久しぶりにノートPCを購入しました。以前購入したものは第6世代のCore i7でだったので、ギリギリWindows11対応できない時期のPCだったので、そろそろかなと思っての購入でした。今回のポイントはUSB PD充電、USB Type-C、重さ(1kg前後)この3点で選択しました。これの要求条件で選ぶと画面の解像度は基本FHDぐらいになってしまうことや、SSD 512GBになりますが、価格との相談でこれになりました。その他の選択肢は富士通のLIFEBOOKかなと思います。

dynabook.com

MINISFORUM NUCXI7

今年は家で使用しているデスクトップもそろそろ交換時期かなと思いこちらを購入。最近miniPC市場もかなり中国系の方では流行っているので選択肢がかなり多くなってきているので助かります。このPCのはMINISFORUMさんのPCになります。かなり平たい本体ですが、どちらかというとゲーミングノートPCの液晶モニターなしというようなものになります。ファン音がどれくらいするのかなと思ったのですが、これまでのPCに比べれば全然音はしない印象です。

発表時の割引などもあるので、この手のものは早めに購入するのがいいかなと思います。(数万ぐらいの割引はあります)

https://store.minisforum.jp/collections/all-product/products/minisforum-deskmini-nucxi7

Google Pixel 6

最後になりますが、Google Pixel 6になります。すでに2022年ではGoogle Pixel 6aやGoogle Pixel 7も発売されているので、時期的に失敗した感じではありますが、個人的にはかなり満足しています。下取りがありかなり低価格で購入できましたし、バッテリーの持時間もかなり改善しました。これまでもそうですが、Google Pixelシリーズに関しては満足感が高いです。あと、いらないアプリもないですしね。

store.google.com

おわりに

2022年に購入して良かったものを列挙してみました。今回、購入して一番良かったものといわれれば、Google Pixel 6かもしれません。毎日使用するものということが理由かもしれません。その他もいいものは多かったので差は殆どないかもしれません。

今年はどんなデバイスに出会えるでしょうか。楽しみです。

WindowsターミナルでOSのプロダクトキーを調べる

WindowsのOSのプロダクトキーが知りたい場合のメモ

Windowsのターミナル(cmdPowerShell)で以下を実行するとWindowsのプロダクトキーが表示できます。 特にアプリなどをインストールすることなく可能なのでちょっと便利。

※手打ちのときにはOの違いに注意してください。

// cmdでもPowerShellでもOK
wmic path softwarelicensingservice get OA3xOriginalProductKey

// PowerShellのみ
(Get-WmiObject -query "select * from SoftwareLicensingService").OA3xOriginalProductKey

管理者権限がなくても実行できます。

ジャンクのスピーカーマイク購入300円

先日、じゃんぱらに行ったときに見かけたスピーカーマイクを購入。お値段は300円。超激安!使えなくてもネタになるかと思ったので即購入しました。

大須にはいくつかじゃんぱらがあるのですが自分かチェックする店舗は現在イオシスさんのある場所のおとなりの店舗。ここたまに変わったものを置いていることがあって侮れないです。

購入したのはドコモさんのドコモシンプルマイク01になります。

購入品はこちら

www.docomo.ne.jp

発売日は2018年4月5日とのことで、ディスコンとなっています。箱などはちょっと痛みはありますが、本体の使用感はありません。 多分、店舗などで展示などに使用されていたのではないかなと推察します。

大きさ的には握りこぶしくらいの大きさで、持ち運びも楽々という感じですが、バッテリー内蔵のため重量はずっしり。スマートフォンよりは重い印象。

マニュアルをみると専用アプリから設定してくださいと書いてあるのですが、Bluetooth対応とのことだったので普通に音声デバイスとしてしようできるかなと。 個人的にいいなと思ったのは充電用のクレイドルがついている点。

自分はAnker PowerConfを持っていますが、こちらは抜群にいい機種なのですが、大きさが結構あるのが持ち運びするには微妙な大きさ。

ドコモシンプルマイク01は大きさとしては申し分なし。ただちょっと安っぽい音になっているのが玉に瑕というところでしょうか。 集音もしてくれるし、マイクとしても簡単な会議レベルであればそれほど気にならないかなと思いました。

ミュートやボリューム操作も天面のボタンを押すだけですし、機能的には抑えているかなと思います。 もう一つ難をいうならUSBコネクタがmicroUSB端子というところでしょうか。2018年の発売のものなので致し方ないかなと思いますけどね。

おわりに

たった300円でこのレベルのものが手に入るのはジャンカーとしてうれしい限り。最近はイオシスさんのジャンク具合が弱くなってしまったのでもう少し遊べるところはないのかなと思っています。

自分の御用達ショップは以下のような感じでしょうか。

  1. 佐古前装備さん
  2. パウさん
  3. じゃんぱらさん
  4. イオシスさん
  5. ショップインバースさん
  6. PCコンフルさん
  7. ドスパラさん
  8. パソコン工房さん

上記を回れば楽しめますかね。

/* -----codeの行番号----- */