Node.jsでMQTTを使う

Node.jsMQTT通信を行う方法です。
実運用よりは、IoTデバイスとのMQTT通信を行うクライアントアプリの試験サーバとして活用できるかなと思います。

MQTTはBrokerPublisherSubscriberで通信を行います。ここではそれぞれの実装方法を紹介します。

MQTT Broker

BrokerにはAedesを使います。

インストール

npm install aedes
npm install net

ソースコード

mqtt-broker.js
"use strict";

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

const Port = 1883;

// クライアントエラー.
aedes.on('clientError', (client, error) => {
    console.error('client error', client.id);
    console.error(error);
})

// 接続エラー.
aedes.on('connectionError', (client, error) => {
    console.error('connection error', client.id);
    console.error(error);
});

// publish.
aedes.on('publish', (packet, client) => {
    console.log('publish', client);
});

// subscribe.
aedes.on('subscribe', (subscriptions, client) => {
    console.log('subscribe', client.id);
});

// subscribe 解除.
aedes.on('unsubscribe', (unsubscriptions, client) => {
    console.log('unsubscribe', client.id);
});

// 新規クライアントが登録.
aedes.on('client', (client) => {
    console.log('client', client.id);
});

// クライアントの切断.
aedes.on('clientDisconnect', (client) => {
    console.log('clientDisconnect', client.id);
});

// MQTT Brokerの起動.
server.listen(Port, () => {
    console.log('MQTT Broker start');
});

Publisher

PublisherSubscriberにはmqttを使います。

インストール

npm install mqtt

ソースコード

一度だけpublishするサンプルです。

publish.js
"use strict";

const mqtt = require('mqtt');

const _topic = 'apikey/v1/topic';

const mqttOpt = {
    port: 1883,
};

const client = mqtt.connect('mqtt://<ホスト名>', mqttOpt);

client.on('connect', () => {
    // 'mqtt test'という文字列を送信.
    client.publish(_topic, 'mqtt test');
    client.end();
});

オブジェクトを送りたい場合はJSON.stringify()で一旦文字列にします。

const data = {};
data.no = 100;
data.msg = 'mqtt test';
client.publish(_topic, JSON.stringify(data));

Subscriber

ソースコード

一度メッセージを受信したら終了するサンプルです。

subscribe.js
"use strict";

const mqtt = require('mqtt');

const _topic = 'apikey/v1/topic';

const mqttOpt = {
    port: 1883,
};

const client = mqtt.connect('mqtt://<ホスト名>', mqttOpt);

client.on('connect', () => {
    client.subscribe(_topic, (error) => {
        if (error) {
            console.error(`subscribe ${_topic} error.`);
            client.end();
            return;
        }
        console.log(`subscribe ${_topic} success.`);
    });
});

client.on('message', (topic, message) => {
    console.log("on messsage", topic, message);
    // message is Buffer.
    console.log(message.toString());
    client.end();
});

実行方法

  1. mqtt-broker.js
  2. subscribe.js
  3. publish.js

の順で実行します。
publish.jsを実行すると、subscribe.jsclient.on('message')がコールされます。

このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です