概述
应用开发API 入口: https://open.iot.10086.cn/doc/iot_platform/book/application-develop/application-process.html 本篇文章的主题 此项内容会单独写一篇文章 项目中,我们可以创建分组,这样是的设备被分组管理,方便区分业务权限, 非常推荐使用 分完组后可以添加设备 我们看到有分组ID和分组key 想到第一篇中的设备鉴权描述, 确实是可以以项目/分组进行鉴权的 这样我们可以做到 客户1用自己的鉴权管理自己的设备的效果. 根据文档, 我修改了这个程序,实测可用 https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryStatistics.html 这是一个GET请求 参数是项目ID 返回结果: https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryProductList.html 这是一个GET请求 参数是项目ID 返回如下, 说明我们这个项目里只有1类产品 https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceList.html 参数可限定查询的范围, 根据自己的需求选择 结果: 加入分组筛选 结果 https://open.iot.10086.cn/doc/iot_platform/book/api/application/addDevice.html 这个API是一个批量添加设备的API 先写好POST 再编辑body 返回: 如果添加的设备有对有错会怎么样? 虽然只报了两个错误, 但其实都没添加进去 https://open.iot.10086.cn/doc/iot_platform/book/api/application/removeDevice.html 和上面的用法完全一样 https://open.iot.10086.cn/doc/iot_platform/book/api/application/createGroup.html https://open.iot.10086.cn/doc/iot_platform/book/api/application/deleteGroup.html 和上面一样 能够修改标签和描述 结果: 一个简单的get请求 https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryGroupList.html 返回结果: 我的分组清单 和上面用法一样 https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceDetail.html 返回结果: (结果和设备管理API里的结果一样) https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceStatus.html 返回结果: 返回结果中的状态码解释如下: https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceStatusHistory.html 设备状态: https://open.iot.10086.cn/doc/iot_platform/book/api/application/setDeviceProperty.html 这个API调用起来很方便, 但是他是一个同步API, 所以设备侧必须给它正确的响应 如果你的设备没有订阅$sys/{pid}/{device-name}/thing/property/set主题, 这里我们看到消息有一个id , 我们的设备必须告诉服务器,这个id的属性设置命令已经收到下发 故而我们的设备应该订阅: $sys/{pid}/{device-name}/thing/property/set_reply主题, 并按照以下格式回复(id的值也要打引号) 像这样: 具体程序可以参考文章: 收到结果: https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDevicePropertyDetail.html 这是一个同步下发命令的消息, 需要设备回复 如果设备订阅了$sys/{pid}/{device-name}/thing/property/get主题, 可以收到: 这里我们看到消息有一个id , 我们的设备回复时必须告诉服务器,这个id的数据请求命令已经收到下发,并做如下格式回应: 具体程序可以参考文章: 收到结果: https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceLog.html 回复内容如下: https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceProperty.html 结果 https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDevicePropertyHistory.html 注意:参数里有个sort 排序参数 1-正序 2-倒序 返回结果示例: https://open.iot.10086.cn/doc/iot_platform/book/api/application/setDeviceDesiredProperty.htmlhttps://openapi.heclouds.com/common?action=具体接口名称&version=1
第一部分 应用开发流程及项目分组
一. 应用开发流程
1. 创建项目
2. 进入项目添加设备
3. 调用API
4. 数据流转
二. 项目分组
1. 分组
2. 分组鉴权的Token计算
import base64
import hmac
import time
from urllib.parse import quote
def token(projectid,groupid,access_key):
version = '2020-05-29'
res1 = 'projectid/%s' % projectid
res2 = '/groupid/%s' % groupid
res = res1+res2
# 用户自定义token过期时间
et = str(int(time.time()) + 3600*24*365)
# 签名方法,支持md5、sha1、sha256
method = 'sha1'
# 对access_key进行decode
key = base64.b64decode(access_key)
# 计算sign
org = et + 'n' + method + 'n' + res + 'n' + version
sign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)
sign = base64.b64encode(sign_b.digest()).decode()
# value 部分进行url编码,method/res/version值较为简单无需编码
sign = quote(sign, safe='')
res = quote(res, safe='')
# token参数拼接
token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)
return token
if __name__ == '__main__':
projectid = 'Sd5MPm'
groupid = 'HkhwSb'
access_key = 'MjE5OWIwYzJmZGU5ZDVmMjY1NTQyNmY4ZjM5M2ZjMjY='
print(token(projectid,groupid,access_key))
while(1):
pass
第二部分 项目相关API
一. 项目概况
二. 项目集成产品列表
三. 项目集成设备列表
{
"data": {
"list": [
{
"created_time": "2020-10-19T03:59:05.365Z",
"device_name": "esp_mqtts_003",
"from": 1,
"last_time": null,
"node_type": 1,
"product_id": "IaiJ9078ZN",
"product_name": "esp_mqtts_test",
"status": 1
},
{
"created_time": "2020-10-19T03:43:14.953Z",
"device_name": "esp_mqtts_002",
"from": 1,
"last_time": null,
"node_type": 1,
"product_id": "IaiJ9078ZN",
"product_name": "esp_mqtts_test",
"status": 1
},
{
"created_time": "2020-10-16T00:27:39.858Z",
"device_name": "esp_mqtts_001",
"from": 1,
"group_id": "HkhwSb",
"group_name": "客户1的设备",
"last_time": "2020-10-19T01:21:03.965Z",
"node_type": 1,
"product_id": "IaiJ9078ZN",
"product_name": "esp_mqtts_test",
"status": 3
}
],
"meta": {
"limit": 10,
"offset": 0,
"total": 3
}
},
"requestId": "f4e04c9f4fcb412cae13c48e6fc64ae7",
"success": true
}
四. 项目添加设备
五. 项目移除设备
第三部分 分组相关API
一. 创建分组
二. 移除分组
三. 编辑分组
这个POST请求里有个tag, 是一个对象, 我们把要修改的标签内容放在这四. 分组详情
五. 分组列表
{
"data": {
"list": [
{
"created_time": "2020-10-20T00:50:51.048Z",
"desc": "这是API添加的描述",
"device_count": 0,
"id": "gdu8N0",
"key": "YTY5MzVmOGYxOWU2OWVkZDE2MDE2MTNlZGE1MjZlMjY=",
"name": "客户2的分组",
"project_id": "Sd5MPm",
"tag": {
"tag1": "客户2修改的分组"
}
},
{
"created_time": "2020-10-19T07:21:27.988Z",
"device_count": 1,
"id": "HkhwSb",
"key": "MjE5OWIwYzJmZGU5ZDVmMjY1NTQyNmY4ZjM5M2ZjMjY=",
"name": "客户1的设备",
"project_id": "Sd5MPm"
}
],
"meta": {
"limit": 10,
"offset": 0,
"total": 2
}
},
"requestId": "d2f4de7823234a7f8e3909de04468370",
"success": true
}
六. 分组添加设备
七. 分组移除设备
第四部分 设备相关API
一. 设备详情
{
"data": {
"active_time": "2020-10-16T01:17:28.774Z",
"created_time": "2020-10-16T00:27:39.858Z",
"desc": "",
"device_name": "esp_mqtts_001",
"ip": "123.135.14.245",
"last_time": "2020-10-19T01:21:03.965Z",
"node_type": 1,
"product_id": "IaiJ9078ZN",
"product_name": "esp_mqtts_test",
"protocol": 2,
"sec_key": "x3NzP/HJi4s75RWFz+cJZUcRi9PZ7yH7VWVtPxeXVbU=",
"status": 3
},
"requestId": "69d049cc2e534c9896cf4a0621273d8a",
"success": true
}
二. 查询设备状态
三. 设备状态历史数据查询
0-离线
1-在线
返回结果:{
"data": {
"list": [
{
"status": 0,
"time": 1603070463965
},
{
"status": 1,
"time": 1603069550700
},
{
"status": 0,
"time": 1602835011872
},
{
"status": 1,
"time": 1602830895892
},
{
"status": 0,
"time": 1602830895771
},
{
"status": 1,
"time": 1602823318899
},
{
"status": 0,
"time": 1602823317748
},
{
"status": 1,
"time": 1602823259833
},
{
"status": 0,
"time": 1602823251848
},
{
"status": 1,
"time": 1602823204386
}
],
"meta": {
"limit": 10,
"offset": 0
}
},
"requestId": "da051a335742444ba198174e774a0de6",
"success": true
}
四. 设备属性设置(重要!!)
调用:
会告诉你 bad request
此时设备端会收到:{
"id": "2",
"code":200,
"msg":"success"
}
五. 获取设备属性
{
"id":"123",
"code":200,
"msg":"xxx",
"data":{
"temperature":39.5,
"humidity":20
}
}
六. 设备操作日志查询
{
"data": {
"list": [
{
"request_body": [
"temp",
"humi"
],
"request_time": "1603249729056",
"response_body": {
"code": 200,
"data": {
"humi": 50.16,
"temp": 21.17
},
"id": "56",
"msg": "success"
},
"response_time": "1603249731615",
"type": 1
},
{
"request_body": [
"temp",
"humi"
],
"request_time": "1603249711997",
"response_body": {
"code": 200,
"data": {
"humi": 50.32,
"temp": 21.16
},
"id": "55",
"msg": "success"
},
"response_time": "1603249712280",
"type": 1
},
{
"request_body": [
"temp",
"humi"
],
"request_time": "1603249176496",
"response_body": {
"code": 200,
"data": {
"humi": 50.69,
"temp": 21.09
},
"id": "54",
"msg": "success"
},
"response_time": "1603249176827",
"type": 1
},
{
"request_body": [
"temp",
"humi"
],
"request_time": "1603249105629",
"response_body": {
"code": 2006,
"id": "53",
"msg": "acc timeout"
},
"response_time": "1603249111641",
"type": 1
},
{
"request_body": [
"temp",
"humi"
],
"request_time": "1603249082004",
"response_body": {
"code": 2006,
"id": "52",
"msg": "acc timeout"
},
"response_time": "1603249088031",
"type": 1
},
{
"request_body": [
"temp"
],
"request_time": "1603249050023",
"response_body": {
"code": 2006,
"id": "51",
"msg": "acc timeout"
},
"response_time": "1603249056035",
"type": 1
},
{
"request_body": [
"temp"
],
"request_time": "1603246830306",
"response_body": {
"code": 2006,
"id": "50",
"msg": "acc timeout"
},
"response_time": "1603246836321",
"type": 1
},
{
"request_body": {
"switch": true
},
"request_time": "1603246815178",
"response_body": {
"code": 200,
"id": "49",
"msg": "success"
},
"response_time": "1603246816288",
"type": 0
},
{
"request_body": {
"switch": true
},
"request_time": "1603246684325",
"response_body": {
"code": 200,
"id": "48",
"msg": "success"
},
"response_time": "1603246684422",
"type": 0
},
{
"request_body": {
"switch": true
},
"request_time": "1603246501128",
"response_body": {
"code": 2006,
"id": "47",
"msg": "acc timeout"
},
"response_time": "1603246507163",
"type": 0
}
],
"meta": {
"limit": 10,
"offset": 0
}
},
"requestId": "1c52994f6572464f9ab5d91be66de35b",
"success": true
}
七. 设备属性最新数据查询
{
"data": {
"list": [
{
"access_mode": "只读",
"data_type": "array",
"description": "",
"expect_value": "",
"identifier": "$OneNET_LBS",
"name": "基站定位",
"time": "0",
"value": ""
},
{
"access_mode": "只读",
"data_type": "float",
"description": "",
"expect_value": "",
"identifier": "humi",
"name": "湿度",
"time": "1603251069037",
"value": "48.77"
},
{
"access_mode": "读写",
"data_type": "bool",
"description": "",
"expect_value": "false",
"identifier": "switch",
"name": "switch",
"time": "1603251069037",
"value": ""
},
{
"access_mode": "只读",
"data_type": "float",
"description": "",
"expect_value": "",
"identifier": "temp",
"name": "温度",
"time": "1603251069037",
"value": "21.36"
}
]
},
"requestId": "d35f128bd4e746d4b21227d4de8722e2",
"success": true
}
八. 设备属性历史数据查询
如果调用这个API查看历史数据, 大概率要用到offset和limit
注意 limit范围是1~100{
"data": {
"list": [
{
"time": "1603070440958",
"value": "19.29"
},
{
"time": "1603070430957",
"value": "19.29"
},
{
"time": "1603070420958",
"value": "19.28"
},
{
"time": "1603070410956",
"value": "19.29"
},
{
"time": "1603070400954",
"value": "19.28"
},
{
"time": "1603070390956",
"value": "19.28"
},
{
"time": "1603070380971",
"value": "19.28"
},
{
"time": "1603070370968",
"value": "19.28"
},
{
"time": "1603070360957",
"value": "19.28"
},
{
"time": "1603070350956",
"value": "19.28"
}
],
"meta": {
"limit": 10,
"offset": 0
}
},
"requestId": "e4e783b2a2e64cfbba76d08044db8917",
"success": true
}
七. 设备属性期望设置
最后
以上就是超级小刺猬为你收集整理的OneNet5.0 新版产品应用开发API调用指南(三) 应用开发API第一部分 应用开发流程及项目分组一. 应用开发流程二. 项目分组第二部分 项目相关API一. 项目概况二. 项目集成产品列表三. 项目集成设备列表四. 项目添加设备五. 项目移除设备第三部分 分组相关API一. 创建分组二. 移除分组三. 编辑分组四. 分组详情五. 分组列表六. 分组添加设备七. 分组移除设备第四部分 设备相关API一. 设备详情二. 查询设备状态三. 设备状态历史数据查询四. 设备属性设置(重要!!)五.的全部内容,希望文章能够帮你解决OneNet5.0 新版产品应用开发API调用指南(三) 应用开发API第一部分 应用开发流程及项目分组一. 应用开发流程二. 项目分组第二部分 项目相关API一. 项目概况二. 项目集成产品列表三. 项目集成设备列表四. 项目添加设备五. 项目移除设备第三部分 分组相关API一. 创建分组二. 移除分组三. 编辑分组四. 分组详情五. 分组列表六. 分组添加设备七. 分组移除设备第四部分 设备相关API一. 设备详情二. 查询设备状态三. 设备状态历史数据查询四. 设备属性设置(重要!!)五.所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复