このトピックでは、高度な機能を使用するようにIoT as Bridge SDKを設定する方法について説明します。 設定ファイルパスを指定し、ブリッジを動的に登録できます。 IoT as Bridge SDKでカプセル化された操作を呼び出して、Thing Specification Language (TSL) データの送信、プロパティまたはイベントの送信、プロパティの設定、およびサービスの呼び出しを行うこともできます。
設定ファイルパスの指定
デフォルトでは、ブリッジの構成ファイルはapplication.confで、デバイス証明書マッピングの構成ファイルはdevices.confです。
IoT as Bridge SDKでは、カスタムファイルパスを指定できます。 bootstrap() メソッドを呼び出す前に、ConfigFactory.init() メソッドを呼び出して、構成ファイルのパスを指定できます。 インスタンスを作成し、ビジネス要件に基づいてメソッドを実装することもできます。
サンプルコード:
プライベート静的DeviceConfigManager selfDefineDeviceConfigManager = new DeviceConfigManager() {
@オーバーライド
public DeviceIdentity getDeviceIdentity(String originalIdentity) {
devicesMap.get(originalIdentity) を返します。
}
@オーバーライド
public String getOriginalIdentity(String productKey, String deviceName) {
ヌルを返します。
}
};
BridgeBootstrap bridgeBootstrap = new BridgeBootstrap();
ConfigFactory.init(ConfigFactory.getBridgeConfigManager("application-self-define.conf") 、selfDefineDeviceConfigManager);
bridgeBootstrap.bootstrap();
ブリッジを動的に登録する
多数のサーバーにブリッジを展開する場合、異なるブリッジサーバーに異なるブリッジを指定する必要がある場合、展開プロセスが複雑になります。 ブリッジを動的に登録するようにapplication.confブリッジ設定ファイルを設定できます。
ブリッジのproductKeyパラメーターとpopClientProfileパラメーターを設定ファイルで指定する必要があります。 次に、IoT as Bridge SDKは、IoT PlatformのAPI操作を呼び出してブリッジを登録し、ブリッジサーバーのMACアドレスをブリッジのDeviceNameとして使用します。
ブリッジを動的に登録するには、ブリッジ設定ファイルのみを設定する必要があります。 サンプルコードの詳細については、「基本機能の使用」をご参照ください。
popClientprofileパラメーターのすべてのフィールドを指定する必要があります。 MACアドレスが既存のデバイスのDeviceNameとして使用されている場合、デバイスはブリッジとして使用されます。
deviceNameおよびdeviceSecretパラメーターは空のままにする必要があります。 ブリッジに関する情報を指定した場合、ブリッジを動的に登録することはできません。
デバッグには専用のテストデバイスを使用することを推奨します。 本番環境への影響を防ぐため、ローカルマシン上のプログラムをデバッグしないでください。
複数のローカルマシンでプログラムをデバッグする場合、そのマシンのMACアドレスがブリッジ名として登録されます。 ブリッジは、devices.confファイルで指定されたすべてのデバイスに関連付けられています。
パラメーター | 必須 | 説明 |
productKey | 必須 | ブリッジが属する製品のProductKey。 |
subDeviceConnectMode | 任意 | ブリッジのタイプ。
大型ブリッジと小型ブリッジは、異なるポリシーを使用してデバイスを切断します。 詳細については、「基本機能の使用」トピックの「IoT Platformからデバイスを切断する」セクションをご参照ください。 |
http2Endpoint | 必須 | HTTP/2ゲートウェイのエンドポイント。 エンドポイントは、HTTP/2プロトコルを介してブリッジとIoT Platformの間に永続的な接続を確立するために使用されます。 エンドポイント形式:
|
authEndpoint | 必須 | デバイス検証サービスのエンドポイント。 エンドポイント形式:
|
popClientProfile | 必須 | このパラメーターを指定すると、IoT as Bridge SDKは自動的にIoT Platformの操作を呼び出してブリッジを作成します。 次の表に、popClientProfileのフィールドを示します。 |
フィールド | 必須 | 説明 |
accessKey | 必須 | Alibaba CloudアカウントのAccessKey ID。 IoT Platformコンソールにログインし、プロファイル画像の上にポインタを移動し、[AccessKey管理] をクリックします。 AccessKeyペアページで、AccessKeyペアを作成または表示できます。 |
accessSecret | 必須 | Alibaba CloudアカウントのAccessKeyシークレット。 |
name | 必須 | ブリッジが属するリージョンのID。 リージョンIDの詳細については、「リージョンとゾーン」をご参照ください。 |
region | 必須 | |
product | 必須 | プロダクトの名前。 値をIotに設定します。 |
endpoint | 必須 | 指定されたリージョンのAPIのエンドポイント。 値は ${RegionId} を、IoT Platformサービスが存在するリージョンのIDに置き換えます。 リージョンIDの詳細については、「リージョンとゾーン」をご参照ください。 たとえば、IoT Platformサービスが中国 (上海) リージョンにある場合、エンドポイントは |
次のサンプルコードは、小型ブリッジを設定する方法を示しています。 この例では、Enterprise Editionインスタンスが使用されています。
// サービスのsendpoint。
http2Endpoint = "https://${IotInstanceI d}.http2.iothub.aliyuncs.com:443"
authEndpoint = "https://${IotInstanceI d}.auth.iothub.aliyuncs.com/auth/bridge"
// ブリッジのパラメータ。
productKey = ${YourProductKey}
popClientProfile = {
accessKey = ${YourAliyunAccessKey}
accessSecret = ${YourAliyunAccessSecret}
name = cn-上海
region = cn-shanghai
product = Iot
endpoint = iot.cn-shanghai.aliyuncs.com
}
TSLデータを送信する操作を呼び出す
IoT as Bridge SDKは、データを送信する操作をカプセル化します。 reportProperty操作を呼び出してプロパティを送信し、fireEvent操作を呼び出してイベントを送信し、updateDeviceTag操作を呼び出してタグを更新します。 デバイスはこれらの操作を使用して、プロパティのレポート、イベントのレポート、およびデバイスタグの更新を行うことができます。
reportPropertyおよびfireEvent操作を呼び出す前に、IoT Platformコンソールでプロパティとイベントを定義する必要があります。 IoT Platformコンソールにログインし、プロダクトの詳細ページに移動します。 次に、[機能の定義] タブでプロパティとイベントを定義できます。 詳細については、「TSL機能の追加」をご参照ください。
updateDeviceTag操作を呼び出したときにタグがすでに存在する場合、タグの値が更新されます。 既存のタグを表示するには、IoT Platformコンソールのデバイスの詳細ページに移動します。 タグが存在しない場合、IoT Platformはタグを自動的に作成します。
サンプルコード:
TslUplinkHandler tslUplinkHandler = new TslUplinkHandler();
// プロパティを送信します。
// testPropプロパティが定義されています。
文字列requestId = String.valueOf(random.nextInt(1000));
// 送信されたプロパティデータにはタイムスタンプは含まれません。
tslUplinkHandler.reportProperty(requestId、originalIdentity、"testProp" 、random.nextInt(100));
// 送信されたプロパティデータにタイムスタンプが含まれます。
// tslUplinkHandler.reportProperty(requestId、originalIdentity、"testProp" 、random.nextInt(100) 、System.currentTimeMillis());
// イベントを送信します。
// testEventイベントが定義されています。
requestId = String.valueOf(random.nextInt(1000));
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("testEventParam" 、123);
// 送信されたイベントデータにはタイムスタンプは含まれません。
tslUplinkHandler.fireEvent(originalIdentity、"testEvent" 、ThingEventTypes.INFO、params);
// 送信されたイベントデータにタイムスタンプが含まれます。
// tslUplinkHandler.fireEvent(originalIdentity、"testEvent" 、ThingEventTypes.INFO、params、System.currentTimeMillis());
// デバイスタグを更新します。
// タグのキーはtestDeviceTagに設定されます。
requestId = String.valueOf(random.nextInt(1000));
tslUplinkHandler.updateDeviceTag(requestId、originalIdentity、"testDeviceTag" 、String.valueOf(random.nextInt(1000)));
下表に、各パラメーターを説明します。
パラメーター | 説明 |
requestId | リクエストの ID。 |
originalIdentity | デバイスの元の識別子。 |
testProp | プロパティの識別子。 この例では、定義されたプロパティの識別子はtestPropです。 testPropプロパティがIoT Platformに送信されます。 |
random.nextInt(100) | プロパティの値 プロパティを定義するときは、値の範囲を設定できます。 この例では、 |
testEvent | イベントの識別子。 この例では、定義されたイベントの識別子はtestEventです。 testEventイベントがIoT Platformに送信されます。 |
ThingEventTypes.INFO | イベントのタイプ。 ThingEventTypesはイベントタイプを指定します。 INFOの値は、イベントタイプがINFOであることを示します。 この例では、IoT PlatformコンソールでtestEventイベントが定義されている場合、イベントタイプはINFOに設定されます。 イベントタイプがERRORの場合、このパラメーターを |
params | イベントの出力パラメーター。 出力パラメーターの識別子、データ型、および値の範囲は、IoT Platformコンソールで定義されています。 この例では、出力パラメーターの識別子はtestEventParamで、値は123です。 |
testDeviceTag | タグキーです。 データ型は String 型です。 この例では、キーはtestDeviceTagです。 タグキーの構成ルールとビジネス要件に基づいてタグキーを設定します。 詳細は、「タグ」をご参照ください。 |
String.valueOf(random.nextInt(1000)) | タグ値です。 データ型は String 型です。 この例では、 |
System.currentTimeMillis() | システムのタイムスタンプ。 1970年1月1日00:00:00協定世界時 (UTC) から経過したミリ秒数を表すUNIXタイムスタンプを指定します。 |
一度に複数のプロパティとイベントを送信する呼び出し操作
IoT as Bridge SDKは、一度に複数のプロパティとイベントを送信する操作をカプセル化します。 プロパティとイベントデータを追加するには、BatchPostEventPropertyMessageオブジェクトを作成し、addProperty() メソッドとaddEvent() メソッドを呼び出します。 次に、TslUplinkHandlerオブジェクトを作成し、BatchPostEventPropertyMessage() メソッドを呼び出してデータを送信します。
reportPropertyおよびfireEvent操作を呼び出す前に、IoT Platformコンソールでプロパティとイベントを定義する必要があります。 IoT Platformコンソールにログインし、プロダクトの詳細ページに移動します。 次に、[機能の定義] タブでプロパティとイベントを定義できます。 詳細については、「TSL機能の追加」をご参照ください。
サンプルコード:
TslUplinkHandler tslUplinkHandler = new TslUplinkHandler();
// 一度に複数のプロパティとイベントを送信します。
文字列requestId = String.valueOf(random.nextInt(1000));
long startTime = System.currentTimeMillis() - 3000;
// データを送信するメッセージを作成します。
BatchPostEventPropertyMessage batchPostEventPropertyMessage = new BatchPostEventPropertyMessage();
Map<String, Object> aiEventParams = new HashMap<>();
aiEventParams.put("EventContent" 、"hello world");
batchPostEventPropertyMessage
. addProperty("PowerConsumption" 、1000、startTime)
. addProperty("PowerConsumption" 、123、startTime + 1000)
. addProperty("LightAdjustLevel" 、23、startTime)
. addProperty("LightAdjustLevel" 、44、startTime 1000)
. addProperty("LightAdjustLevel" 、47、startTime 2000)
. addEvent("AIEvent" 、aiEventParams、startTime);
batchPostEventPropertyMessage.setId(requestId);
// データを送信します。
tslUplinkHandler.batchPostEventPropertyMessage(originalIdentity, batchPostEventPropertyMessage);
下表に、各パラメーターを説明します。
パラメーター | 説明 |
requestId | リクエストの ID。 |
startTime | 送信されるプロパティとイベントのタイムスタンプ。 1970年1月1日00:00:00 UTCから経過したミリ秒数を表すUNIXタイムスタンプを指定します。 ビジネス要件に基づいて、このパラメーターにカスタム値を指定できます。 |
aiEventParams | イベントに関する情報。 |
PowerConsumption | プロパティの識別子。 この例では、定義されたプロパティの識別子にPowerConsumptionとLightAdjustLevelがあります。 異なる時点での2つのプロパティの値が送信されます。 |
LightAdjustLevel | |
AIEvent | イベントの識別子。 この例では、定義されたイベントの識別子はAIEventです。 AIEventイベントがIoT Platformに送信されます。 |
originalIdentity | デバイスの元の識別子。 |
プロパティを設定してサービスを呼び出すための呼び出し操作
IoT as Bridge SDKは、PropertySetHandler操作をカプセル化してプロパティを設定し、ServiceInvokeHandler操作をカプセル化してサービスを呼び出します。 デバイスはこれらの操作を使用して、IoT Platformからコマンドを受信し、データを更新できます。
サンプルコード:
BridgeBootstrap bridgeBootstrap = new BridgeBootstrap();
// プロパティを設定します。
bridgeBootstrap.setPropertySetHandler(new PropertySetHandler() {
@オーバーライド
public void onPropertySet(PropertySetMessage msg) {
log.info("on property set, {}", msg.getParams());
// replySuccess() メソッドを呼び出すと、SDKは /property/set_replyメッセージをIoT Platformに送信します。 応答コードは200です。
msg.replySuccess();
// replyFail() メソッドを呼び出すと、SDKは /property/set_replyメッセージをIoT Platformに送信します。 ビジネス要件に基づいて応答コードを指定できます。
// msg.replyFail(400);
}
});
// サービスを呼び出します。
bridgeBootstrap.setServiceInvokeHandler(new ServiceInvokeHandler() {
@オーバーライド
public void onServiceInvoke(ServiceInvokeMessageメッセージ) {
log.info("on service invoke, {}", message.getParams());
// replySuccess() メソッドを呼び出すと、SDKは /service/{service.identifier}_replyメッセージをIoT Platformに送信します。 応答コードは200です。
message.replySuccess();
// replyFail() メソッドを呼び出すと、SDKは /service/{service.identifier}_replyメッセージをIoT Platformに送信します。 ビジネス要件に基づいて応答コードを指定できます。
// msg.replyFail(400);
}
});