選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

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