No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

246 líneas
6.5KB

  1. from flask import request
  2. from flask_classy import FlaskView, route
  3. from modules.core.core import cbpi
  4. from modules.core.baseview import BaseView
  5. from modules.core.db import DBModel
  6. from modules.database.dbmodel import Kettle
  7. class KettleView(BaseView):
  8. model = Kettle
  9. cache_key = "kettle"
  10. @route('/', methods=["GET"])
  11. def getAll(self):
  12. """
  13. Get all Kettles
  14. ---
  15. tags:
  16. - kettle
  17. responses:
  18. 200:
  19. description: List auf all Kettles
  20. """
  21. return super(KettleView, self).getAll()
  22. @route('/', methods=["POST"])
  23. def post(self):
  24. """
  25. Create a new kettle
  26. ---
  27. tags:
  28. - kettle
  29. parameters:
  30. - in: body
  31. name: body
  32. schema:
  33. id: Kettle
  34. required:
  35. - name
  36. properties:
  37. name:
  38. type: string
  39. description: name for user
  40. sensor:
  41. type: string
  42. description: name for user
  43. heater:
  44. type: string
  45. description: name for user
  46. automatic:
  47. type: string
  48. description: name for user
  49. logic:
  50. type: string
  51. description: name for user
  52. config:
  53. type: string
  54. description: name for user
  55. agitator:
  56. type: string
  57. description: name for user
  58. target_temp:
  59. type: string
  60. description: name for user
  61. responses:
  62. 200:
  63. description: User created
  64. """
  65. return super(KettleView, self).post()
  66. @route('/<int:id>', methods=["PUT"])
  67. def put(self, id):
  68. """
  69. Update a kettle
  70. ---
  71. tags:
  72. - kettle
  73. parameters:
  74. - in: path
  75. name: id
  76. schema:
  77. type: integer
  78. required: true
  79. description: Numeric ID of the Kettle
  80. - in: body
  81. name: body
  82. schema:
  83. id: Kettle
  84. required:
  85. - name
  86. properties:
  87. name:
  88. type: string
  89. description: name for user
  90. sensor:
  91. type: string
  92. description: name for user
  93. heater:
  94. type: string
  95. description: name for user
  96. automatic:
  97. type: string
  98. description: name for user
  99. logic:
  100. type: string
  101. description: name for user
  102. config:
  103. type: string
  104. description: name for user
  105. agitator:
  106. type: string
  107. description: name for user
  108. target_temp:
  109. type: string
  110. description: name for user
  111. responses:
  112. 200:
  113. description: User created
  114. """
  115. return super(KettleView, self).put(id)
  116. @route('/<int:id>', methods=["DELETE"])
  117. def delete(self, id):
  118. """
  119. Delete a kettle
  120. ---
  121. tags:
  122. - kettle
  123. parameters:
  124. - in: path
  125. name: id
  126. schema:
  127. type: integer
  128. required: true
  129. description: Numeric ID of the Kettle
  130. responses:
  131. 200:
  132. description: User created
  133. """
  134. return super(KettleView, self).delete(id)
  135. @classmethod
  136. def _pre_post_callback(self, data):
  137. data["target_temp"] = 0
  138. @classmethod
  139. def post_init_callback(cls, obj):
  140. obj.state = False
  141. def _post_post_callback(self, m):
  142. m.state = False
  143. def _pre_put_callback(self, m):
  144. try:
  145. m.instance.stop()
  146. except:
  147. pass
  148. def _post_put_callback(self, m):
  149. m.state = False
  150. @route('/<int:id>/targettemp/<temp>', methods=['POST'])
  151. def postTargetTemp(self, id, temp):
  152. """
  153. Set Target Temp
  154. ---
  155. tags:
  156. - kettle
  157. parameters:
  158. - required: true
  159. type: string
  160. description: ID of pet to return
  161. in: path
  162. name: id
  163. - required: true
  164. type: string
  165. description: Temperature you like to set
  166. in: path
  167. name: temp
  168. responses:
  169. 201:
  170. description: User created
  171. """
  172. id = int(id)
  173. temp = float(temp)
  174. cbpi.brewing.set_target_temp(id, temp)
  175. return ('', 204)
  176. @route('/<int:id>/automatic', methods=['POST'])
  177. def toggle(self, id):
  178. """
  179. Set Target Temp
  180. ---
  181. tags:
  182. - kettle
  183. parameters:
  184. - required: true
  185. type: string
  186. description: ID of pet to return
  187. in: path
  188. name: id
  189. - required: true
  190. type: string
  191. description: Temperature you like to set
  192. in: path
  193. name: temp
  194. responses:
  195. 201:
  196. description: User created
  197. """
  198. self.api.brewing.toggle_automatic(id)
  199. return ('', 204)
  200. @cbpi.addon.core.listen("SET_TARGET_TEMP")
  201. def set_target_temp(id, temp):
  202. '''
  203. Change Taget Temp Event
  204. :param id: kettle id
  205. :param temp: target temp to set
  206. :return: None
  207. '''
  208. KettleView().postTargetTemp(id,temp)
  209. @cbpi.addon.core.backgroundjob(key="read_target_temps", interval=5)
  210. def read_target_temps(api):
  211. """
  212. background process that reads all passive sensors in interval of 1 second
  213. :return: None
  214. """
  215. result = {}
  216. for key, value in cbpi.cache.get("kettle").iteritems():
  217. cbpi.sensor.write_log(key, value.target_temp, prefix="kettle")
  218. @cbpi.addon.core.initializer()
  219. def init(cbpi):
  220. KettleView.api = cbpi
  221. KettleView.register(cbpi._app, route_base='/api/kettle')
  222. KettleView.init_cache()