charge_data.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # coding=utf-8
  2. import logging
  3. import struct
  4. from collections import namedtuple
  5. import typing
  6. from apps.web.core.helpers import ActionDeviceBuilder
  7. from script.eventer.handlers import Handler
  8. if typing.TYPE_CHECKING:
  9. from apps.web.core.adapter.base import SmartBox
  10. logger = logging.getLogger(__name__)
  11. class ChargeDataFormater(object):
  12. def __init__(self):
  13. pass
  14. class ChargeDataHandler(Handler):
  15. """
  16. 处理充电数据中的 上报数据 将模块从桥梁变成容器
  17. """
  18. ServiceData = namedtuple("ServiceData", ["ts", "buff"])
  19. def parse(self):
  20. logger.error("receive orgianl charge data len <{}> from <{}>".format(len(self.payload), self.dev.devNo))
  21. # 先将模块发送的时间拆出来
  22. ts, buff = struct.unpack("<I4s", self.payload)
  23. box = ActionDeviceBuilder.create_action_device(dev=self.dev) # type: SmartBox
  24. if not box:
  25. return
  26. serviceData = self.ServiceData(ts=ts, buff=buff)
  27. rv = box.parse_service_upload_data(serviceData)
  28. return rv
  29. def do(self):
  30. rv = self.parse()