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


2020/09/13

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

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


ブローカーの実装

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:
    サーバーが終了した際に処理
        


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

サーバーの起動自体は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で動作しますので、特に弄る必要はありません。


まとめ

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

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


参考サイト

Aedes

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

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