Todos os produtos
Search
Central de documentação

IoT Platform:Comunicação broadcast

Última atualização: Jun 26, 2026

O IoT Platform suporta comunicação broadcast, que permite enviar uma mensagem para todos os dispositivos de um produto específico ou para todos os dispositivos inscritos em um tópico determinado. Apenas os dispositivos online recebem as mensagens broadcast enviadas pelo servidor de negócios. Este tópico apresenta um exemplo de como transmitir uma mensagem para todos os dispositivos online.

Informações básicas

  • Transmissão de mensagem para todos os dispositivos online de um produto

    O servidor de negócios chama a operação da API PubBroadcast e passa o ProductKey do produto de destino e o MessageContent. Todos os dispositivos online do produto recebem o MessageContent no tópico de broadcast /sys/${productKey}/${deviceName}/broadcast/request/${MessageId}.

    O MessageId presente no tópico de broadcast é um ID gerado pelo IoT Platform. Após o envio bem-sucedido da mensagem, o IoT Platform retorna esse ID ao servidor de negócios como parte da resposta da chamada PubBroadcast.

    Por exemplo, um fabricante com várias fechaduras inteligentes conectadas ao IoT Platform pode usar um servidor de negócios para enviar um único comando a todas as fechaduras online e invalidar uma senha específica.

    广播通信

  • Transmissão de mensagem para todos os dispositivos inscritos em um tópico específico

    Os dispositivos se inscrevem no mesmo tópico de broadcast. O servidor de negócios chama a operação da API PubBroadcast e passa o ProductKey, o MessageContent e o nome completo do tópico de broadcast. O nome do tópico deve seguir o formato /broadcast/${productKey}/custom-field. Todos os dispositivos online inscritos nesse tópico recebem o MessageContent.

    Importante
    • Os tópicos de broadcast são definidos no código do dispositivo durante o desenvolvimento. Não é necessário criá-los no console do IoT Platform.

    • Um único tópico de broadcast aceita no máximo 1.000 dispositivos inscritos. Se houver mais dispositivos, segmente-os em grupos. Por exemplo, para transmitir para 5.000 dispositivos, divida-os em cinco grupos de 1.000. Em seguida, chame a operação PubBroadcast cinco vezes e defina o campo personalizado como group1, group2, group3, group4 e group5, respectivamente. Cada grupo de dispositivos deve se inscrever em seu tópico correspondente.

    Para obter mais informações sobre a operação da API de broadcast, consulte PubBroadcast.

Limites

  • As mensagens de broadcast são enviadas apenas para dispositivos online de um produto.

  • Na transmissão de mensagens para dispositivos online específicos por inscrição em tópico, a frequência máxima de chamadas da API de broadcast é de uma vez por segundo.

  • Na transmissão de mensagens para todos os dispositivos online de um produto, não é necessária a inscrição em um tópico de broadcast. A frequência máxima de chamadas da API de broadcast é de uma vez por minuto.

  • O tamanho máximo do corpo de uma mensagem de broadcast é de 64 KB.

Importante

As mensagens de broadcast não estão sujeitas ao limite de Transações Por Segundo (TPS) de encaminhamento de dados da sua

instância

. Por exemplo, se sua instância tiver um limite de TPS de 100 para encaminhamento de dados e você possuir 500 dispositivos online, uma chamada de broadcast entregará a mensagem para todos os 500 dispositivos, e não apenas para 100.

Preparar o ambiente de desenvolvimento

Este exemplo utiliza SDKs Java tanto para o dispositivo quanto para o servidor. Prepare um ambiente de desenvolvimento Java. Baixe e instale o Java Development Kit (JDK) no site oficial do Java.

Adicionar dependências do Maven

Crie um projeto e adicione as seguintes dependências do Maven ao arquivo pom.xml.

Nota

As versões do IoT Java SDK no código abaixo servem apenas como referência. Para obter as informações mais recentes sobre dependências, acesse a página do

OpenAPI Explorer

.

<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>

Criar um produto e dispositivos

  1. Faça login no console do IoT Platform.

  2. Na página Overview, localize a instância que deseja gerenciar e clique em ID ou no nome da instância.

  3. No painel de navegação à esquerda, escolha Device Management > Products.

  4. Clique em Create Product para criar um produto Smart Lock. Para mais detalhes, consulte Criar um produto.

  5. No painel de navegação à esquerda, escolha Device Management > Devices e crie três dispositivos para o produto Smart Lock. Para mais detalhes, consulte Criar vários dispositivos de uma só vez.

Configurar o SDK do dispositivo

  • Conecte seus dispositivos ao IoT Platform.

    • Configure as credenciais do dispositivo.

      final String productKey = "<yourProductKey>";
      final String deviceName = "<yourDeviceName>";
      final String deviceSecret = "<yourDeviceSecret>";
      final String region = "<yourRegionID>";

      Os parâmetros productKey, deviceName e deviceSecret correspondem às credenciais do dispositivo. Para obtê-los, acesse o console do IoT Platform, navegue até sua instância e escolha Device Management > Devices. Localize o dispositivo e clique em View para acessar a página Device Details.

      O parâmetro region especifica a região do dispositivo. Para saber como definir uma region, consulte Regiões e zonas.

    • Defina os parâmetros de inicialização, incluindo configurações MQTT, informações do dispositivo e status inicial do dispositivo.

      LinkKitInitParams params = new LinkKitInitParams();
      // LinkKit uses MQTT as its underlying protocol. Configure the MQTT settings.
      IoTMqttClientConfig config = new IoTMqttClientConfig();
      config.productKey = productKey;
      config.deviceName = deviceName;
      config.deviceSecret = deviceSecret;
      config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";
      // Specify the device information.
      DeviceInfo deviceInfo = new DeviceInfo();
      deviceInfo.productKey = productKey;
      deviceInfo.deviceName = deviceName;
      deviceInfo.deviceSecret = deviceSecret;
      // Specify the initial status of the device.
      Map<String, ValueWrapper> propertyValues = new HashMap<String, ValueWrapper>();
      params.mqttClientConfig = config;
      params.deviceInfo = deviceInfo;
      params.propertyValues = propertyValues;

      O channelHost é o endpoint MQTT. Para obter endpoints de instâncias públicas e Enterprise Edition, consulte Visualizar e configurar endpoints de instância.

    • Inicialize a conexão.

      // Establish the connection and set a listener for the connection result.
      LinkKit.getInstance().init(params, new ILinkKitConnectListener() {
           @Override
           public void onError(AError aError) {
               System.out.println("Init error:" + aError);
           }
           // The callback that is invoked after the initialization is complete.
           @Override
           public void onInitDone(InitResult initResult) {
               System.out.println("Init done:" + initResult);
           }
       });
  • Na função de callback onInitDone, utilize o prefixo do tópico para identificar tópicos de broadcast. O prefixo de um tópico de broadcast é /sys/${productKey}/${deviceName}/broadcast/request/.

    public void onInitDone(InitResult initResult) {
                    // Set the listener to listen for downstream messages.
                    IConnectNotifyListener notifyListener = new IConnectNotifyListener() {
                        // Define the callback that is invoked to process downstream messages.
                        @Override
                        public void onNotify(String connectId, String topic, AMessage aMessage) {
                            // Filter broadcast messages.
                            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);
                }

Configurar o SDK do servidor

Configure o SDK Java do lado do servidor para enviar mensagens de broadcast.

  • Configure as informações de autenticação.

     String regionId = "<yourRegionID>";
     String accessKey = "<yourAccessKey>";
     String accessSecret = "<yourAccessSecret>";
     final String productKey = "<yourProductKey>";
  • Configure o servidor para chamar a operação da API PubBroadcast e transmitir uma mensagem.

    // Set client parameters.
    DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKey, accessSecret);
    IAcsClient client = new DefaultAcsClient(profile);
    PubBroadcastRequest request = new PubBroadcastRequest();
    // Set the ProductKey for the broadcast message.
    request.setProductKey(productKey);
    // Set the message content. The content must be Base64-encoded to prevent garbled characters.
    request.setMessageContent(Base64.encode("{\"pwd\":\"2892nd6Y\"}"));
    // Set the instance ID.
    request.setIotInstanceId("iot-cn-***");
  • Envie a mensagem de broadcast a partir do servidor.

    try {
        PubBroadcastResponse response = client.getAcsResponse(request);
    System.out.println("broadcast pub success: broadcastId =" + response.getMessageId());
    } catch (Exception e) {
        System.out.println(e);
    }

Verificar os resultados

Execute o código do SDK do dispositivo em cada dispositivo para conectá-los. Em seguida, execute o código do SDK do servidor para chamar a operação da API PubBroadcast e transmitir uma mensagem para os dispositivos.

O conteúdo da mensagem transmitida pelo SDK do servidor é "{\"pwd\":\"2892nd6Y\"}".

Os logs locais em cada dispositivo mostram a mensagem de broadcast recebida: {\"pwd\":\"2892nd6Y\"}.

Smart Lock 1:

2020-03-05  03:17:37.091 – null[MqttDefaulCallback.java] – messageArrived(74):MqttDefaulCallback:messageArrived,topi
  [/sys/a1nTNJt9p39/MjxxxDR/broadcast/request/123546464900384256], msg = [{"pwd":"2892nd6Y"}],
2020-03-05  03:17:37.091 – null[PersistentEventDispatcher.java] – broadcastMessage(150):com.aliyun.alink.linksdk.cha
  what=3
  received broadcast message from topic=/sys/a1nTNJt9p39/MjxxxDR/broadcast/request/123546464900384256,
payload={"pwd":"2892nd6Y"}

Smart Lock 2:

2020-03-05 03:17:37.111 - null[MqttDefaulCallback.java] - messageArrived(74):MqttDefaulCallback:messageArrived,topic
  [/sys/a1nTNJt9p39/W96JAyE7UBpxHkiFy2CG/broadcast/request/1235464464900384256] , msg = [{"pwd":"2892nd6Y"}],
2020-03-05 03:17:37.111 - null[PersistentEventDispatcher.java] - broadcastMessage(150):com.aliyun.alink.linksdk.chan
  what=3
  received broadcast message from topic=/sys/a1nTNJt9p39/W9xxx2CG/broadcast/request/1235464464900384256,
  payload={"pwd":"2892nd6Y"}

Smart Lock 3:

2020-03-05 03:17:37.167 - null[MqttDefaulCallback.java] - messageArrived(74):MqttDefaultCallback:messageArrived,top
  [/sys/a1nTNJt9p39/mBGagyPszmfRbKVzyqvZ/broadcast/request/1235464464900384256] , msg = [{"pwd":"2892nd6Y"}],
2020-03-05 03:17:37.167 - null[PersistentEventDispatcher.java] - broadcastMessage(150):com.aliyun.alink.linksdk.ch
  what=3
  received broadcast message from topic=/sys/a1nTNJt9p39/mlxxxxxxxxxxxvZ/broadcast/request/1235464464900384256,
payload={"pwd":"2892nd6Y"}

Apêndice: Demonstrações

Baixe o código de exemplo completo, que inclui exemplos para os SDKs do servidor e do dispositivo.