当前位置:   article > 正文

OneNet5.0 新版产品应用开发API调用指南(三) 应用开发API

新版onenet哪里有apikey

应用开发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计算

根据文档, 我修改了这个程序,实测可用

  1. import base64
  2. import hmac
  3. import time
  4. from urllib.parse import quote
  5. def token(projectid,groupid,access_key):
  6. version = '2020-05-29'
  7. res1 = 'projectid/%s' % projectid
  8. res2 = '/groupid/%s' % groupid
  9. res = res1+res2
  10. # 用户自定义token过期时间
  11. et = str(int(time.time()) + 3600*24*365)
  12. # 签名方法,支持md5、sha1、sha256
  13. method = 'sha1'
  14. # 对access_key进行decode
  15. key = base64.b64decode(access_key)
  16. # 计算sign
  17. org = et + '\n' + method + '\n' + res + '\n' + version
  18. sign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)
  19. sign = base64.b64encode(sign_b.digest()).decode()
  20. # value 部分进行url编码,method/res/version值较为简单无需编码
  21. sign = quote(sign, safe='')
  22. res = quote(res, safe='')
  23. # token参数拼接
  24. token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)
  25. return token
  26. if __name__ == '__main__':
  27. projectid = 'Sd5MPm'
  28. groupid = 'HkhwSb'
  29. access_key = 'MjE5OWIwYzJmZGU5ZDVmMjY1NTQyNmY4ZjM5M2ZjMjY='
  30. print(token(projectid,groupid,access_key))
  31. while(1):
  32. 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

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

结果:

  1. {
  2. "data": {
  3. "list": [
  4. {
  5. "created_time": "2020-10-19T03:59:05.365Z",
  6. "device_name": "esp_mqtts_003",
  7. "from": 1,
  8. "last_time": null,
  9. "node_type": 1,
  10. "product_id": "IaiJ9078ZN",
  11. "product_name": "esp_mqtts_test",
  12. "status": 1
  13. },
  14. {
  15. "created_time": "2020-10-19T03:43:14.953Z",
  16. "device_name": "esp_mqtts_002",
  17. "from": 1,
  18. "last_time": null,
  19. "node_type": 1,
  20. "product_id": "IaiJ9078ZN",
  21. "product_name": "esp_mqtts_test",
  22. "status": 1
  23. },
  24. {
  25. "created_time": "2020-10-16T00:27:39.858Z",
  26. "device_name": "esp_mqtts_001",
  27. "from": 1,
  28. "group_id": "HkhwSb",
  29. "group_name": "客户1的设备",
  30. "last_time": "2020-10-19T01:21:03.965Z",
  31. "node_type": 1,
  32. "product_id": "IaiJ9078ZN",
  33. "product_name": "esp_mqtts_test",
  34. "status": 3
  35. }
  36. ],
  37. "meta": {
  38. "limit": 10,
  39. "offset": 0,
  40. "total": 3
  41. }
  42. },
  43. "requestId": "f4e04c9f4fcb412cae13c48e6fc64ae7",
  44. "success": true
  45. }

加入分组筛选

结果

四. 项目添加设备

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

返回结果: 我的分组清单

  1. {
  2. "data": {
  3. "list": [
  4. {
  5. "created_time": "2020-10-20T00:50:51.048Z",
  6. "desc": "这是API添加的描述",
  7. "device_count": 0,
  8. "id": "gdu8N0",
  9. "key": "YTY5MzVmOGYxOWU2OWVkZDE2MDE2MTNlZGE1MjZlMjY=",
  10. "name": "客户2的分组",
  11. "project_id": "Sd5MPm",
  12. "tag": {
  13. "tag1": "客户2修改的分组"
  14. }
  15. },
  16. {
  17. "created_time": "2020-10-19T07:21:27.988Z",
  18. "device_count": 1,
  19. "id": "HkhwSb",
  20. "key": "MjE5OWIwYzJmZGU5ZDVmMjY1NTQyNmY4ZjM5M2ZjMjY=",
  21. "name": "客户1的设备",
  22. "project_id": "Sd5MPm"
  23. }
  24. ],
  25. "meta": {
  26. "limit": 10,
  27. "offset": 0,
  28. "total": 2
  29. }
  30. },
  31. "requestId": "d2f4de7823234a7f8e3909de04468370",
  32. "success": true
  33. }

六. 分组添加设备

七. 分组移除设备

和上面用法一样


第四部分 设备相关API

一. 设备详情

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

返回结果: (结果和设备管理API里的结果一样)

  1. {
  2. "data": {
  3. "active_time": "2020-10-16T01:17:28.774Z",
  4. "created_time": "2020-10-16T00:27:39.858Z",
  5. "desc": "",
  6. "device_name": "esp_mqtts_001",
  7. "ip": "123.135.14.245",
  8. "last_time": "2020-10-19T01:21:03.965Z",
  9. "node_type": 1,
  10. "product_id": "IaiJ9078ZN",
  11. "product_name": "esp_mqtts_test",
  12. "protocol": 2,
  13. "sec_key": "x3NzP/HJi4s75RWFz+cJZUcRi9PZ7yH7VWVtPxeXVbU=",
  14. "status": 3
  15. },
  16. "requestId": "69d049cc2e534c9896cf4a0621273d8a",
  17. "success": true
  18. }

二. 查询设备状态

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-在线
返回结果:

  1. {
  2. "data": {
  3. "list": [
  4. {
  5. "status": 0,
  6. "time": 1603070463965
  7. },
  8. {
  9. "status": 1,
  10. "time": 1603069550700
  11. },
  12. {
  13. "status": 0,
  14. "time": 1602835011872
  15. },
  16. {
  17. "status": 1,
  18. "time": 1602830895892
  19. },
  20. {
  21. "status": 0,
  22. "time": 1602830895771
  23. },
  24. {
  25. "status": 1,
  26. "time": 1602823318899
  27. },
  28. {
  29. "status": 0,
  30. "time": 1602823317748
  31. },
  32. {
  33. "status": 1,
  34. "time": 1602823259833
  35. },
  36. {
  37. "status": 0,
  38. "time": 1602823251848
  39. },
  40. {
  41. "status": 1,
  42. "time": 1602823204386
  43. }
  44. ],
  45. "meta": {
  46. "limit": 10,
  47. "offset": 0
  48. }
  49. },
  50. "requestId": "da051a335742444ba198174e774a0de6",
  51. "success": true
  52. }

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

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的值也要打引号)

  1. {
  2. "id": "2",
  3. "code":200,
  4. "msg":"success"
  5. }

像这样:

具体程序可以参考文章:

收到结果:

五. 获取设备属性

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

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

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

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

  1. {
  2. "id":"123",
  3. "code":200,
  4. "msg":"xxx",
  5. "data":{
  6. "temperature":39.5,
  7. "humidity":20
  8. }
  9. }

具体程序可以参考文章:

收到结果:

六. 设备操作日志查询

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

回复内容如下:

  1. {
  2. "data": {
  3. "list": [
  4. {
  5. "request_body": [
  6. "temp",
  7. "humi"
  8. ],
  9. "request_time": "1603249729056",
  10. "response_body": {
  11. "code": 200,
  12. "data": {
  13. "humi": 50.16,
  14. "temp": 21.17
  15. },
  16. "id": "56",
  17. "msg": "success"
  18. },
  19. "response_time": "1603249731615",
  20. "type": 1
  21. },
  22. {
  23. "request_body": [
  24. "temp",
  25. "humi"
  26. ],
  27. "request_time": "1603249711997",
  28. "response_body": {
  29. "code": 200,
  30. "data": {
  31. "humi": 50.32,
  32. "temp": 21.16
  33. },
  34. "id": "55",
  35. "msg": "success"
  36. },
  37. "response_time": "1603249712280",
  38. "type": 1
  39. },
  40. {
  41. "request_body": [
  42. "temp",
  43. "humi"
  44. ],
  45. "request_time": "1603249176496",
  46. "response_body": {
  47. "code": 200,
  48. "data": {
  49. "humi": 50.69,
  50. "temp": 21.09
  51. },
  52. "id": "54",
  53. "msg": "success"
  54. },
  55. "response_time": "1603249176827",
  56. "type": 1
  57. },
  58. {
  59. "request_body": [
  60. "temp",
  61. "humi"
  62. ],
  63. "request_time": "1603249105629",
  64. "response_body": {
  65. "code": 2006,
  66. "id": "53",
  67. "msg": "acc timeout"
  68. },
  69. "response_time": "1603249111641",
  70. "type": 1
  71. },
  72. {
  73. "request_body": [
  74. "temp",
  75. "humi"
  76. ],
  77. "request_time": "1603249082004",
  78. "response_body": {
  79. "code": 2006,
  80. "id": "52",
  81. "msg": "acc timeout"
  82. },
  83. "response_time": "1603249088031",
  84. "type": 1
  85. },
  86. {
  87. "request_body": [
  88. "temp"
  89. ],
  90. "request_time": "1603249050023",
  91. "response_body": {
  92. "code": 2006,
  93. "id": "51",
  94. "msg": "acc timeout"
  95. },
  96. "response_time": "1603249056035",
  97. "type": 1
  98. },
  99. {
  100. "request_body": [
  101. "temp"
  102. ],
  103. "request_time": "1603246830306",
  104. "response_body": {
  105. "code": 2006,
  106. "id": "50",
  107. "msg": "acc timeout"
  108. },
  109. "response_time": "1603246836321",
  110. "type": 1
  111. },
  112. {
  113. "request_body": {
  114. "switch": true
  115. },
  116. "request_time": "1603246815178",
  117. "response_body": {
  118. "code": 200,
  119. "id": "49",
  120. "msg": "success"
  121. },
  122. "response_time": "1603246816288",
  123. "type": 0
  124. },
  125. {
  126. "request_body": {
  127. "switch": true
  128. },
  129. "request_time": "1603246684325",
  130. "response_body": {
  131. "code": 200,
  132. "id": "48",
  133. "msg": "success"
  134. },
  135. "response_time": "1603246684422",
  136. "type": 0
  137. },
  138. {
  139. "request_body": {
  140. "switch": true
  141. },
  142. "request_time": "1603246501128",
  143. "response_body": {
  144. "code": 2006,
  145. "id": "47",
  146. "msg": "acc timeout"
  147. },
  148. "response_time": "1603246507163",
  149. "type": 0
  150. }
  151. ],
  152. "meta": {
  153. "limit": 10,
  154. "offset": 0
  155. }
  156. },
  157. "requestId": "1c52994f6572464f9ab5d91be66de35b",
  158. "success": true
  159. }

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

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

结果

  1. {
  2. "data": {
  3. "list": [
  4. {
  5. "access_mode": "只读",
  6. "data_type": "array",
  7. "description": "",
  8. "expect_value": "",
  9. "identifier": "$OneNET_LBS",
  10. "name": "基站定位",
  11. "time": "0",
  12. "value": ""
  13. },
  14. {
  15. "access_mode": "只读",
  16. "data_type": "float",
  17. "description": "",
  18. "expect_value": "",
  19. "identifier": "humi",
  20. "name": "湿度",
  21. "time": "1603251069037",
  22. "value": "48.77"
  23. },
  24. {
  25. "access_mode": "读写",
  26. "data_type": "bool",
  27. "description": "",
  28. "expect_value": "false",
  29. "identifier": "switch",
  30. "name": "switch",
  31. "time": "1603251069037",
  32. "value": ""
  33. },
  34. {
  35. "access_mode": "只读",
  36. "data_type": "float",
  37. "description": "",
  38. "expect_value": "",
  39. "identifier": "temp",
  40. "name": "温度",
  41. "time": "1603251069037",
  42. "value": "21.36"
  43. }
  44. ]
  45. },
  46. "requestId": "d35f128bd4e746d4b21227d4de8722e2",
  47. "success": true
  48. }

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

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

注意:参数里有个sort 排序参数 1-正序 2-倒序
如果调用这个API查看历史数据, 大概率要用到offset和limit
注意 limit范围是1~100

返回结果示例:

  1. {
  2. "data": {
  3. "list": [
  4. {
  5. "time": "1603070440958",
  6. "value": "19.29"
  7. },
  8. {
  9. "time": "1603070430957",
  10. "value": "19.29"
  11. },
  12. {
  13. "time": "1603070420958",
  14. "value": "19.28"
  15. },
  16. {
  17. "time": "1603070410956",
  18. "value": "19.29"
  19. },
  20. {
  21. "time": "1603070400954",
  22. "value": "19.28"
  23. },
  24. {
  25. "time": "1603070390956",
  26. "value": "19.28"
  27. },
  28. {
  29. "time": "1603070380971",
  30. "value": "19.28"
  31. },
  32. {
  33. "time": "1603070370968",
  34. "value": "19.28"
  35. },
  36. {
  37. "time": "1603070360957",
  38. "value": "19.28"
  39. },
  40. {
  41. "time": "1603070350956",
  42. "value": "19.28"
  43. }
  44. ],
  45. "meta": {
  46. "limit": 10,
  47. "offset": 0
  48. }
  49. },
  50. "requestId": "e4e783b2a2e64cfbba76d08044db8917",
  51. "success": true
  52. }

七. 设备属性期望设置

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/401734
推荐阅读
相关标签
  

闽ICP备14008679号