cron.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. # 更改控制设备的超时状态
  34. def control():
  35. while 1:
  36. model = Demeter.model('device_info')
  37. cur = Demeter.time() - 10
  38. model.cdate.assgin(cur, '<=')
  39. model.hardware_type = 3
  40. service = Demeter.service('device')
  41. data = model.select()
  42. for v in data:
  43. model.id = v['id']
  44. type_model = Demeter.model('device_type')
  45. type_model.id = v['type_id']
  46. type_info = type_model.select(type='fetchone')
  47. if type_info['unit'] == 'button':
  48. if v['cxtype'] == 1:
  49. oper = '升起'
  50. elif v['cxtype'] == 2:
  51. oper = '降下'
  52. elif v['cxtype'] == 5:
  53. oper = '停止'
  54. else:
  55. if v['cxtype'] == 1:
  56. oper = '开启'
  57. else:
  58. oper = '关闭'
  59. if v['exp'] == '-1':
  60. msg = service.notice('timeout')
  61. service.mul(v['id'], v['name'], v['cxtype'], '失败:' + msg, False, oper=oper)
  62. else:
  63. msg = '1'
  64. service.mul(v['id'], v['name'], v['cxtype'], '', True)
  65. model.update(exp=msg)
  66. gevent.sleep(timeSleep)
  67. def timing():
  68. while 1:
  69. model = Demeter.model('device_set_timing')
  70. model.status = 0
  71. cur = Demeter.time()
  72. model.zdate.assgin(cur, '<=')
  73. data = model.select()
  74. if data:
  75. for value in data:
  76. switch(value)
  77. model.id = value['id']
  78. model.update(status=1)
  79. gevent.sleep(timeSleep)
  80. def loop():
  81. while 1:
  82. model = Demeter.model('device_set_loop')
  83. cur = Demeter.time()
  84. date = Demeter.date(cur, '%Y-%m-%d-%w-%H-%M')
  85. date = date.split('-')
  86. week = date[3]
  87. day = date[2]
  88. model.status = True
  89. model.hour = date[4]
  90. model.minute = date[5]
  91. data = model.select()
  92. if data:
  93. for value in data:
  94. state = False
  95. value['loop'] = value['loop'].split(',')
  96. if value['looptype'] == 2:
  97. if week in value['loop']:
  98. state = True
  99. elif value['looptype'] == 3:
  100. if day in value['loop']:
  101. state = True
  102. if state:
  103. switch(value)
  104. gevent.sleep(timeSleep)
  105. def savePic():
  106. while 1:
  107. pic()
  108. gevent.sleep(1800)
  109. def handle():
  110. gevent.joinall([
  111. gevent.spawn(timing),
  112. gevent.spawn(loop),
  113. gevent.spawn(device),
  114. gevent.spawn(savePic),
  115. gevent.spawn(control),
  116. ])
  117. handle()