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

IoT Platform:ブロードキャストメッセージ

最終更新日:Mar 27, 2025

IoT Platform はブロードキャスト通信をサポートしています。プロダクト内のすべてのデバイスにメッセージをブロードキャストできます。デバイスは、メッセージを受信するためにブロードキャスト Topic をサブスクライブする必要はありません。指定された Topic をサブスクライブしているすべてのデバイスにメッセージをブロードキャストすることもできます。ビジネスサーバーによってブロードキャストされたメッセージを受信するには、デバイスがオンラインである必要があります。このトピックでは、すべてのオンラインデバイスにメッセージをブロードキャストするようにブロードキャスト通信機能を設定する方法について説明します。

背景情報

  • プロダクト内のすべてのオンラインデバイスにメッセージをブロードキャストする

    ビジネスサーバーは PubBroadcast 操作を呼び出し、ProductKey パラメーターと MessageContent パラメーターを設定します。その後、すべてのオンラインデバイスは、次のブロードキャスト Topic からメッセージを受信します。/sys/${productKey}/${deviceName}/broadcast/request/${MessageId}

    ブロードキャスト Topic のメッセージ ID は、IoT Platform によって生成されます。メッセージが送信されると、メッセージ ID は PubBroadcast 操作を呼び出したビジネスサーバーに返されます。

    たとえば、製造元には IoT Platform に接続されている複数のスマートドアロックがあるとします。製造元は、ビジネスサーバーを使用して、すべてのオンラインデバイスにパスワードを無効にするコマンドを送信します。

    Broadcast communication
  • 指定された Topic をサブスクライブしているすべてのデバイスにメッセージをブロードキャストする

    デバイスは同じブロードキャスト Topic をサブスクライブします。ビジネスサーバーは PubBroadcast 操作を呼び出し、ProductKeyMessageContent、および Topic パラメーターを設定します。ブロードキャスト Topic の形式は /broadcast/${productKey}/カスタムフィールド です。その後、すべてのオンラインデバイスは、その Topic からメッセージを受信します。

    重要
    • デバイスを開発する場合は、コードを使用してブロードキャスト Topic を定義します。IoT Platform コンソールで Topic を作成する必要はありません。
    • Topic をサブスクライブできるデバイスは最大 1,000 台です。デバイス数が制限を超える場合は、デバイスをグループに分割できます。たとえば、5,000 台のデバイスを 5 つのグループに分割できます。各グループには 1,000 台のデバイスが含まれます。この場合、PubBroadcast 操作を 5 回呼び出す必要があります。操作を呼び出すたびに、ブロードキャスト Topic のカスタムフィールドを group1、group2、group3、group4、group5 に設定します。各グループのデバイスが必要なブロードキャスト Topic をサブスクライブしていることを確認してください。

    PubBroadcast 操作の呼び出し方法の詳細については、「PubBroadcast」をご参照ください。

制限

  • メッセージは、プロダクト内のオンラインデバイスにのみブロードキャストできます。
  • 指定されたオンラインデバイスにメッセージをブロードキャストする場合は、デバイスがサブスクライブするブロードキャスト Topic を指定する必要があります。この場合、PubBroadcast 操作を 1 秒に 1 回呼び出すことができます。
  • すべてのオンラインデバイスにメッセージをブロードキャストする場合、デバイスはブロードキャスト Topic をサブスクライブする必要はありません。この場合、PubBroadcast 操作を 1 分に 1 回呼び出すことができます。
  • メッセージ本文のサイズは最大 64 KB です。
重要 デバイスにブロードキャストするメッセージは、デバイスが属する インスタンス のメッセージング TPS(transactions per second)仕様に基づいてスロットルされません。たとえば、インスタンスのメッセージング TPS 仕様が 1 秒あたり 100 で、インスタンスのオンラインデバイス数が 500 であるとします。PubBroadcast 操作を呼び出してメッセージをブロードキャストすると、メッセージは 500 台のオンラインデバイスに送信されます。

開発環境を準備する

この例では、デバイスと IoT Platform は Java 用 SDK を使用します。したがって、Java 開発環境を準備する必要があります。Java 公式 Web サイト から Java をダウンロードし、Java 開発環境をデプロイできます。

Maven プロジェクトに依存関係を追加する

Maven でプロジェクトを作成します。Maven プロジェクトの pom.xml ファイルに次の依存関係を追加します。

説明 次の Java 用 IoT Platform SDK のバージョン番号はサンプル値です。 OpenAPI Explorer を使用して、SDK 依存関係に関する情報を表示できます。
<dependencies>
  <dependency>
     <groupId>com.aliyun.alink.linksdk</groupId>
     <artifactId>iot-linkkit-java</artifactId>
     <version>1.2.0.1</version>
     <scope>compile</scope>
  </dependency>
  <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-core</artifactId>
      <version>4.5.6</version>
  </dependency>
  <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-iot</artifactId>
      <version>7.41.0</version>
  </dependency>
  <dependency>
    <groupId>com.aliyun.openservices</groupId>
    <artifactId>iot-client-message</artifactId>
    <version>1.1.2</version>
  </dependency>
</dependencies>

プロダクトとデバイスを作成する

  1. IoT Platform コンソール にログオンします。
  2. [概要] ページで、[すべての環境] をクリックします。[すべての環境] タブで、管理するインスタンスを見つけ、インスタンス ID またはインスタンス名をクリックします。

  3. 左側のナビゲーションウィンドウで、[デバイス] > [プロダクト] を選択します。
  4. [プロダクトの作成] をクリックして、スマートドアロックプロダクトを作成します。詳細については、「プロダクトを作成する」をご参照ください。
  5. 左側のナビゲーションウィンドウで、[デバイス] > [デバイス] を選択します。作成されたプロダクトに 3 つのスマートドアロックデバイスを作成できます。詳細については、「一度に複数のデバイスを作成する」をご参照ください。

デバイス SDK を設定する

  • デバイスを IoT Platform に接続します。
    • デバイス証明書に関する情報を指定します。
      final String productKey = "<yourProductKey>";
      final String deviceName = "<yourDeviceName>";
      final String deviceSecret = "<yourDeviceSecret>";
      final String region = "<yourRegionID>";

      デバイス証明書に関する情報は、productKeydeviceNamedeviceSecret の各パラメーターによって指定されます。情報を表示するには、次の手順を実行します。IoT Platform コンソール にログオンします。[概要] ページで、デバイスが属するインスタンスのカードをクリックします。左側のナビゲーションページで、[デバイス] > [デバイス] を選択します。表示されるページで、デバイスを見つけ、[操作] 列の [表示] をクリックします。情報は [デバイスの詳細] ページに表示されます。

      region: デバイスが存在するリージョンの ID。region パラメーターの値の形式の詳細については、「リージョン」をご参照ください。

    • 接続を初期化するパラメーターを設定します。パラメーターには、MQTT(Message Queuing Telemetry Transport)接続パラメーター、デバイス情報、初期デバイスステータスが含まれます。
      LinkKitInitParams params = new LinkKitInitParams();
      // MQTT 接続パラメーターを設定します。Link SDK は、基盤となるプロトコルとして MQTT を使用します。
      IoTMqttClientConfig config = new IoTMqttClientConfig();
      config.productKey = productKey;
      config.deviceName = deviceName;
      config.deviceSecret = deviceSecret;
      config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";
      // デバイス情報を指定します。
      DeviceInfo deviceInfo = new DeviceInfo();
      deviceInfo.productKey = productKey;
      deviceInfo.deviceName = deviceName;
      deviceInfo.deviceSecret = deviceSecret;
      // デバイスの初期ステータスを指定します。
      Map<String, ValueWrapper> propertyValues = new HashMap<String, ValueWrapper>();
      params.mqttClientConfig = config;
      params.deviceInfo = deviceInfo;
      params.propertyValues = propertyValues;

      channelHost は、インスタンスへの MQTT 接続のエンドポイントを指定します。パブリックインスタンスと Enterprise Edition インスタンスのエンドポイントを取得する方法については、「インスタンスのエンドポイントを管理する」をご参照ください。

    • 接続を初期化します。
      // 接続を初期化し、接続の初期化後に使用されるコールバック関数を設定します。
      LinkKit.getInstance().init(params, new ILinkKitConnectListener() {
           @Override
           public void onError(AError aError) {
               System.out.println("Init error:" + aError);
           }
           // コールバック関数を実装します。
           @Override
           public void onInitDone(InitResult initResult) {
               System.out.println("Init done:" + initResult);
           }
       });
  • onInitDone() コールバック関数は、プレフィックスを使用してブロードキャスト Topic を識別します。onInitDone()/sys/${productKey}/${deviceName}/broadcast/request/
    public void onInitDone(InitResult initResult) {
    
                    // ダウンストリームメッセージが送信されたときに使用されるコールバック関数を設定します。
                    IConnectNotifyListener notifyListener = new IConnectNotifyListener() {
                        // ダウンストリームメッセージが受信された後に使用されるコールバック関数を設定します。
                        @Override
                        public void onNotify(String connectId, String topic, AMessage aMessage) {
    
                            // 受信したメッセージをフィルタリングして、ブロードキャストメッセージを取得します。
                            if(topic.startsWith(broadcastTopic)){
                                System.out.println(
                                        "received broadcast message from topic=" + topic + ",\npayload=" + new String((byte[])aMessage.getData()));
                            }
    
                        }
    
                        @Override
                        public boolean shouldHandle(String s, String s1) {
                            return false;
                        }
    
                        @Override
                        public void onConnectStateChange(String s, ConnectState connectState) {
    
                        }
                    };
                    LinkKit.getInstance().registerOnNotifyListener(notifyListener);
                }

IoT Platform SDK を設定する

Java 用 IoT Platform SDK を設定して、メッセージをブロードキャストします。

  • 検証のための ID 情報を指定します。
     String regionId = "<yourRegionID>";
     String accessKey = "<yourAccessKey>";
     String accessSecret = "<yourAccessSecret>";
     final String productKey = "<yourProductKey>";
  • IoT Platform の PubBroadcast 操作を呼び出して、メッセージをブロードキャストします。
    // クライアントのパラメーターを設定します。
    DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKey, accessSecret);
    IAcsClient client = new DefaultAcsClient(profile);
    PubBroadcastRequest request = new PubBroadcastRequest();
    // プロダクトの productKey パラメーターを設定します。
    request.setProductKey(productKey);
    // MessageContent パラメーターを設定します。メッセージコンテンツは Base64 でエンコードする必要があります。そうしないと、メッセージコンテンツは文字化けして表示されます。
    request.setMessageContent(Base64.encode("{\"pwd\":\"2892nd6Y\"}"));
    // インスタンスの ID を指定します。
    request.setIotInstanceId("iot-cn-***");
  • メッセージをブロードキャストします。
    try {
        PubBroadcastResponse response = client.getAcsResponse(request);
    System.out.println("broadcast pub success: broadcastId =" + response.getMessageId());
    } catch (Exception e) {
        System.out.println(e);
    }

操作を確認する

デバイスで Link SDK を設定して、デバイスを IoT Platform に接続します。次に、IoT Platform SDK を設定して PubBroadcast 操作を呼び出し、デバイスにメッセージをブロードキャストします。

IoT Platform SDK を使用して、次のメッセージをデバイスに送信します。"{\"pwd\":\"2892nd6Y\"}"

デバイスのオンプレミスログに次のメッセージが表示されます。{\"pwd\":\"2892nd6Y\"}

ドアロック 1:

Door Lock 1

ドアロック 2:

Door Lock 2

ドアロック 3:

Door Lock 3

付録: サンプルコード

IoT Platform SDK とデバイス SDK の次のサンプルコードを表示できます。

  • PubBroadcastDemo。このサンプルコードは、すべてのオンラインデバイスにメッセージをブロードキャストするために使用されます。
  • BroadcastDemo。このサンプルコードは、指定された Topic をサブスクライブしているすべてのデバイスにメッセージをブロードキャストするために使用されます。