21. nqMqtt
nqMqttオブジェクトは、NEQTO ConsoleとのMQTT通信機能を提供する組み込みオブジェクトです。
機能概要:
nqMqtt Global Object
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
nqMqtt.configure() | システムパラメータを設定します。 | 02.01.00+ | |
nqMqtt.on() | イベントハンドラを登録します。 | ||
nqMqtt.publish() | NEQTO Consoleにメッセージをパブリッシュします。 | ||
nqMqtt.end() | nqMqttを終了します。 | ||
nqMqtt.isConnected() | 接続状態を取得します。 | ||
nqMqtt.isReconnecting() | 再接続中状態を取得します。 | ||
nqMqtt.canPublish() | パブリッシュ可否状態を取得します。 | ||
nqMqtt.get() ⁽¹⁾ | 指定されたフォーマットのLwM2Mデータを取得します。 | ||
nqMqtt.get() ⁽²⁾ | 指定されたフォーマットのLwM2Mデータを取得します。 | 02.00.00+ |
Details
nqMqtt.configure(paramType[,arg[,arg2]])
システムパラメータを設定します。
paramType | Summary | Version | Note |
---|---|---|---|
'keepalive' | キープアライブタイマを設定します。 | 02.01.00+ |
paramType : 'keepalive'
キープアライブタイマを設定します。
最後に設定した値が不揮発メモリに保存されます。
MQTT通信のキープアライブ(ハートビート)監視間隔を短くすることで、早期にデバイス・サーバー間の不通状態を検知し、再接続による復旧が促進されます。それにより、プッシュ通知の失敗を最小限に抑えることができますが、その分、通信データ量は増加することになります。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
paramType | string | mandatory | パラメータタイプ 'keepalive' | |
timer | number | optional | キープアライブ時間[s] 設定範囲: 30~300 デフォルト値は300となります。 | 規定外の設定値が指定された場合、デフォルト値となります。 |
immediately | boolean | optional | 即時反映 true: 即時 false: 次回再接続時 デフォルト値はtrueとなります。 | 即時反映かつ設定値が変更された場合、MQTT接続を一度切断し、再接続します。 |
return | undefined | - | - |
nqMqtt.on(event,callback)
イベントハンドラを登録します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
event | string | mandatory | イベント名 使用できるイベント名は、push, connect, reconnect, close, errorとなります。 | |
callback() | function | mandatory | イベント発生時にコールバック処理を実行します。 | |
return | undefined | - | - |
event: ’push’
NEQTO Consoleからカスタムメッセージのプッシュ通知を受信した時にコールバック処理を実行します。
コールバック処理の引数は以下の通りです。
Arguments | Type | Summary | Note |
---|---|---|---|
message | string | 受信したカスタムメッセージ 受信可能なカスタムメッセージの許容サイズは、最大350バイトまでとなります。 許容サイズを超えた場合、そのメッセージは破棄されます。 |
event: ’connect’
MQTT接続、再接続が成功した時にコールバック処理を実行します。
スクリプト起動前にMQTT接続が完了している場合があります。その場合、コールバックは実行されません。
コールバック処理の引数は以下の通りです。
Arguments | Type | Summary | Note |
---|---|---|---|
connack | Object | connackは受信したconnack packetの内容となります。 この引数を使用する必要はありません。 |
event: ’reconnect’
MQTTの再接続が開始された時にコールバック処理を実行します。
event: ’close’
MQTTが切断された時にコールバック処理を実行します。
event: ’error’
エラーが発生した時、またはMQTTの接続が失敗した時などにコールバック処理を実行します。
コールバック処理の引数は以下の通りです。
Arguments | Type | Summary | Note |
---|---|---|---|
err | {MqttError} | エラー情報 |
nqMqtt.publish(topic,message[,options][,callback])
NEQTO Consoleにメッセージをパブリッシュします。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
topic | null | mandatory | トピック名 常に null を設定してください。 | |
message | Object, string | mandatory | パブリッシュするメッセージ nqMqtt.get() ⁽¹⁾ ⁽²⁾ により取得したLwM2Mデータを指定します。 一度に送信可能なパブリッシュメッセージの許容サイズは、2460バイト未満となります。 許容サイズを超えた場合は、引数エラーとなり、.on('error')のコールバック処理が実行されます。 | |
options | Object | optional | パブリッシュのオプション 未使用。省略してください。 | |
callback(err) | function | optional | パブリッシュ処理終了時にコールバック処理を実行します。 err : {MqttError} エラー情報 引数のerr.codeが0の場合、成功となります。 | |
return | undefined, {MqttError} | - | {MqttError} : 引数不正エラーや切断等で要求が受け付けられなかった場合、{MqttError}が返却されます。(Version 02.00.00+) |
注意 : パブリッシュ実行中、処理終了コールバック処理が実行される前に、次のパブリッシュを行うと、後者のパブリッシュデータが破棄される場合があります。パブリッシュを行う前に、現在パブリッシュが処理中であるか確認する又は.canPublish()を使用してパブリッシュの可否を確認することをお勧めします。
パブリッシュするメッセージの結合について
nqMqtt.get() ⁽¹⁾ ⁽²⁾ により取得したLwM2Mデータを最大4つまで結合してパブリッシュすることが可能です。
但し、メッセージの許容サイズを超えないように注意してください。
下記は、nqMqtt.get('LwM2MObject*'
)で取得したLwM2Mオブジェクトデータを結合し、パブリッシュするサンプルです。各LwM2Mオブジェクトデータを配列化し、メッセージに指定します。
var utime = Date.now();
var obj1 = nqMqtt.get('LwM2MObject', utime, 3303, 0, 5700, 'Float', '25.0');
var obj2 = nqMqtt.get('LwM2MObject', utime, 3304, 0, 5700, 'Float', '50.0');
var obj3 = nqMqtt.get('LwM2MObject', utime, 3313, 0, 5702, 'Float', '0.01', 5703, 'Float', '0.02', 5704, 'Float', '0.03', 'G');
var pubObj = [obj1, obj2, obj3];
nqMqtt.publish(null, pubObj, function(err) {
if(err.code == 0) {
print('Publish OK');
} else {
print('Publish failed');
}
});
下記は、nqMqtt.get('LwM2MArgStr*'
)で取得したLwM2M文字列データを結合し、パブリッシュするサンプルです。各LwM2M文字列データを','
区切りで結合し、メッセージに指定します。
var utime = Date.now();
var str1 = nqMqtt.get('LwM2MArgStr', utime, 3303, 0, 5700, 'Float', '25.0');
var str2 = nqMqtt.get('LwM2MArgStr', utime, 3304, 0, 5700, 'Float', '50.0');
var str3 = nqMqtt.get('LwM2MArgStr', utime, 3313, 0, 5702, 'Float', '0.01', 5703, 'Float', '0.02', 5704, 'Float', '0.03', 'G');
var pubStr = str1 + ',' + str2 + ',' + str3;
nqMqtt.publish(null, pubStr, function(err) {
if(err.code == 0) {
print('Publish OK');
} else {
print('Publish failed');
}
});
nqMqtt.end([callback])
nqMqttを終了します。
このメソッドはスクリプトを終了させる必要がある場合のみ、使用してください。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
callback() | function | optional | nqMqtt終了時にコールバック処理を実行します。 | |
return | undefined | - | - |
nqMqtt.isConnected()
MQTTの接続状態を取得します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | boolean | - | MQTTの接続状態 true: MQTT接続済み false: MQTT接続済みでない |
nqMqtt.isReconnecting()
MQTTの再接続中状態を取得します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | boolean | - | MQTTの再接続中状態 true: MQTT再接続中 false: MQTT再接続中でない |
nqMqtt.canPublish()
MQTTのパブリッシュ可否状態を取得します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | boolean | - | MQTTのパブリッシュ可否状態 true: パブリッシュできる状態 false: パブリッシュできない状態 |
nqMqtt.get(format,timestamp,objId,insId,resId,datatype,value[,resId2,datatype2,value2][,resId3,datatype3,value3][,resId4,datatype4,value4][,unit])
指定されたフォーマットのLwM2Mデータを取得します。
オプション指定により、タイムスタンプ
、オブジェクトID
、インスタンスID
、単位
が同一で、リソースID
、データ種別
、値
がそれぞれ異なるデータを最大4つまで連結したLwM2Mデータを生成することが可能です。
オブジェクトID、インスタンスID、リソースID及びデータ種別については、こちらを参照してください。
尚、この設定値はNEQTO Console上のコンポーネント設定と合わせる必要があります。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
format | string | mandatory | LwM2Mデータフォーマット名を指定します。 'LwM2MObject', 'LwM2MObjectS', 'LwM2MArgStr', 'LwM2MArgStrS', 'LwM2MString', 'LwM2MStringS' | |
timestamp | number | mandatory | タイムスタンプ unixtime[ms]を指定します。 | |
objId | number | mandatory | オブジェクトID LwM2Mによって定義されているIDを使用します。 | |
insId | number | mandatory | インスタンスID 同じリソース/オブジェクトIDのペアが複数ある場合、それらを区別するために使用されます。 | |
resId | number | mandatory | リソースID LwM2Mによって定義されているIDを使用します。 | |
datatype | string | mandatory | データ種別 LwM2Mによって定義されているデータ種別を使用します。 ('Float', 'Integer', 'String', 'Boolean') | |
value | string | mandatory | 値 文字列型の値を指定します。 数値型のデータを参照する場合は、文字列に変換して指定してください。 | |
resId2 | number | optional | 2つ目のリソースID resIdと同様です。 resId, resId2, resId3, resId4はそれぞれに異なる値を指定する必要があります。 | |
datatype2 | string | optional | 2つ目のデータ種別 datatypeと同様です。 | |
value2 | string | optional | 2つ目の値 valueと同様です。 | |
resId3 | number | optional | 3つ目のリソースID resIdと同様です。 resId, resId2, resId3, resId4はそれぞれに異なる値を指定する必要があります。 | |
datatype3 | string | optional | 3つ目のデータ種別 datatypeと同様です。 | |
value3 | string | optional | 3つ目の値 valueと同様です。 | |
resId4 | number | optional | 4つ目のリソースID resIdと同様です。 resId, resId2, resId3, resId4はそれぞれに異なる値を指定する必要があります。 | |
datatype4 | string | optional | 4つ目のデータ種別 datatypeと同様です。 | |
value4 | string | optional | 4つ目の値 valueと同様です。 | |
unit | string | optional | 単位 単位を表す任意文字列を指定します。 undefinedが指定された場合は単位を使用しません。 ('G', 'm', 's', 'ms', ...) デフォルト値はundefinedとなります。 | |
return | Object, string, undefined | - | 戻り値の型はformatで決定されます。'LwM2MObject*' を指定した場合はObject型、'LwM2MArgStr*' を指定した場合はstring型、'LwM2MString*' を指定した場合はstring型、作成が失敗した場合はundefinedが返却されます。 |
下記は使用例となります。
var obj = nqMqtt.get('LwM2MObject', Date.now(), 3303, 0, 5700, 'Float', '23.4');
var arg = nqMqtt.get('LwM2MArgStr', Date.now(), 3303, 0, 5700, 'Float', '23.4');
var str = nqMqtt.get('LwM2MString', Date.now(), 3303, 0, 5700, 'Float', '23.4');
var obj = nqMqtt.get('LwM2MObject', Date.now(), 3313, 0, 5702, 'Float', '0.01', 5703, 'Float', '0.02', 5704, 'Float', '0.03', 'G');
var arg = nqMqtt.get('LwM2MArgStr', Date.now(), 3313, 0, 5702, 'Float', '0.01', 5703, 'Float', '0.02', 5704, 'Float', '0.03', 'G');
var str = nqMqtt.get('LwM2MString', Date.now(), 3313, 0, 5702, 'Float', '0.01', 5703, 'Float', '0.02', 5704, 'Float', '0.03', 'G');
format : ’LwM2MObject’, ’LwM2MObjectS’
nqMqtt.publish()のmessageで使用するLwM2Mオブジェクトデータを作成します。
’LwM2MObjectS’は個人情報保護モードを使用する際に指定します。
format : ’LwM2MArgStr’, ’LwM2MArgStrS’
nqMqtt.publish()のmessageで使用するLwM2M文字列データを作成します。
文字列を扱う他オブジェクト機能との連携に活用できます。
’LwM2MArgStrS’は個人情報保護モードを使用する際に指定します。
format : ’LwM2MString’, ’LwM2MStringS’
nqServiceの一括送信メソッドで使用するLwM2M文字列データを作成します。
’LwM2MStringS’は個人情報保護モードを使用する際に指定します。
個人情報保護モードについて
個人情報保護モードを指定した場合、値(value)
部分が暗号化されます。
個人情報保護モードでフォーマットされたLwM2MデータはNEQTO Consoleへ送信された後、NEQTO Console上のデータストレージに暗号化された状態で格納され、値を読み出す際に復号表示されます。
尚、個人情報保護モードを使用する場合は、事前にNEQTO Console上のコンポーネント設定で個人情報保護モードを有効に設定する必要があります。
nqMqtt.get(format,timestamp,component1[,component2[,component3[,component4]]])
指定されたフォーマットのLwM2Mデータを取得します。
オプション指定により、タイムスタンプ
が同一で、オブジェクトID
、インスタンスID
、単位
、リソースID
、データ種別
、値
がそれぞれ異なるデータを最大4つまで連結したLwM2Mデータを生成することが可能です。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
format | string | mandatory | LwM2Mデータフォーマット名を指定します。 'LwM2MObjectA', 'LwM2MArgStrA', 'LwM2MStringA' | |
timestamp | number | mandatory | タイムスタンプ unixtime[ms]を指定します。 | |
component1 | Array | mandatory | コンポーネントデータ配列 | |
component2 | Array | optional | コンポーネントデータ配列 | |
component3 | Array | optional | コンポーネントデータ配列 | |
component4 | Array | optional | コンポーネントデータ配列 | |
return | Object, string, undefined | - | 戻り値の型はformatで決定されます。 'LwM2MObjectA'を指定した場合はObject型、 'LwM2MArgStrA'を指定した場合はstring型、 'LwM2MStringA'を指定した場合はstring型、 作成が失敗した場合はundefinedが返却されます。 |
下記は使用例となります。
var component1 = [3303, 0, 5700, 'Float', '0.1'];
var component2 = [3303, 1, 5700, 'Float', '0.2', 'deg'];
var component3 = [3300, 0, 5700, 'Integer', '123', '%', 1];
var component4 = [3341, 0, 5527, 'String', 'ABC', , 1];
var obj = nqMqtt.get('LwM2MObjectA', Date.now(), component1, component2, component3, component4);
var arg = nqMqtt.get('LwM2MArgStrA', Date.now(), component1, component2, component3, component4);
var str = nqMqtt.get('LwM2MStringA', Date.now(), component1, component2, component3, component4);
format : ’LwM2MObjectA’
nqMqtt.publish()のmessageで使用するLwM2Mオブジェクトデータを作成します。
format : ’LwM2MArgStrA’
nqMqtt.publish()のmessageで使用するLwM2M文字列データを作成します。
文字列を扱う他オブジェクト機能との連携に活用できます。
format : ’LwM2MStringA’
nqServiceの一括送信メソッドで使用するLwM2M文字列データを作成します。
コンポーネントデータ配列 : [objId,insId,resId,datatype,value,unit,privacyMode]
オブジェクトID、インスタンスID、リソースID及びデータ種別については、こちらを参照してください。
尚、この設定値はNEQTO Console上のコンポーネント設定と合わせる必要があります。
Index | Name | Type | M/O | Summary | Note |
---|---|---|---|---|---|
0 | objId | number | mandatory | オブジェクトID LwM2Mによって定義されているIDを使用します。 | |
1 | insId | number | mandatory | インスタンスID 同じリソース/オブジェクトIDのペアが複数ある場合、それらを区別するために使用されます。 | |
2 | resId | number | mandatory | リソースID LwM2Mによって定義されているIDを使用します。 | |
3 | datatype | string | mandatory | データ種別 LwM2Mによって定義されているデータ種別を使用します。 ('Float', 'Integer', 'String', 'Boolean') | |
4 | value | string | mandatory | 値 文字列型の値を指定します。 数値型のデータを参照する場合は、文字列に変換して指定してください。 | |
5 | unit | string | optional | 単位 単位を表す任意文字列を指定します。 undefinedが指定された場合は単位を使用しません。 ('G', 'm', 's', 'ms', ...) デフォルト値はundefinedとなります。 | |
6 | privacyMode | number | optional | 個人情報保護モード 1: 有効 0: 無効 デフォルト値は0となります。 |
Appendix
オブジェクトID、インスタンスID、リソースID及びデータ種別
NEQTO Consoleでは、リソースIDによってデータ表示形式及びグラフを選択することができます。
オブジェクトIDは使用可能なIDの中から任意に選択します。
オブジェクトIDとリソースIDの組み合わせについては、LwM2M仕様を参考にしてください。
インスタンスIDは、同じリソースIDとオブジェクトIDの組み合わせが複数ある場合、それらを区別するために使用します。
データ種別は、リソースIDに関連して定義されています。
NEQTO ConsoleでサポートしているオブジェクトID、リソースID及びデータ種別は下記となります。
|
|
以下は温度センサ、湿度センサ、加速度センサの凡例です。
//value,Xvalue,Yvalue,Zvalueは任意の数値文字列です
var timestamp = Date.now();
//温度センサ (オブジェクトID:温度, リソースID:センサ値, データ種別:Float)
nqMqtt.get('LwM2MObject', timestamp, 3303, 0, 5700, "Float", value);
//湿度センサ (オブジェクトID:湿度, リソースID:センサ値, データ種別:Float)
nqMqtt.get('LwM2MObject', timestamp, 3304, 0, 5700, "Float", value);
//加速度センサ (オブジェクトID:加速度, リソースID:X/Y/Z軸, データ種別:Float)
nqMqtt.get('LwM2MObject', timestamp, 3313, 0, 5702, "Float", Xvalue, 5703, "Float", Yvalue, 5704, "Float", Zvalue);
{MqttError}
Methods()/Properties | Type | Summary | Note |
---|---|---|---|
.code | number | エラーコード 詳細はmqtt errors tableを参照してください。 | |
.message | string | エラー内容 詳細はmqtt errors tableを参照してください。 |
mqtt errors table
下記は、エラーコード表となります。
✓は通知先のコールバックを示します。(xx.xx.xx
)はサポートFWバージョンとなります。
.code | .message | Note | .on('error',cb) | .publish(cb) |
---|---|---|---|---|
0 | OK | エラーなし | ✓ | |
1 | Connection failed | 接続(再接続)失敗 | ✓ | |
10 | Illegal argument | 引数不正エラー | ✓ | ✓ (02.00.00+) |
11 | Disconnected | 切断エラー | ||
12 | Publish failed | パブリッシュ失敗 | ✓ (02.00.00+) | ✓ |
13 | Subscribe failed | サブスクライブ登録失敗 | ✓ (02.00.00+) | |
14 | Unsubscribe failed | サブスクライブ解除失敗 | ✓ (02.00.00+) | |
255 | Other error | その他のエラー | ✓ |
オブジェクトの使用例
Sample 1
nqMqtt.get() ⁽¹⁾を使用したサンプルです。
3軸加速度データ、温度データ、カラーデータをNEQTO Consoleへパブリッシュします。
又、NEQTO Consoleから受信したカスタムメッセージを表示します。
//==============================================================
// nqMqtt event handler
//==============================================================
nqMqtt.on('connect', function(connack) {
print(Date() + ': nqMqtt connect');
});
nqMqtt.on('close',function() {
print(Date() + ': nqMqtt close');
});
nqMqtt.on('error', function(error) {
print(Date() + ': nqMqtt error: ' + error.code.toString());
});
nqMqtt.on('push', function(message) {
print(Date() + ': nqMqtt push: ' + message);
//TODO: Custom message handling from NEQTO
});
//==============================================================
// Main routine
//==============================================================
//Publish "Acceleration"
while(!nqMqtt.canPublish()) { setTimeout(100).wait(); }
var x = (1.0).toFixed(1); /* dummy X value */
var y = (1.1).toFixed(1); /* dummy Y value */
var z = (1.2).toFixed(1); /* dummy Z value */
var utime = Date.now();
var acceObj = nqMqtt.get('LwM2MArgStr', utime, 3313, 0, 5702, 'Float', x, 5703, 'Float', y, 5704, 'Float', z);
nqMqtt.publish(null, acceObj, function(err) {
if(err.code == 0) {
print('publish OK');
} else {
print('publish NG');
}
});
//Publish "Temperature"
while(!nqMqtt.canPublish()) { setTimeout(100).wait(); }
var temp = (20.2).toFixed(1); /* dummy Temperature */
var utime = Date.now();
var tempObj = nqMqtt.get('LwM2MArgStr', utime, 3303, 0, 5700, 'Float', temp);
nqMqtt.publish(null, tempObj, function(err) {
if(err.code == 0) {
print('publish OK');
} else {
print('publish NG');
}
});
//Publish "Color"
while(!nqMqtt.canPublish()) { setTimeout(100).wait(); }
var color = '#FFFF99'; /* dummy Color */
var utime = Date.now();
var colorObj = nqMqtt.get('LwM2MArgStr', utime, 3335, 0, 5706, 'String', color);
nqMqtt.publish(null, colorObj, function(err) {
if(err.code == 0) {
print('publish OK');
} else {
print('publish NG');
}
});
Sample 2
nqMqtt.get() ⁽²⁾を使用したサンプルです。
同じタイムスタンプの温度データと湿度データをNEQTO Consoleへ一度にパブリッシュします。
又、NEQTO Consoleから受信したカスタムメッセージを表示します。
//==============================================================
// nqMqtt event handler
//==============================================================
nqMqtt.on('connect', function(connack) {
print(Date() + ': nqMqtt connect');
});
nqMqtt.on('close',function() {
print(Date() + ': nqMqtt close');
});
nqMqtt.on('error', function(error) {
print(Date() + ': nqMqtt error: ' + error.code.toString());
});
nqMqtt.on('push', function(message) {
print(Date() + ': nqMqtt push: ' + message);
//TODO: Custom message handling from NEQTO
});
//==============================================================
// Main routine
//==============================================================
//Publish "Temperature" and "Humidity"
while(!nqMqtt.canPublish()) { setTimeout(100).wait(); }
var temp = (20.4).toFixed(1); /* dummy Temperature */
var humi = (52.5).toFixed(1); /* dummy Humidity */
var msg = nqMqtt.get('LwM2MArgStrA', Date.now(), [3303, 0, 5700, 'Float', temp], [3304, 0, 5700, 'Float', humi]);
nqMqtt.publish(null, msg, function(err) {
if(err.code == 0) {
print('publish OK');
} else {
print('publish NG');
}
});