mqtt
mqttは、JSHのMQTTクライアントモジュールです。
JSHアプリケーションでは、通常は以下のように使用します。
const mqtt = require('mqtt');APIはイベント駆動で動作し、Clientを作成すると自動的にブローカーへの接続を試みます。
Client
MQTTクライアントオブジェクトです。
作成
new Client(options)オプション
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
| servers | String[] | MQTTブローカーURLの一覧(例:tcp://127.0.0.1:1883) | |
| username | String | ブローカー認証のユーザー名 | |
| password | String | ブローカー認証のパスワード | |
| keepAlive | Number | 30 | Keep Alive(秒) |
| connectRetryDelay | Number | 0 | 再接続の遅延(ミリ秒) |
| cleanStartOnInitialConnection | Boolean | false | 初回接続時のMQTT v5 clean startを有効にするかどうか |
| connectTimeout | Number | 0 | 接続のタイムアウト(ミリ秒) |
プロパティ
config
client.configは、ネイティブMQTTクライアントが使用する解析済みの接続設定を提供します。
代表的なフィールドは以下のとおりです。
| フィールド | 型 | 説明 |
|---|---|---|
serverUrls | Array | 解析済みのブローカーURL一覧 |
connectUsername | String | 設定したユーザー名 |
connectPassword | byte data | バイト形式のパスワード |
keepAlive | Number | Keep Aliveの間隔 |
reconnectBackoff(n) | Function | 再接続の遅延を計算する関数 |
cleanStartOnInitialConnection | Boolean | MQTT v5 clean startフラグ |
connectTimeout | Number | 接続のタイムアウト |
console.println(client.config.serverUrls);
console.println(client.config.keepAlive);使用例
| |
メソッド
publish()
トピックにメッセージを発行します。
構文
publish(topic, message[, options])パラメーター
topicStringmessageString|Uint8Array|Object|ArrayoptionsObject(省略可能)
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
| qos | Number | 0 | QoSレベル |
| retain | Boolean | false | Retainフラグ |
| properties | Object | MQTT v5の発行プロパティ |
options.propertiesのフィールド:
| プロパティ | 型 | 説明 |
|---|---|---|
| payloadFormat | Number | ペイロード形式インジケーター |
| messageExpiry | Number | 有効期間 |
| contentType | String | コンテンツタイプ |
| responseTopic | String | 応答トピック |
| correlationData | String | バイトに変換 |
| topicAlias | Number | トピックエイリアス |
| subscriptionIdentifier | Number | サブスクリプション識別子 |
| user | Object | ユーザー定義プロパティ(key: value) |
戻り値
なし。結果はpublishedまたはerrorイベントで通知します。
subscribe()
トピックを購読します。
構文
subscribe(topic[, options])パラメーター
topicStringoptionsObject(省略可能)
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
| qos | Number | 1 | QoSレベル |
| retainHandling | Number | MQTT v5のRetain処理 | |
| noLocal | Boolean | false | 同じクライアントが発行したメッセージの受信を抑制するかどうか |
| retainAsPublished | Boolean | false | ブローカーのRetainフラグを保持するかどうか |
| properties | Object | MQTT v5の購読プロパティ |
options.propertiesのフィールド:
| プロパティ | 型 | 説明 |
|---|---|---|
| subscriptionIdentifier | Number | サブスクリプション識別子 |
| user | Object | ユーザー定義プロパティ(key: value) |
戻り値
なし。結果はsubscribedまたはerrorイベントで通知します。
使用例
client.subscribe('test/topic', {
qos: 0,
properties: {
subscriptionIdentifier: 7,
user: {
source: 'example',
},
},
});unsubscribe()
トピックの購読を解除します。
構文
unsubscribe(topic[, options])パラメーター
topicStringoptionsObject(省略可能)
| オプション | 型 | 説明 |
|---|---|---|
| properties | Object | MQTT v5の購読解除プロパティ |
options.propertiesのフィールド:
| プロパティ | 型 | 説明 |
|---|---|---|
| user | Object | ユーザー定義プロパティ(key: value) |
戻り値
なし。結果はunsubscribedまたはerrorイベントで通知します。
使用例
client.unsubscribe('test/topic', {
properties: {
user: {
source: 'example',
},
},
});close()
クライアント接続を閉じます。
構文
close()戻り値
なし。closeイベントが発生します。
イベント
open
クライアントの接続が完了すると発生します。
client.on('open', () => { ... })message
購読したメッセージを受信すると発生します。
client.on('message', (msg) => { ... })msgのフィールド:
| プロパティ | 型 | 説明 |
|---|---|---|
| topic | String | トピック名 |
| payload | Buffer | バイナリデータを保持するメッセージペイロード |
| payloadText | String | UTF-8にデコードしたテキスト用の便利なフィールド |
| properties | Object | MQTT v5の発行プロパティ |
msg.propertiesのフィールド:
| プロパティ | 型 | 説明 |
|---|---|---|
| payloadFormat | Number | ペイロード形式インジケーター |
| messageExpiry | Number | 有効期間 |
| contentType | String | コンテンツタイプ |
| responseTopic | String | 応答トピック |
| correlationData | Buffer | バイナリデータを保持する相関データ |
| topicAlias | Number | トピックエイリアス |
| subscriptionIdentifier | Number | サブスクリプション識別子 |
| user | Object | ユーザー定義プロパティ |
テキストメッセージは、msg.payloadTextまたはmsg.payload.toString()で読み取れます。
バイナリメッセージは、msg.payloadをそのまま使用します。
client.on('message', (msg) => {
console.println('Payload is buffer:', Buffer.isBuffer(msg.payload));
console.println('Payload bytes:', Array.from(msg.payload).join(','));
});MQTT v5の発行プロパティには、msg.propertiesでアクセスできます。
client.on('message', (msg) => {
console.println('Content type:', msg.properties.contentType);
console.println('Response topic:', msg.properties.responseTopic);
console.println('Correlation data:', msg.properties.correlationData.toString());
console.println('User source:', msg.properties.user.source);
});subscribed
購読のACKを受信すると発生します。
client.on('subscribed', (topic, reason) => { ... })topicStringreasonNumber(MQTT理由コード)
published
発行のACKを受信すると発生します。
client.on('published', (topic, reason) => { ... })topicStringreasonNumber(MQTT理由コード)
unsubscribed
購読解除のACKを受信すると発生します。
client.on('unsubscribed', (topic, reason) => { ... })topicStringreasonNumber(MQTT理由コード)
error
接続、購読、購読解除、発行でエラーが発生すると通知します。
client.on('error', (err) => { ... })errError
接続前またはclose()の呼び出し後に、publish()、subscribe()、unsubscribe()を呼び出すと、errorイベントでエラーを通知します。
close
close()の呼び出し時に発生します。
client.on('close', () => { ... })動作に関する注意
Clientは、コンストラクターで自動的にブローカーへの接続を試みます。- JavaScriptラッパーは、可能な場合、受信したバイナリペイロードを
Bufferに変換します。 - テキスト表現が可能なバッファーペイロードでは、
msg.payloadTextが自動的に設定されます。 - MQTT v5の
correlationDataは、バイナリデータを保持するBufferとして提供されます。
MQTT v5の書き込みプロパティの例
以下の例は、MQTT v5 write APIのユーザープロパティを使い、db/write/{table}トピックにデータを書き込みます。
| |