diff --git a/src/velbustcp/lib/connection/serial/bus.py b/src/velbustcp/lib/connection/serial/bus.py index 8a041bb..9b6356d 100644 --- a/src/velbustcp/lib/connection/serial/bus.py +++ b/src/velbustcp/lib/connection/serial/bus.py @@ -51,6 +51,8 @@ def handle_on_bus_fault(sender, **kwargs): self.__do_reconnect: bool = False self.__connected: bool = False + self.__serial_port = None + def __reconnect(self) -> None: """Reconnects until active. """ @@ -104,20 +106,21 @@ def __start(self) -> None: if not self.__port: raise ValueError("Couldn't find a port to open communication on") - serial_port = construct_serial_obj(self.__port) + if self.__serial_port is None: + self.__serial_port = construct_serial_obj(self.__port) - if not serial_port.isOpen(): + if not self.__serial_port.isOpen(): raise Exception("Couldn't open port {0}".format(self.__port)) # Now that we're connected, set connected state self.__connected = True # Create reader thread - self.__reader = serial.threaded.ReaderThread(serial_port, VelbusSerialProtocol()) + self.__reader = serial.threaded.ReaderThread(self.__serial_port, VelbusSerialProtocol()) self.__reader.start() # Create write thread - self.__writer = WriterThread(serial_port) + self.__writer = WriterThread(self.__serial_port) self.__writer.start() self.__logger.info("Serial connection active on port %s", self.__port) diff --git a/src/velbustcp/lib/connection/serial/writerthread.py b/src/velbustcp/lib/connection/serial/writerthread.py index c5d5db2..dcc2b0e 100644 --- a/src/velbustcp/lib/connection/serial/writerthread.py +++ b/src/velbustcp/lib/connection/serial/writerthread.py @@ -12,7 +12,7 @@ class WriterThread(threading.Thread): def __init__(self, serial_instance: Serial): - self.alive: bool = True + self.alive: bool = False self.__serial: Serial = serial_instance self.__logger = logging.getLogger("__main__." + __name__) self.__send_event: threading.Event = threading.Event() @@ -51,6 +51,7 @@ def run(self) -> None: """ last_send_time = time.monotonic() + self.alive = True while self.alive and self.__serial.is_open: self.__send_event.wait()