Remove modbus duplicate strings (#48654)

* Reuse HA constants for serial configuration.

Reusing HA consts reduces the need for translation.

Sort/group constants in const.

* Change const name ATTR_* to CONF_*

* Correct wrong import

* ATTR_* for service and CONF_* for schemas.

* Revert change to service call.

* Rename CONF_TEMPERATURE -> ATTR_TEMPERATURE

Avoid possible division problem in set_temperature.
This commit is contained in:
jan iversen 2021-04-04 14:02:47 +02:00 committed by GitHub
parent d75f825530
commit 2511e1f229
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 66 additions and 84 deletions

View File

@ -16,10 +16,11 @@ from homeassistant.components.switch import (
DEVICE_CLASSES_SCHEMA as SWITCH_DEVICE_CLASSES_SCHEMA, DEVICE_CLASSES_SCHEMA as SWITCH_DEVICE_CLASSES_SCHEMA,
) )
from homeassistant.const import ( from homeassistant.const import (
ATTR_STATE,
CONF_ADDRESS, CONF_ADDRESS,
CONF_BINARY_SENSORS,
CONF_COMMAND_OFF, CONF_COMMAND_OFF,
CONF_COMMAND_ON, CONF_COMMAND_ON,
CONF_COUNT,
CONF_COVERS, CONF_COVERS,
CONF_DELAY, CONF_DELAY,
CONF_DEVICE_CLASS, CONF_DEVICE_CLASS,
@ -29,8 +30,11 @@ from homeassistant.const import (
CONF_OFFSET, CONF_OFFSET,
CONF_PORT, CONF_PORT,
CONF_SCAN_INTERVAL, CONF_SCAN_INTERVAL,
CONF_SENSORS,
CONF_SLAVE, CONF_SLAVE,
CONF_STRUCTURE, CONF_STRUCTURE,
CONF_SWITCHES,
CONF_TEMPERATURE_UNIT,
CONF_TIMEOUT, CONF_TIMEOUT,
CONF_TYPE, CONF_TYPE,
CONF_UNIT_OF_MEASUREMENT, CONF_UNIT_OF_MEASUREMENT,
@ -40,6 +44,7 @@ import homeassistant.helpers.config_validation as cv
from .const import ( from .const import (
ATTR_ADDRESS, ATTR_ADDRESS,
ATTR_HUB, ATTR_HUB,
ATTR_STATE,
ATTR_UNIT, ATTR_UNIT,
ATTR_VALUE, ATTR_VALUE,
CALL_TYPE_COIL, CALL_TYPE_COIL,
@ -47,10 +52,8 @@ from .const import (
CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_REGISTER_INPUT, CALL_TYPE_REGISTER_INPUT,
CONF_BAUDRATE, CONF_BAUDRATE,
CONF_BINARY_SENSORS,
CONF_BYTESIZE, CONF_BYTESIZE,
CONF_CLIMATES, CONF_CLIMATES,
CONF_COUNT,
CONF_CURRENT_TEMP, CONF_CURRENT_TEMP,
CONF_CURRENT_TEMP_REGISTER_TYPE, CONF_CURRENT_TEMP_REGISTER_TYPE,
CONF_DATA_COUNT, CONF_DATA_COUNT,
@ -63,7 +66,6 @@ from .const import (
CONF_REGISTER, CONF_REGISTER,
CONF_REVERSE_ORDER, CONF_REVERSE_ORDER,
CONF_SCALE, CONF_SCALE,
CONF_SENSORS,
CONF_STATE_CLOSED, CONF_STATE_CLOSED,
CONF_STATE_CLOSING, CONF_STATE_CLOSING,
CONF_STATE_OFF, CONF_STATE_OFF,
@ -74,9 +76,7 @@ from .const import (
CONF_STATUS_REGISTER_TYPE, CONF_STATUS_REGISTER_TYPE,
CONF_STEP, CONF_STEP,
CONF_STOPBITS, CONF_STOPBITS,
CONF_SWITCHES,
CONF_TARGET_TEMP, CONF_TARGET_TEMP,
CONF_UNIT,
CONF_VERIFY_REGISTER, CONF_VERIFY_REGISTER,
CONF_VERIFY_STATE, CONF_VERIFY_STATE,
DATA_TYPE_CUSTOM, 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_MIN_TEMP, default=5): cv.positive_int,
vol.Optional(CONF_STEP, default=0.5): vol.Coerce(float), vol.Optional(CONF_STEP, default=0.5): vol.Coerce(float),
vol.Optional(CONF_STRUCTURE, default=DEFAULT_STRUCTURE_PREFIX): cv.string, 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,
} }
) )

View File

@ -15,6 +15,7 @@ from homeassistant.components.binary_sensor import (
) )
from homeassistant.const import ( from homeassistant.const import (
CONF_ADDRESS, CONF_ADDRESS,
CONF_BINARY_SENSORS,
CONF_DEVICE_CLASS, CONF_DEVICE_CLASS,
CONF_NAME, CONF_NAME,
CONF_SCAN_INTERVAL, CONF_SCAN_INTERVAL,
@ -31,7 +32,6 @@ from homeassistant.helpers.typing import (
from .const import ( from .const import (
CALL_TYPE_COIL, CALL_TYPE_COIL,
CALL_TYPE_DISCRETE, CALL_TYPE_DISCRETE,
CONF_BINARY_SENSORS,
CONF_COILS, CONF_COILS,
CONF_HUB, CONF_HUB,
CONF_INPUT_TYPE, CONF_INPUT_TYPE,

View File

@ -15,12 +15,12 @@ from homeassistant.components.climate.const import (
SUPPORT_TARGET_TEMPERATURE, SUPPORT_TARGET_TEMPERATURE,
) )
from homeassistant.const import ( from homeassistant.const import (
ATTR_TEMPERATURE,
CONF_NAME, CONF_NAME,
CONF_OFFSET, CONF_OFFSET,
CONF_SCAN_INTERVAL, CONF_SCAN_INTERVAL,
CONF_SLAVE, CONF_SLAVE,
CONF_STRUCTURE, CONF_STRUCTURE,
CONF_TEMPERATURE_UNIT,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
) )
@ -32,6 +32,7 @@ from homeassistant.helpers.typing import (
) )
from .const import ( from .const import (
ATTR_TEMPERATURE,
CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_REGISTER_INPUT, CALL_TYPE_REGISTER_INPUT,
CONF_CLIMATES, CONF_CLIMATES,
@ -45,7 +46,6 @@ from .const import (
CONF_SCALE, CONF_SCALE,
CONF_STEP, CONF_STEP,
CONF_TARGET_TEMP, CONF_TARGET_TEMP,
CONF_UNIT,
DATA_TYPE_CUSTOM, DATA_TYPE_CUSTOM,
DEFAULT_STRUCT_FORMAT, DEFAULT_STRUCT_FORMAT,
MODBUS_DOMAIN, MODBUS_DOMAIN,
@ -130,7 +130,7 @@ class ModbusThermostat(ClimateEntity):
self._scale = config[CONF_SCALE] self._scale = config[CONF_SCALE]
self._scan_interval = timedelta(seconds=config[CONF_SCAN_INTERVAL]) self._scan_interval = timedelta(seconds=config[CONF_SCAN_INTERVAL])
self._offset = config[CONF_OFFSET] self._offset = config[CONF_OFFSET]
self._unit = config[CONF_UNIT] self._unit = config[CONF_TEMPERATURE_UNIT]
self._max_temp = config[CONF_MAX_TEMP] self._max_temp = config[CONF_MAX_TEMP]
self._min_temp = config[CONF_MIN_TEMP] self._min_temp = config[CONF_MIN_TEMP]
self._temp_step = config[CONF_STEP] self._temp_step = config[CONF_STEP]
@ -208,11 +208,11 @@ class ModbusThermostat(ClimateEntity):
def set_temperature(self, **kwargs): def set_temperature(self, **kwargs):
"""Set new target temperature.""" """Set new target temperature."""
if ATTR_TEMPERATURE not in kwargs:
return
target_temperature = int( target_temperature = int(
(kwargs.get(ATTR_TEMPERATURE) - self._offset) / self._scale (kwargs.get(ATTR_TEMPERATURE) - self._offset) / self._scale
) )
if target_temperature is None:
return
byte_string = struct.pack(self._structure, target_temperature) byte_string = struct.pack(self._structure, target_temperature)
register_value = struct.unpack(">h", byte_string[0:2])[0] register_value = struct.unpack(">h", byte_string[0:2])[0]
self._write_register(self._target_temperature_register, register_value) self._write_register(self._target_temperature_register, register_value)

View File

@ -2,22 +2,51 @@
# configuration names # configuration names
CONF_BAUDRATE = "baudrate" CONF_BAUDRATE = "baudrate"
CONF_BINARY_SENSOR = "binary_sensor"
CONF_BYTESIZE = "bytesize" 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_HUB = "hub"
CONF_INPUTS = "inputs"
CONF_INPUT_TYPE = "input_type"
CONF_MAX_TEMP = "max_temp"
CONF_MIN_TEMP = "min_temp"
CONF_PARITY = "parity" CONF_PARITY = "parity"
CONF_STOPBITS = "stopbits"
CONF_REGISTER = "register" CONF_REGISTER = "register"
CONF_REGISTER_TYPE = "register_type" CONF_REGISTER_TYPE = "register_type"
CONF_REGISTERS = "registers" CONF_REGISTERS = "registers"
CONF_REVERSE_ORDER = "reverse_order" CONF_REVERSE_ORDER = "reverse_order"
CONF_SCALE = "scale"
CONF_COUNT = "count"
CONF_PRECISION = "precision" 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 # service call attributes
DEFAULT_HUB = "modbus_hub" ATTR_ADDRESS = "address"
MODBUS_DOMAIN = "modbus" ATTR_HUB = "hub"
ATTR_UNIT = "unit"
ATTR_VALUE = "value"
ATTR_STATE = "state"
ATTR_TEMPERATURE = "temperature"
# data types # data types
DATA_TYPE_CUSTOM = "custom" DATA_TYPE_CUSTOM = "custom"
@ -32,66 +61,19 @@ CALL_TYPE_DISCRETE = "discrete_input"
CALL_TYPE_REGISTER_HOLDING = "holding" CALL_TYPE_REGISTER_HOLDING = "holding"
CALL_TYPE_REGISTER_INPUT = "input" CALL_TYPE_REGISTER_INPUT = "input"
# the following constants are TBD. # service calls
# 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_WRITE_COIL = "write_coil" SERVICE_WRITE_COIL = "write_coil"
SERVICE_WRITE_REGISTER = "write_register" SERVICE_WRITE_REGISTER = "write_register"
# integration names
DEFAULT_HUB = "modbus_hub"
DEFAULT_SCAN_INTERVAL = 15 # seconds DEFAULT_SCAN_INTERVAL = 15 # seconds
DEFAULT_SLAVE = 1
# binary_sensor.py DEFAULT_STRUCTURE_PREFIX = ">f"
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_STRUCT_FORMAT = { DEFAULT_STRUCT_FORMAT = {
DATA_TYPE_INT: {1: "h", 2: "i", 4: "q"}, DATA_TYPE_INT: {1: "h", 2: "i", 4: "q"},
DATA_TYPE_UINT: {1: "H", 2: "I", 4: "Q"}, DATA_TYPE_UINT: {1: "H", 2: "I", 4: "Q"},
DATA_TYPE_FLOAT: {1: "e", 2: "f", 4: "d"}, 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" DEFAULT_TEMP_UNIT = "C"
MODBUS_DOMAIN = "modbus"
# 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

View File

@ -6,13 +6,15 @@ from pymodbus.client.sync import ModbusSerialClient, ModbusTcpClient, ModbusUdpC
from pymodbus.transaction import ModbusRtuFramer from pymodbus.transaction import ModbusRtuFramer
from homeassistant.const import ( from homeassistant.const import (
ATTR_STATE, CONF_BINARY_SENSORS,
CONF_COVERS, CONF_COVERS,
CONF_DELAY, CONF_DELAY,
CONF_HOST, CONF_HOST,
CONF_METHOD, CONF_METHOD,
CONF_NAME, CONF_NAME,
CONF_PORT, CONF_PORT,
CONF_SENSORS,
CONF_SWITCHES,
CONF_TIMEOUT, CONF_TIMEOUT,
CONF_TYPE, CONF_TYPE,
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
@ -22,21 +24,19 @@ from homeassistant.helpers.discovery import load_platform
from .const import ( from .const import (
ATTR_ADDRESS, ATTR_ADDRESS,
ATTR_HUB, ATTR_HUB,
ATTR_STATE,
ATTR_UNIT, ATTR_UNIT,
ATTR_VALUE, ATTR_VALUE,
CONF_BAUDRATE, CONF_BAUDRATE,
CONF_BINARY_SENSOR, CONF_BINARY_SENSOR,
CONF_BINARY_SENSORS,
CONF_BYTESIZE, CONF_BYTESIZE,
CONF_CLIMATE, CONF_CLIMATE,
CONF_CLIMATES, CONF_CLIMATES,
CONF_COVER, CONF_COVER,
CONF_PARITY, CONF_PARITY,
CONF_SENSOR, CONF_SENSOR,
CONF_SENSORS,
CONF_STOPBITS, CONF_STOPBITS,
CONF_SWITCH, CONF_SWITCH,
CONF_SWITCHES,
MODBUS_DOMAIN as DOMAIN, MODBUS_DOMAIN as DOMAIN,
SERVICE_WRITE_COIL, SERVICE_WRITE_COIL,
SERVICE_WRITE_REGISTER, SERVICE_WRITE_REGISTER,

View File

@ -17,10 +17,12 @@ from homeassistant.components.sensor import (
) )
from homeassistant.const import ( from homeassistant.const import (
CONF_ADDRESS, CONF_ADDRESS,
CONF_COUNT,
CONF_DEVICE_CLASS, CONF_DEVICE_CLASS,
CONF_NAME, CONF_NAME,
CONF_OFFSET, CONF_OFFSET,
CONF_SCAN_INTERVAL, CONF_SCAN_INTERVAL,
CONF_SENSORS,
CONF_SLAVE, CONF_SLAVE,
CONF_STRUCTURE, CONF_STRUCTURE,
CONF_UNIT_OF_MEASUREMENT, CONF_UNIT_OF_MEASUREMENT,
@ -37,7 +39,6 @@ from homeassistant.helpers.typing import (
from .const import ( from .const import (
CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_REGISTER_INPUT, CALL_TYPE_REGISTER_INPUT,
CONF_COUNT,
CONF_DATA_TYPE, CONF_DATA_TYPE,
CONF_HUB, CONF_HUB,
CONF_INPUT_TYPE, CONF_INPUT_TYPE,
@ -47,7 +48,6 @@ from .const import (
CONF_REGISTERS, CONF_REGISTERS,
CONF_REVERSE_ORDER, CONF_REVERSE_ORDER,
CONF_SCALE, CONF_SCALE,
CONF_SENSORS,
DATA_TYPE_CUSTOM, DATA_TYPE_CUSTOM,
DATA_TYPE_FLOAT, DATA_TYPE_FLOAT,
DATA_TYPE_INT, DATA_TYPE_INT,

View File

@ -5,12 +5,12 @@ from homeassistant.components.binary_sensor import DOMAIN as SENSOR_DOMAIN
from homeassistant.components.modbus.const import ( from homeassistant.components.modbus.const import (
CALL_TYPE_COIL, CALL_TYPE_COIL,
CALL_TYPE_DISCRETE, CALL_TYPE_DISCRETE,
CONF_BINARY_SENSORS,
CONF_INPUT_TYPE, CONF_INPUT_TYPE,
CONF_INPUTS, CONF_INPUTS,
) )
from homeassistant.const import ( from homeassistant.const import (
CONF_ADDRESS, CONF_ADDRESS,
CONF_BINARY_SENSORS,
CONF_DEVICE_CLASS, CONF_DEVICE_CLASS,
CONF_NAME, CONF_NAME,
CONF_SLAVE, CONF_SLAVE,

View File

@ -4,7 +4,6 @@ import pytest
from homeassistant.components.modbus.const import ( from homeassistant.components.modbus.const import (
CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_REGISTER_INPUT, CALL_TYPE_REGISTER_INPUT,
CONF_COUNT,
CONF_DATA_TYPE, CONF_DATA_TYPE,
CONF_INPUT_TYPE, CONF_INPUT_TYPE,
CONF_PRECISION, CONF_PRECISION,
@ -13,7 +12,6 @@ from homeassistant.components.modbus.const import (
CONF_REGISTERS, CONF_REGISTERS,
CONF_REVERSE_ORDER, CONF_REVERSE_ORDER,
CONF_SCALE, CONF_SCALE,
CONF_SENSORS,
DATA_TYPE_FLOAT, DATA_TYPE_FLOAT,
DATA_TYPE_INT, DATA_TYPE_INT,
DATA_TYPE_STRING, DATA_TYPE_STRING,
@ -22,9 +20,11 @@ from homeassistant.components.modbus.const import (
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
from homeassistant.const import ( from homeassistant.const import (
CONF_ADDRESS, CONF_ADDRESS,
CONF_COUNT,
CONF_DEVICE_CLASS, CONF_DEVICE_CLASS,
CONF_NAME, CONF_NAME,
CONF_OFFSET, CONF_OFFSET,
CONF_SENSORS,
CONF_SLAVE, CONF_SLAVE,
) )

View File

@ -12,7 +12,6 @@ from homeassistant.components.modbus.const import (
CONF_REGISTERS, CONF_REGISTERS,
CONF_STATE_OFF, CONF_STATE_OFF,
CONF_STATE_ON, CONF_STATE_ON,
CONF_SWITCHES,
CONF_VERIFY_REGISTER, CONF_VERIFY_REGISTER,
CONF_VERIFY_STATE, CONF_VERIFY_STATE,
) )
@ -24,6 +23,7 @@ from homeassistant.const import (
CONF_DEVICE_CLASS, CONF_DEVICE_CLASS,
CONF_NAME, CONF_NAME,
CONF_SLAVE, CONF_SLAVE,
CONF_SWITCHES,
STATE_OFF, STATE_OFF,
STATE_ON, STATE_ON,
) )