はじめに
以前、以下のポストや記事で名前を出していた「Aedes」に CLI があるようだったので試してみました。
●p5.js Web Editor で MQTT を扱ってみる(MQTT.js や shiftr.io Desktop を利用) - Qiita
https://qiita.com/youtoy/items/7c58de69b4b20543a5b5
Aedes
●moscajs/aedes: Barebone MQTT broker that can run on any stream server, the node way
https://github.com/moscajs/aedes
aedes-cli
Aedes の CLI(aedes-cli)について、以下のページで説明などがされています。
●moscajs/aedes-cli: Run Aedes MQTT Broker from the CLI
https://github.com/moscajs/aedes-cli
●aedes-cli - npm
https://www.npmjs.com/package/aedes-cli
aedes-cli を試してみる
さっそく aedes-cli を試してみます。公式の説明だとグローバルインストールをする手順になっていますが、今回はローカルインストール(以下のコマンド)にします。
npm i aedes-cli
インストールした際の画面は、以下のとおりです。
コマンドのヘルプを見てみる
コマンドのヘルプを見てみます。ローカルインストールを使ったので、コマンド実行時にはインストールを実行したフォルダで npx をつけたコマンドを使います。
npx aedes -h
表示された内容は、以下のとおりです。
ヘルプの内容の抜粋
ヘルプで色々なオプションなどが出ていますが、自分が使いそうなものは以下がありそうでした。
aedes-cli を使った MQTT のやりとり
aedes-cli で MQTTブローカーを起動する
それでは、aedes-cli で MQTTブローカーを起動します。今後、クライアントにブラウザを使おうと思っているのがあり、over TCP ではなく「MQTT over WebSocket」を使います。
(なお、今回のこの後のテストで使うのは「MQTT.js + Node.js」によるクライアントを使います)
MQTT over WebSocket を指定するためのオプションは、以下になりそうです(※ INFOレベルのログ出力のオプションもつけています)。
npx aedes --protos ws -v
上記を実行後、以下のように 127.0.0.1:3000 で MQTTブローカーが起動しました。
ポートの変更設定や外部インターフェースからの接続も受け付ける設定
ちなみに、ポートの変更をする場合や、ローカルの通信だけでなく外部インターフェースからの接続も受け付ける設定にする場合は、以下のコマンドになります。
npx aedes --protos ws --host 0.0.0.0 -v
npx aedes --protos ws --ws-port 8080 --host 0.0.0.0 -v
クライアントからの接続を試す
あとは、MQTT over WebSocket でのクライアントからの接続を試します。その際、以下の記事を書いたときなど、過去に何度も使っていた MQTT.js を使います。
●MQTTブローカーとしても使える Beebotte で MQTT.js を使った Pub/Sub(Node.js で実装)【2022年4月版】 - Qiita
https://qiita.com/youtoy/items/e2539558b67e708b905d
クライアント側のコード
クライアント側のコードは以下としました。これを実行する前に、 npm i mqtt でパッケージをインストールしておいてください。
import { connect } from "mqtt";
const client = connect("ws://127.0.0.1:3000");
client.on("connect", () => {
client.subscribe("presence", (err) => {
if (!err) {
client.publish("presence", "Hello mqtt");
}
});
});
client.on("message", (topic, message) => {
console.log(message.toString());
client.end();
});
動作確認
最後に動作確認です。以下のように、MQTTブローカーと MQTTクライアントとの通信が行えたことを確認できました。











