Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

63 wiersze
1.6KB

  1. from typing import List
  2. from MAXDevice import MAXDevice, MAXThermostat, MAXPushButton
  3. from MAXCube import CUL
  4. from MAXPacketHandler import MAXPacketHandler
  5. from MAXPacket import MAXPacketFactory
  6. from time import sleep
  7. import sys
  8. import signal
  9. DEBUG = True
  10. devices: List[MAXDevice] = []
  11. quit_flag = False
  12. cube: CUL = None
  13. handler: MAXPacketHandler = None
  14. def read_devices(file_name):
  15. file = open(file_name, "r")
  16. lines = file.readlines()
  17. file.close()
  18. for line in lines:
  19. if not line.startswith("#") and line.strip() != "\n":
  20. new_dev = MAXDevice.from_string(line)
  21. if new_dev is not None:
  22. devices.append(new_dev)
  23. def write_devices(file_name):
  24. file = open(file_name, "w")
  25. for device in devices:
  26. dev_str = device.serialize().replace("\n", "")
  27. file.write(dev_str)
  28. file.write("\n")
  29. file.close()
  30. def receive_loop():
  31. global quit_flag
  32. while not quit_flag and cube.is_connected():
  33. try:
  34. resp = cube.response()
  35. if resp is not None and resp[0:1] == "Z":
  36. pkt = MAXPacketFactory.create_packet(resp)
  37. handler.handle_msg(pkt)
  38. sleep(0.1)
  39. except KeyboardInterrupt:
  40. quit_flag = True
  41. return
  42. if __name__ == '__main__':
  43. read_devices("devices.conf")
  44. cube = CUL("123456")
  45. cube.connect("COM10")
  46. print(cube.version_string())
  47. handler = MAXPacketHandler(cube, devices)
  48. signal.signal(signal.SIGINT, signal.default_int_handler)
  49. receive_loop()
  50. cube.disconnect()
  51. write_devices("devices.conf")