From a024c1b162904163a8fb5be354b8d9e6a572876a Mon Sep 17 00:00:00 2001 From: ziotibia81 Date: Mon, 9 Oct 2017 23:51:18 +0200 Subject: [PATCH] Communication timeout support in modbus hub. (#9780) * Communication timeout support in modbus hub. Timeout parameter are taken from configuration and passed to pymodbus constructor. * CONF_TYPE and CONF_TIMEOUT imported from const.py --- homeassistant/components/modbus.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/modbus.py b/homeassistant/components/modbus.py index 9075eab2cdd..001c8d1188a 100644 --- a/homeassistant/components/modbus.py +++ b/homeassistant/components/modbus.py @@ -14,7 +14,7 @@ import homeassistant.helpers.config_validation as cv from homeassistant.config import load_yaml_config_file from homeassistant.const import ( EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, - CONF_HOST, CONF_METHOD, CONF_PORT, ATTR_STATE) + CONF_HOST, CONF_METHOD, CONF_PORT, CONF_TYPE, CONF_TIMEOUT, ATTR_STATE) DOMAIN = 'modbus' @@ -24,7 +24,6 @@ REQUIREMENTS = ['pymodbus==1.3.1'] CONF_BAUDRATE = 'baudrate' CONF_BYTESIZE = 'bytesize' CONF_STOPBITS = 'stopbits' -CONF_TYPE = 'type' CONF_PARITY = 'parity' SERIAL_SCHEMA = { @@ -35,12 +34,14 @@ SERIAL_SCHEMA = { vol.Required(CONF_PARITY): vol.Any('E', 'O', 'N'), vol.Required(CONF_STOPBITS): vol.Any(1, 2), vol.Required(CONF_TYPE): 'serial', + vol.Optional(CONF_TIMEOUT, default=3): cv.socket_timeout, } ETHERNET_SCHEMA = { vol.Required(CONF_HOST): cv.string, vol.Required(CONF_PORT): cv.positive_int, vol.Required(CONF_TYPE): vol.Any('tcp', 'udp'), + vol.Optional(CONF_TIMEOUT, default=3): cv.socket_timeout, } @@ -89,15 +90,18 @@ def setup(hass, config): baudrate=config[DOMAIN][CONF_BAUDRATE], stopbits=config[DOMAIN][CONF_STOPBITS], bytesize=config[DOMAIN][CONF_BYTESIZE], - parity=config[DOMAIN][CONF_PARITY]) + parity=config[DOMAIN][CONF_PARITY], + timeout=config[DOMAIN][CONF_TIMEOUT]) elif client_type == 'tcp': from pymodbus.client.sync import ModbusTcpClient as ModbusClient client = ModbusClient(host=config[DOMAIN][CONF_HOST], - port=config[DOMAIN][CONF_PORT]) + port=config[DOMAIN][CONF_PORT], + timeout=config[DOMAIN][CONF_TIMEOUT]) elif client_type == 'udp': from pymodbus.client.sync import ModbusUdpClient as ModbusClient client = ModbusClient(host=config[DOMAIN][CONF_HOST], - port=config[DOMAIN][CONF_PORT]) + port=config[DOMAIN][CONF_PORT], + timeout=config[DOMAIN][CONF_TIMEOUT]) else: return False