Une fois qu'un appareil a transmis des données à la Plateforme IoT, vous pouvez lui envoyer une commande afin de tester la messagerie descendante. Cette rubrique explique comment appeler l'opération Pub pour envoyer une commande depuis une application cloud vers un thermostat.
Prérequis
Le thermostat est connecté à la Plateforme IoT. Pour plus d'informations, consultez Connecter l'appareil à la Plateforme IoT et soumettre des données.
Préparer un environnement de développement
Dans cet exemple, nous développons un programme exemple qui appelle une opération API cloud pour envoyer des commandes à un appareil. Le projet amqp-demo réside sur le même serveur professionnel qu'un client AMQP (Advanced Message Queuing Protocol). Pour plus d'informations sur la configuration de l'environnement, consultez Préparer un environnement de développement.
Procédure
Cet exemple utilise un topic personnalisé pour envoyer la commande. Vous pouvez également utiliser un topic spécifique au langage TSL (Thing Specification Language) pour envoyer des données TSL. Pour plus d'informations, consultez Qu'est-ce qu'un modèle TSL ?
-
Ajoutez les dépendances suivantes au fichier
amqp-demo/pom.xmlafin d'importer les SDK cloud :-
Dépendance Maven utilisée pour importer le SDK IoT Platform pour Java :
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-iot --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-iot</artifactId> <version>7.41.0</version> </dependency> -
Dépendance Maven utilisée pour importer le SDK Alibaba Cloud pour Java.
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.6.3</version> </dependency>
-
-
Créez un fichier de classe nommé
PubDemo.javadans le répertoiresrc/main/java/com.aliyun.iotx.demoet copiez-y l'exemple de code suivant.import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import com.aliyuncs.iot.model.v20180120.*; public class PubDemo { public static void main(String[] args) throws Exception { DefaultProfile profile = DefaultProfile.getProfile("${RegionId}", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); IAcsClient client = new DefaultAcsClient(profile); PubRequest request = new PubRequest(); request.setIotInstanceId("iot-cn-******"); request.setProductKey("a2******"); request.setTopicFullName("/a2******/Device1/user/get"); request.setMessageContent("eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0="); try { PubResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } }Dans des scénarios réels, vous devez adapter certains paramètres du code exemple ci-dessus. Le tableau suivant décrit ces paramètres :
Paramètre
Exemple
Description
RegionId
ap-northeast-1
Remplacez la variable
${RegionId}dans le fichierDefaultProfile.getProfilepar l'ID de la région où vous avez activé la Plateforme IoT. Pour plus d'informations sur les ID de région Alibaba Cloud, consultez Régions prises en charge.TopicFullName
/a2/Device1/user/get
Le topic personnalisé vers lequel vous souhaitez publier le message.
Dans cet exemple, le topic personnalisé
/${productKey}/${deviceName}/user/getest utilisé.Remplacez
${productKey}par la valeur ProductKey du thermostat et ${deviceName}par Device1.Pour plus d'informations, consultez Utiliser des topics personnalisés pour la communication.
ProductKey
a2
La valeur ProductKey du produit auquel appartient le thermostat.
IotInstanceId
iot-cn-
L'ID de l'instance IoT_Test_Environment.
Vous pouvez consulter l'ID de l'instance dans l'onglet Overview de la console IoT Platform.
MessageContent
eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0=
Le corps du message que vous souhaitez envoyer. Il est généré en convertissant le message original en données binaires, puis en appliquant un encodage Base64. Dans cet exemple, la valeur du paramètre MessageContent correspond au contenu du message
“washingMode: 2, washingTime: 30”encodé. -
Si les informations suivantes s'affichent après l'exécution du fichier
PubMessage.java, le message a bien été envoyé à l'appareil.{"requestId":"6EF6****-****-5***-***7-D2********48","success":true,"messageId":"170440***********"} -
Accédez à la page Instance Details de l'instance correspondante dans la console IoT Platform. Dans le volet de navigation de gauche, choisissez > Cloud run log. Dans l'onglet Cloud run log, consultez le journal lié à l'appel d'API de l'appareil.

Vous pouvez également consulter la valeur du paramètre MessageContent directement sur l'appareil.
[1695199345.900][LK-0309] pub: /a2******/Device1/user/get [LK-030A] < 77 61 73 68 69 6E 67 4D 6F 64 65 3A 20 32 2C 20 | washingMode: 2, [LK-030A] < 77 61 73 68 69 6E 67 54 69 6D 65 3A 20 33 30 | washingTime: 30