zhiyangji.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import logging
  5. from apilib.utils_datetime import to_datetime
  6. from apps.web.constant import DeviceCmdCode, MQTT_TIMEOUT
  7. from apps.web.core.networking import MessageSender
  8. from apps.web.device.models import Device
  9. from apps.web.eventer.base import WorkEvent
  10. from apps.web.eventer import EventBuilder
  11. logger = logging.getLogger(__name__)
  12. class builder(EventBuilder):
  13. def __getEvent__(self, device_event):
  14. if device_event['cmd'] == 100:
  15. return ZhiyangjiEvent(self.deviceAdapter, device_event)
  16. class ZhiyangjiEvent(WorkEvent):
  17. def do(self, **args):
  18. devNo = self.device['devNo']
  19. logger.info('zhiyangji event detected, devNo=%s,msg=%s' % (devNo, self.event_data))
  20. if self.device.softVer.startswith('v5.3.'):
  21. pass
  22. else:
  23. # 老版本. 如果制氧机还没有过期,就直接把制氧机的剩余时间启动
  24. ctrInfo = Device.get_dev_control_cache(devNo)
  25. if (not ctrInfo.has_key('startTime')):
  26. return
  27. needTime = int(ctrInfo['needTime'])
  28. startTime = to_datetime(ctrInfo['startTime'])
  29. passTime = (datetime.datetime.now() - startTime).total_seconds()
  30. if passTime > needTime:
  31. logger.info('time is over')
  32. return
  33. givenTime = needTime - passTime
  34. devInfo = MessageSender.send(device = self.device,
  35. cmd = DeviceCmdCode.PAY_MONEY,
  36. payload = {
  37. 'IMEI': self.device['devNo'], 'duration': givenTime
  38. },
  39. timeout = MQTT_TIMEOUT.START_DEVICE)
  40. if devInfo.has_key('rst') and devInfo['rst'] != 0:
  41. if devInfo['rst'] == -1:
  42. logger.info('give left time error,devNo=%s,givenTime=%s' % (devNo, givenTime))
  43. elif devInfo['rst'] == 1:
  44. logger.info('give left time error,devNo=%s,givenTime=%s' % (devNo, givenTime))
  45. logger.info('add time for zhiyangji=%s seconds=%s' % (self.device['devNo'], givenTime))