cron.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. demeter web
  5. name:admin.py
  6. author:rabin
  7. """
  8. import time
  9. from demeter.core import *
  10. from gevent import monkey; monkey.patch_socket()
  11. import gevent
  12. from pic import pic
  13. # 处理定时命令、周期命令、条件控制、消息、设备状态等
  14. timeSleep = 10
  15. # 开关设备
  16. def switch(value):
  17. Demeter.service('device').switchMul(value)
  18. # 更改设备状态
  19. def device():
  20. while 1:
  21. model = Demeter.model('device_info')
  22. cur = Demeter.time() - 500
  23. model.cdate.assgin(cur, '<=')
  24. model.status = True
  25. data = model.select()
  26. for v in data:
  27. model.id = v['id']
  28. if v['hardware_type'] == 5:
  29. model.update(value='0', status=False)
  30. elif v['hardware_type'] != 7 and v['hardware_type'] != 6:
  31. model.update(status=False)
  32. gevent.sleep(60)
  33. def timing():
  34. while 1:
  35. model = Demeter.model('device_set_timing')
  36. model.status = 0
  37. cur = Demeter.time()
  38. model.zdate.assgin(cur, '<=')
  39. data = model.select()
  40. if data:
  41. for value in data:
  42. switch(value)
  43. model.id = value['id']
  44. model.update(status=1)
  45. gevent.sleep(timeSleep)
  46. def loop():
  47. while 1:
  48. model = Demeter.model('device_set_loop')
  49. cur = Demeter.time()
  50. date = Demeter.date(cur, '%Y-%m-%d-%w-%H-%M')
  51. date = date.split('-')
  52. week = date[3]
  53. day = date[2]
  54. model.status = True
  55. model.hour = date[4]
  56. model.minute = date[5]
  57. data = model.select()
  58. if data:
  59. for value in data:
  60. state = False
  61. value['loop'] = value['loop'].split(',')
  62. if value['looptype'] == 2:
  63. if week in value['loop']:
  64. state = True
  65. elif value['looptype'] == 3:
  66. if day in value['loop']:
  67. state = True
  68. if state:
  69. switch(value)
  70. gevent.sleep(timeSleep)
  71. def savePic():
  72. while 1:
  73. pic()
  74. gevent.sleep(1800)
  75. def handle():
  76. gevent.joinall([
  77. gevent.spawn(timing),
  78. gevent.spawn(loop),
  79. gevent.spawn(device),
  80. gevent.spawn(savePic),
  81. ])
  82. handle()