Add array write to turn_on/off in modbus switch/fan/light (#52582)

This commit is contained in:
jan iversen 2021-07-12 20:22:53 +02:00 committed by GitHub
parent 8f8935c859
commit 646862ec96
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 5 deletions

View File

@ -54,6 +54,8 @@ from .const import (
CALL_TYPE_DISCRETE, CALL_TYPE_DISCRETE,
CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_REGISTER_INPUT, CALL_TYPE_REGISTER_INPUT,
CALL_TYPE_X_COILS,
CALL_TYPE_X_REGISTER_HOLDINGS,
CONF_BAUDRATE, CONF_BAUDRATE,
CONF_BYTESIZE, CONF_BYTESIZE,
CONF_CLIMATES, CONF_CLIMATES,
@ -185,6 +187,8 @@ BASE_SWITCH_SCHEMA = BASE_COMPONENT_SCHEMA.extend(
[ [
CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_COIL, CALL_TYPE_COIL,
CALL_TYPE_X_COILS,
CALL_TYPE_X_REGISTER_HOLDINGS,
] ]
), ),
vol.Optional(CONF_COMMAND_OFF, default=0x00): cv.positive_int, vol.Optional(CONF_COMMAND_OFF, default=0x00): cv.positive_int,

View File

@ -23,8 +23,13 @@ from homeassistant.helpers.restore_state import RestoreEntity
from .const import ( from .const import (
CALL_TYPE_COIL, CALL_TYPE_COIL,
CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_WRITE_COIL, CALL_TYPE_WRITE_COIL,
CALL_TYPE_WRITE_COILS,
CALL_TYPE_WRITE_REGISTER, CALL_TYPE_WRITE_REGISTER,
CALL_TYPE_WRITE_REGISTERS,
CALL_TYPE_X_COILS,
CALL_TYPE_X_REGISTER_HOLDINGS,
CONF_INPUT_TYPE, CONF_INPUT_TYPE,
CONF_STATE_OFF, CONF_STATE_OFF,
CONF_STATE_ON, CONF_STATE_ON,
@ -92,10 +97,19 @@ class BaseSwitch(BasePlatform, RestoreEntity):
config[CONF_INPUT_TYPE] = "" config[CONF_INPUT_TYPE] = ""
super().__init__(hub, config) super().__init__(hub, config)
self._is_on = None self._is_on = None
if config[CONF_WRITE_TYPE] == CALL_TYPE_COIL: convert = {
self._write_type = CALL_TYPE_WRITE_COIL CALL_TYPE_REGISTER_HOLDING: (
else: CALL_TYPE_REGISTER_HOLDING,
self._write_type = CALL_TYPE_WRITE_REGISTER CALL_TYPE_WRITE_REGISTER,
),
CALL_TYPE_COIL: (CALL_TYPE_COIL, CALL_TYPE_WRITE_COIL),
CALL_TYPE_X_COILS: (CALL_TYPE_COIL, CALL_TYPE_WRITE_COILS),
CALL_TYPE_X_REGISTER_HOLDINGS: (
CALL_TYPE_REGISTER_HOLDING,
CALL_TYPE_WRITE_REGISTERS,
),
}
self._write_type = convert[config[CONF_WRITE_TYPE]][1]
self.command_on = config[CONF_COMMAND_ON] self.command_on = config[CONF_COMMAND_ON]
self._command_off = config[CONF_COMMAND_OFF] self._command_off = config[CONF_COMMAND_OFF]
if CONF_VERIFY in config: if CONF_VERIFY in config:
@ -107,7 +121,7 @@ class BaseSwitch(BasePlatform, RestoreEntity):
CONF_ADDRESS, config[CONF_ADDRESS] CONF_ADDRESS, config[CONF_ADDRESS]
) )
self._verify_type = config[CONF_VERIFY].get( self._verify_type = config[CONF_VERIFY].get(
CONF_INPUT_TYPE, config[CONF_WRITE_TYPE] CONF_INPUT_TYPE, convert[config[CONF_WRITE_TYPE]][0]
) )
self._state_on = config[CONF_VERIFY].get(CONF_STATE_ON, self.command_on) self._state_on = config[CONF_VERIFY].get(CONF_STATE_ON, self.command_on)
self._state_off = config[CONF_VERIFY].get(CONF_STATE_OFF, self._command_off) self._state_off = config[CONF_VERIFY].get(CONF_STATE_OFF, self._command_off)

View File

@ -98,6 +98,8 @@ CALL_TYPE_WRITE_COIL = "write_coil"
CALL_TYPE_WRITE_COILS = "write_coils" CALL_TYPE_WRITE_COILS = "write_coils"
CALL_TYPE_WRITE_REGISTER = "write_register" CALL_TYPE_WRITE_REGISTER = "write_register"
CALL_TYPE_WRITE_REGISTERS = "write_registers" CALL_TYPE_WRITE_REGISTERS = "write_registers"
CALL_TYPE_X_COILS = "coils"
CALL_TYPE_X_REGISTER_HOLDINGS = "holdings"
# service calls # service calls
SERVICE_WRITE_COIL = "write_coil" SERVICE_WRITE_COIL = "write_coil"