AWSIoTDataPlaneUtil.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : AWSIoTDataPlaneUtil.py
  4. @Time : 2023/4/13 16:43
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. @Document: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iot-data.html#iotdataplane
  9. """
  10. import json
  11. import logging
  12. import boto3
  13. LOGGER = logging.getLogger('info')
  14. class AWSIoTDataPlaneService:
  15. def __init__(self, aws_access_key_id, secret_access_key, region_name):
  16. self.client = boto3.client(
  17. 'iot-data',
  18. aws_access_key_id=aws_access_key_id,
  19. aws_secret_access_key=secret_access_key,
  20. region_name=region_name
  21. )
  22. def update_thing_shadow(self, thing_name, data, shadow_name=None):
  23. """
  24. 更新指定事物的影子
  25. @param thing_name: 物品名称
  26. @param data: 更新数据
  27. @param shadow_name: 自定义影子名称(使用经典影子可不填)
  28. @return: 更新状态
  29. """
  30. try:
  31. params = {
  32. 'thingName': thing_name,
  33. 'payload': json.dumps(data)
  34. }
  35. if shadow_name:
  36. params['shadowName'] = shadow_name
  37. response = self.client.update_thing_shadow(**params)
  38. assert response['ResponseMetadata']['HTTPStatusCode'] == 200
  39. return True
  40. except Exception as e:
  41. LOGGER.info('更新设备影子异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  42. return False
  43. def get_thing_shadow(self, thing_name, shadow_name=None):
  44. """
  45. 获取指定事物的影子
  46. @param thing_name: 物品名称
  47. @param shadow_name: 自定义影子名称(使用经典影子可不填)
  48. @return: 更新状态
  49. """
  50. try:
  51. params = {
  52. 'thingName': thing_name,
  53. }
  54. if shadow_name:
  55. params['shadowName'] = shadow_name
  56. response = self.client.get_thing_shadow(**params)
  57. return json.loads(response['payload'].read())
  58. except Exception as e:
  59. LOGGER.info('获取设备影子异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  60. return False