1 """Platform for Flexit AC units with CI66 Modbus adapter."""
3 from __future__
import annotations
8 import voluptuous
as vol
11 PLATFORM_SCHEMA
as CLIMATE_PLATFORM_SCHEMA,
18 CALL_TYPE_REGISTER_HOLDING,
19 CALL_TYPE_REGISTER_INPUT,
36 CALL_TYPE_WRITE_REGISTER =
"write_register"
39 PLATFORM_SCHEMA = CLIMATE_PLATFORM_SCHEMA.extend(
41 vol.Optional(CONF_HUB, default=DEFAULT_HUB): cv.string,
42 vol.Required(CONF_SLAVE): vol.All(int, vol.Range(min=0, max=32)),
43 vol.Optional(CONF_NAME, default=DEVICE_DEFAULT_NAME): cv.string,
47 _LOGGER = logging.getLogger(__name__)
53 async_add_entities: AddEntitiesCallback,
54 discovery_info: DiscoveryInfoType |
None =
None,
56 """Set up the Flexit Platform."""
57 modbus_slave = config.get(CONF_SLAVE)
58 name = config.get(CONF_NAME)
59 hub =
get_hub(hass, config[CONF_HUB])
64 """Representation of a Flexit AC unit."""
66 _attr_fan_modes = [
"Off",
"Low",
"Medium",
"High"]
67 _attr_hvac_mode = HVACMode.COOL
68 _attr_hvac_modes = [HVACMode.COOL]
69 _attr_supported_features = (
70 ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE
72 _attr_temperature_unit = UnitOfTemperature.CELSIUS
73 _enable_turn_on_off_backwards_compatibility =
False
76 self, hub: ModbusHub, modbus_slave: int |
None, name: str |
None
78 """Initialize the unit."""
87 self.
_heating_heating: int |
None =
None
88 self.
_cooling_cooling: int |
None =
None
93 """Update unit attributes."""
95 CALL_TYPE_REGISTER_HOLDING, 8
98 CALL_TYPE_REGISTER_INPUT, 9
104 CALL_TYPE_REGISTER_INPUT, 8
108 CALL_TYPE_REGISTER_INPUT, 14
112 CALL_TYPE_REGISTER_INPUT, 15
116 CALL_TYPE_REGISTER_INPUT, 13
120 CALL_TYPE_REGISTER_INPUT, 27
124 CALL_TYPE_REGISTER_INPUT, 28
127 CALL_TYPE_REGISTER_INPUT, 11
131 CALL_TYPE_REGISTER_INPUT, 48
140 elif actual_air_speed:
147 """Return device specific state attributes."""
159 """Set new target temperature."""
160 if (target_temperature := kwargs.get(ATTR_TEMPERATURE))
is None:
161 _LOGGER.error(
"Received invalid temperature")
167 _LOGGER.error(
"Modbus error setting target temperature to Flexit")
170 """Set new fan mode."""
172 17, self.
fan_modesfan_modes.index(fan_mode)
176 _LOGGER.error(
"Modbus error setting fan mode to Flexit")
180 self, register_type: str, register: int
182 """Read register using the Modbus hub slave."""
183 result = await self.
_hub_hub.async_pb_call(self.
_slave_slave, register, 1, register_type)
185 _LOGGER.error(
"Error reading value from Flexit modbus adapter")
188 return int(result.registers[0])
191 self, register_type: str, register: int
201 result = await self.
_hub_hub.async_pb_call(
202 self.
_slave_slave, register, value, CALL_TYPE_WRITE_REGISTER
list[str]|None fan_modes(self)
None async_set_fan_mode(self, str fan_mode)
bool _async_write_int16_to_register(self, int register, int value)
float _async_read_temp_from_register(self, str register_type, int register)
_attr_current_temperature
int _async_read_int16_from_register(self, str register_type, int register)
None __init__(self, ModbusHub hub, int|None modbus_slave, str|None name)
dict[str, Any] extra_state_attributes(self)
None async_set_temperature(self, **Any kwargs)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
ModbusHub get_hub(HomeAssistant hass, str name)