tencent cloud

物联网通信

动态与公告
产品动态
产品简介
产品概述
产品功能
产品优势
应用场景
产品限制
基本概念
快速入门
快速开始
场景一:设备互通
场景二:设备状态上报与状态设置
MQTT.fx接入指南
控制台使用手册
产品管理
规则引擎
子账号访问IoT
固件升级
资源管理
证书管理
开发者手册
功能组件
签名方法
设备身份认证
设备接入协议
网关子设备
消息通信
设备影子
设备固件升级
设备远程配置
资源管理
设备日志上报
NTP服务
设备端接入手册
设备接入概述
基于C SDK接入
基于 Android SDK 接入
基于 Java SDK 接入
基于 Python SDK 接入
API 文档
History
Introduction
API Category
Making API Requests
Device Shadow APIs
Device APIs
CA Certificate APIs
Product APIs
Data Types
Error Codes
常见问题
一般性问题
设备接入和上报问题
规则引擎问题
控制台相关问题
IoT Hub 政策
隐私协议
数据处理和安全协议
词汇表

设备端操作步骤

PDF
聚焦模式
字号
最后更新时间: 2024-12-27 09:54:58

下载 SDK

SDK 下载方式请参考 SDK 下载

编译运行 C SDK 示例

C SDK 示例程序
samples/scenarized/door_mqtt_sample.c 是门设备基于 MQTT 协议相关逻辑代码。
samples/scenarized/aircond_shadow_sample.c 是空调设备基于 MQTT 协议相关逻辑代码。
密钥认证设备为例,在 Linux 环境编译运行设备互通的示例程序。

1. 编译 SDK

修改 CMakeLists.txt,确保以下选项存在:
set(BUILD_TYPE "release")
set(COMPILE_TOOLS "gcc")
set(PLATFORM "linux")
set(FEATURE_MQTT_COMM_ENABLED ON)
set(FEATURE_MQTT_DEVICE_SHADOW ON)
set(FEATURE_AUTH_MODE "KEY")
set(FEATURE_AUTH_WITH_NOTLS OFF)
set(FEATURE_DEBUG_DEV_INFO_USED OFF)
执行以下脚本编译:
./cmake_build.sh
示例输出 aircond_shadow_sample 和 door_mqtt_sample 位于output/release/bin文件夹中。

2. 填写设备信息

将上面创建的 airConditioner1 设备的设备信息,填写到一个 JSON 文件 aircond_device_info.json 中。
"auth_mode":"KEY",
"productId":"GYT9V6D4AF",
"deviceName":"airConditioner1",
"key_deviceinfo":{
"deviceSecret":"vXeds12qazsGsMyf5SMfs6OA6y"
}
再将 door1 设备的设备信息,填写到另一个 JSON 文件 door_device_info.json 中。
"auth_mode":"KEY",
"productId":"S3EUVBRJLB",
"deviceName":"door1",
"key_deviceinfo":{
"deviceSecret":"i92E3QMNmxi5hvIxUHjO8gTdg"
}

3. 执行 aircond_shadow_sample 示例程序

在 aircond_shadow_sample 的代码里面,_register_subscribe_topics 实现了对主题 /{productID}/{deviceName}/control 的订阅,并且注册对应的回调处理函数。收到该 topic 消息后,判断消息内容是 “come_home” 或者 “leave_home” 而分别让 airConditioner 开启或者关闭。_simulate_room_temperature 则简单模拟了下室内温度的变化和 airConditioner 的能耗。用户也可以实现其他自定义逻辑。
因为设备互通场景涉及到两个 sample 同时运行,可以先在当前终端 console 运行空调示例,可以看到示例订阅了主题,然后就处于循环等待状态,空调的初始状态是 close 关闭状态:
./output/release/bin/aircond_shadow_sample -c ./device_info.json
INF|2019-09-16 23:25:17|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: GYT9V6D4AF, Device_Name: airConditioner1
INF|2019-09-16 23:25:19|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: Nh9Vc success
DBG|2019-09-16 23:25:19|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=$shadow/operation/result/GYT9V6D4AF/airConditioner1|packet_id=56171
DBG|2019-09-16 23:25:19|shadow_client.c|_shadow_event_handler(63): shadow subscribe success, packet-id=56171
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|event_handler(96): subscribe success, packet-id=56171
INF|2019-09-16 23:25:19|shadow_client.c|IOT_Shadow_Construct(172): Sync device data successfully
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|main(256): Cloud Device Construct Success
DBG|2019-09-16 23:25:19|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=GYT9V6D4AF/airConditioner1/control|packet_id=56172
DBG|2019-09-16 23:25:19|shadow_client.c|_shadow_event_handler(63): shadow subscribe success, packet-id=56172
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|event_handler(96): subscribe success, packet-id=56172
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|main(291): airConditioner state: close
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|main(292): currentTemperature: 32.000000, energyConsumption: 0.000000

4. 执行 door_mqtt_sample 示例程序,模拟回家事件

打开另一个终端 console,运行门的示例,根据程序启动参数"-t airConditioner1 -a come_home",可以看到示例往 /{productID}/{deviceName}/event 主题发送了 JSON 消息 {"action": "come_home", "targetDevice": "airConditioner1"},表示将回家的消息通知目标设备 airConditioner1。
./output/release/bin/door_mqtt_sample -c ./output/release/bin/device_info.json -t airConditioner1 -a come_home
INF|2019-09-16 23:29:11|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: S3EUVBRJLB, Device_Name: door1
INF|2019-09-16 23:29:11|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: d89Wh success
INF|2019-09-16 23:29:11|door_mqtt_sample.c|main(229): Cloud Device Construct Success
DBG|2019-09-16 23:29:11|mqtt_client_publish.c|qcloud_iot_mqtt_publish(329): publish topic seq=46683|topicName=S3EUVBRJLB/door1/event|payload={"action": "come_home", "targetDevice": "airConditioner1"}
INF|2019-09-16 23:29:11|door_mqtt_sample.c|main(246): Wait for publish ack
INF|2019-09-16 23:29:11|door_mqtt_sample.c|event_handler(81): publish success, packet-id=46683

5. 观察空调设备的消息接收,模拟消息响应

观察 aircond_shadow_sample 的打印输出,可以看到已经收到由云端转发的 door1 发送的回家消息,并且将状态state由"close"转为"open",室温currentTemperature(往缺省配置温度调整)与能耗energyConsumption也有相关动态变化。
INF|2019-09-16 23:29:11|aircond_shadow_sample.c|main(291): airConditioner state: close
INF|2019-09-16 23:29:11|aircond_shadow_sample.c|main(292): currentTemperature: 32.000000, energyConsumption: 0.000000
INF|2019-09-16 23:29:12|aircond_shadow_sample.c|on_message_callback(140): Receive Message With topicName:GYT9V6D4AF/airConditioner1/control, payload:{"action":"come_home","targetDevice":"airConditioner1"}
INF|2019-09-16 23:29:12|aircond_shadow_sample.c|main(291): airConditioner state: open
INF|2019-09-16 23:29:12|aircond_shadow_sample.c|main(292): currentTemperature: 31.000000, energyConsumption: 1.000000

配置 Android SDK 示例程序

实现 Android SDK 门示例程序

Door.java 是门设备类,请先填入之前创建产品和设备步骤中得到的 PRODUCT_ID, DEVICE_NAMEDEVICE_CERT_NAMEDEVICE_KEY_NAME,并将设备证书、设备私钥文件放置在 assets 目录中:
/**
* 产品ID
*/
private static final String PRODUCT_ID = "YOUR_PRODUCT_ID";
/**
* 设备名称
*/
protected static final String DEVICE_NAME = "YOUR_DEVICE_NAME";

/**
* 密钥
*/
private static final String SECRET_KEY = "YOUR_DEVICE_PSK";
/**
* 设备证书名
*/
private static final String DEVICE_CERT_NAME = "YOUR_DEVICE_NAME_cert.crt";

/**
* 设备私钥文件名
*/
private static final String DEVICE_KEY_NAME = "YOUR_DEVICE_NAME_private.key";
1. 在 enterRoom() 对 MQTT 连接实例进行判空检查,若为空,则进行初始化操作,并发起连接 connect();若不为空,则判断连接是否有效,有效则发布 event 主题。
2. 作为样例,根据用户执行程序时,指定的 action(come_home 或者 leave_home)和 targetDeviceName(需要中转到的设备名) 参数值,对消息的内容组装和发布。用户可自行组织消息内容和 topic,执行自己的发布消息逻辑。

实现 Android SDK 空调示例程序

Airconditioner.java 是空调设备类,与 实现 Android-SDK 门示例程序 一样,需先填入产品和设备相关信息。
1. 在 Airconditioner 的构造方法中对 MQTT 连接实例进行初始化并发起连接 connect()。
2. MQTT 连接成功后,订阅 control 主题。

运行示例程序

1. 单击 Android Studio Run 的【App】按钮,并安装 Demo。
2. 切换底部 Tab ,进入设备互通 Fragment,观察 Demo 及 logcat 中日志信息,以下为 logcat 中日志信息: airConditioner1 连接 IoT 并订阅主题
com.qcloud.iot I/com.qcloud.iot.mqtt.TXMqttConnection: Start connecting to ssl://connect.iot.qcloud.com:8883
com.qcloud.iot I/com.qcloud.iot.mqtt.TXMqttConnection: onSuccess!
com.qcloud.iot I/IoTEntryActivity: connected to ssl://connect.iot.qcloud.com:8883
com.qcloud.iot I/com.qcloud.iot.mqtt.TXMqttConnection: Starting subscribe topic: ******/airConditioner1/control
com.qcloud.iot I/IoTEntryActivity: onSubscribeCompleted, subscribe success
3. 单击【进门】,连接 IoT 并发布 control 主题,对应 message 为:
"{\\"action\\": \\"come_home\\", \\"targetDevice\\": \\"airConditioner1\\"}"
4. 观察 Demo 及 logcat 中日志信息,以下为 logcat 日志信息:
door1 连接 IoT
com.qcloud.iot I/com.qcloud.iot.mqtt.TXMqttConnection: Start connecting to ssl://connect.iot.qcloud.com:8883
com.qcloud.iot I/com.qcloud.iot.mqtt.TXMqttConnection: onSuccess!
com.qcloud.iot I/IoTEntryActivity: connected to ssl://connect.iot.qcloud.com:8883
door1 发布主题(come_home)
com.qcloud.iot I/com.qcloud.iot.mqtt.TXMqttConnection: Starting publish topic: ******/door1/event Message: {"action": "come_home", "targetDevice": "airConditioner1"}
airConditioner1 接收到经规则引擎转发过来的主题
com.qcloud.iot I/com.qcloud.iot.mqtt.TXMqttConnection: Received topic: ******/airConditioner1/control, message: {"action":"come_home","targetDevice":"airConditioner1"}
com.qcloud.iot D/IoTEntryActivity: receive command: open airconditioner, count: 1
5. 单击【出门】,发布 control 主题,对应 message 为:
"{\\"action\\": \\"leave_home\\", \\"targetDevice\\": \\"airConditioner1\\"}"
6. 观察 Demo 及 logcat 中日志信息,以下为 logcat 日志信息:
door1 发布主题(leave_home)
com.qcloud.iot I/com.qcloud.iot.mqtt.TXMqttConnection: Starting publish topic: ******/door1/event Message: {"action": "leave_home", "targetDevice": "airConditioner1"}
airConditioner1 接收到经规则引擎转发过来的主题
com.qcloud.iot I/com.qcloud.iot.mqtt.TXMqttConnection: Received topic: ******/airConditioner1/control, message: {"action":"leave_home","targetDevice":"airConditioner1"}
com.qcloud.iot D/IoTEntryActivity: receive command: close airconditioner, count: 2

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈