S&B Volcano vaporizer remote control with Pi Pico W
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.

state_heat.py 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env python
  2. import uasyncio as asyncio
  3. from poll import set_state, set_target_temp
  4. class StateHeat:
  5. def __init__(self, lcd, state):
  6. self.lcd = lcd
  7. self.state = state
  8. self.lock = asyncio.Lock()
  9. def enter(self, val = None):
  10. self.value = val
  11. self.heater = asyncio.create_task(self.heat())
  12. self.done = False
  13. self.step = False
  14. def exit(self):
  15. self.heater.cancel()
  16. if self.lock.locked():
  17. self.lock.release()
  18. return (self.value[0], self.value[1], 0)
  19. async def heat(self):
  20. pump = None
  21. if self.state == False:
  22. pump = False
  23. print("Setting heater: {}".format(self.state))
  24. await set_state(self.value[0], (self.state, pump))
  25. if self.state == False:
  26. async with self.lock:
  27. self.step = True
  28. temp = self.value[1]["reset_temperature"]
  29. if temp != None:
  30. print("Reset temperature to default value")
  31. await set_target_temp(self.value[0], temp)
  32. async with self.lock:
  33. self.done = True
  34. async def draw(self):
  35. self.lcd.text("Running Workflow - Heat {}".format(self.state), 0, 10, self.lcd.red)
  36. keys = self.lcd.buttons()
  37. if keys.once("y"):
  38. print("user abort")
  39. if self.state:
  40. async with self.lock:
  41. if self.done:
  42. return 4 # heat off
  43. else:
  44. return 5 # disconnect
  45. else:
  46. return 5 # disconnect
  47. async with self.lock:
  48. if self.done:
  49. if self.state == False:
  50. return 5 # disconnect
  51. else:
  52. return 6 # wait for temperature
  53. else:
  54. if self.state == False:
  55. if self.state == False:
  56. self.lcd.text("Turning heater off...", 0, int(self.lcd.height / 2) - 5, self.lcd.white)
  57. else:
  58. self.lcd.text("Resetting temperature...", 0, int(self.lcd.height / 2) - 5, self.lcd.white)
  59. else:
  60. self.lcd.text("Turning heater on...", 0, int(self.lcd.height / 2) - 5, self.lcd.white)
  61. return -1 # stay in this state