You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

192 line
4.8KB

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