diff --git a/mqtt_io/modules/stream/serial.py b/mqtt_io/modules/stream/serial.py index bd913c68..cabac6bb 100644 --- a/mqtt_io/modules/stream/serial.py +++ b/mqtt_io/modules/stream/serial.py @@ -37,6 +37,17 @@ "empty": False, "allowed": STOPBITS_CHOICES, }, + "delimiter": { + "type": "string", + "required": False, + "empty": True + }, + "reset_before_read": { + "type": "boolean", + "required": False, + "empty": False, + "default": False + } } # pylint: disable=no-member @@ -80,7 +91,16 @@ def setup_module(self) -> None: self.ser.flushInput() def read(self) -> Optional[bytes]: - return self.ser.read(self.ser.in_waiting) or None + if("delimiter" in self.config): + if("reset_before_read" in self.config): + if(self.config["reset_before_read"]): + self.ser.reset_input_buffer() + data = self.ser.read_until(self.config["delimiter"].encode("utf-8")) + if data: + data = data[:-len(self.config["delimiter"])] + return data or None + else: + return self.ser.read(self.ser.in_waiting) or None def write(self, data: bytes) -> None: self.ser.write(data)