云端下发指令
当设备成功连接平台后,您可以尝试从云端下发指令到设备端。
本文主要介绍使用物联网平台提供的RPC功能进行各种指令的下发。
设备接入平台
请参考以下两个章节:
创建好的设备如下图所示:
下载API测试软件
可以使用 Postman(点击可以下载) 或者 Talend API Tester(点击可以下载) 或者任意支持API测试的工具。
这里以 Talend API Tester 为例,其他软件同理。
下发指令
下发指令之前我们要保证设备已经通过mqtt连接上了平台。现在使用python代码模拟一个设备,代码如下:
from paho.mqtt import client
from paho.mqtt.client import MQTTMessage
def things_on_connect(client, userdata, flags, rc):
"""
当连接things平台成功之后订阅云端下发指令的主题
:param client: the client instance for this callback
:param userdata: the private user data as set in Client() or userdata_set()
:param flags: response flags sent by the broker
:param rc: the connection result
:return: None
"""
if rc == 0:
client.subscribe('v1/devices/me/rpc/request/' + '+', qos=1)
print("Subscription succeeded !")
else:
print("Subscription failed !")
def things_on_message(client, userdata, message: MQTTMessage):
print(f"things_message : {message.payload}")
def on_disconnect(client, userdata, rc):
print("on_disconnect")
if __name__ == '__main__':
host = "things.xiaobodata.com"
port = 1883
token = "ZjFaOrnBq0SBcFUKTRhl"
# 创建mqtt客户端
things_mqtt = client.Client(clean_session=True)
# 设置用户名和密码
things_mqtt.username_pw_set(token)
# 配置回调函数
things_mqtt.on_connect = things_on_connect
things_mqtt.on_message = things_on_message
things_mqtt.on_disconnect = on_disconnect
# 连接服务器开启监听
things_mqtt.connect(host, port)
things_mqtt.loop_forever()
注意:代码里的token
就是上面设备接入平台的 访问令牌
。一定不能使用其他。
运行代码,当Terminal输出订阅成功则表示可以进行下一步操作
Subscription succeeded !
我们打开 Talend API Tester ,新建一个Requests,内容如下
关键参数如下:
关键字 | 内容 |
---|---|
请求方法 | POST |
URL | http://things.xiaobodata.com/api/plugins/rpc/oneway/XXXXXXX |
HEADERS | Content-Type: application/json |
HEADERS | X-Authorization: Bearer XXXXXXXX |
备注:
- URL 中的
XXXXXXX
代表设备ID,请根据实际情况填写,设备ID在设备详情页面 - HEADERS 共有两个,其中
Content-Type: application/json
为固定写法,X-Authorization
后的值需要在平台进行获取。获取方法请翻到最后或 点击这里
点击Send
按钮发送请求,我们将在Python终端收到如下消息:
错误处理
报错 | 解决方案 |
---|---|
连接平台报错 | 确认 token 以及平台的配置 |
下发指令报错 | 检查 Body 格式是否为 JSON,确认设备平台已经在线 |
认证过期 | 重新获取 X-Authorization |