NEQTO Docs
  • Languages icon日本語
    • English
  • ドキュメント
  • API
  • FAQ

›neqto.js

Getting Started

  • NEQTO Hello World!
  • Tutorial Step 1. NEQTO Console設定
  • Tutorial Step 2. デバイス設定とサービスの開始 (NEQTO Bridge)
  • Tutorial Step 2. デバイス設定とサービスの開始 (STM32 Discovery)
  • Tutorial Step 2. デバイス設定とサービスの開始 (SPRESENSE)
  • Tutorial Step 3. スクリプトを使ったアプリケーション開発

NEQTO

  • NEQTO アカウント登録
  • サブアカウント
  • APIの利用
  • GCP用NEQTO CloudSync
  • NEQTO Engineファームウェアリスト
  • お問い合わせに関するガイドライン

NEQTO Console

  • はじめに
  • 基本情報
  • 管理者専用の操作
  • デバイス管理
  • Linuxデバイス管理
  • 一括登録
  • スクリプト
  • アクション & コンタクト
  • Consoleでデータを表示
  • NEQTO Apps

    • NEQTO Apps について
    • NEQTO Infinitypool
    • NEQTO Insights
    • NEQTO Custodia
    • NEQTO Flow
  • Machine Driver
  • 推奨ブラウザ
  • 請求情報

SPRESENSE

    ハードウェア仕様

    • 01. About Spresense

    ソフトウェア仕様

    • 01. 動作フロー
    • 02. 初期インストール
    • 03. Spresense Wi-Fi 初期設定
    • 04. Spresense LTE-M 初期設定
    • 05. デバッグログ取得方法
    • 06. システムLED動作
    • 07. イベントメッセージ
    • 08. ファームウェア更新方法

    neqto.js

    • 01. About neqto.js
    • 02. Log
    • 03. Timers
    • 04. HTTP
    • 05. HTTPS
    • 06. MQTT
    • 07. Secure
    • 08. Storage
    • 09. Sleep
    • 10. RTC
    • 11. GPIO
    • 12. UART
    • 13. SPI
    • 14. I2C
    • 15. ADC
    • 16. GNSS
    • 17. Camera
    • 18. Utils
    • 19. nqSpresense
    • 20. nqService
    • 21. nqMqtt
    • 22. nqFOTA
    • 23. nqWiFi
    • 24. nqLte

STM32 Discovery

    ハードウェア仕様

    • 01. About STM32 Discovery Kit (B-L4S5I-IOT01A)

    ソフトウェア仕様

    • 01. 動作フロー
    • 02. 初期インストール
    • 03. STM32 Discovery Wi-Fi 初期設定
    • 04. デバッグログ取得方法
    • 05. システムLED動作
    • 06. イベントメッセージ
    • 07. ファームウェア更新方法

    neqto.js

    • 01. About neqto.js
    • 02. Log
    • 03. Timers
    • 04. HTTP
    • 05. HTTPS
    • 06. MQTT
    • 07. Secure
    • 08. Storage
    • 09. Sleep
    • 10. RTC
    • 11. UserSW
    • 12. GPIO
    • 13. UART
    • 14. SPI
    • 15. I2C
    • 16. ADC
    • 18. Utils
    • 19. nqDiscovery
    • 20. nqService
    • 21. nqMqtt
    • 22. nqFOTA
    • 23. nqWiFi

NEQTO Bridge

    ハードウェア仕様

    • 01. NEQTO Bridge Module
    • 02. NEQTO Bridge Wi-Fi Module
    • 03. NEQTO Bridge LTE-1 Module
    • 04. NEQTO Bridge LTE-M/NB Module
    • 05. NEQTO Bridge IO Board
    • 06. NEQTO Bridge Digital IO Board
    • 07. NEQTO Bridge Connector Board

    ソフトウェア仕様

    • 01. 動作フロー
    • 02. NEQTO Bridge Wi-Fi Module 初期設定
    • 03. NEQTO Bridge LTE Module 初期設定
    • 04. デバッグログ取得方法
    • 05. システムLED動作
    • 06. イベントメッセージ
    • 07. ファームウェア更新方法

    neqto.js

    • 01. About neqto.js
    • 02. Log
    • 03. Timers
    • 04. HTTP
    • 05. HTTPS
    • 06. MQTT
    • 07. Secure
    • 08. Storage
    • 09. Sleep
    • 10. RTC
    • 11. UserSW
    • 12. GPIO
    • 13. UART
    • 14. SPI
    • 15. I2C
    • 16. ADC
    • 17. BLE
    • 18. Utils
    • 19. nqBridge
    • 20. nqService
    • 21. nqMqtt
    • 22. nqFOTA
    • 23. nqWiFi
    • 24. nqLte
    • 25. nqLAN
    • 26. nqEx

Linux-based device

    ソフトウェア仕様

    • 01. システム要件
    • 02. インストール
    • 03. ソフトウェア構成
    • 04. 動作フロー
    • 05. デバッグログ取得方法
    • 06. イベントメッセージ
    • 07. ソフトウェア更新方法

    neqto.js

    • 01. About neqto.js
    • 02. Log
    • 03. Timers
    • 04. HTTP
    • 05. HTTPS
    • 06. MQTT
    • 07. Secure
    • 08. Storage
    • 09. RTC
    • 10. UNIXSocket
    • 11. FileSystem
    • 12. SubProcess
    • 13. Utils
    • 14. nqLinux
    • 15. nqService
    • 16. nqMqtt
    • 17. nqFOTA
    • 18. nqLAN

neqto.js Libraries

  • About neqto.js Libraries
  • UART

    • GM65 Barcode Reader
    • SRF Ultrasonic Range Finder - Serial Mode

    I2C

    • HTS221 v2 Temperature and Humidity Sensor
    • LIS2DW12 v2 Accelerometer
    • SRF Ultrasonic Range Finder - I2C Mode
    • [Archive] HTS221 Temperature and Humidity Sensor
    • [Archive] LIS2DW12 Accelerometer

    Utils

    • RTC Alarm Synchronized Scheduler

    Integration

    • AWS S3 v2
    • AWS IoT Core v2
    • Azure IoT v2
    • GCP IoT Core
    • [Archive] AWS S3
    • [Archive] AWS IoT Core

neqto.js Snippets

  • About neqto.js Snippets
  • DataDog
  • Dropbox
  • Google Sheets
  • InfluxDB
  • Oracle Cloud Object Storage
  • Salesforce
  • SAP Cloud Platform Internet of Things
  • Splunk
  • Niagara

Release Notes

  • NEQTO Console アップデート
  • NEQTO Firmware (Bridge Wi-Fi/LTE Module) リリース
  • NEQTO Firmware (STM32 Discovery Wi-Fi) リリース
  • NEQTO Firmware (Spresense Wi-Fi/LTE-M) リリース
  • NEQTO Engine Linux版 リリース

06. MQTT

mqttオブジェクトは、MQTTクライアント機能を提供する組み込みオブジェクトです。

機能概要:

  • MQTTクライアント機能を提供します。
  • MQTT v3.1.1 と v3.1 をサポートします。
  • TLSをサポートします。
  • サーバー認証とクライアント認証をサポートします。

制限事項:

  • 使用可能なMQTTセッションリソースは1本です。



mqtt Global Object

Methods()/PropertiesSummaryVersionNote
mqtt.connect()MQTT接続を開始します。{Client}インスタンスが生成されます。
mqtt.set()接続などに使用する情報を設定します。



Details

mqtt.connect(url[,options])

MQTT接続を開始します。
{Client}インスタンスが生成されます。

NameTypeM/OSummaryNote
urlstringmandatorybrokerのURL
URLは、[protocol]://[hostname]:[port] 形式で指定します。
指定可能な文字数は最大255バイトです。

protocol
プロトコル
’mqtt’,’mqtts’が指定可能となります。
hostname
MQTT Brokerのドメイン名またはIPアドレス
port
ポート番号
10進数文字列で指定します。
デフォルト値は1883となります。

TLSのCA証明書はmqtt.set()で設定可能となります。
optionsObjectoptionalMQTT接続オプション
詳細はoptionsを参照してください。
return{Client}, undefined-{Client} : 生成された{Client}
undefined : 引数不正やリソース不足で{Client}の生成に失敗した場合

options

NameTypeM/OSummaryNote
keepalivenumberoptionalキープアライブ時間[s]
0: 無効
設定範囲: 0~2,147,483,647
デフォルト値は60となります。
clientIdstringoptionalMQTTクライアントID
設定範囲: 1~127バイトの半角英数字
デフォルト値は’mqttjs_’+ランダム10進数8桁となります。
protocolIdstringoptionalプロトコルID
デフォルト値は’MQTT’となります。
protocolVersionnumberoptionalMQTTプロトコルバージョン
4: MQTT v3.1.1
3: MQTT v3.1
設定値が3の場合、protocolIdは’MQIsdp’を設定してください。
デフォルト値は4となります。
reconnectPeriodnumberoptional切断から再接続開始までの間隔[ms]
設定範囲: 0~10000
デフォルト値は1000となります。
connectTimeoutnumberoptional接続タイムアウト(CONNACK受信待ち)時間[ms]
設定範囲: 0~2,147,483,647
デフォルト値は30000となります。
usernamestringoptionalユーザー名
brokerが必要とする場合に設定します。
設定範囲: 1~511バイトの半角英数
デフォルト値はありません。
passwordstringoptionalパスワード
brokerが必要とする場合に設定します。
設定範囲: 1~511バイトの半角英数
デフォルト値はありません。
reconnectCountnumberoptional自動再接続リトライ回数
設定値が0の場合は自動再接続は無効になります。
0: 無効
1855 :無限回
設定範囲: 0~999, 1855
デフォルト値は0となります。
sendBuffSizenumberoptional送信バッファサイズ[Byte]
設定範囲: 128~65536
デフォルト値は2560となります。
recvBuffSizenumberoptional受信バッファサイズ[Byte]
設定範囲: 128~65536
デフォルト値は512となります。

ユーザー名とパスワードを指定してfoo.barへの接続を開始するサンプルです。

var mqttOpt = {
    clientId: 'testClientId',
    username: 'foo',
    password: 'bar',
    keepalive: 300
};
var client = mqtt.connect('mqtt://foo.bar',mqttOpt);

mqtt.set(name[,arg])

接続などに使用する情報を設定します。

NameTypeM/OSummaryNote
namestringmandatory設定データ名
使用できる名前は、ssl.ca, ssl.cert, ssl.keyとなります。
argstringoptional設定情報
returnundefined--

mqtt.set(’ssl.ca’,certificate);

MQTTS接続に使用するCA証明書を設定します。

NameTypeM/OSummaryNote
’ssl.ca’stringmandatoryCA証明書を設定するための名前
certificatestringoptionalMQTTS接続で使用するCA証明書を設定します。
省略した場合は、CA証明書の設定を解除します。
returnundefined--

下記のように設定します。
改行コードには\nを使用します。

var sslCa = '-----BEGIN CERTIFICATE-----\n' + 
'(...ContentOmission...)\n' + 
//...Omit...
'(...ContentOmission...)\n' + 
'-----END CERTIFICATE-----';

mqtt.set('ssl.ca', sslCa);

mqtt.set(’ssl.cert’,certificate);

MQTTS接続に使用するクライアント証明書を設定します。
未設定の場合、クライアント認証は無効となります。

NameTypeM/OSummaryNote
’ssl.cert’stringmandatoryクライアント証明書を設定するための名前
certificatestringoptionalMQTTS接続で使用するクライアント証明書を設定します。
省略した場合は、クライアント証明書の設定を解除します。
returnundefined--

mqtt.set(’ssl.key’,clientkey);

MQTTS接続に使用するクライアント秘密鍵を設定します。
未設定の場合、クライアント認証は無効となります。

NameTypeM/OSummaryNote
’ssl.key’stringmandatoryクライアント秘密鍵を設定するための名前
clientkeystringoptionalMQTTS接続で使用するクライアント秘密鍵を設定します。
省略した場合は、クライアント秘密鍵の設定を解除します。
returnundefined--

クライアント認証を用いたMQTTS接続を行う場合、下記のように設定します。

var sslCa = '-----BEGIN CERTIFICATE-----\n(...ContentOmission...)\n-----END CERTIFICATE-----';
var sslClientCa  = '-----BEGIN CERTIFICATE-----\n(...ContentOmission...)\n-----END CERTIFICATE-----';
var sslClientKey = '-----BEGIN PRIVATE KEY-----\n(...ContentOmission...)\n-----END PRIVATE KEY-----';
mqtt.set('ssl.ca', sslCa);
mqtt.set('ssl.cert', sslClientCa);
mqtt.set('ssl.key', sslClientKey);



{Client}

Methods()/PropertiesSummaryVersionNote
.on()イベントハンドラを登録します。
.publish()メッセージをトピックへパブリッシュします。
.subscribe()トピックのサブスクライブを登録します。
.unsubscribe()トピックのサブスクライブを解除します。
.end()MQTTを切断し、終了します。
.reconnect()MQTTの再接続を開始します。
.isConnected()MQTTの接続状態を取得します。
.isReconnecting()MQTTの再接続中状態を取得します。
.canPublish()MQTTのパブリッシュ可否状態を取得します。
.get()与えられた引数に関連した情報を取得します。



Details

.on(event,callback)

イベントハンドラを登録します。

NameTypeM/OSummaryNote
eventstringmandatoryイベント名
使用できるイベント名は、connect, reconnect, close, error, end, messageとなります。
callback()functionmandatoryイベント発生時にコールバック処理を実行します。
returnundefined--

event : ’connect’

MQTT接続、再接続が成功した時にコールバック処理を実行します。
コールバックの引数は以下の通りとなります。

ArgumentsTypeSummaryNote
connackObjectconnackは受信したconnack packetの内容となります。
この引数は、使用する必要はありません。

event : ’reconnect’

MQTTの再接続が開始された時にコールバック処理を実行します。

event : ’close’

MQTTが切断された時にコールバック処理を実行します。

event : ’error’

エラーが発生した時、またはMQTTの接続が失敗した時にコールバック処理を実行します。
コールバックの引数は以下の通りです。

ArgumentsTypeSummaryNote
err{MqttError}エラー情報

event : ’end’

.end()処理が開始された時にコールバック処理を実行します。

event : ’message’

パブリッシュを受信した時にコールバック処理を実行します。
コールバックの引数は以下の通りです。
尚、受信データが受信バッファサイズ(recvBuffSize)を超えた場合、そのデータは破棄されます。

ArgumentsTypeSummaryNote
topicstring受信したパブリッシュのトピック
messagestring, ArrayBuffer受信したパブリッシュのメッセージ

.publish(topic,message[,options][,callback])

メッセージをトピックへパブリッシュします。
送信データが送信バッファサイズ(sendBuffSize)を超えた場合、引数エラーとなります。

NameTypeM/OSummaryNote
topicstringmandatoryトピック名
最大127バイトとなります。使用可能な文字は半角英数と一部の記号/,+,#となります。
messagestring, ArrayBuffermandatoryパブリッシュするメッセージ
optionsObjectoptionalパブリッシュのオプション
qos : {number}
QoSレベル
設定範囲: 0, 1, 2
デフォルト値は0となります。
retain : {boolean}
Retain flag
デフォルト値はfalseとなります。
dup : {boolean}
Duplicate flag
デフォルト値はfalseとなります。
QoSパラメータなどの詳細については、MQTT仕様書を参照してください。(http://mqtt.org/)
callback(err)functionoptionalパブリッシュ処理終了時にコールバック処理を実行します。
err : {MqttError}
エラー情報
引数のerr.codeが0の場合、成功となります。
returnundefined, {MqttError}-{MqttError} : 引数不正エラーや切断等で要求が受け付けられなかった場合、{MqttError}が返却されます。

注意 : .publish()のコールバック処理が実行される前に、次の.publish()を行うと、後者の.publish()が破棄される場合があります。.publish()を行う前に、前の.publish()のコールバック処理が実行されたかを確認するか、又は.canPublish()でパブリッシュの可否を確認することをお勧めします。

.subscribe(topic[,options][,callback])

トピックのサブスクライブを登録します。
登録可能なトピック数は5つです。

NameTypeM/OSummaryNote
topicstringmandatoryトピック名
最大127バイトとなります。使用可能な文字は半角英数と一部の記号/,+,#となります。
optionsObjectoptionalサブスクライブのオプション
qos : {number}
QoSレベル
設定範囲: 0, 1, 2
デフォルト値は0となります。
bin : {boolean}
messageイベントの'message'引数の型を指定します。
true: ArrayBuffer
false: string
デフォルト値はfalseとなります。
callback(err)functionoptionalサブスクライブ処理終了時にコールバック処理を実行します。
err : {MqttError}
エラー情報
引数のerr.codeが0の場合、成功となります。
returnundefined, {MqttError}-{MqttError} : 引数不正エラーや切断等で要求が受け付けられなかった場合、{MqttError}が返却されます。

.unsubscribe(topic[,callback])

トピックのサブスクライブを解除します。

NameTypeM/OSummaryNote
topicstringmandatoryトピック名
最大127バイトとなります。使用可能な文字は半角英数と一部の記号/,+,#となります。
callback(err)functionoptionalサブスクライブ解除処理終了時にコールバック処理を実行します。
err : {MqttError}
エラー情報
引数のerr.codeが0の場合、成功となります。
returnundefined, {MqttError}-{MqttError} : 引数不正エラーや切断等で要求が受け付けられなかった場合、{MqttError}が返却されます。

.end([,callback])

MQTTを切断し、終了します。
MQTTセッションリソース解放されるまで、時間を要する場合があります。
再度、MQTT接続を行う際は、MQTTセッションリソースが解放されるまで、待機する必要があります。
サンプルコードを参照してください。

NameTypeM/OSummaryNote
callback()functionoptionalMQTTセッションリソース解放時にコールバック処理を実行します。
returnundefined--

.reconnect()

MQTTの再接続を開始します。

NameTypeM/OSummaryNote
returnundefined--

.isConnected()

MQTTの接続状態を取得します。

NameTypeM/OSummaryNote
returnboolean-MQTTの接続状態
true: MQTT接続済み
false: MQTT接続済みでない

.isReconnecting()

MQTTの再接続中状態を取得します。

NameTypeM/OSummaryNote
returnboolean-MQTTの再接続中状態
true: MQTT再接続中
false: MQTT再接続中でない

.canPublish()

MQTTのパブリッシュ可否状態を取得します。

NameTypeM/OSummaryNote
returnboolean-MQTTのパブリッシュ可否状態
true: パブリッシュできる状態
false: パブリッシュできない状態

.get(name)

与えられた引数に関連した情報を取得します。

NameTypeM/OSummaryNote
namestringmandatory取得する情報の名前
使用できる名前はerrnoConnectとなります。
returnnumber, undefined-number : 取得した情報
undefined : 取得できなかった場合

.get(’errnoConnect’)

接続エラー番号を取得します。

NameTypeM/OSummaryNote
’errnoConnect’stringmandatory接続エラー番号を取得するための名前
returnnumber-接続エラー番号
詳細はerrnoConnect tableを参照してください。



Appendix

{MqttError}

Methods()/PropertiesTypeSummaryNote
.codenumberエラーコード
詳細はmqtt errors tableを参照してください。
.messagestringエラー内容
詳細はmqtt errors tableを参照してください。

mqtt errors table

下記は、エラーコード表となります。
✓は通知先のコールバックを示します。

.code.messageNote.on('error',cb).publish(cb).subscribe(cb).unsubscribe(cb)
0OKエラーなし✓✓✓
1Connection failed接続(再接続)失敗✓
10Illegal argument引数不正エラー✓✓✓✓
11Disconnected ※切断エラー✓✓✓
12Publish failedパブリッシュ失敗✓✓
13Subscribe failedサブスクライブ登録失敗✓✓
14Unsubscribe failedサブスクライブ解除失敗✓✓
255Other errorその他のエラー✓

※ 未接続時にpublish()/subscribe()/unsubscribe()が行われた場合に通知されます。

errnoConnect table

下記は、接続エラーコード表となります。

errnoConnectSummaryNote
0OKエラーなし
1Unacceptable protocol versionプロトコル・バージョン許容不可
2Identifier rejected識別子拒否
3Server unavailableサーバ使用不可
4Bad user name or passwordユーザ名またはパスワードが不正
5Not authorized権限なしエラー
6Connection failedその他のエラー(主にネットワークエラー)
7SSL/TLS errorTLS関連のエラー
OthersReserved予約



オブジェクトの使用例

Sample 1

MQTT接続のサンプルです。
10秒の周期タイマで起動し、送信と受信を行います。

var client = mqtt.connect('mqtt://foo.bar');
if(!client) {
    print('Failed to create mqtt instance');
} else {
    client.on('connect', function(connack) {
        print('CONNECTED');
        client.subscribe('foo_topic/device01');
    });
    client.on('error', function(err) {
        print('ERROR: ' + err.code + ' ERRNO: ' + client.get('errnoConnect'));
        if(1 == err.code) { //Connection failed
            client.reconnect();
        }
        //TODO: Error handling
    });
    client.on('close', function() {
        print("DISCONNECTED");
        client.reconnect();
    });
    client.on('message', function(topic, message) {
        print('TOPIC: ' + topic + ' MESSAGE: ' + message);
        //TODO: Message handling
    });
}
var tmobj = setInterval(function() {
    if(!client) {
    } else {
        if(client.isConnected()) {
            var dummyBatteryLevel = 10;
            if(10 >= dummyBatteryLevel) {
                client.publish( 'bar_topic/device01',
                                'Battery level : '
                                 + dummyBatteryLevel.toString()
                                 + '%');
            }
        } else {
            print('Skipped');
        }
    }
}, 10000);

Sample 2

MQTTS接続のサンプルです。
10秒の周期タイマで起動し、送信と受信を行います。

var sslCa = '-----BEGIN CERTIFICATE-----\n(...ContentOmission...)\n-----END CERTIFICATE-----';
mqtt.set('ssl.ca', sslCa);

var client = mqtt.connect('mqtts://foo.bar:8883');
if(!client) {
    print('Failed to create mqtt instance');
} else {
    client.on('connect', function(connack) {
        print('CONNECTED');
        client.subscribe('foo_topic/device01');
    });
    client.on('error', function(err) {
        print('ERROR: ' + err.code + ' ERRNO: ' + client.get('errnoConnect'));
        if(1 == err.code) { //Connection failed
            client.reconnect();
        }
        //TODO: Error handling
    });
    client.on('close', function() {
        print("DISCONNECTED");
        client.reconnect();
    });
    client.on('message', function(topic, message) {
        print('TOPIC: ' + topic + ' MESSAGE: ' + message);
        //TODO: Message handling
    });
}
var tmobj = setInterval(function() {
    if(!client) {
    } else {
        if(client.isConnected()) {
            var dummyBatteryLevel = 10;
            if(10 >= dummyBatteryLevel) {
                client.publish( 'bar_topic/device01',
                                'Battery level : '
                                 + dummyBatteryLevel.toString()
                                 + '%');
            }
        } else {
            print('Skipped');
        }
    }
}, 10000);

Sample 3

クライアント認証を用いたMQTTS接続のサンプルです。
10秒の周期タイマで起動し、送信と受信を行います。

var sslCa = '-----BEGIN CERTIFICATE-----\n(...ContentOmission...)\n-----END CERTIFICATE-----';
var sslClientCert = '-----BEGIN CERTIFICATE-----\n(...ContentOmission...)\n-----END CERTIFICATE-----';
var sslClientKey = '-----BEGIN PRIVATE KEY-----\n(...ContentOmission...)\n-----END PRIVATE KEY-----';
mqtt.set('ssl.ca', sslCa);
mqtt.set('ssl.cert', sslClientCert);
mqtt.set('ssl.key', sslClientKey);

var mqttClientId = 'foo';
var mqttUser = 'foo';
var mqttPass = 'foobar';
var mqttOpt = {clientId:mqttClientId, username:mqttUser, password:mqttPass, reconnectCount:1855};

var client = mqtt.connect('mqtts://foo.bar:8883', mqttOpt);
if(!client) {
    print('Failed to create mqtt instance');
} else {
    client.on('connect', function(connack) {
        print('CONNECTED');
        client.subscribe('foo_topic/device01');
    });
    client.on('error', function(err) {
        print('ERROR: ' + err.code + ' ERRNO: ' + client.get('errnoConnect'));
        if(1 == err.code) { //Connection failed
            client.reconnect();
        }
        //TODO: Error handling
    });
    client.on('close', function() {
        print("DISCONNECTED");
        client.reconnect();
    });
    client.on('message', function(topic, message) {
        print('TOPIC: ' + topic + ' MESSAGE: ' + message);
        //TODO: Message handling
    });
}
var tmobj = setInterval(function() {
    if(!client) {
    } else {
        if(client.isConnected()) {
            var dummyBatteryLevel = 10;
            if(10 >= dummyBatteryLevel) {
                client.publish( 'bar_topic/device01',
                                'Battery level : '
                                 + dummyBatteryLevel.toString()
                                 + '%');
            }
        } else {
            print('Skipped');
        }
    }
}, 10000);

Sample 4

MQTT接続の開始と終了を繰り返すサンプルです。
.end()で終了した直後にmqtt.connect()を実行すると、MQTTリソースがまだ解放されていないため、mqtt.connect()が失敗することがあります。その場合、しばらく待ってから再度接続してください。

var mqttUrl = 'mqtt://foo.bar:1883';
var mqttc = undefined;
var endEv = 0;

var to = setInterval(function() {
    print('end event');
    endEv = 1;
}, 30000);

while(1) {
    if(!mqttc) {
        mqttc = mqtt.connect(mqttUrl, {reconnectCount:1855});
        if(!mqttc) {
            print('Waiting for mqtt resource release');
            setTimeout(200).wait();
            continue;
        }
        mqttc.on('connect', function(connack) {
            print('CONNECTED');
        });
        //  ...Omitted: Registers an event handler.
    }
    //  ...Omitted: mqtt communication processing.
    if(1 == endEv) {
        endEv = 0;
        print('ABORT');
        mqttc.end();
        mqttc = undefined;
        continue;
    }
}

Sample 5

自動再接続有効でMQTT接続を行うサンプルです。
接続後、送信と受信のループバックテストを行います。

var client = mqtt.connect('mqtt://foo.bar:1883', {reconnectCount: 1855});
if(!client) {
    throw 'Failed to create mqtt instance';
}

client.on('error', function(err) {
    print('ERROR: ' + err.code + ' ERRNO: ' + client.get('errnoConnect'));
    //TODO: Error handling
});
client.on('message', function(topic, message) {
    print('TOPIC: ' + topic + ' MESSAGE: ' + message);
    //TODO: Message handling
});
client.on('connect', function() {
    print('CONNECTED');
    client.subscribe('testtopic/subtopic/#', { qos: 1 }, function(err) {
        if(err.code > 0) {
            print('MQTT SUBSCRIBE ERROR', err.code);
            //TODO: Error handling
        }
    });
    client.subscribe('shadowtopic/#', { qos: 1 }, function(err) {
        if(err.code > 0) {
            print('MQTT SUBSCRIBE ERROR', err.code);
            //TODO: Error handling
        }
    });
});

setInterval(function() {
    if (client.canPublish()) {
        var body = JSON.stringify({ "message" : "dummy" });
        client.publish('testtopic/subtopic/dummy', body, { qos: 1 }, function(err) {
            if(err.code == 0) {
                print('Publish OK');
            } else {
                print('Publish failed');
                //TODO: Error handling
            }
        });
    } else {
        print('Cannot publish');
    }
}, 15000);

Sample 6

手動でMQTT再接続を行うサンプルです。
再接続が連続して失敗した場合、一度インスタンスを解放し、再生成します。

var mqttUrl = 'mqtt://foo.bar:1883';
var reconnectAttempts = 0;
var maxReconnectAttempts = 24;

var registerEventHandlers = function() {
    if(!client) {
        return;
    }
    client.on('error', function(err) {
        print('ERROR: ' + err.code + ' ERRNO: ' + client.get('errnoConnect'));
        if (err.code == 1) { //Connection failed
            if (reconnectAttempts++ < maxReconnectAttempts) {
                print('reconnectAttempts:', reconnectAttempts);
                client.reconnect();
            } else {
                print('ABORT');
                reconnectAttempts = 0;
                client.end(); //Release mqtt instance
                client = undefined;
            }
        }
    });
    client.on('message', function(topic, message) {
        print('TOPIC: ' + topic + ' MESSAGE: ' + message);
        //TODO: Message handling
    });
    client.on('close', function() {
        print("DISCONNECTED");
        client.reconnect();
    });
    client.on('connect', function() {
        reconnectAttempts = 0;
        print("CONNECTED");
        client.subscribe("foo_topic/device01/#", { qos: 1 }, function(err) {
            if(err.code > 0) {
                print("MQTT SUBSCRIBE ERROR", err.code);
                //TODO: Error handling
            }
        });
    });
}

var client = mqtt.connect(mqttUrl);
if(!client) {
    throw 'Failed to create mqtt instance';
}

registerEventHandlers();

setInterval(function() {
    if(!client) {
        print('mqtt instance recreate');
        client = mqtt.connect(mqttUrl);
        registerEventHandlers();
    }
    if(client && client.canPublish()) {
        var body = JSON.stringify({ "message" : "dummy" });
        client.publish("foo_topic/device01/dummy", body, { qos: 1 }, function(err) {
            if(err.code == 0) {
                print('Publish OK');
            } else {
                print('Publish failed');
                //TODO: Error handling
            }
        });
    }
}, 15000);



Updated: 2022-09-01
← 前次 →
  • mqtt Global Object
  • Details
    • mqtt.connect(url[,options])
    • options
    • mqtt.set(name[,arg])
    • mqtt.set(’ssl.ca’,certificate);
    • mqtt.set(’ssl.cert’,certificate);
    • mqtt.set(’ssl.key’,clientkey);
  • {Client}
  • Details
    • .on(event,callback)
    • event : ’connect’
    • event : ’reconnect’
    • event : ’close’
    • event : ’error’
    • event : ’end’
    • event : ’message’
    • .publish(topic,message[,options][,callback])
    • .subscribe(topic[,options][,callback])
    • .unsubscribe(topic[,callback])
    • .end([,callback])
    • .reconnect()
    • .isConnected()
    • .isReconnecting()
    • .canPublish()
    • .get(name)
    • .get(’errnoConnect’)
  • Appendix
  • {MqttError}
    • mqtt errors table
    • errnoConnect table
  • オブジェクトの使用例
    • Sample 1
    • Sample 2
    • Sample 3
    • Sample 4
    • Sample 5
    • Sample 6
NEQTO とはニュースサービスFAQプライバシーポリシー}
NEQTO Console
はじめに基本情報管理者専用の操作デバイス管理NEQTO Apps
NEQTO Bridge
NEQTO Bridge ピン配置NEQTO Bridge Wi-Fi ModuleNEQTO Bridge LTE-1 Moduleデバッグログ取得方法イベントメッセージ
APIのドキュメント
APIの利用グローバル APIリージョン APIAPIサービス利用規約
Jigsaw, Inc.
© 2023 JIG-SAW INC.