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.

49 lines
1.2KB

  1. import time
  2. from flask_classy import route
  3. from modules import DBModel, cbpi
  4. from modules.core.baseview import BaseView
  5. class Sensor(DBModel):
  6. __fields__ = ["name","type", "config", "hide"]
  7. __table_name__ = "sensor"
  8. __json_fields__ = ["config"]
  9. class SensorView(BaseView):
  10. model = Sensor
  11. cache_key = "sensors"
  12. @route('<int:id>/action/<method>', methods=["POST"])
  13. def action(self, id, method):
  14. cbpi.cache.get("sensors").get(id).instance.__getattribute__(method)()
  15. return ('', 204)
  16. def _post_post_callback(self, m):
  17. cbpi.init_sensor(m.id)
  18. def _post_put_callback(self, m):
  19. cbpi.stop_sensor(m.id)
  20. cbpi.init_sensor(m.id)
  21. def _pre_delete_callback(self, m):
  22. cbpi.stop_sensor(m.id)
  23. @cbpi.initalizer(order=1000)
  24. def init(cbpi):
  25. SensorView.register(cbpi.app, route_base='/api/sensor')
  26. SensorView.init_cache()
  27. cbpi.init_sensors()
  28. @cbpi.backgroundtask(key="read_passiv_sensor", interval=5)
  29. def read_passive_sensor(api):
  30. """
  31. background process that reads all passive sensors in interval of 1 second
  32. :return: None
  33. """
  34. for key, value in cbpi.cache.get("sensors").items():
  35. if value.mode == "P":
  36. value.instance.read()