IoT Platform ブリッジサービスを、既存の接続サービスまたは汎用プロトコル Core SDK を使用するプラットフォームと統合して、デバイスまたはサーバーから Alibaba Cloud IoT Platform にすばやくアクセスできるようにすることができます。

前提条件

汎用プロトコル Core SDK の概念、機能、および Maven との依存関係に関する情報については、「概要」をご参照ください。

設定の管理

汎用プロトコル Core SDK は、デフォルトでファイルベースの設定管理を使用します。 カスタマイズされた設定については、「カスタムコンポーネント > 設定管理」をご参照ください。 汎用プロトコル Core SDK は以下をサポートします。

  • Java プロパティ、JSON 、および HOCON 形式
  • メンテナンスを簡素化するための構造化設定
  • java -Dmyapp.foo.bar = 10 などの Java システムプロパティによるファイル設定のオーバーライド
  • 設定ファイルの区切りとネストされた参照
表 1. application.confネットブリッジは仮想的な概念です。 ネットブリッジの情報として、任意のデバイスの productKeydeviceName、およびdeviceSecretを使用できます。
パラメーター 必須 説明
productKey はい ネットブリッジ製品のプロダクト ID 。
deviceName いいえ ネットブリッジデバイスのデバイス名。 デフォルト値は ECS インスタンスの MAC アドレスです。
deviceSecret いいえ ネットブリッジデバイスのデバイスシークレット。
http2Endpoint はい HTTP/2 ゲートウェイサービスアドレス。

アドレスの形式は、${UID}.iot-as-http2. ${RegionId}.aliyuncs.com:443 です。

説明:

  • ${UID} はユーザーのアカウント ID を示します。 アカウント ID を表示するには、Alibaba Cloud コンソールにログインし、アカウント画像の上にマウスカーソルを移動させて、[セキュリティ設定] をクリックします。 [アカウント管理] ページに移動し、アカウント ID の確認ができます。
  • ${RegionId} は、ユーザーのサービスが存在するリージョンの ID を示します。 たとえば、リージョンが中国 (上海) の場合、HTTP/2 ゲートウェイサービスのアドレスは 123456789.iot-as-http2.cn-shanghai.aliyuncs.com:443 となります。

    RegionId の式については、『リージョンとゾーン』をご参照ください。

authEndpoint はい デバイス認証サービスアドレス

デバイス認証サービスアドレスは、https://iot-auth. ${RegionId}.aliyuncs.com/auth/bridge となります。

${RegionId} は、ユーザーのサービスが存在するリージョンの ID を示します。 たとえば、リージョンが中国 (上海) の場合、デバイス認証サービスのアドレスは https://iot-auth.cn-shanghai.aliyuncs.com/auth/bridge となります。

RegionId の式については、『リージョンとゾーン』をご参照ください。

popClientProfile はい API を呼び出してクライアントを設定します。 詳細については、「API クライアントの設定」をご参照ください。
表 2. API クライアントの設定
パラメーター 必須 説明
accessKey はい API 呼び出し元のアクセスキー。
accessSecret はい API 呼び出し元の秘密鍵。
name はい API のリージョン名。
region はい API のリージョン ID。
product はい プロダクトの名前。 指定されていない場合、これを「lot」に設定します。
endpoint はい API のエンドポイント。

エンドポイント構造: iot. ${RegionId}.aliyuncs.com

${RegionId} は、ユーザーのサービスのリージョン ID を示します。 たとえば、リージョンが中国 (上海) の場合、エンドポイントは iot.cn-shanghai.aliyuncs.com となります。

RegionId の式については、『リージョンとゾーン』をご参照ください。

devices.conf

デバイスの ProductKey 、 DeviceName 、および DeviceSecret を設定します。 設定ファイルのカスタマイズについては、「カスタムコンポーネント > 設定管理」をご参照ください。

XXXX //  Original identifiers of the device
{
    "productKey": "123",
    deviceName: "",
    deviceSecret: ""
}
			

インターフェイス

初期化

com.aliyun.iot.as.bridge.core.BridgeBootstrap で、デバイスと Alibaba Cloud IoT Platform 間の通信を初期化します。 BridgeBootstrap インスタンスが作成された後、 ゲートウェイの「基本設定」コンポーネントが初期化されます。 設定のカスタマイズについては、「カスタムコンポーネント > 設定管理」をご参照ください。

以下のいずれかのインターフェイスを使用して、初期設定を完了してください。

  • bootstrap() : ダウンストリームメッセージングなしの初期化。
  • bootstrap(DownlinkChannelHandler handler): 開発者が指定した DownlinkChannelHandler を使用して初期化します。

サンプルコード:

BridgeBootstrap bootstrap = new BridgeBootstrap();
// Do not implement downstream messaging
bootstrap.bootstrap();

IoT Platform へのデバイスの接続

オンラインになっているデバイスのみが、IoT Platform との接続を確立したり、IoT Platform に接続リクエストを送信したりできます。 デバイスをオンラインにする方法は 2 つあります。ローカルセッションの初期化とデバイス認証です。

  1. セッションの初期化

    汎用プロトコル SDK は、非持続的ローカルセッション管理を提供します。 カスタマイズについては、「カスタムコンポーネント > セッション管理」をご参照ください。

    新しいインスタンスを作成するためのインターフェイス:

    • com.aliyun.iot.as.bridge.core.model.Session.newInstance(String originalIdentity, Object channel)
    • com.aliyun.iot.as.bridge.core.model.Session.newInstance(String originalIdentity, Object channel, int heartBeatInterval)
    • com.aliyun.iot.as.bridge.core.model.Session.newInstance(String originalIdentity, Object channel, int heartBeatInterval, int heartBeatProbes)

    originalIdentity は、一意のデバイス識別子を示し、元のプロトコルの SN と同じ機能を備えています。channel は、デバイスとブリッジサービス間の通信チャネルであり、 Netty のチャネルと同じ機能を備えています。heartBeatIntervalheartBeatProbes は、ハートビートのモニタリングに使用されます。 heartBeatInterval の単位は秒です。heartBeatProbes は、許可されている未検出のハートビートの最大数を示します。 この数を超えると、ハートビートタイムアウトイベントが送信されます。 タイムアウトイベントを処理するには、 com.aliyun.iot.as.bridge.core.session.SessionListener を登録します。

  2. 認証デバイス

    ローカルデバイスセッションの初期化後、com.aliyun.iot.as.bridge.core.handler.UplinkChannelHandler.doOnline(Session newSession, String originalIdentity, String... credentials) を使用して、ローカルデバイス認証と Alibaba Cloud IoT Platform オンライン認証を完了します。 その後、デバイスは通信を許可されるか、認証結果に従って切断されます。 SDK は IoT Platform のオンライン認証を提供します。 デフォルトでは、ローカル認証は無効になっています。 ローカル認証を設定する必要がある場合は、「カスタマイズされたコンポーネント > 接続認証」をご参照ください。

    サンプルコード:

    UplinkChannelHandler uplinkHandler = new UplinkChannelHandler();
    Session session = session. newinstance (device, Channel );
    boolean success = uplinkHandler.doOnline(session, originalIdentity);
    if (success) {
        // Successfully got online, and will accept communication requests.
    } else {
        // Failed to get online, and will reject communication requests and disconnect (if connected).
    }

デバイスオフライン

デバイスが切断するか、または切断する必要があることを検出すると、デバイスのオフライン操作を開始する必要があります。 デバイスをオフラインにするには、com.aliyun.iot.as.bridge.core.handler.UplinkChannelHandler.doOffline(String originalIdentity) を使用してください。

サンプルコード:

UplinkChannelHandler uplinkHandler = new UplinkChannelHandler();
Uplinkhandler. dooffline (originalidentity );

データの報告

Alibaba Cloud IoT Platform にデータを報告するには、com.aliyun.iot.as.bridge.core.handler.UplinkChannelHandler を使用してください。 データの報告には 3 つの重要なステップが含まれます。データを報告する予定のデバイスの識別、このデバイスに対応するセッションの特定、および IoT Platform へのデータの報告です。 以下のインターフェイスを使用してデータを報告してください。

データレポートが管理され、セキュリティの問題が処理されたことを確認してください。
  • CompletableFuture doPublishAsync(String originalIdentity, String topic, byte[] payload, int qos) を使用すると、データが非同期的に送信され、即座に返されます。 その後、"future" を使って送信結果を取得することができます。
  • CompletableFuture doPublishAsync(String originalIdentity, ProtocolMessage protocolMsg) を使用すると、データが直ちに非同期的に送信されます。 その後、 "future" を使って送信結果を取得することができます。
  • boolean doPublish(String originalIdentity, ProtocolMessage protocolMsg, int timeout) を使用すると、データが非同期的に送信され、応答を待ちます。
  • boolean doPublish(String originalIdentity, String topic, byte[] payload, int qos, int timeout) を使用すると、データが非同期的に送信され、応答を待ちます。

サンプルコード:

UplinkChannelHandler uplinkHandler = new UplinkChannelHandler(); 
DeviceIdentity identity = ConfigFactory.getDeviceConfigManager().getDeviviceIdentity(device); 
if (identity == null) { 
    // Devices are not mapped with those registered on IoT Platform, and messages are dropped. 
    return; 
} 
Session session = SessionManagerFactory.getInstance().getSession(device); 
if (session == null) { 
    // The device is not online. You can either get the device online or drop messages. Make sure devices are online before reporting data to IoT Platform. 
} 
boolean success = uplinkHandler.doPublish(session, topic, payload, 0, 10); 
if(success) { 
    // Data is successfully reported to Alibaba Cloud IoT Platform. 
} else { 
    // Failed to report data to IoT Platform
}   

ダウンストリームメッセージング

汎用プロトコル SDK は、ダウンストリームデータ配信プロセッサとして、 com.aliyun.iot.as.bridge.core.handler.DownlinkChannelHandler を提供します。 ユニキャストとブロードキャストをサポートします ( クラウドから送信されたメッセージに特定のデバイス情報が含まれていない場合 ) 。

サンプルコード:

public class SampleDownlinkHandler implements DownlinkChannelHandler {
    @Override
    public boolean pushToDevice(Session session, String topic, byte[] payload) {
        // Process messages pushed to the device
    }

    @Override
    public boolean broadcast(String topic, byte[] payload) {
        // Process broadcast
    }
}
			

カスタムコンポーネント

デバイス接続認証、セッション管理、および設定管理の各コンポーネントをカスタマイズできます。 BridgeBootstrap の初期化を呼び出す前に、これらのコンポーネントの初期化と置換を完了する必要があります。

接続認証

デバイス接続認証をカスタマイズするには、com.aliyun.iot.as.bridge.core.auth.AuthProvider を実装し、BridgeBootstrapcall を初期化する前に、元の認証コンポーネントをカスタマイズされたコンポーネントに置き換えるために、com.aliyun.iot.as.bridge.core.auth.AuthProviderFactory.init(AuthProvider customizedProvider) を呼び出します。

セッション管理

セッション管理をカスタマイズするには、com.aliyun.iot.as.bridge.core.session.SessionManager を実装し、BridgeBootstrapcall を初期化する前に、元のセッション管理コンポーネントをカスタマイズされたコンポーネントに置き換えるために、com.aliyun.iot.as.bridge.core.session.SessionManagerFactory.init(SessionManager <? > customizedSessionManager) を呼び出します。

設定管理

設定管理をカスタマイズするには、com.aliyun.iot.as.bridge.core.config.DeviceConfigManagercom.aliyun.iot.as.bridge.config.BridgeConfigManager を実装します。 次に、BridgeBootstrapcall を初期化する前に、元のセッション管理コンポーネントをカスタマイズされたコンポーネントに置き換えるために、com.aliyun.iot.as.bridge.core.config.ConfigFactory.init(BridgeConfigManager bcm, DeviceConfigManager dcm) を呼び出します。 パラメーターを空白のままにした場合は、汎用プロトコル SDK のデフォルト値が使用されます。