From a5aa1118937702ca8bec050614ee52dc14f8466b Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Tue, 7 Nov 2017 21:06:19 +0000 Subject: [PATCH] Add baudrate option to Serial sensor (#10439) * Add baudrate option Baudrate is essential! * line too long line too long (82 > 79 characters) * trailing whitespace * Rename const * Fix the missing one --- homeassistant/components/sensor/serial.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/sensor/serial.py b/homeassistant/components/sensor/serial.py index ffa8bcc3070..6f01a8f856b 100644 --- a/homeassistant/components/sensor/serial.py +++ b/homeassistant/components/sensor/serial.py @@ -19,11 +19,15 @@ REQUIREMENTS = ['pyserial-asyncio==0.4'] _LOGGER = logging.getLogger(__name__) CONF_SERIAL_PORT = 'serial_port' +CONF_BAUDRATE = 'baudrate' DEFAULT_NAME = "Serial Sensor" +DEFAULT_BAUDRATE = 9600 PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_SERIAL_PORT): cv.string, + vol.Optional(CONF_BAUDRATE, default=DEFAULT_BAUDRATE): + cv.positive_int, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, }) @@ -33,8 +37,9 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up the Serial sensor platform.""" name = config.get(CONF_NAME) port = config.get(CONF_SERIAL_PORT) + baudrate = config.get(CONF_BAUDRATE) - sensor = SerialSensor(name, port) + sensor = SerialSensor(name, port, baudrate) hass.bus.async_listen_once( EVENT_HOMEASSISTANT_STOP, sensor.stop_serial_read()) @@ -44,25 +49,26 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): class SerialSensor(Entity): """Representation of a Serial sensor.""" - def __init__(self, name, port): + def __init__(self, name, port, baudrate): """Initialize the Serial sensor.""" self._name = name self._state = None self._port = port + self._baudrate = baudrate self._serial_loop_task = None @asyncio.coroutine def async_added_to_hass(self): """Handle when an entity is about to be added to Home Assistant.""" self._serial_loop_task = self.hass.loop.create_task( - self.serial_read(self._port)) + self.serial_read(self._port, self._baudrate)) @asyncio.coroutine - def serial_read(self, device, **kwargs): + def serial_read(self, device, rate, **kwargs): """Read the data from the port.""" import serial_asyncio reader, _ = yield from serial_asyncio.open_serial_connection( - url=device, **kwargs) + url=device, baudrate=rate, **kwargs) while True: line = yield from reader.readline() self._state = line.decode('utf-8').strip()