すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:高度な機能を使用する

最終更新日:Feb 06, 2024

このトピックでは、高度な機能を使用するように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ファイルで指定されたすべてのデバイスに関連付けられています。

表 1 Parameters

パラメーター

必須

説明

productKey

必須

ブリッジが属する製品のProductKey。

subDeviceConnectMode

任意

ブリッジのタイプ。

  • このパラメーターを3に設定すると、大きなサイズのブリッジが作成されます。 最大500,000台のデバイスをブリッジに接続できます。

  • このパラメーターを指定しない場合は、小さいサイズのブリッジが作成されます。 最大1,500台のデバイスをブリッジに接続できます。

大型ブリッジと小型ブリッジは、異なるポリシーを使用してデバイスを切断します。 詳細については、「基本機能の使用」トピックの「IoT Platformからデバイスを切断する」セクションをご参照ください。

http2Endpoint

必須

HTTP/2ゲートウェイのエンドポイント。 エンドポイントは、HTTP/2プロトコルを介してブリッジとIoT Platformの間に永続的な接続を確立するために使用されます。

エンドポイント形式:

  • Enterprise Editionインスタンス: https://${IotInstanceI d}.http2.iothub.aliyuncs.com:443

    ${IotInstanceId} を購入したインスタンスのIDに置き換えます。

    たとえば、インスタンスIDがiot-cn-g06kwb **** の場合、エンドポイントはhttps:// iot-cn-g06kwb **** .http2.iothub.aliyuncs.com:443です。

  • パブリックインスタンス: 新しいバージョンのパブリックインスタンスのエンドポイント形式は、以前のバージョンのパブリックインスタンスのエンドポイント形式とは異なります。

    • 新しいバージョンのパブリックインスタンスは、Enterprise Editionインスタンスと同じエンドポイント形式を使用します。

    • 以前のバージョンのパブリックインスタンス: https://${productKey}.iot-as-http2.${RegionI d}.aliyuncs.com:443

      ${productKey} を、ブリッジが属する製品のProductKeyに置き換えます。

      ${RegionId} を、IoT Platformサービスが存在するリージョンのIDに置き換えます。 リージョンIDの詳細については、「リージョンとゾーン」をご参照ください。

      たとえば、ブリッジのProductKeyがa1abcab **** で、パブリックインスタンスが中国 (上海) リージョンにある場合、エンドポイントはhttps:// a1abcab **** .iot-as-http2.cn-shanghai.aliyuncs.com:443です。

    IoT Platformインスタンスの詳細については、「概要」をご参照ください。

authEndpoint

必須

デバイス検証サービスのエンドポイント。

エンドポイント形式:

  • Enterprise Editionインスタンス: https://${IotInstanceI d}.auth.iothub.aliyuncs.com/auth/bridge

    ${IotInstanceId} を購入したインスタンスのIDに置き換えます。

    たとえば、インスタンスIDがiot-cn-g06kwb **** の場合、エンドポイントはhttps:// iot-cn-g06kwb **** .auth.iothub.aliyuncs.com/auth/bridgeです。

  • パブリックインスタンス: 新しいバージョンのパブリックインスタンスのエンドポイント形式は、以前のバージョンのパブリックインスタンスのエンドポイント形式とは異なります。

    • 新しいバージョンのパブリックインスタンスは、Enterprise Editionインスタンスと同じエンドポイント形式を使用します。

    • 以前のバージョンのパブリックインスタンス: https:// iot-auth.${RegionI d}.aliyuncs.com/auth/bridge

      ${RegionId} を、IoT Platformサービスが存在するリージョンのIDに置き換えます。 リージョンIDの詳細については、「リージョンとゾーン」をご参照ください。

      たとえば、インスタンスが中国 (上海) リージョンにある場合、エンドポイントはhttps://iot-auth.cn-shanghai.aliyuncs.com/auth/bridgeです。

popClientProfile

必須

このパラメーターを指定すると、IoT as Bridge SDKは自動的にIoT Platformの操作を呼び出してブリッジを作成します。

次の表に、popClientProfileのフィールドを示します。

表 2. popClientProfile

フィールド

必須

説明

accessKey

必須

Alibaba CloudアカウントのAccessKey ID。

IoT Platformコンソールにログインし、プロファイル画像の上にポインタを移動し、[AccessKey管理] をクリックします。 AccessKeyペアページで、AccessKeyペアを作成または表示できます。

accessSecret

必須

Alibaba CloudアカウントのAccessKeyシークレット。

name

必須

ブリッジが属するリージョンのID。

リージョンIDの詳細については、「リージョンとゾーン」をご参照ください。

region

必須

product

必須

プロダクトの名前。 値をIotに設定します。

endpoint

必須

指定されたリージョンのAPIのエンドポイント。 値はiot.${RegionI d}.aliyuncs.com形式で指定する必要があります。

${RegionId} を、IoT Platformサービスが存在するリージョンのIDに置き換えます。 リージョンIDの詳細については、「リージョンとゾーン」をご参照ください。

たとえば、IoT Platformサービスが中国 (上海) リージョンにある場合、エンドポイントはiot.cn-shanghai.aliyuncs.comです。

次のサンプルコードは、小型ブリッジを設定する方法を示しています。 この例では、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)

プロパティの値 プロパティを定義するときは、値の範囲を設定できます。 この例では、random.nextInt(100) は、100未満のランダムな整数を示します。

testEvent

イベントの識別子。 この例では、定義されたイベントの識別子はtestEventです。 testEventイベントがIoT Platformに送信されます。

ThingEventTypes.INFO

イベントのタイプ。 ThingEventTypesはイベントタイプを指定します。 INFOの値は、イベントタイプがINFOであることを示します。

この例では、IoT PlatformコンソールでtestEventイベントが定義されている場合、イベントタイプはINFOに設定されます。

イベントタイプがERRORの場合、このパラメーターをThingEventTypes.ERRORに設定します。

params

イベントの出力パラメーター。 出力パラメーターの識別子、データ型、および値の範囲は、IoT Platformコンソールで定義されています。 この例では、出力パラメーターの識別子testEventParamで、値は123です。

testDeviceTag

タグキーです。 データ型は String 型です。 この例では、キーはtestDeviceTagです。 タグキーの構成ルールとビジネス要件に基づいてタグキーを設定します。 詳細は、「タグ」をご参照ください。

String.valueOf(random.nextInt(1000))

タグ値です。 データ型は String 型です。 この例では、String.valueOf(random.nextInt(1000)) は、1,000未満のランダムな整数を示します。 タグ値の設定ルールとビジネス要件に基づいてタグ値を設定します。 詳細については、「タグ」をご参照ください。

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

プロパティの識別子。 この例では、定義されたプロパティの識別子にPowerConsumptionLightAdjustLevelがあります。 異なる時点での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);
    }
});