diff --git a/homeassistant/components/modbus/__init__.py b/homeassistant/components/modbus/__init__.py index f1f1e656805..a4e0c21ec5f 100644 --- a/homeassistant/components/modbus/__init__.py +++ b/homeassistant/components/modbus/__init__.py @@ -16,10 +16,11 @@ from homeassistant.components.switch import ( DEVICE_CLASSES_SCHEMA as SWITCH_DEVICE_CLASSES_SCHEMA, ) from homeassistant.const import ( - ATTR_STATE, CONF_ADDRESS, + CONF_BINARY_SENSORS, CONF_COMMAND_OFF, CONF_COMMAND_ON, + CONF_COUNT, CONF_COVERS, CONF_DELAY, CONF_DEVICE_CLASS, @@ -29,8 +30,11 @@ from homeassistant.const import ( CONF_OFFSET, CONF_PORT, CONF_SCAN_INTERVAL, + CONF_SENSORS, CONF_SLAVE, CONF_STRUCTURE, + CONF_SWITCHES, + CONF_TEMPERATURE_UNIT, CONF_TIMEOUT, CONF_TYPE, CONF_UNIT_OF_MEASUREMENT, @@ -40,6 +44,7 @@ import homeassistant.helpers.config_validation as cv from .const import ( ATTR_ADDRESS, ATTR_HUB, + ATTR_STATE, ATTR_UNIT, ATTR_VALUE, CALL_TYPE_COIL, @@ -47,10 +52,8 @@ from .const import ( CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_INPUT, CONF_BAUDRATE, - CONF_BINARY_SENSORS, CONF_BYTESIZE, CONF_CLIMATES, - CONF_COUNT, CONF_CURRENT_TEMP, CONF_CURRENT_TEMP_REGISTER_TYPE, CONF_DATA_COUNT, @@ -63,7 +66,6 @@ from .const import ( CONF_REGISTER, CONF_REVERSE_ORDER, CONF_SCALE, - CONF_SENSORS, CONF_STATE_CLOSED, CONF_STATE_CLOSING, CONF_STATE_OFF, @@ -74,9 +76,7 @@ from .const import ( CONF_STATUS_REGISTER_TYPE, CONF_STEP, CONF_STOPBITS, - CONF_SWITCHES, CONF_TARGET_TEMP, - CONF_UNIT, CONF_VERIFY_REGISTER, CONF_VERIFY_STATE, DATA_TYPE_CUSTOM, @@ -143,7 +143,7 @@ CLIMATE_SCHEMA = BASE_COMPONENT_SCHEMA.extend( vol.Optional(CONF_MIN_TEMP, default=5): cv.positive_int, vol.Optional(CONF_STEP, default=0.5): vol.Coerce(float), vol.Optional(CONF_STRUCTURE, default=DEFAULT_STRUCTURE_PREFIX): cv.string, - vol.Optional(CONF_UNIT, default=DEFAULT_TEMP_UNIT): cv.string, + vol.Optional(CONF_TEMPERATURE_UNIT, default=DEFAULT_TEMP_UNIT): cv.string, } ) diff --git a/homeassistant/components/modbus/binary_sensor.py b/homeassistant/components/modbus/binary_sensor.py index 909f0088c38..e422eb7528e 100644 --- a/homeassistant/components/modbus/binary_sensor.py +++ b/homeassistant/components/modbus/binary_sensor.py @@ -15,6 +15,7 @@ from homeassistant.components.binary_sensor import ( ) from homeassistant.const import ( CONF_ADDRESS, + CONF_BINARY_SENSORS, CONF_DEVICE_CLASS, CONF_NAME, CONF_SCAN_INTERVAL, @@ -31,7 +32,6 @@ from homeassistant.helpers.typing import ( from .const import ( CALL_TYPE_COIL, CALL_TYPE_DISCRETE, - CONF_BINARY_SENSORS, CONF_COILS, CONF_HUB, CONF_INPUT_TYPE, diff --git a/homeassistant/components/modbus/climate.py b/homeassistant/components/modbus/climate.py index 6ca1d5d63d3..6140ac038f7 100644 --- a/homeassistant/components/modbus/climate.py +++ b/homeassistant/components/modbus/climate.py @@ -15,12 +15,12 @@ from homeassistant.components.climate.const import ( SUPPORT_TARGET_TEMPERATURE, ) from homeassistant.const import ( - ATTR_TEMPERATURE, CONF_NAME, CONF_OFFSET, CONF_SCAN_INTERVAL, CONF_SLAVE, CONF_STRUCTURE, + CONF_TEMPERATURE_UNIT, TEMP_CELSIUS, TEMP_FAHRENHEIT, ) @@ -32,6 +32,7 @@ from homeassistant.helpers.typing import ( ) from .const import ( + ATTR_TEMPERATURE, CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_INPUT, CONF_CLIMATES, @@ -45,7 +46,6 @@ from .const import ( CONF_SCALE, CONF_STEP, CONF_TARGET_TEMP, - CONF_UNIT, DATA_TYPE_CUSTOM, DEFAULT_STRUCT_FORMAT, MODBUS_DOMAIN, @@ -130,7 +130,7 @@ class ModbusThermostat(ClimateEntity): self._scale = config[CONF_SCALE] self._scan_interval = timedelta(seconds=config[CONF_SCAN_INTERVAL]) self._offset = config[CONF_OFFSET] - self._unit = config[CONF_UNIT] + self._unit = config[CONF_TEMPERATURE_UNIT] self._max_temp = config[CONF_MAX_TEMP] self._min_temp = config[CONF_MIN_TEMP] self._temp_step = config[CONF_STEP] @@ -208,11 +208,11 @@ class ModbusThermostat(ClimateEntity): def set_temperature(self, **kwargs): """Set new target temperature.""" + if ATTR_TEMPERATURE not in kwargs: + return target_temperature = int( (kwargs.get(ATTR_TEMPERATURE) - self._offset) / self._scale ) - if target_temperature is None: - return byte_string = struct.pack(self._structure, target_temperature) register_value = struct.unpack(">h", byte_string[0:2])[0] self._write_register(self._target_temperature_register, register_value) diff --git a/homeassistant/components/modbus/const.py b/homeassistant/components/modbus/const.py index fde593aa966..ffe89757ef1 100644 --- a/homeassistant/components/modbus/const.py +++ b/homeassistant/components/modbus/const.py @@ -2,22 +2,51 @@ # configuration names CONF_BAUDRATE = "baudrate" +CONF_BINARY_SENSOR = "binary_sensor" CONF_BYTESIZE = "bytesize" +CONF_CLIMATE = "climate" +CONF_CLIMATES = "climates" +CONF_COILS = "coils" +CONF_COVER = "cover" +CONF_CURRENT_TEMP = "current_temp_register" +CONF_CURRENT_TEMP_REGISTER_TYPE = "current_temp_register_type" +CONF_DATA_COUNT = "data_count" +CONF_DATA_TYPE = "data_type" CONF_HUB = "hub" +CONF_INPUTS = "inputs" +CONF_INPUT_TYPE = "input_type" +CONF_MAX_TEMP = "max_temp" +CONF_MIN_TEMP = "min_temp" CONF_PARITY = "parity" -CONF_STOPBITS = "stopbits" CONF_REGISTER = "register" CONF_REGISTER_TYPE = "register_type" CONF_REGISTERS = "registers" CONF_REVERSE_ORDER = "reverse_order" -CONF_SCALE = "scale" -CONF_COUNT = "count" CONF_PRECISION = "precision" -CONF_COILS = "coils" +CONF_SCALE = "scale" +CONF_SENSOR = "sensor" +CONF_STATE_CLOSED = "state_closed" +CONF_STATE_CLOSING = "state_closing" +CONF_STATE_OFF = "state_off" +CONF_STATE_ON = "state_on" +CONF_STATE_OPEN = "state_open" +CONF_STATE_OPENING = "state_opening" +CONF_STATUS_REGISTER = "status_register" +CONF_STATUS_REGISTER_TYPE = "status_register_type" +CONF_STEP = "temp_step" +CONF_STOPBITS = "stopbits" +CONF_SWITCH = "switch" +CONF_TARGET_TEMP = "target_temp_register" +CONF_VERIFY_REGISTER = "verify_register" +CONF_VERIFY_STATE = "verify_state" -# integration names -DEFAULT_HUB = "modbus_hub" -MODBUS_DOMAIN = "modbus" +# service call attributes +ATTR_ADDRESS = "address" +ATTR_HUB = "hub" +ATTR_UNIT = "unit" +ATTR_VALUE = "value" +ATTR_STATE = "state" +ATTR_TEMPERATURE = "temperature" # data types DATA_TYPE_CUSTOM = "custom" @@ -32,66 +61,19 @@ CALL_TYPE_DISCRETE = "discrete_input" CALL_TYPE_REGISTER_HOLDING = "holding" CALL_TYPE_REGISTER_INPUT = "input" -# the following constants are TBD. -# changing those in general causes a breaking change, because -# the contents of configuration.yaml needs to be updated, -# therefore they are left to a later date. -# but kept here, with a reference to the file using them. - -# __init.py -ATTR_ADDRESS = "address" -ATTR_HUB = "hub" -ATTR_UNIT = "unit" -ATTR_VALUE = "value" +# service calls SERVICE_WRITE_COIL = "write_coil" SERVICE_WRITE_REGISTER = "write_register" + +# integration names +DEFAULT_HUB = "modbus_hub" DEFAULT_SCAN_INTERVAL = 15 # seconds - -# binary_sensor.py -CONF_INPUTS = "inputs" -CONF_INPUT_TYPE = "input_type" -CONF_BINARY_SENSORS = "binary_sensors" -CONF_BINARY_SENSOR = "binary_sensor" - -# sensor.py -# CONF_DATA_TYPE = "data_type" +DEFAULT_SLAVE = 1 +DEFAULT_STRUCTURE_PREFIX = ">f" DEFAULT_STRUCT_FORMAT = { DATA_TYPE_INT: {1: "h", 2: "i", 4: "q"}, DATA_TYPE_UINT: {1: "H", 2: "I", 4: "Q"}, DATA_TYPE_FLOAT: {1: "e", 2: "f", 4: "d"}, } -CONF_SENSOR = "sensor" -CONF_SENSORS = "sensors" - -# switch.py -CONF_STATE_OFF = "state_off" -CONF_STATE_ON = "state_on" -CONF_VERIFY_REGISTER = "verify_register" -CONF_VERIFY_STATE = "verify_state" -CONF_SWITCH = "switch" -CONF_SWITCHES = "switches" - -# climate.py -CONF_CLIMATES = "climates" -CONF_CLIMATE = "climate" -CONF_TARGET_TEMP = "target_temp_register" -CONF_CURRENT_TEMP = "current_temp_register" -CONF_CURRENT_TEMP_REGISTER_TYPE = "current_temp_register_type" -CONF_DATA_TYPE = "data_type" -CONF_DATA_COUNT = "data_count" -CONF_UNIT = "temperature_unit" -CONF_MAX_TEMP = "max_temp" -CONF_MIN_TEMP = "min_temp" -CONF_STEP = "temp_step" -DEFAULT_STRUCTURE_PREFIX = ">f" DEFAULT_TEMP_UNIT = "C" - -# cover.py -CONF_COVER = "cover" -CONF_STATE_OPEN = "state_open" -CONF_STATE_CLOSED = "state_closed" -CONF_STATE_OPENING = "state_opening" -CONF_STATE_CLOSING = "state_closing" -CONF_STATUS_REGISTER = "status_register" -CONF_STATUS_REGISTER_TYPE = "status_register_type" -DEFAULT_SLAVE = 1 +MODBUS_DOMAIN = "modbus" diff --git a/homeassistant/components/modbus/modbus.py b/homeassistant/components/modbus/modbus.py index f55e77c9119..099289d8472 100644 --- a/homeassistant/components/modbus/modbus.py +++ b/homeassistant/components/modbus/modbus.py @@ -6,13 +6,15 @@ from pymodbus.client.sync import ModbusSerialClient, ModbusTcpClient, ModbusUdpC from pymodbus.transaction import ModbusRtuFramer from homeassistant.const import ( - ATTR_STATE, + CONF_BINARY_SENSORS, CONF_COVERS, CONF_DELAY, CONF_HOST, CONF_METHOD, CONF_NAME, CONF_PORT, + CONF_SENSORS, + CONF_SWITCHES, CONF_TIMEOUT, CONF_TYPE, EVENT_HOMEASSISTANT_STOP, @@ -22,21 +24,19 @@ from homeassistant.helpers.discovery import load_platform from .const import ( ATTR_ADDRESS, ATTR_HUB, + ATTR_STATE, ATTR_UNIT, ATTR_VALUE, CONF_BAUDRATE, CONF_BINARY_SENSOR, - CONF_BINARY_SENSORS, CONF_BYTESIZE, CONF_CLIMATE, CONF_CLIMATES, CONF_COVER, CONF_PARITY, CONF_SENSOR, - CONF_SENSORS, CONF_STOPBITS, CONF_SWITCH, - CONF_SWITCHES, MODBUS_DOMAIN as DOMAIN, SERVICE_WRITE_COIL, SERVICE_WRITE_REGISTER, diff --git a/homeassistant/components/modbus/sensor.py b/homeassistant/components/modbus/sensor.py index 7aa08070d67..21069d86427 100644 --- a/homeassistant/components/modbus/sensor.py +++ b/homeassistant/components/modbus/sensor.py @@ -17,10 +17,12 @@ from homeassistant.components.sensor import ( ) from homeassistant.const import ( CONF_ADDRESS, + CONF_COUNT, CONF_DEVICE_CLASS, CONF_NAME, CONF_OFFSET, CONF_SCAN_INTERVAL, + CONF_SENSORS, CONF_SLAVE, CONF_STRUCTURE, CONF_UNIT_OF_MEASUREMENT, @@ -37,7 +39,6 @@ from homeassistant.helpers.typing import ( from .const import ( CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_INPUT, - CONF_COUNT, CONF_DATA_TYPE, CONF_HUB, CONF_INPUT_TYPE, @@ -47,7 +48,6 @@ from .const import ( CONF_REGISTERS, CONF_REVERSE_ORDER, CONF_SCALE, - CONF_SENSORS, DATA_TYPE_CUSTOM, DATA_TYPE_FLOAT, DATA_TYPE_INT, diff --git a/tests/components/modbus/test_modbus_binary_sensor.py b/tests/components/modbus/test_modbus_binary_sensor.py index bc91e3714bb..5c4e71cd669 100644 --- a/tests/components/modbus/test_modbus_binary_sensor.py +++ b/tests/components/modbus/test_modbus_binary_sensor.py @@ -5,12 +5,12 @@ from homeassistant.components.binary_sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.components.modbus.const import ( CALL_TYPE_COIL, CALL_TYPE_DISCRETE, - CONF_BINARY_SENSORS, CONF_INPUT_TYPE, CONF_INPUTS, ) from homeassistant.const import ( CONF_ADDRESS, + CONF_BINARY_SENSORS, CONF_DEVICE_CLASS, CONF_NAME, CONF_SLAVE, diff --git a/tests/components/modbus/test_modbus_sensor.py b/tests/components/modbus/test_modbus_sensor.py index dd485e59835..ce9889d8aaa 100644 --- a/tests/components/modbus/test_modbus_sensor.py +++ b/tests/components/modbus/test_modbus_sensor.py @@ -4,7 +4,6 @@ import pytest from homeassistant.components.modbus.const import ( CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_INPUT, - CONF_COUNT, CONF_DATA_TYPE, CONF_INPUT_TYPE, CONF_PRECISION, @@ -13,7 +12,6 @@ from homeassistant.components.modbus.const import ( CONF_REGISTERS, CONF_REVERSE_ORDER, CONF_SCALE, - CONF_SENSORS, DATA_TYPE_FLOAT, DATA_TYPE_INT, DATA_TYPE_STRING, @@ -22,9 +20,11 @@ from homeassistant.components.modbus.const import ( from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.const import ( CONF_ADDRESS, + CONF_COUNT, CONF_DEVICE_CLASS, CONF_NAME, CONF_OFFSET, + CONF_SENSORS, CONF_SLAVE, ) diff --git a/tests/components/modbus/test_modbus_switch.py b/tests/components/modbus/test_modbus_switch.py index a6ec1eb86fd..91ab5bf97df 100644 --- a/tests/components/modbus/test_modbus_switch.py +++ b/tests/components/modbus/test_modbus_switch.py @@ -12,7 +12,6 @@ from homeassistant.components.modbus.const import ( CONF_REGISTERS, CONF_STATE_OFF, CONF_STATE_ON, - CONF_SWITCHES, CONF_VERIFY_REGISTER, CONF_VERIFY_STATE, ) @@ -24,6 +23,7 @@ from homeassistant.const import ( CONF_DEVICE_CLASS, CONF_NAME, CONF_SLAVE, + CONF_SWITCHES, STATE_OFF, STATE_ON, )