25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
4.4KB

  1. from modules.core.db import DBModel, get_db
  2. class Kettle(DBModel):
  3. __fields__ = ["name","sensor", "heater", "automatic", "logic", "config", "agitator", "target_temp"]
  4. __table_name__ = "kettle"
  5. __json_fields__ = ["config"]
  6. class Sensor(DBModel):
  7. __fields__ = ["name","type", "config", "hide"]
  8. __table_name__ = "sensor"
  9. __json_fields__ = ["config"]
  10. class Config(DBModel):
  11. __fields__ = ["type", "value", "description", "options"]
  12. __table_name__ = "config"
  13. __json_fields__ = ["options"]
  14. __priamry_key__ = "name"
  15. class Actor(DBModel):
  16. __fields__ = ["name","type", "config", "hide"]
  17. __table_name__ = "actor"
  18. __json_fields__ = ["config"]
  19. class Step(DBModel):
  20. __fields__ = ["name","type", "stepstate", "state", "start", "end", "order", "config"]
  21. __table_name__ = "step"
  22. __json_fields__ = ["config", "stepstate"]
  23. __order_by__ = "order"
  24. __as_array__ = True
  25. @classmethod
  26. def get_max_order(cls):
  27. cur = get_db().cursor()
  28. cur.execute("SELECT max(step.'order') as 'order' FROM %s" % cls.__table_name__)
  29. r = cur.fetchone()
  30. return r.get("order")
  31. @classmethod
  32. def get_by_state(cls, state, order=True):
  33. cur = get_db().cursor()
  34. cur.execute("SELECT * FROM %s WHERE state = ? ORDER BY %s.'order'" % (cls.__table_name__,cls.__table_name__,), state)
  35. r = cur.fetchone()
  36. if r is not None:
  37. return cls(r)
  38. else:
  39. return None
  40. @classmethod
  41. def delete_all(cls):
  42. cur = get_db().cursor()
  43. cur.execute("DELETE FROM %s" % cls.__table_name__)
  44. get_db().commit()
  45. @classmethod
  46. def reset_all_steps(cls):
  47. cur = get_db().cursor()
  48. cur.execute("UPDATE %s SET state = 'I', stepstate = NULL , start = NULL, end = NULL " % cls.__table_name__)
  49. get_db().commit()
  50. @classmethod
  51. def update_state(cls, id, state):
  52. cur = get_db().cursor()
  53. cur.execute("UPDATE %s SET state = ? WHERE id =?" % cls.__table_name__, (state, id))
  54. get_db().commit()
  55. @classmethod
  56. def update_step_state(cls, id, state):
  57. cur = get_db().cursor()
  58. cur.execute("UPDATE %s SET stepstate = ? WHERE id =?" % cls.__table_name__, (json.dumps(state),id))
  59. get_db().commit()
  60. @classmethod
  61. def sort(cls, new_order):
  62. cur = get_db().cursor()
  63. for e in new_order:
  64. cur.execute("UPDATE %s SET '%s' = ? WHERE id = ?" % (cls.__table_name__, "order"), (e[1], e[0]))
  65. get_db().commit()
  66. class Fermenter(DBModel):
  67. __fields__ = ["name", "brewname", "sensor", "sensor2", "sensor3", "heater", "cooler", "logic", "config", "target_temp"]
  68. __table_name__ = "fermenter"
  69. __json_fields__ = ["config"]
  70. class FermenterStep(DBModel):
  71. __fields__ = ["name", "days", "hours", "minutes", "temp", "direction", "order", "state", "start", "end", "timer_start", "fermenter_id"]
  72. __table_name__ = "fermenter_step"
  73. @classmethod
  74. def get_by_fermenter_id(cls, id):
  75. cur = get_db().cursor()
  76. cur.execute("SELECT * FROM %s WHERE fermenter_id = ?" % cls.__table_name__,(id,))
  77. result = []
  78. for r in cur.fetchall():
  79. result.append(cls(r))
  80. return result
  81. @classmethod
  82. def get_max_order(cls,id):
  83. cur = get_db().cursor()
  84. cur.execute("SELECT max(fermenter_step.'order') as 'order' FROM %s WHERE fermenter_id = ?" % cls.__table_name__, (id,))
  85. r = cur.fetchone()
  86. return r.get("order")
  87. @classmethod
  88. def update_state(cls, id, state):
  89. cur = get_db().cursor()
  90. cur.execute("UPDATE %s SET state = ? WHERE id =?" % cls.__table_name__, (state, id))
  91. get_db().commit()
  92. @classmethod
  93. def update_timer(cls, id, timer):
  94. cur = get_db().cursor()
  95. cur.execute("UPDATE %s SET timer_start = ? WHERE id =?" % cls.__table_name__, (timer, id))
  96. get_db().commit()
  97. @classmethod
  98. def get_by_state(cls, state):
  99. cur = get_db().cursor()
  100. cur.execute("SELECT * FROM %s WHERE state = ?" % cls.__table_name__, state)
  101. r = cur.fetchone()
  102. if r is not None:
  103. return cls(r)
  104. else:
  105. return None
  106. @classmethod
  107. def reset_all_steps(cls,id):
  108. cur = get_db().cursor()
  109. cur.execute("UPDATE %s SET state = 'I', start = NULL, end = NULL, timer_start = NULL WHERE fermenter_id = ?" % cls.__table_name__, (id,))
  110. get_db().commit()