Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

169 rindas
4.5KB

  1. from modules import cbpi
  2. class ActorController(object):
  3. @cbpi.try_catch(None)
  4. def actor_on(self, power=100, id=None):
  5. if id is None:
  6. id = self.heater
  7. self.api.switch_actor_on(int(id), power=power)
  8. @cbpi.try_catch(None)
  9. def actor_off(self, id=None):
  10. if id is None:
  11. id = self.heater
  12. self.api.switch_actor_off(int(id))
  13. @cbpi.try_catch(None)
  14. def actor_power(self, power, id=None):
  15. if id is None:
  16. id = self.heater
  17. self.api.actor_power(int(id), power)
  18. class SensorController(object):
  19. @cbpi.try_catch(None)
  20. def get_sensor_value(self, id=None):
  21. if id is None:
  22. id = self.sensor
  23. return cbpi.get_sensor_value(id)
  24. class ControllerBase(object):
  25. __dirty = False
  26. __running = False
  27. @staticmethod
  28. def init_global():
  29. print("GLOBAL CONTROLLER INIT")
  30. def notify(self, headline, message, type="success", timeout=5000):
  31. self.api.notify(headline, message, type, timeout)
  32. def is_running(self):
  33. return self.__running
  34. def init(self):
  35. self.__running = True
  36. def sleep(self, seconds):
  37. self.api.socketio.sleep(seconds)
  38. def stop(self):
  39. self.__running = False
  40. def __init__(self, *args, **kwds):
  41. for a in kwds:
  42. super(ControllerBase, self).__setattr__(a, kwds.get(a))
  43. self.api = kwds.get("api")
  44. self.heater = kwds.get("heater")
  45. self.sensor = kwds.get("sensor")
  46. def run(self):
  47. pass
  48. class KettleController(ControllerBase, ActorController, SensorController):
  49. @staticmethod
  50. def chart(kettle):
  51. result = []
  52. result.append({"name": "Temp", "data_type": "sensor", "data_id": kettle.sensor})
  53. result.append({"name": "Target Temp", "data_type": "kettle", "data_id": kettle.id})
  54. return result
  55. def __init__(self, *args, **kwds):
  56. ControllerBase.__init__(self, *args, **kwds)
  57. self.kettle_id = kwds.get("kettle_id")
  58. @cbpi.try_catch(None)
  59. def heater_on(self, power=100):
  60. k = self.api.cache.get("kettle").get(self.kettle_id)
  61. if k.heater is not None:
  62. self.actor_on(power, int(k.heater))
  63. @cbpi.try_catch(None)
  64. def heater_off(self):
  65. k = self.api.cache.get("kettle").get(self.kettle_id)
  66. if k.heater is not None:
  67. self.actor_off(int(k.heater))
  68. @cbpi.try_catch(None)
  69. def get_temp(self, id=None):
  70. if id is None:
  71. id = self.kettle_id
  72. return self.get_sensor_value(int(self.api.cache.get("kettle").get(id).sensor))
  73. @cbpi.try_catch(None)
  74. def get_target_temp(self, id=None):
  75. if id is None:
  76. id = self.kettle_id
  77. return self.api.cache.get("kettle").get(id).target_temp
  78. class FermenterController(ControllerBase, ActorController, SensorController):
  79. @staticmethod
  80. def chart(fermenter):
  81. result = []
  82. result.append({"name": "Temp", "data_type": "sensor", "data_id": fermenter.sensor})
  83. result.append({"name": "Target Temp", "data_type": "fermenter", "data_id": fermenter.id})
  84. return result
  85. def __init__(self, *args, **kwds):
  86. ControllerBase.__init__(self, *args, **kwds)
  87. self.fermenter_id = kwds.get("fermenter_id")
  88. self.cooler = kwds.get("cooler")
  89. @cbpi.try_catch(None)
  90. def get_target_temp(self, id=None):
  91. if id is None:
  92. id = self.fermenter_id
  93. return self.api.cache.get("fermenter").get(id).target_temp
  94. @cbpi.try_catch(None)
  95. def heater_on(self, power=100):
  96. f = self.api.cache.get("fermenter").get(self.fermenter_id)
  97. if f.heater is not None:
  98. self.actor_on(power, int(f.heater))
  99. @cbpi.try_catch(None)
  100. def heater_off(self):
  101. f = self.api.cache.get("fermenter").get(self.fermenter_id)
  102. if f.heater is not None:
  103. self.actor_off(int(f.heater))
  104. @cbpi.try_catch(None)
  105. def cooler_on(self, power=100):
  106. f = self.api.cache.get("fermenter").get(self.fermenter_id)
  107. if f.cooler is not None:
  108. self.actor_on(power, int(f.cooler))
  109. @cbpi.try_catch(None)
  110. def cooler_off(self):
  111. f = self.api.cache.get("fermenter").get(self.fermenter_id)
  112. if f.cooler is not None:
  113. self.actor_off(int(f.cooler))
  114. @cbpi.try_catch(None)
  115. def get_temp(self, id=None):
  116. if id is None:
  117. id = self.fermenter_id
  118. return self.get_sensor_value(int(self.api.cache.get("fermenter").get(id).sensor))