【ラズパイ x IoTネットワーク】MQTTをローカルネットワーク間で通信してみる・その3 〜 Aedesブローカーを動かそう


※ 当ページには【広告/PR】を含む場合があります。
2020/09/13
【ラズパイ x IoTネットワーク】MQTTをローカルネットワーク間で通信してみる・その2 〜 Node.jsでのブローカーの構築と動作確認

Aedesは前回取り上げたMoscaの後継プロジェクトであり、様々な機能が強化されたMQTT用のライブラリです。

前回の記事の時点で予告はしていたのですが、今回はMoscaからAedesへの簡単な移行手順を検証してみます。

合同会社タコスキングダム|タコツボの中の工作室
【ラズパイ x IoTネットワーク】MQTTをローカルネットワーク間で通信してみる・その2 〜 Node.jsでのブローカーの構築と動作確認

nodejs体制でのMQTTネットワークの構築方法を検討します。


ラズベリーパイ4B 4GB 技適対応品

LABISTS Raspberry4 4B-32GB オールインワンセット

TP-Link WiFi 無線LAN 中継器 11ac AC750 433+300Mbps

ブローカーの実装

Moscaの時と少し用法が変わっていますので、Aedes公式のAPIリファレンスを見ながらaedesインタンスを利用してmqttサーバーを実装していきます。

            // 👇aedesインスタンスの取得
const aedes = require('aedes')();

aedes.on('clientError', function (client, err) {
    console.log('client error', client.id, err.message, err.stack)
});

aedes.on('connectionError', function (client, err) {
    console.log('client error', client, err.message, err.stack)
});

aedes.on('publish', function (packet, client) {
    if (client) {
        console.log('message from client', client.id)
    }
});

aedes.on('subscribe', function (subscriptions, client) {
    if (client) {
        console.log('subscribe from client', subscriptions, client.id)
    }
});

aedes.on('unsubscribe', function (subscriptions, client) {
    if (client) {
        console.log('unsubscribe from client', subscriptions, client.id)
    }
});

aedes.on('client', function (client) {
    console.log('new client', client.id)
});

aedes.on('clientReady', function (client) {
    console.log('client is ready', client.id)
});

aedes.on('clientDisconnect', function (client) {
    console.log('client disconnected', client.id)
});

const server = require('net').createServer(aedes.handle);
const port = 1883;

server.listen(port, function () {
    console.log(`Server running at mqtt://localhost:${port}/`);
});
        
Mosca時代の実装と比べてもどことなく用法が似ていますが、イベントハンドラaedes.onメソッドの第一引数に指定するイベント名が新しくなっています。

            client:
    新規クライアントが登録されたときに処理
clientReady:
    クライアントの初期化完了し、通信待機状態になったときの処理
clientDisconnect:
    クライアントの通信が正常に切断されたときに処理
clientError:
    通信中のクライアントに異常が発生した際に処理
connectionError:
    クライアントの初期化に失敗した場合に処理
publish:
    パブリッシャーがメッセージをブローカーに送信した時の処理
    第一引数にメッセージパケットを含める
    この場合トピックはpacket.topicから取り出し
subscribe:
    サブスクライバーが購読をリクエストした時の処理
    第一引数にトピックを含むオブジェクトを指定
unsubscribe:
    サブスクライバーが購読を取り止める時に処理
    第一引数にトピックを含むオブジェクトを指定
closed:
    サーバーが終了した際に処理
        

ラズベリーパイ4B 4GB 技適対応品

LABISTS Raspberry4 4B-32GB オールインワンセット

TP-Link WiFi 無線LAN 中継器 11ac AC750 433+300Mbps

サーバーの起動とクライアントの接続

サーバーの起動自体はMoscaと同じ要領で、ブローカーの起動を行います。サーバー機のコンソールから以下を実行します。(途中、別のサブスクライバーから接続を試みています。)

            $ node broker.js
Server running at mqtt://localhost:1883/
#👇サブスクライバーの接続
new client mqttjs_149bec5b
client is ready mqttjs_149bec5b
subscribe from client [ { topic: 'hoge/piyo/fuga', qos: 0 }, qos: 0 ] mqttjs_149bec5b
#...
#👇サブスクライバーの切断
client disconnected mqttjs_149bec5b
unsubscribe from client [ 'hoge/piyo/fuga' ] mqttjs_149bec5b
        
ちゃんとAedesでもブローカーが起動していることを確認できたらOKです。

ちなみにMQTTクライアント側は前回と同様
mqtt.jsで動作しますので、特に弄る必要はありません。


ラズベリーパイ4B 4GB 技適対応品

LABISTS Raspberry4 4B-32GB オールインワンセット

TP-Link WiFi 無線LAN 中継器 11ac AC750 433+300Mbps

まとめ

今回の記事の内容では、MoscaからAedesへのブローカーの移行する簡単な検証を行いました。

今後はもう少しmqttらしい応用を特集していこうかと思いますので、その時は是非また当ブログを覗いてみてください。

参考サイト

Aedes

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。