我是靠谱客的博主 超级小刺猬,最近开发中收集的这篇文章主要介绍OneNet5.0 新版产品应用开发API调用指南(三) 应用开发API第一部分 应用开发流程及项目分组一. 应用开发流程二. 项目分组第二部分 项目相关API一. 项目概况二. 项目集成产品列表三. 项目集成设备列表四. 项目添加设备五. 项目移除设备第三部分 分组相关API一. 创建分组二. 移除分组三. 编辑分组四. 分组详情五. 分组列表六. 分组添加设备七. 分组移除设备第四部分 设备相关API一. 设备详情二. 查询设备状态三. 设备状态历史数据查询四. 设备属性设置(重要!!)五.,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

应用开发API 入口:

https://openapi.heclouds.com/common?action=具体接口名称&version=1

第一部分 应用开发流程及项目分组

一. 应用开发流程

https://open.iot.10086.cn/doc/iot_platform/book/application-develop/application-process.html

1. 创建项目

2. 进入项目添加设备

3. 调用API

本篇文章的主题

4. 数据流转

此项内容会单独写一篇文章

二. 项目分组

1. 分组

项目中,我们可以创建分组,这样是的设备被分组管理,方便区分业务权限, 非常推荐使用

分完组后可以添加设备

我们看到有分组ID和分组key

想到第一篇中的设备鉴权描述, 确实是可以以项目/分组进行鉴权的

这样我们可以做到 客户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

一. 项目概况

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

参数可限定查询的范围, 根据自己的需求选择

结果:

{
    "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
}

加入分组筛选

结果

四. 项目添加设备

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

和上面的用法完全一样


第三部分 分组相关API

一. 创建分组

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

和上面一样

三. 编辑分组

能够修改标签和描述
这个POST请求里有个tag, 是一个对象, 我们把要修改的标签内容放在这

结果:

四. 分组详情

一个简单的get请求

五. 分组列表

https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryGroupList.html

返回结果: 我的分组清单

{
    "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

一. 设备详情

https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceDetail.html

返回结果: (结果和设备管理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
}

二. 查询设备状态

https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceStatus.html

返回结果:

返回结果中的状态码解释如下:

  1. 未激活
  2. 在线
  3. 离线

三. 设备状态历史数据查询

https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceStatusHistory.html


设备状态:
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
}

四. 设备属性设置(重要!!)

https://open.iot.10086.cn/doc/iot_platform/book/api/application/setDeviceProperty.html

这个API调用起来很方便, 但是他是一个同步API, 所以设备侧必须给它正确的响应
调用:

如果你的设备没有订阅$sys/{pid}/{device-name}/thing/property/set主题,
会告诉你 bad request
此时设备端会收到:

这里我们看到消息有一个id , 我们的设备必须告诉服务器,这个id的属性设置命令已经收到下发

故而我们的设备应该订阅: $sys/{pid}/{device-name}/thing/property/set_reply主题, 并按照以下格式回复(id的值也要打引号)

{
"id": "2",
"code":200,
"msg":"success"
}

像这样:

具体程序可以参考文章:

收到结果:

五. 获取设备属性

https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDevicePropertyDetail.html

这是一个同步下发命令的消息, 需要设备回复

如果设备订阅了$sys/{pid}/{device-name}/thing/property/get主题, 可以收到:

这里我们看到消息有一个id , 我们的设备回复时必须告诉服务器,这个id的数据请求命令已经收到下发,并做如下格式回应:

{
    "id":"123",
    "code":200,
    "msg":"xxx",
    "data":{
        "temperature":39.5,
        "humidity":20
    }
}

具体程序可以参考文章:

收到结果:

六. 设备操作日志查询

https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceLog.html

回复内容如下:

{
    "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
}

七. 设备属性最新数据查询

https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDeviceProperty.html

结果

{
    "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
}

八. 设备属性历史数据查询

https://open.iot.10086.cn/doc/iot_platform/book/api/application/queryDevicePropertyHistory.html

注意:参数里有个sort 排序参数 1-正序 2-倒序
如果调用这个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
}

七. 设备属性期望设置

https://open.iot.10086.cn/doc/iot_platform/book/api/application/setDeviceDesiredProperty.html

最后

以上就是超级小刺猬为你收集整理的OneNet5.0 新版产品应用开发API调用指南(三) 应用开发API第一部分 应用开发流程及项目分组一. 应用开发流程二. 项目分组第二部分 项目相关API一. 项目概况二. 项目集成产品列表三. 项目集成设备列表四. 项目添加设备五. 项目移除设备第三部分 分组相关API一. 创建分组二. 移除分组三. 编辑分组四. 分组详情五. 分组列表六. 分组添加设备七. 分组移除设备第四部分 设备相关API一. 设备详情二. 查询设备状态三. 设备状态历史数据查询四. 设备属性设置(重要!!)五.的全部内容,希望文章能够帮你解决OneNet5.0 新版产品应用开发API调用指南(三) 应用开发API第一部分 应用开发流程及项目分组一. 应用开发流程二. 项目分组第二部分 项目相关API一. 项目概况二. 项目集成产品列表三. 项目集成设备列表四. 项目添加设备五. 项目移除设备第三部分 分组相关API一. 创建分组二. 移除分组三. 编辑分组四. 分组详情五. 分组列表六. 分组添加设备七. 分组移除设备第四部分 设备相关API一. 设备详情二. 查询设备状态三. 设备状态历史数据查询四. 设备属性设置(重要!!)五.所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部