Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

184 строки
4.7KB

  1. import time
  2. from flask_classy import route
  3. from modules.core.db import DBModel
  4. from modules.core.core import cbpi
  5. from modules.core.baseview import BaseView
  6. from modules.database.dbmodel import Actor
  7. class ActorView(BaseView):
  8. model = Actor
  9. cache_key = "actors"
  10. @classmethod
  11. def post_init_callback(self, obj):
  12. obj.state = 0
  13. obj.power = 100
  14. def _post_post_callback(self, m):
  15. self.api.actor.init_one(m.id)
  16. def _post_put_callback(self, m):
  17. self.api.actor.init_one(m.id)
  18. @route("<int:id>/switch/on", methods=["POST"])
  19. def on(self, id):
  20. """
  21. Switch actor on
  22. ---
  23. tags:
  24. - actor
  25. parameters:
  26. - in: path
  27. name: id
  28. schema:
  29. type: integer
  30. required: true
  31. description: Numeric ID of the actor
  32. responses:
  33. 200:
  34. description: Actor switched on
  35. """
  36. self.api.actor.on(id)
  37. return ('', 204)
  38. @route("<int:id>/switch/off", methods=["POST"])
  39. def off(self, id):
  40. """
  41. Switch actor off
  42. ---
  43. tags:
  44. - actor
  45. parameters:
  46. - in: path
  47. name: id
  48. schema:
  49. type: integer
  50. required: true
  51. description: Numeric ID of the actor
  52. responses:
  53. 200:
  54. description: Actor switched off
  55. """
  56. self.api.actor.off(id)
  57. return ('', 204)
  58. @route("<int:id>/power/<int:power>", methods=["POST"])
  59. def power(self, id, power):
  60. """
  61. Set Actor Power
  62. ---
  63. tags:
  64. - actor
  65. parameters:
  66. - in: path
  67. name: id
  68. schema:
  69. type: integer
  70. required: true
  71. description: Numeric ID of the actor
  72. - in: path
  73. name: power
  74. schema:
  75. type: integer
  76. required: true
  77. description: Power value between 0 - 100
  78. responses:
  79. 200:
  80. description: Actor power set
  81. """
  82. self.api.actor.power(id, power)
  83. return ('', 204)
  84. @route("<int:id>/toggle", methods=["POST"])
  85. def toggle(self, id):
  86. """
  87. Toggle Actor
  88. ---
  89. tags:
  90. - actor
  91. parameters:
  92. - in: path
  93. name: id
  94. schema:
  95. type: integer
  96. required: true
  97. description: Numeric ID of the actor
  98. responses:
  99. 200:
  100. description: Actor toggled
  101. """
  102. if self.api.cache.get("actors").get(id).state == 0:
  103. self.on(id)
  104. else:
  105. self.off(id)
  106. return ('', 204)
  107. def toggleTimeJob(self, id, t):
  108. self.api.cache.get("actors").get(int(id)).timer = int(time.time()) + int(t)
  109. self.toggle(int(id))
  110. self.api._socketio.sleep(t)
  111. self.api.cache.get("actors").get(int(id)).timer = None
  112. self.toggle(int(id))
  113. @route("/<id>/toggle/<int:t>", methods=["POST"])
  114. def toggleTime(self, id, t):
  115. """
  116. Toggle Actor for a defined time
  117. ---
  118. tags:
  119. - actor
  120. parameters:
  121. - in: path
  122. name: id
  123. schema:
  124. type: integer
  125. required: true
  126. description: Numeric ID of the actor
  127. - in: path
  128. name: time
  129. schema:
  130. type: integer
  131. required: true
  132. description: time in seconds
  133. responses:
  134. 200:
  135. description: Actor toggled
  136. """
  137. t = self.api._socketio.start_background_task(target=self.toggleTimeJob, id=id, t=t)
  138. return ('', 204)
  139. @route('<int:id>/action/<method>', methods=["POST"])
  140. def action(self, id, method):
  141. """
  142. Actor Action
  143. ---
  144. tags:
  145. - actor
  146. parameters:
  147. - in: path
  148. name: id
  149. schema:
  150. type: integer
  151. required: true
  152. description: Numeric ID of the actor
  153. - in: path
  154. name: method
  155. schema:
  156. type: string
  157. required: true
  158. description: action method name
  159. responses:
  160. 200:
  161. description: Actor Action called
  162. """
  163. cbpi.cache.get("actors").get(id).instance.__getattribute__(method)()
  164. return ('', 204)
  165. @cbpi.addon.core.initializer(order=1000)
  166. def init(cbpi):
  167. ActorView.register(cbpi._app, route_base='/api/actor')
  168. ActorView.init_cache()
  169. #cbpi.init_actors()