IoT Platform はブロードキャスト通信をサポートしています。プロダクト内のすべてのデバイスにメッセージをブロードキャストできます。デバイスは、メッセージを受信するためにブロードキャスト Topic をサブスクライブする必要はありません。指定された Topic をサブスクライブしているすべてのデバイスにメッセージをブロードキャストすることもできます。ビジネスサーバーによってブロードキャストされたメッセージを受信するには、デバイスがオンラインである必要があります。このトピックでは、すべてのオンラインデバイスにメッセージをブロードキャストするようにブロードキャスト通信機能を設定する方法について説明します。
背景情報
- プロダクト内のすべてのオンラインデバイスにメッセージをブロードキャストする
ビジネスサーバーは PubBroadcast 操作を呼び出し、ProductKey パラメーターと MessageContent パラメーターを設定します。その後、すべてのオンラインデバイスは、次のブロードキャスト Topic からメッセージを受信します。
/sys/${productKey}/${deviceName}/broadcast/request/${MessageId}。ブロードキャスト Topic のメッセージ ID は、IoT Platform によって生成されます。メッセージが送信されると、メッセージ ID は PubBroadcast 操作を呼び出したビジネスサーバーに返されます。
たとえば、製造元には IoT Platform に接続されている複数のスマートドアロックがあるとします。製造元は、ビジネスサーバーを使用して、すべてのオンラインデバイスにパスワードを無効にするコマンドを送信します。

- 指定された Topic をサブスクライブしているすべてのデバイスにメッセージをブロードキャストする
デバイスは同じブロードキャスト Topic をサブスクライブします。ビジネスサーバーは PubBroadcast 操作を呼び出し、ProductKey、MessageContent、および 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 です。
開発環境を準備する
この例では、デバイスと IoT Platform は Java 用 SDK を使用します。したがって、Java 開発環境を準備する必要があります。Java 公式 Web サイト から Java をダウンロードし、Java 開発環境をデプロイできます。
Maven プロジェクトに依存関係を追加する
Maven でプロジェクトを作成します。Maven プロジェクトの pom.xml ファイルに次の依存関係を追加します。
<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>プロダクトとデバイスを作成する
- IoT Platform コンソール にログオンします。
[概要] ページで、[すべての環境] をクリックします。[すべての環境] タブで、管理するインスタンスを見つけ、インスタンス ID またはインスタンス名をクリックします。
- 左側のナビゲーションウィンドウで、 を選択します。
- [プロダクトの作成] をクリックして、スマートドアロックプロダクトを作成します。詳細については、「プロダクトを作成する」をご参照ください。
- 左側のナビゲーションウィンドウで、 を選択します。作成されたプロダクトに 3 つのスマートドアロックデバイスを作成できます。詳細については、「一度に複数のデバイスを作成する」をご参照ください。
デバイス SDK を設定する
- デバイスを IoT Platform に接続します。
- デバイス証明書に関する情報を指定します。
final String productKey = "<yourProductKey>"; final String deviceName = "<yourDeviceName>"; final String deviceSecret = "<yourDeviceSecret>"; final String region = "<yourRegionID>";デバイス証明書に関する情報は、productKey、deviceName、deviceSecret の各パラメーターによって指定されます。情報を表示するには、次の手順を実行します。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:

ドアロック 2:

ドアロック 3:

付録: サンプルコード
IoT Platform SDK とデバイス SDK の次のサンプルコードを表示できます。
- PubBroadcastDemo。このサンプルコードは、すべてのオンラインデバイスにメッセージをブロードキャストするために使用されます。
- BroadcastDemo。このサンプルコードは、指定された Topic をサブスクライブしているすべてのデバイスにメッセージをブロードキャストするために使用されます。