diff --git a/homeassistant/components/modbus.py b/homeassistant/components/modbus.py index 4cda6fcd20c..97b0ec7405a 100644 --- a/homeassistant/components/modbus.py +++ b/homeassistant/components/modbus.py @@ -1,5 +1,3 @@ -__author__ = "Aurélien Correia" - """ components.modbus ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -24,13 +22,10 @@ modbus: parity: N """ -import time import logging -from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP -import homeassistant.loader as loader -from homeassistant.helpers import validate_config -import homeassistant.components as core +from homeassistant.const import (EVENT_HOMEASSISTANT_START, + EVENT_HOMEASSISTANT_STOP) # The domain of your component. Should be equal to the name of your component DOMAIN = "modbus" @@ -41,7 +36,7 @@ DEPENDENCIES = [] # Type of network MEDIUM = "type" -## if MEDIUM == "serial" +# if MEDIUM == "serial" METHOD = "method" SERIAL_PORT = "port" BAUDRATE = "baudrate" @@ -49,7 +44,7 @@ STOPBITS = "stopbits" BYTESIZE = "bytesize" PARITY = "parity" -## if MEDIUM == "tcp" or "udp" +# if MEDIUM == "tcp" or "udp" HOST = "host" IP_PORT = "port" @@ -58,38 +53,44 @@ _LOGGER = logging.getLogger(__name__) NETWORK = None TYPE = None + def setup(hass, config): """ Setup Modbus component. """ + # Modbus connection type + # pylint: disable=global-statement, import-error global TYPE TYPE = config[DOMAIN][MEDIUM] # Connect to Modbus network + # pylint: disable=global-statement, import-error global NETWORK if TYPE == "serial": from pymodbus.client.sync import ModbusSerialClient as ModbusClient - NETWORK = ModbusClient( method=config[DOMAIN][METHOD], - port=config[DOMAIN][SERIAL_PORT], - baudrate=config[DOMAIN][BAUDRATE], - stopbits=config[DOMAIN][STOPBITS], - bytesize=config[DOMAIN][BYTESIZE], - parity=config[DOMAIN][PARITY]) + NETWORK = ModbusClient(method=config[DOMAIN][METHOD], + port=config[DOMAIN][SERIAL_PORT], + baudrate=config[DOMAIN][BAUDRATE], + stopbits=config[DOMAIN][STOPBITS], + bytesize=config[DOMAIN][BYTESIZE], + parity=config[DOMAIN][PARITY]) elif TYPE == "tcp": from pymodbus.client.sync import ModbusTcpClient as ModbusClient - NETWORK = ModbusClient( host=config[DOMAIN][HOST], - port=config[DOMAIN][IP_PORT]) + NETWORK = ModbusClient(host=config[DOMAIN][HOST], + port=config[DOMAIN][IP_PORT]) elif TYPE == "udp": from pymodbus.client.sync import ModbusUdpClient as ModbusClient - NETWORK = ModbusClient( host=config[DOMAIN][HOST], - port=config[DOMAIN][IP_PORT]) + NETWORK = ModbusClient(host=config[DOMAIN][HOST], + port=config[DOMAIN][IP_PORT]) else: return False def stop_modbus(event): + """ Stop Modbus service""" NETWORK.close() def start_modbus(event): + """ Start Modbus service""" NETWORK.connect() hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_modbus) diff --git a/homeassistant/components/sensor/modbus.py b/homeassistant/components/sensor/modbus.py index e186ee01fef..90593875a54 100644 --- a/homeassistant/components/sensor/modbus.py +++ b/homeassistant/components/sensor/modbus.py @@ -1,5 +1,3 @@ -__author__ = "Aurélien Correia" - """ Support for Modbus sensors. @@ -42,6 +40,7 @@ from homeassistant.const import ( _LOGGER = logging.getLogger(__name__) + def setup_platform(hass, config, add_devices, discovery_info=None): """ Read config and create Modbus devices """ sensors = [] @@ -52,15 +51,24 @@ def setup_platform(hass, config, add_devices, discovery_info=None): registers = config.get("registers") for regnum, register in registers.items(): if register.get("name"): - sensors.append(ModbusSensor(register.get("name"), slave, regnum, None, register.get("unit"))) + sensors.append(ModbusSensor(register.get("name"), + slave, + regnum, + None, + register.get("unit"))) if register.get("bits"): bits = register.get("bits") for bitnum, bit in bits.items(): if bit.get("name"): - sensors.append(ModbusSensor(bit.get("name"), slave, regnum, bitnum)) + sensors.append(ModbusSensor(bit.get("name"), + slave, + regnum, + bitnum)) add_devices(sensors) + class ModbusSensor(Entity): + # pylint: disable=too-many-arguments """ Represents a Modbus Sensor """ def __init__(self, name, slave, register, bit=None, unit=None): @@ -76,13 +84,16 @@ class ModbusSensor(Entity): @property def should_poll(self): - """ We should poll, because slaves are not allowed to initiate communication on Modbus networks""" + """ We should poll, because slaves are not allowed to + initiate communication on Modbus networks""" return True @property def unique_id(self): """ Returns a unique id. """ - return "MODBUS-SENSOR-{}-{}-{}".format(self.slave, self.register, self.bit) + return "MODBUS-SENSOR-{}-{}-{}".format(self.slave, + self.register, + self.bit) @property def state(self): @@ -113,10 +124,12 @@ class ModbusSensor(Entity): return attr def update(self): - result = modbus.NETWORK.read_holding_registers(unit=self.slave,address=self.register,count=1) + result = modbus.NETWORK.read_holding_registers(unit=self.slave, + address=self.register, + count=1) val = 0 - for i, e in enumerate(result.registers): - val += e * (2**(i*16)) + for i, res in enumerate(result.registers): + val += res * (2**(i*16)) if self.bit: self._value = val & (0x0001 << self.bit) else: diff --git a/homeassistant/components/switch/modbus.py b/homeassistant/components/switch/modbus.py index 6f26d7997f3..7e5e039337f 100644 --- a/homeassistant/components/switch/modbus.py +++ b/homeassistant/components/switch/modbus.py @@ -1,5 +1,3 @@ -__author__ = "Aurélien Correia" - """ Support for Modbus switches. @@ -34,6 +32,7 @@ from homeassistant.helpers.entity import ToggleEntity _LOGGER = logging.getLogger(__name__) + def setup_platform(hass, config, add_devices, discovery_info=None): """ Read config and create Modbus devices """ switches = [] @@ -46,9 +45,13 @@ def setup_platform(hass, config, add_devices, discovery_info=None): bits = register.get("bits") for bitnum, bit in bits.items(): if bit.get("name"): - switches.append(ModbusSwitch(bit.get("name"), slave, regnum, bitnum)) + switches.append(ModbusSwitch(bit.get("name"), + slave, + regnum, + bitnum)) add_devices(switches) + class ModbusSwitch(ToggleEntity): """ Represents a Modbus Switch """ @@ -65,13 +68,16 @@ class ModbusSwitch(ToggleEntity): @property def should_poll(self): - """ We should poll, because slaves are not allowed to initiate communication on Modbus networks""" + """ We should poll, because slaves are not allowed to + initiate communication on Modbus networks""" return True @property def unique_id(self): """ Returns a unique id. """ - return "MODBUS-SWITCH-{}-{}-{}".format(self.slave, self.register, self.bit) + return "MODBUS-SWITCH-{}-{}-{}".format(self.slave, + self.register, + self.bit) @property def is_on(self): @@ -92,18 +98,24 @@ class ModbusSwitch(ToggleEntity): if self.register_value is None: self.update() val = self.register_value | (0x0001 << self.bit) - modbus.NETWORK.write_register(unit=self.slave,address=self.register,value=val) + modbus.NETWORK.write_register(unit=self.slave, + address=self.register, + value=val) def turn_off(self, **kwargs): if self.register_value is None: self.update() val = self.register_value & ~(0x0001 << self.bit) - modbus.NETWORK.write_register(unit=self.slave,address=self.register,value=val) + modbus.NETWORK.write_register(unit=self.slave, + address=self.register, + value=val) def update(self): - result = modbus.NETWORK.read_holding_registers(unit=self.slave,address=self.register,count=1) + result = modbus.NETWORK.read_holding_registers(unit=self.slave, + address=self.register, + count=1) val = 0 - for i, e in enumerate(result.registers): - val += e * (2**(i*16)) + for i, res in enumerate(result.registers): + val += res * (2**(i*16)) self.register_value = val self._is_on = (val & (0x0001 << self.bit) > 0)