From 9a34e7174cdab95e7112899f018ec49deff69ac5 Mon Sep 17 00:00:00 2001 From: goldminenine <34691572+goldminenine@users.noreply.github.com> Date: Fri, 29 Dec 2017 09:19:34 +0100 Subject: [PATCH] Update modbus.py (#11238) Support of MODBUS RTU over TCP ethernet mode. See more description here: https://www.eltima.com/modbus-over-ethernet/ --- homeassistant/components/modbus.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/modbus.py b/homeassistant/components/modbus.py index 001c8d1188a..293e86b014e 100644 --- a/homeassistant/components/modbus.py +++ b/homeassistant/components/modbus.py @@ -40,7 +40,7 @@ SERIAL_SCHEMA = { ETHERNET_SCHEMA = { vol.Required(CONF_HOST): cv.string, vol.Required(CONF_PORT): cv.positive_int, - vol.Required(CONF_TYPE): vol.Any('tcp', 'udp'), + vol.Required(CONF_TYPE): vol.Any('tcp', 'udp', 'rtuovertcp'), vol.Optional(CONF_TIMEOUT, default=3): cv.socket_timeout, } @@ -92,6 +92,13 @@ def setup(hass, config): bytesize=config[DOMAIN][CONF_BYTESIZE], parity=config[DOMAIN][CONF_PARITY], timeout=config[DOMAIN][CONF_TIMEOUT]) + elif client_type == 'rtuovertcp': + from pymodbus.client.sync import ModbusTcpClient as ModbusClient + from pymodbus.transaction import ModbusRtuFramer as ModbusFramer + client = ModbusClient(host=config[DOMAIN][CONF_HOST], + port=config[DOMAIN][CONF_PORT], + framer=ModbusFramer, + timeout=config[DOMAIN][CONF_TIMEOUT]) elif client_type == 'tcp': from pymodbus.client.sync import ModbusTcpClient as ModbusClient client = ModbusClient(host=config[DOMAIN][CONF_HOST],