diff --git a/homeassistant/components/flexit_bacnet/icons.json b/homeassistant/components/flexit_bacnet/icons.json index 7ce8b116a27..a0c5ccd5a6e 100644 --- a/homeassistant/components/flexit_bacnet/icons.json +++ b/homeassistant/components/flexit_bacnet/icons.json @@ -30,6 +30,9 @@ }, "home_supply_fan_setpoint": { "default": "mdi:fan-plus" + }, + "fireplace_mode_runtime": { + "default": "mdi:fireplace" } }, "switch": { @@ -38,6 +41,12 @@ "state": { "off": "mdi:radiator-off" } + }, + "fireplace_mode": { + "default": "mdi:fireplace", + "state": { + "off": "mdi:fireplace-off" + } } } } diff --git a/homeassistant/components/flexit_bacnet/number.py b/homeassistant/components/flexit_bacnet/number.py index 6e405e8e8ac..30df5370868 100644 --- a/homeassistant/components/flexit_bacnet/number.py +++ b/homeassistant/components/flexit_bacnet/number.py @@ -14,7 +14,7 @@ from homeassistant.components.number import ( NumberMode, ) from homeassistant.config_entries import ConfigEntry -from homeassistant.const import PERCENTAGE +from homeassistant.const import PERCENTAGE, UnitOfTime from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity_platform import AddEntitiesCallback @@ -26,6 +26,9 @@ from .entity import FlexitEntity _MAX_FAN_SETPOINT = 100 _MIN_FAN_SETPOINT = 30 +_MAX_RUNTIME_DURATION = 360 +_MIN_RUNTIME_DURATION = 1 + @dataclass(kw_only=True, frozen=True) class FlexitNumberEntityDescription(NumberEntityDescription): @@ -176,6 +179,18 @@ NUMBERS: tuple[FlexitNumberEntityDescription, ...] = ( native_max_value_fn=lambda _: _MAX_FAN_SETPOINT, native_min_value_fn=lambda device: int(device.fan_setpoint_supply_air_away), ), + FlexitNumberEntityDescription( + key="fireplace_mode_runtime", + translation_key="fireplace_mode_runtime", + device_class=NumberDeviceClass.DURATION, + native_step=1, + mode=NumberMode.SLIDER, + native_value_fn=lambda device: device.fireplace_mode_runtime, + set_native_value_fn=lambda device: device.set_fireplace_mode_runtime, + native_unit_of_measurement=UnitOfTime.MINUTES, + native_max_value_fn=lambda _: _MAX_RUNTIME_DURATION, + native_min_value_fn=lambda _: _MIN_RUNTIME_DURATION, + ), ) diff --git a/homeassistant/components/flexit_bacnet/strings.json b/homeassistant/components/flexit_bacnet/strings.json index 7f763674d00..8888b02a3ef 100644 --- a/homeassistant/components/flexit_bacnet/strings.json +++ b/homeassistant/components/flexit_bacnet/strings.json @@ -52,6 +52,9 @@ }, "home_supply_fan_setpoint": { "name": "Home supply fan setpoint" + }, + "fireplace_mode_runtime": { + "name": "Fireplace mode runtime" } }, "sensor": { @@ -104,6 +107,9 @@ "switch": { "electric_heater": { "name": "Electric heater" + }, + "fireplace_mode": { + "name": "Fireplace mode" } } } diff --git a/homeassistant/components/flexit_bacnet/switch.py b/homeassistant/components/flexit_bacnet/switch.py index c58e35cda75..7f12a7524b6 100644 --- a/homeassistant/components/flexit_bacnet/switch.py +++ b/homeassistant/components/flexit_bacnet/switch.py @@ -40,6 +40,13 @@ SWITCHES: tuple[FlexitSwitchEntityDescription, ...] = ( turn_on_fn=lambda data: data.enable_electric_heater(), turn_off_fn=lambda data: data.disable_electric_heater(), ), + FlexitSwitchEntityDescription( + key="fireplace_mode", + translation_key="fireplace_mode", + is_on_fn=lambda data: data.fireplace_ventilation_status, + turn_on_fn=lambda data: data.trigger_fireplace_mode(), + turn_off_fn=lambda data: data.trigger_fireplace_mode(), + ), ) diff --git a/tests/components/flexit_bacnet/conftest.py b/tests/components/flexit_bacnet/conftest.py index 6ce17261bfc..09957fe496f 100644 --- a/tests/components/flexit_bacnet/conftest.py +++ b/tests/components/flexit_bacnet/conftest.py @@ -67,6 +67,7 @@ def mock_flexit_bacnet() -> Generator[AsyncMock]: flexit_bacnet.air_filter_polluted = False flexit_bacnet.air_filter_exchange_interval = 8784 flexit_bacnet.electric_heater = True + flexit_bacnet.fireplace_mode_runtime = 10 # Mock fan setpoints flexit_bacnet.fan_setpoint_extract_air_fire = 56 diff --git a/tests/components/flexit_bacnet/snapshots/test_number.ambr b/tests/components/flexit_bacnet/snapshots/test_number.ambr index 78eefd08345..e2875c140cc 100644 --- a/tests/components/flexit_bacnet/snapshots/test_number.ambr +++ b/tests/components/flexit_bacnet/snapshots/test_number.ambr @@ -284,6 +284,63 @@ 'state': '56', }) # --- +# name: test_numbers[number.device_name_fireplace_mode_runtime-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'max': 360, + 'min': 1, + 'mode': , + 'step': 1, + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'number', + 'entity_category': None, + 'entity_id': 'number.device_name_fireplace_mode_runtime', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Fireplace mode runtime', + 'platform': 'flexit_bacnet', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'fireplace_mode_runtime', + 'unique_id': '0000-0001-fireplace_mode_runtime', + 'unit_of_measurement': , + }) +# --- +# name: test_numbers[number.device_name_fireplace_mode_runtime-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'duration', + 'friendly_name': 'Device Name Fireplace mode runtime', + 'max': 360, + 'min': 1, + 'mode': , + 'step': 1, + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'number.device_name_fireplace_mode_runtime', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '10', + }) +# --- # name: test_numbers[number.device_name_fireplace_supply_fan_setpoint-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ diff --git a/tests/components/flexit_bacnet/snapshots/test_switch.ambr b/tests/components/flexit_bacnet/snapshots/test_switch.ambr index d054608f1f7..1df1c12e791 100644 --- a/tests/components/flexit_bacnet/snapshots/test_switch.ambr +++ b/tests/components/flexit_bacnet/snapshots/test_switch.ambr @@ -46,6 +46,53 @@ 'state': 'on', }) # --- +# name: test_switches[switch.device_name_fireplace_mode-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'switch', + 'entity_category': None, + 'entity_id': 'switch.device_name_fireplace_mode', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Fireplace mode', + 'platform': 'flexit_bacnet', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'fireplace_mode', + 'unique_id': '0000-0001-fireplace_mode', + 'unit_of_measurement': None, + }) +# --- +# name: test_switches[switch.device_name_fireplace_mode-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'switch', + 'friendly_name': 'Device Name Fireplace mode', + }), + 'context': , + 'entity_id': 'switch.device_name_fireplace_mode', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- # name: test_switches_implementation[switch.device_name_electric_heater-state] StateSnapshot({ 'attributes': ReadOnlyDict({