一、前言
最近onenet也是彻底停止了多协议接入的新添产品和设备
也是想折腾一下新版onenet的接入,在搞这个东西的时候还是遇到一些问题,这个物模型设置属性貌似需要设备在线所以想试一下用http接入。
也希望可以帮助大家
新版的http接入开发文档:OneNET - 中国移动物联网开放平台 (10086.cn)
自己跟着api应该可以学到很多东西
这里截取了官方开发文档的一部分
二、url分析:
可以看到 属性上报地址是 adress+url 其实也是对应了代码的
url = f"https://open.iot.10086.cn/fuse/http/device/thing/property/post?topic={topic}&protocol={protocol}"
三、请求头:
那么请求头headers:也是官方文档提到的重点:
包括两部分:Content-Type和token
Content-Type:application/json
那么还有token
token需要官方工具:token1.0
token工具的参数:
res:products/产品ID/devices/设备名字
et:时间戳,比现在的时间戳大就行,获取地址:时间戳(Unix timestamp)转换工具 - 在线工具 (tool.lu)
key:设备的密钥(不是产品的啊)
四、设备属性信息body
讲完了http的url,请求头,接下来就是body
官方开发文档中的这个就是OneJson格式:
body = {
"id": "123",
"version": "1.0",
"params": {
"temp": {"value": 27},
"RH": {"value": 84}
}
}
也是对应了代码的body 我在产品里添加的RH和temp标识符,可以看一下
五、python代码:用代码之前请关掉你的魔法工具
import requests
import json
# 直连设备属性上报
def report_device_property():
# 设备信息
product_id = "产品id"
device_name = "设备名字"
# 构造topic和protocol参数
topic = f"$sys/{product_id}/{device_name}/thing/property/post"
protocol = "http"
# 构造完整的URL
url = f"https://open.iot.10086.cn/fuse/http/device/thing/property/post?topic={topic}&protocol={protocol}"
# 请求头部信息
headers = {
"Content-Type": "application/json",
"token": "你的token"
}
# 设备属性信息
body = {
"id": "123",
"version": "1.0",
"params": {
"temp": {"value": 27},
"RH": {"value": 84}
}
}
# 发送POST请求
response = requests.post(url, headers=headers, json=body)
print("Response:", response.json())
# 测试直连设备属性上报
report_device_property()