AWS IoT Core v2
このライブラリは、AWS IoT Coreと通信する機能を提供する組み込みクラスです。
| Library usage requirements | |
|---|---|
| Type | Integrations |
| Name | AWS_IoT_Core_V2 |
| Version | 2.1.0 |
| Code size used | 3.2KB |
| Resources used | HTTPS x 1, MQTT x 1, Timers x 1 |
関連資料
- AWS IoT Coreに関する詳細仕様については、「AWS IoT Core Documentation」を参照してください。
- HTTPSオブジェクト仕様 (
NEQTO Bridge/STM32 Discovery/SPRESENSE/Linux) - MQTTオブジェクト仕様 (
NEQTO Bridge/STM32 Discovery/SPRESENSE/Linux)
Abstracts
| Methods()/Properties | Summary | Note |
|---|---|---|
| new AWS_IOT_CORE() | AWS_IOT_COREインスタンスを生成します。 |
{AWS_IOT_CORE} Instance
| Methods()/Properties | Summary | Note |
|---|---|---|
| .httpPost() | HTTPS経由でAWS IoT Coreにデータを送信します。 | |
| .abortHttpRequest() | 現在進行中のHTTPリクエストを中止します。 | |
| .mqttConnect() | AWS IoT CoreにMQTT接続します。 | |
| .errors | 無効なキー名(文字列)を含む配列 コンストラクタまたは.setConfig()で無効なパラメータが検出された場合に生成されます。 | |
| .CONST.VERSION | バージョン(文字列) | v2.1.0+ |
Details
new AWS_IOT_CORE([config])
AWS_IOT_COREインスタンスを生成します。
| Name | Type | M/O | Description | Note |
|---|---|---|---|---|
| config | Object | optional | コンフィグレーション 詳細はconfigを参照してください。 | |
| return | {AWS_IOT_CORE} | - | {AWS_IOT_CORE} : 生成された{AWS_IOT_CORE} | 無効なパラメータが検出された場合、.errorsが生成されます。 |
config
| Name | Type | M/O | Description | Note |
|---|---|---|---|---|
| host | string | mandatory | AWS IoT Coreエンドポイント | |
| deviceCert | string | mandatory | このデバイスに関連付けられているX.509証明書 PEM形式の文字列を指定します。改行コードには \nを使用します。 | |
| devicePrivKey | string | mandatory | このデバイスに関連付けられている秘密鍵 PEM形式の文字列を指定します。改行コードには \nを使用します。 | |
| ca | string | mandatory | AWS IoT CoreのルートCA証明書 PEM形式の文字列を指定します。改行コードには \nを使用します。 | |
| httpTimeout | number | optional | HTTPリクエストのタイムアウト値[秒]0の場合、タイムアウト機能無効となります。デフォルト値は 0となります。 | v2.1.0+ |
| timeout | number | - | 本パラメータは無視されます。 | 未使用 |
AWS_IOT_COREインスタンス生成時に、コンフィグレーション(config)を設定します。
無効なパラメータが検出された場合、無効なキーの名前を含む配列が.errorsプロパティとして生成されます。パラメータが正常であった場合、.errorsプロパティは削除されます。
var iot = new AWS_IOT_CORE({
host: <value>,
deviceCert: <value>,
devicePrivKey: <value>,
ca: <value>
});
if('errors' in iot) {
//TODO: Handle errors
}
.setConfig(config)
AWS_IOT_COREインスタンス生成後に、コンフィグレーション(config)を設定します。
無効なパラメータが検出された場合、無効なキーの名前を含む配列が.errorsプロパティとして生成されます。パラメータが正常であった場合、.errorsプロパティは削除されます。
var iot = new AWS_IOT_CORE();
iot.setConfig({
host: <value>,
deviceCert: <value>,
devicePrivKey: <value>,
ca: <value>
});
if('errors' in iot) {
//TODO: Handle errors
}
Setter Methods
AWS_IOT_COREインスタンス生成後に、下記セッターメソッドを使用して個別にコンフィグレーション(config)を設定可能です。
成功した場合、自身のインスタンスが返却されます。無効なパラメータが検出された場合は、falseが返却されます。
| Setter Method | Description | Note |
|---|---|---|
| .setHost(value) | hostを設定します。 | |
| .setDeviceCert(value) | deviceCertを設定します。 | |
| .setDevicePrivKey(value) | devicePrivKeyを設定します。 | |
| .setRootCA(value) | caを設定します。 | |
| .setHttpTimeout(value) | httpTimeoutを設定します。 | v2.1.0+ |
| .setTimeout(value) | timeoutを設定します。 | 未使用 |
.httpPost(topic,headers,getBody,callback[[,qos],sockTo])
HTTPS経由でAWS IoT Coreにデータを送信します。
送信先はtopicで指定されたAWS IoT Coreエンドポイントになります。
| Name | Type | M/O | Description | Note |
|---|---|---|---|---|
| topic | string | mandatory | MQTTトピックを指定します。 本設定値は /topics/${topic}に変換されます。 | |
| headers | object | mandatory | HTTPリクエストヘッダを指定します。 「Content-Length」を含める必要があります。 | |
| getBody | function | mandatory | 送信データ(body)引き取り時にコールバック処理を実行します。データがなくなるまで、4KB以下の stringもしくはArrayBufferチャンクでデータを渡し、最後にnullを渡します。 | |
| callback(err, resp) | function | mandatory | 処理完了時にコールバック処理を実行します。 コールバック関数の引数で処理結果を通知します。 err: {HttpReqError}, null resp: {HttpResponse}, null HTTPリクエストでエラーが発生した場合は err、HTTPレスポンスが受信できた場合はrespが設定されます。 | |
| qos | number | optional | MQTTサービス品質レベルを指定します。 本設定値は ?qos=${qos}に変換されます。デフォルト値は 0となります。 | |
| sockTo | number | optional | HTTPセッションのタイムアウト値[ms]を指定します。 本パラメータは https.request()メソッドのsockTo設定値となります。詳しくはHTTPSオブジェクト仕様を参照してください。 | v2.1.0+ |
| return | undefined | - |
{HttpReqError}
| Name | Type | Description | Note |
|---|---|---|---|
| .errCode | number | HTTPSリクエストのエラーコード 詳しくはHTTPSオブジェクトのエラーコード表を参照してください。 |
{HttpResponse}
| Name | Type | Description | Note |
|---|---|---|---|
| .statusCode | number | HTTPレスポンスのステータスコード | |
| .statusMessage | string | HTTPレスポンスのステータスメッセージ | |
| .body | string, null | HTTPレスポンスデータ (Response-Body) |
.abortHttpRequest()
現在進行中のHTTPリクエストを中止します。
| Name | Type | M/O | Description | Note |
|---|---|---|---|---|
| return | undefined | - |
.mqttConnect([options])
AWS IoT CoreにMQTT接続します。
本メソッドはmqtt.connect()メソッドのラッパー関数です。
AWS IoT CoreにMQTT接続するためのMQTTクライアントインスタンス{Client}を生成します。
生成された{Client}インスタンスの使用方法については、MQTTオブジェクト仕様を参照してください。
| Name | Type | M/O | Description | Note |
|---|---|---|---|---|
| options | object | optional | 本パラメータはmqtt.connect()メソッドのoptions設定値となります。詳しくはMQTTオブジェクト仕様を参照してください。 | |
| return | {Client}, undefined | - | AWS IoT Core用MQTTクライアントインスタンス |
本メソッドによって上書きされるmqtt.connect()関連の設定値
- mqtt.set(’ssl.ca’, certificate)
- certificate:
config.ca
- certificate:
- mqtt.set(’ssl.cert’, certificate)
- certificate:
config.deviceCert
- certificate:
- mqtt.set(’ssl.key’, clientkey)
- clientkey:
config.devicePrivKey
- clientkey:
- mqtt.connect(url[, options])
- url:
mqtts://${config.host}:8883
- url:
Usage Examples
すべてのサンプルコードにおいて、以下の共通コードを使用します。
ルートCA証明書がAWS IoT Coreエンドポイントに対して適切であることを事前に確認してください。
CA証明書の取得方法については、こちらを参考にしてください。
log.setLevel(0,2); //-1:NONE 0:ERROR 1:WARNING 2:DEBUG 3:TRACE, 0:DISABLE 1:LOG 2:CONSOLE 3:BOTH
log.printLevel(2); //0:DISABLE 1:LOG 2:CONSOLE 3:BOTH
var rootCa = '-----BEGIN CERTIFICATE-----\n...<CA>...\n-----END CERTIFICATE-----';
var deviceCert = '-----BEGIN CERTIFICATE-----\n...<CERT>...\n-----END CERTIFICATE-----';
var deviceKey = '-----BEGIN RSA PRIVATE KEY-----\n...<KEY>...\n-----END RSA PRIVATE KEY-----';
//TODO: Configuration
var iot = new AWS_IOT_CORE({
host: <value>,
deviceCert: deviceCert,
devicePrivKey: deviceKey,
ca: rootCa
});
if('errors' in iot) {
//TODO: Handle errors
throw new Error("Invalid configuration");
}
Sample 1
HTTPS経由でAWS IoT Coreにデータを送信します。
var topic = "testtopic/shadowtopic/dummy";
var body = JSON.stringify({
"message": "HTTP post"
});
var headers = {
"Content-Length": body.length.toString()
};
var busy;
var getBody = function() {
var temp = body;
body = null;
return temp;
};
var callback = function(err, resp) {
if(err) {
print("Error!", err.errCode);
} else {
print("Response:", resp.body);
print("Status:", resp.statusCode, resp.statusMessage);
}
busy = false;
};
busy = true;
iot.httpPost(topic, headers, getBody, callback);
while(busy);
print("Done");
Sample 2
HTTPS経由でAWS IoT Coreにデータを分割送信します。
var topic = "testtopic/shadowtopic/dummy";
var body = JSON.stringify({
"message": "This is a really long string[...]"
});
var headers = {
"Content-Length": body.length.toString()
};
var busy;
var chunkSize = 8; //4KB or less
var index = 0;
var getBody = function() {
var chunk = body.substring(index, index + chunkSize);
if(chunk) {
index = index + chunkSize;
return chunk;
}
return null;
};
var callback = function(err, resp) {
if(err) {
print("Error!", err.errCode);
} else {
print("Response:", resp.body);
print("Status:", resp.statusCode, resp.statusMessage);
}
busy = false;
};
busy = true;
iot.httpPost(topic, headers, getBody, callback);
while(busy);
print("Done");
Sample 3
AWS IoT CoreにMQTT接続します。
MQTTオブジェクトの自動再接続機能を使用します。
var mqttConnect = function(onConnected, onDisconnected) {
var cli = iot.mqttConnect({ reconnectCount: 1855 }); //Enable automatic reconnection
if(!cli) return undefined;
cli.on('error', function(err) {
//TODO: Handle errors
print("Error!", err.code, `(${cli.get('errnoConnect')})`);
});
cli.on('message', function(topic, message) {
//TODO: Handle messages
print("Message:", `[${topic}]`, message);
});
cli.on('close', function() {
print("DISCONNECTED");
if(onDisconnected) {
onDisconnected();
}
});
cli.on('connect', function() {
print("CONNECTED");
if(onConnected) {
onConnected();
}
});
return cli;
};
var onMqttConnect = function() {
client.subscribe("testtopic/subtopic/#", { qos: 1 }, function(err) {
if(err.code != 0) {
//TODO: Handle errors
print("Subscribe failed:", err.code);
}
});
};
var client = mqttConnect(onMqttConnect);
if(!client) {
throw new Error("Failed to create mqtt instance");
}
var publishInterval = 5 * 1000;
var publishEvent = false;
var publishCnt = 0;
setInterval(function() {
publishEvent = true;
}, publishInterval);
while(1) {
if(client && client.canPublish() && publishEvent) {
publishEvent = false;
publishCnt++;
var message = JSON.stringify({ "message": "publish" + publishCnt });
client.publish("testtopic/subtopic/dummy", message, { qos: 1 }, function(err) {
if(err.code == 0) {
print("Publish OK");
} else {
//TODO: Handle errors
print("Publish failed:", err.code);
}
});
}
}
Sample 4
AWS IoT CoreにMQTT接続します。
MQTTオブジェクトの自動再接続機能を使用せず、手動再接続を行います。
var mqttConnect = function(onConnected, onDisconnected) {
var cli = iot.mqttConnect();
if(!cli) return undefined;
cli.on('error', function(err) {
//TODO: Handle errors
print("Error!", err.code, `(${cli.get('errnoConnect')})`);
if(err.code == 1 && onDisconnected) { //Connection failed
onDisconnected();
return;
}
});
cli.on('message', function(topic, message) {
//TODO: Handle messages
print("Message:", `[${topic}]`, message);
});
cli.on('close', function() {
print("DISCONNECTED");
if(onDisconnected) {
onDisconnected();
}
});
cli.on('connect', function() {
print("CONNECTED");
if(onConnected) {
onConnected();
}
});
return cli;
};
var onMqttConnect = function() {
client.subscribe("testtopic/subtopic/#", { qos: 1 }, function(err) {
if(err.code != 0) {
//TODO: Handle errors
print("Subscribe failed:", err.code);
}
});
};
var onMqttDisconnect = function() {
setTimeout(function() {
print("Reconnecting...");
client.reconnect();
}, 10000);
};
var client = mqttConnect(onMqttConnect, onMqttDisconnect);
if(!client) {
throw new Error("Failed to create mqtt instance");
}
var publishInterval = 5 * 1000;
var publishEvent = false;
var publishCnt = 0;
setInterval(function() {
publishEvent = true;
}, publishInterval);
while(1) {
if(client && client.canPublish() && publishEvent) {
publishEvent = false;
publishCnt++;
var message = JSON.stringify({ "message": "publish" + publishCnt });
client.publish("testtopic/subtopic/dummy", message, { qos: 1 }, function(err) {
if(err.code == 0) {
print("Publish OK");
} else {
//TODO: Handle errors
print("Publish failed:", err.code);
}
});
}
}
