"""Initializer helpers for HomematicIP fake server.""" from typing import Any from unittest.mock import AsyncMock, Mock, patch from homematicip.async_home import AsyncHome from homematicip.auth import Auth from homematicip.base.enums import WeatherCondition, WeatherDayTime from homematicip.connection.rest_connection import RestConnection import pytest from homeassistant.components.homematicip_cloud import ( DOMAIN, async_setup as hmip_async_setup, ) from homeassistant.components.homematicip_cloud.const import ( HMIPC_AUTHTOKEN, HMIPC_HAPID, HMIPC_NAME, HMIPC_PIN, ) from homeassistant.components.homematicip_cloud.hap import HomematicipHAP from homeassistant.config_entries import SOURCE_IMPORT from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType from .helper import AUTH_TOKEN, HAPID, HAPPIN, HomeFactory from tests.common import MockConfigEntry from tests.components.light.conftest import mock_light_profiles # noqa: F401 @pytest.fixture(name="mock_connection") def mock_connection_fixture() -> RestConnection: """Return a mocked connection.""" connection = AsyncMock(spec=RestConnection) def _rest_call_side_effect(path, body=None, custom_header=None): return path, body connection.async_post.side_effect = _rest_call_side_effect return connection @pytest.fixture(name="hmip_config_entry") def hmip_config_entry_fixture() -> MockConfigEntry: """Create a mock config entry for homematic ip cloud.""" entry_data = { HMIPC_HAPID: HAPID, HMIPC_AUTHTOKEN: AUTH_TOKEN, HMIPC_NAME: "", HMIPC_PIN: HAPPIN, } return MockConfigEntry( version=1, domain=DOMAIN, title="Home Test SN", unique_id=HAPID, data=entry_data, source=SOURCE_IMPORT, ) @pytest.fixture(name="default_mock_hap_factory") async def default_mock_hap_factory_fixture( hass: HomeAssistant, mock_connection, hmip_config_entry: MockConfigEntry ) -> HomeFactory: """Create a mocked homematic access point.""" return HomeFactory(hass, mock_connection, hmip_config_entry) @pytest.fixture(name="full_flush_lock_controller_device_data") def full_flush_lock_controller_device_data_fixture() -> dict[str, Any]: """Return fixture data for an HmIP-FLC device.""" return { "availableFirmwareVersion": "0.0.0", "connectionType": "HMIP_RF", "deviceArchetype": "HMIP", "firmwareVersion": "1.0.10", "firmwareVersionInteger": 65546, "functionalChannels": { "0": { "configPending": False, "deviceId": "3014F7110000000000000026", "dutyCycle": False, "functionalChannelType": "DEVICE_BASE", "groupIndex": 0, "groups": [], "index": 0, "label": "", "lowBat": None, "routerModuleEnabled": False, "routerModuleSupported": False, "rssiDeviceValue": -82, "rssiPeerValue": -97, "supportedOptionalFeatures": { "IFeatureRssiValue": True, "IOptionalFeatureDutyCycle": True, "IOptionalFeatureLowBat": False, }, "unreach": False, }, "1": { "actionParameter": "NOT_CUSTOMISABLE", "binaryBehaviorType": "NORMALLY_OPEN", "channelRole": "DOOR_LOCK_SENSOR", "corrosionPreventionActive": False, "deviceId": "3014F7110000000000000026", "doorBellSensorEventTimestamp": None, "eventDelay": 0, "functionalChannelType": "MULTI_MODE_LOCK_INPUT_CHANNEL", "glassBroken": True, "groupIndex": 1, "groups": [], "index": 1, "label": "", "lockState": "LOCKED", "multiModeInputMode": "BINARY_BEHAVIOR", "supportedOptionalFeatures": {}, "windowState": "OPEN", }, "3": { "channelRole": "DOOR_LOCK_ACTUATOR", "deviceId": "3014F7110000000000000026", "doorLockActive": False, "functionalChannelType": "DOOR_SWITCH_CHANNEL", "groupIndex": 3, "groups": [], "impulseDuration": 111600.0, "index": 3, "internalLinkConfiguration": { "firstInputAction": "TOGGLE", "internalLinkConfigurationType": "SINGLE_INPUT_DOOR_SWITCH", }, "label": "", "multiModeInputMode": "KEY_BEHAVIOR", "processing": False, "profileMode": "AUTOMATIC", "supportedOptionalFeatures": {}, "userDesiredProfileMode": "AUTOMATIC", }, "4": { "channelRole": "DOOR_OPENER_ACTUATOR", "deviceId": "3014F7110000000000000026", "doorLockActive": False, "functionalChannelType": "DOOR_SWITCH_CHANNEL", "groupIndex": 4, "groups": [], "impulseDuration": 0.9, "index": 4, "internalLinkConfiguration": { "firstInputAction": "LOCK_OPEN", "internalLinkConfigurationType": "SINGLE_INPUT_DOOR_SWITCH", }, "label": "", "multiModeInputMode": "SWITCH_BEHAVIOR", "processing": False, "profileMode": "AUTOMATIC", "supportedOptionalFeatures": {}, "userDesiredProfileMode": "AUTOMATIC", }, "5": { "authorized": True, "channelRole": "DOOR_LOCK_ACTUATOR", "deviceId": "3014F7110000000000000026", "functionalChannelType": "ACCESS_AUTHORIZATION_CHANNEL", "groupIndex": 3, "groups": [], "index": 5, "label": "", "supportedOptionalFeatures": {}, }, "9": { "authorized": True, "channelRole": "DOOR_OPENER_ACTUATOR", "deviceId": "3014F7110000000000000026", "functionalChannelType": "ACCESS_AUTHORIZATION_CHANNEL", "groupIndex": 4, "groups": [], "index": 9, "label": "", "supportedOptionalFeatures": {}, }, }, "homeId": "00000000-0000-0000-0000-000000000001", "id": "3014F7110000000000000026", "label": "Universal Motorschloss Controller", "lastStatusUpdate": 1760619002144, "liveUpdateState": "LIVE_UPDATE_NOT_SUPPORTED", "manufacturerCode": 1, "modelId": 546, "modelType": "HmIP-FLC", "oem": "eQ-3", "permanentlyReachable": True, "serializedGlobalTradeItemNumber": "3014F7110000000000000026", "type": "FULL_FLUSH_LOCK_CONTROLLER", "updateState": "UP_TO_DATE", } @pytest.fixture(name="full_flush_door_controller_device_data") def full_flush_door_controller_device_data_fixture() -> dict[str, Any]: """Return fixture data for an HmIP-FDC device.""" return { "availableFirmwareVersion": "1.0.0", "connectionType": "HMIP_RF", "firmwareVersion": "1.0.0", "firmwareVersionInteger": 65536, "functionalChannels": { "0": { "configPending": False, "deviceId": "3014F711000000000000FDC1", "dutyCycle": False, "functionalChannelType": "DEVICE_BASE", "groupIndex": 0, "groups": [], "index": 0, "label": "", "lowBat": None, "multicastRoutingEnabled": False, "routerModuleEnabled": False, "routerModuleSupported": False, "rssiDeviceValue": -60, "rssiPeerValue": -60, "supportedOptionalFeatures": { "IFeatureDeviceIdentify": True, "IFeatureRssiValue": True, "IOptionalFeatureDutyCycle": True, }, "unreach": False, }, "1": { "actionParameter": "NOT_CUSTOMISABLE", "binaryBehaviorType": "NORMALLY_CLOSE", "channelRole": None, "corrosionPreventionActive": False, "deviceId": "3014F711000000000000FDC1", "doorBellSensorEventTimestamp": None, "eventDelay": 0, "functionalChannelType": "MULTI_MODE_LOCK_INPUT_CHANNEL", "glassBroken": False, "groupIndex": 1, "groups": [], "index": 1, "label": "", "lockState": "UNLOCKED", "multiModeInputMode": "KEY_BEHAVIOR", "supportedOptionalFeatures": { "IOptionalFeatureLongPressSupported": True }, "windowState": "CLOSED", }, "2": { "actionParameter": "NOT_CUSTOMISABLE", "binaryBehaviorType": "NORMALLY_CLOSE", "channelRole": None, "corrosionPreventionActive": False, "deviceId": "3014F711000000000000FDC1", "doorBellSensorEventTimestamp": None, "eventDelay": 0, "functionalChannelType": "MULTI_MODE_LOCK_INPUT_CHANNEL", "glassBroken": False, "groupIndex": 2, "groups": [], "index": 2, "label": "", "lockState": "UNLOCKED", "multiModeInputMode": "KEY_BEHAVIOR", "supportedOptionalFeatures": { "IOptionalFeatureLongPressSupported": True }, "windowState": "CLOSED", }, "3": { "channelRole": "DOOR_OPENER_ACTUATOR", "deviceId": "3014F711000000000000FDC1", "doorLockActive": False, "functionalChannelType": "DOOR_SWITCH_CHANNEL", "groupIndex": 3, "groups": [], "impulseDuration": 3.0, "index": 3, "internalLinkConfiguration": None, "label": "", "multiModeInputMode": "KEY_BEHAVIOR", "processing": False, "profileMode": "AUTOMATIC", "supportedOptionalFeatures": { "IOptionalFeatureImpulseDuration": True, "IOptionalFeatureImpulseOutputState": True, }, "userDesiredProfileMode": "AUTOMATIC", }, "4": { "authorized": True, "channelRole": "DOOR_OPENER_ACTUATOR", "deviceId": "3014F711000000000000FDC1", "functionalChannelType": "ACCESS_AUTHORIZATION_CHANNEL", "groupIndex": 3, "groups": [], "index": 4, "label": "", "supportedOptionalFeatures": { "IFeatureAccessAuthorizationActuatorChannel": True }, }, }, "homeId": "00000000-0000-0000-0000-000000000001", "id": "3014F711000000000000FDC1", "label": "Turoffner Haustuer", "lastStatusUpdate": 1778954102356, "liveUpdateState": "LIVE_UPDATE_NOT_SUPPORTED", "manuallyUpdateForced": True, "manufacturerCode": 1, "measuredAttributes": {}, "modelId": 571, "modelType": "HmIP-FDC", "oem": "eQ-3", "permanentlyReachable": True, "serializedGlobalTradeItemNumber": "3014F711000000000000FDC1", "type": "FULL_FLUSH_DOOR_CONTROLLER", "updateState": "UP_TO_DATE", } @pytest.fixture(name="hmip_config") def hmip_config_fixture() -> ConfigType: """Create a config for homematic ip cloud.""" entry_data = { HMIPC_HAPID: HAPID, HMIPC_AUTHTOKEN: AUTH_TOKEN, HMIPC_NAME: "", HMIPC_PIN: HAPPIN, } return {DOMAIN: [entry_data]} @pytest.fixture(name="dummy_config") def dummy_config_fixture() -> ConfigType: """Create a dummy config.""" return {"blabla": None} @pytest.fixture(name="mock_hap_with_service") async def mock_hap_with_service_fixture( hass: HomeAssistant, default_mock_hap_factory: HomeFactory, dummy_config ) -> HomematicipHAP: """Create a fake homematic access point with hass services.""" mock_hap = await default_mock_hap_factory.async_get_mock_hap() await hmip_async_setup(hass, dummy_config) await hass.async_block_till_done() entry = hass.config_entries.async_entries(DOMAIN)[0] entry.runtime_data = mock_hap return mock_hap @pytest.fixture(name="simple_mock_home") def simple_mock_home_fixture(): """Return a simple mocked connection.""" mock_home = AsyncMock( spec=AsyncHome, name="Demo", devices=[], groups=[], location=Mock(), weather=Mock( temperature=0.0, weatherCondition=WeatherCondition.UNKNOWN, weatherDayTime=WeatherDayTime.DAY, minTemperature=0.0, maxTemperature=0.0, humidity=0, windSpeed=0.0, windDirection=0, vaporAmount=0.0, ), id=42, dutyCycle=88, connected=True, currentAPVersion="2.0.36", init_async=AsyncMock(), get_current_state_async=AsyncMock(), ) with ( patch( "homeassistant.components.homematicip_cloud.hap.AsyncHome", autospec=True, return_value=mock_home, ), patch( "homeassistant.components.homematicip_cloud.hap.ConnectionContextBuilder.build_context_async", ), ): yield @pytest.fixture(name="mock_connection_init") def mock_connection_init_fixture(): """Return a simple mocked connection.""" with ( patch( "homeassistant.components.homematicip_cloud.hap.AsyncHome.init_async", return_value=None, new_callable=AsyncMock, ), ): yield @pytest.fixture(name="simple_mock_auth") def simple_mock_auth_fixture() -> Auth: """Return a simple AsyncAuth Mock.""" return AsyncMock(spec=Auth, pin=HAPPIN, create=True) @pytest.fixture(name="wall_mounted_thermostat_with_carbon_device_data") def wall_mounted_thermostat_with_carbon_device_data_fixture() -> dict[str, Any]: """Return fixture data for an HmIP-WGTC device.""" return { "availableFirmwareVersion": "1.0.18", "connectionType": "HMIP_RF", "deviceArchetype": "HMIP", "firmwareVersion": "1.0.18", "firmwareVersionInteger": 65554, "functionalChannels": { "0": { "altitude": None, "bootedRecently": False, "busConfigMismatch": None, "coProFaulty": False, "coProRestartNeeded": False, "coProUpdateFailure": False, "configPending": False, "controlsMountingOrientation": None, "daliBusState": None, "dataDecodingFailedError": None, "defaultLinkedGroup": [], "deviceAliveSignalEnabled": None, "deviceCanBusError": None, "deviceCommunicationError": None, "deviceDriveError": None, "deviceDriveModeError": None, "deviceId": "3014F711000000000000WGTC", "deviceOperationMode": None, "deviceOverheated": False, "deviceOverloaded": False, "devicePowerFailureDetected": False, "deviceUndervoltage": False, "displayContrast": None, "displayMode": None, "displayMountingOrientation": None, "dutyCycle": False, "fanControlMode": None, "frostProtectionError": None, "frostProtectionErrorAcknowledged": None, "functionalChannelType": "DEVICE_OPERATIONLOCK", "groupIndex": 0, "groups": [], "index": 0, "input1CoproEnabled": None, "input2CoproEnabled": None, "input3CoproEnabled": None, "input4CoproEnabled": None, "inputLayoutMode": None, "invertedDisplayColors": None, "label": "", "lastBootTimestamp": 1784278839458, "lockJammed": None, "lowBat": None, "mountingModuleError": None, "mountingOrientation": None, "multicastRoutingEnabled": False, "noDataFromLinkyError": None, "notRechargeableBattery": None, "operationDays": None, "operationLockActive": False, "particulateMatterSensorCommunicationError": None, "particulateMatterSensorError": None, "powerShortCircuit": None, "profilePeriodLimitReached": None, "routerModuleEnabled": False, "routerModuleSupported": False, "rssiDeviceValue": -75, "rssiPeerValue": None, "sensorCommunicationError": None, "sensorError": None, "shortCircuitDataLine": None, "supportedOptionalFeatures": { "IFeatureDeviceIdentify": True, "IFeatureDeviceMountingModuleError": True, "IFeatureDeviceOverloaded": True, "IFeatureProfilePeriodLimit": True, "IFeatureRssiValue": True, "IOptionalFeatureDeviceSwitchChannelMode": True, "IOptionalFeatureDutyCycle": True, }, "switchChannelMode": "FLOOR_HEATING", "temperatureHumiditySensorCommunicationError": None, "temperatureHumiditySensorError": None, "temperatureOutOfRange": False, "ticVersionError": None, "unreach": False, "valveFlowError": None, "valveWaterError": None, }, "1": { "channelRole": "KEY_OR_SWITCH_FOR_GROUP", "deviceId": "3014F711000000000000WGTC", "functionalChannelType": "INPUT_QUICK_ACTION_DISPLAY_CHANNEL", "groupIndex": 1, "groups": [], "index": 1, "label": "", "supportedOptionalFeatures": { "IFeatureLightGroupSensorChannel": True, "IFeatureShadingGroupSensorChannel": True, }, }, "2": { "channelRole": "DIMMING_ACTUATOR", "deviceId": "3014F711000000000000WGTC", "dimLevel": 0.02, "functionalChannelType": "BACKLIGHT_CHANNEL", "groupIndex": 2, "groups": [], "index": 2, "label": "", "on": True, "powerUpDimLevel": 0.02, "powerUpSwitchState": "PERMANENT_ON", "profileMode": "AUTOMATIC", "supportedOptionalFeatures": { "IFeatureLightProfileActuatorChannel": True }, "switchVisualization": "LIGHT", "userDesiredProfileMode": "AUTOMATIC", }, "3": { "actualTemperature": 22.6, "carbonDioxideConcentration": 440.0, "channelRole": "WALL_MOUNTED_THERMOSTAT", "deviceId": "3014F711000000000000WGTC", "display": "ACTUAL", "functionalChannelType": "WALL_MOUNTED_THERMOSTAT_WITH_CARBON_CHANNEL", "groupIndex": 3, "groups": [], "humidity": 48, "index": 3, "label": "Wandthermostat (3 + 4) Child", "setPointTemperature": 18.0, "supportedOptionalFeatures": { "IOptionalFeatureClimateControlDisplayCarbonSupported": True, "IOptionalFeatureClimateControlDisplayHumidityOnlySupported": True, "IOptionalFeatureThermostatCoolingSupported": True, }, "temperatureOffset": -0.5, "vaporAmount": 9.619851889906071, }, "4": { "climateControlType": "PWM_CONTROL", "deviceId": "3014F711000000000000WGTC", "frostProtectionTemperature": 8.0, "functionalChannelType": "INTERNAL_SWITCH_CHANNEL", "groupIndex": 3, "groups": [], "heatingValveType": "NORMALLY_CLOSE", "index": 4, "internalSwitchOutputEnabled": False, "label": "Wandthermostat (3 + 4) Child", "supportedOptionalFeatures": { "IOptionalFeatureClimateControlType": True, "IOptionalFeatureFloorHeatingSpecificGroupSupported": True, }, "valvePosition": 0.0, "valveProtectionDuration": 5, "valveProtectionSwitchingInterval": 14, }, "5": { "channelRole": None, "deviceId": "3014F711000000000000WGTC", "functionalChannelType": "SWITCH_CHANNEL", "groupIndex": 0, "groups": [], "index": 5, "internalLinkConfiguration": None, "label": "", "on": False, "powerUpSwitchState": "PERMANENT_OFF", "profileMode": "AUTOMATIC", "supportedOptionalFeatures": { "IOptionalFeaturePowerUpSwitchState": True }, "switchVisualization": None, "userDesiredProfileMode": "AUTOMATIC", }, "6": { "deviceId": "3014F711000000000000WGTC", "functionalChannelType": "HEAT_DEMAND_CHANNEL", "groupIndex": 0, "groups": [], "index": 6, "label": "", }, "7": { "deviceId": "3014F711000000000000WGTC", "functionalChannelType": "DEHUMIDIFIER_DEMAND_CHANNEL", "groupIndex": 0, "groups": [], "index": 7, "label": "", }, "8": { "deviceId": "3014F711000000000000WGTC", "functionalChannelType": "CHANGE_OVER_CHANNEL", "groupIndex": 0, "groups": [], "index": 8, "label": "", }, }, "homeId": "00000000-0000-0000-0000-000000000001", "id": "3014F711000000000000WGTC", "label": "Wandthermostat mit CO2", "lastStatusUpdate": 1784553668564, "liveUpdateState": "LIVE_UPDATE_NOT_SUPPORTED", "manuallyUpdateForced": False, "manufacturerCode": 1, "measuredAttributes": { "3": { "actualTemperature": True, "carbonDioxideConcentration": True, "humidity": True, "setPointTemperature": True, } }, "modelId": 568, "modelType": "HmIP-WGTC", "oem": "eQ-3", "permanentlyReachable": True, "serializedGlobalTradeItemNumber": "3014F711000000000000WGTC", "type": "WALL_MOUNTED_GLASS_THERMOSTAT_CARBON", "updateState": "UP_TO_DATE", } @pytest.fixture(name="carbon_dioxide_sensor_device_data") def carbon_dioxide_sensor_device_data_fixture() -> dict[str, Any]: """Return fixture data for an HmIP-SCTH230 device.""" return { "availableFirmwareVersion": "1.0.6", "connectionType": "HMIP_RF", "deviceArchetype": "HMIP", "firmwareVersion": "1.0.6", "firmwareVersionInteger": 65542, "functionalChannels": { "0": { "busConfigMismatch": None, "coProFaulty": False, "coProRestartNeeded": False, "coProUpdateFailure": False, "configPending": False, "controlsMountingOrientation": None, "deviceCommunicationError": None, "deviceDriveError": None, "deviceDriveModeError": None, "deviceId": "3014F711000000000SCTH230", "deviceOperationMode": None, "deviceOverheated": False, "deviceOverloaded": False, "devicePowerFailureDetected": False, "deviceUndervoltage": False, "displayContrast": None, "dutyCycle": False, "functionalChannelType": "DEVICE_BASE", "groupIndex": 0, "groups": ["00000000-0000-0000-0000-000000000052"], "index": 0, "label": "", "lockJammed": None, "lowBat": None, "mountingOrientation": None, "multicastRoutingEnabled": False, "particulateMatterSensorCommunicationError": None, "particulateMatterSensorError": None, "powerShortCircuit": None, "profilePeriodLimitReached": None, "routerModuleEnabled": False, "routerModuleSupported": False, "rssiDeviceValue": -66, "rssiPeerValue": None, "shortCircuitDataLine": None, "supportedOptionalFeatures": { "IFeatureBusConfigMismatch": False, "IFeatureDeviceCoProError": False, "IFeatureDeviceCoProRestart": False, "IFeatureDeviceCoProUpdate": False, "IFeatureDeviceCommunicationError": False, "IFeatureDeviceDriveError": False, "IFeatureDeviceDriveModeError": False, "IFeatureDeviceIdentify": False, "IFeatureDeviceOverheated": False, "IFeatureDeviceOverloaded": False, "IFeatureDeviceParticulateMatterSensorCommunicationError": False, "IFeatureDeviceParticulateMatterSensorError": False, "IFeatureDevicePowerFailure": False, "IFeatureDeviceTemperatureHumiditySensorCommunicationError": False, "IFeatureDeviceTemperatureHumiditySensorError": False, "IFeatureDeviceTemperatureOutOfRange": False, "IFeatureDeviceUndervoltage": False, "IFeatureMulticastRouter": False, "IFeaturePowerShortCircuit": False, "IFeatureProfilePeriodLimit": True, "IFeatureRssiValue": True, "IFeatureShortCircuitDataLine": False, "IOptionalFeatureDeviceErrorLockJammed": False, "IOptionalFeatureDeviceOperationMode": False, "IOptionalFeatureDisplayContrast": False, "IOptionalFeatureDutyCycle": True, "IOptionalFeatureLowBat": False, "IOptionalFeatureMountingOrientation": False, }, "temperatureHumiditySensorCommunicationError": None, "temperatureHumiditySensorError": None, "temperatureOutOfRange": False, "unreach": False, }, "1": { "actualTemperature": 25.5, "carbonDioxideConcentration": 1181.0, "carbonDioxideVisualisationEnabled": True, "channelRole": "CARBON_DIOXIDE_SENSOR", "deviceId": "3014F711000000000SCTH230", "functionalChannelType": "CARBON_DIOXIDE_SENSOR_CHANNEL", "groupIndex": 1, "groups": ["00000000-0000-0000-0000-000000000053"], "humidity": 37, "index": 1, "label": "", "vaporAmount": 8.739326558877478, }, "2": { "channelRole": "SWITCH_ACTUATOR", "deviceId": "3014F711000000000SCTH230", "functionalChannelType": "SWITCH_CHANNEL", "groupIndex": 2, "groups": ["00000000-0000-0000-0000-000000000054"], "index": 2, "internalLinkConfiguration": None, "label": "", "on": False, "powerUpSwitchState": "PERMANENT_OFF", "profileMode": "AUTOMATIC", "supportedOptionalFeatures": { "IFeatureAccessAuthorizationActuatorChannel": False, "IFeatureLightGroupActuatorChannel": True, "IFeatureLightProfileActuatorChannel": True, "IOptionalFeatureInternalLinkConfiguration": False, "IOptionalFeaturePowerUpSwitchState": True, }, "userDesiredProfileMode": "AUTOMATIC", }, }, "homeId": "00000000-0000-0000-0000-000000000001", "id": "3014F711000000000SCTH230", "label": "CO2 Sensor miko ", "lastStatusUpdate": 1676606756797, "liveUpdateState": "LIVE_UPDATE_NOT_SUPPORTED", "manufacturerCode": 1, "modelId": 435, "modelType": "HmIP-SCTH230", "oem": "eQ-3", "permanentlyReachable": True, "serializedGlobalTradeItemNumber": "3014F711000000000SCTH230", "type": "CARBON_DIOXIDE_SENSOR", "updateState": "UP_TO_DATE", }