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.

63 lines
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")