OneNet_API.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import requests
  2. import json
  3. import base64
  4. # 因为设备名是唯一的,加上 token 中有产品ID,因此很容易仅通过设备名就可以查询设备信息
  5. DEVICE_NAME = "emq_online"
  6. TOKEN = "version=2018-10-31&res=products%2F522417&et=1685551369&method=sha1&sign=9l9gkFQx7A%2B7B3fu8uU%2F089azps%3D"
  7. # 以产品为对象构建类
  8. class Api_OneNet():
  9. def __init__(self, api_addr="https://api.heclouds.com", token=TOKEN) -> None:
  10. self.api_addr = api_addr
  11. self.token = token
  12. def get_device_info(self, device_name):
  13. url = self.api_addr + f"/mqtt/v1/devices/{device_name}"
  14. headers = {
  15. 'Authorization': self.token,
  16. }
  17. print("GET url:", url)
  18. print("GET headers:", headers)
  19. response = requests.request("GET", url, headers=headers)
  20. print(type(response))
  21. device_info = json.dumps(response.json(), indent=2, ensure_ascii=False)
  22. print(device_info)
  23. return device_info
  24. def register_device(self, device_name):
  25. url = self.api_addr + f'/mqtt/v1/devices/reg'
  26. # TODO
  27. def device_cmd(self, device_id, dat):
  28. url = self.api_addr + f'/v1/synccmds?device_id={device_id}&timeout=30'
  29. headers = {
  30. 'Authorization': self.token,
  31. }
  32. print("POST url:", url)
  33. print("POST headers:", headers)
  34. # 返回一个对象, response.content 得到其内容,数据类型为 bytes
  35. response = requests.post(url, headers=headers, data=dat)
  36. print(type(response.json()), "\n", response.json())
  37. # response.json() 类型是字典
  38. res = response.json()
  39. # 命令发送消息成功,设备有应答
  40. if res["errno"] == 0:
  41. # 收到设备回复的信息内容格式是base64,需要解码
  42. res["data"]["cmd_resp"] = base64.b64decode(res["data"]["cmd_resp"])
  43. # 设备没有应答
  44. else:
  45. print("error")
  46. print("res:\n", res)
  47. return res
  48. if __name__ == '__main__':
  49. api = Api_OneNet()
  50. api.device_cmd('951045379', 'open')
  51. '''
  52. <class 'requests.models.Response'>
  53. {
  54. "request_id": "7477d03e-815f-4973-9426-6e88d6699522",
  55. "code": "onenet_common_success",
  56. "code_no": "000000",
  57. "message": null,
  58. "data": {
  59. "device_id": "952659214",
  60. "name": "emq_online",
  61. "pid": 522417,
  62. "key": "bXgU8U0W1DAlyWcD22xrQNK/DXkwr6kFD7bLKQ2390w="
  63. }
  64. }
  65. '''