diff --git a/platypush/backend/serial/__init__.py b/platypush/backend/serial/__init__.py index 22531084..3164ad4f 100644 --- a/platypush/backend/serial/__init__.py +++ b/platypush/backend/serial/__init__.py @@ -1,40 +1,50 @@ import logging import serial +import tempfile import time from platypush.backend import Backend from platypush.message.event.serial import SerialDataEvent - class SerialBackend(Backend): - state = None - def __init__(self, device, baud_rate=9600, **kwargs): super().__init__(**kwargs) self.device = device self.baud_rate = baud_rate self.serial = None + self.data = None + self.tmp_file = tempfile.TemporaryFile() def send_message(self, msg): pass - def get_state(self): - return self.state + def get_data(self): + self.tmp_file.seek(0) + data = self.tmp_file.read() + self.tmp_file.seek(0) + + return data.decode('utf-8') def run(self): super().run() self.serial = serial.Serial(self.device, self.baud_rate) - prev_value = None logging.info('Initialized serial backend on device {}'.format(self.device)) - while not self.should_stop(): - value = self.serial.readline().decode('utf-8').strip() - if prev_value is None or value != prev_value: - self.bus.post(SerialDataEvent(data=value, device=self.device)) + try: + while not self.should_stop(): + new_data = self.serial.readline().decode('utf-8').strip() + if self.data is None or self.data != new_data: + self.bus.post(SerialDataEvent(data=new_data, device=self.device)) - prev_value = value + self.data = new_data + + self.tmp_file.seek(0) + self.tmp_file.write(self.data.encode('utf-8')) + self.tmp_file.seek(0) + finally: + self.tmp_file.close() # vim:sw=4:ts=4:et: diff --git a/platypush/plugins/serial/__init__.py b/platypush/plugins/serial/__init__.py new file mode 100644 index 00000000..2e352b2d --- /dev/null +++ b/platypush/plugins/serial/__init__.py @@ -0,0 +1,16 @@ +from platypush.context import get_backend +from platypush.message.response import Response + +from .. import Plugin + +class SerialPlugin(Plugin): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def get_data(self): + backend = get_backend('serial') + return Response(output=backend.get_data()) + + +# vim:sw=4:ts=4:et: +