Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

199 lines
4.9KB

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