diff --git a/.github/workflows/constraints.txt b/.github/workflows/constraints.txt index 7f27337..d6be61e 100644 --- a/.github/workflows/constraints.txt +++ b/.github/workflows/constraints.txt @@ -1,4 +1,4 @@ -pip==24.2 +pip==24.3.1 pre-commit==3.6.2 black==24.2.0 flake8==7.0.0 diff --git a/.github/workflows/precommit.yaml b/.github/workflows/precommit.yaml index d9bd817..3cdff4c 100644 --- a/.github/workflows/precommit.yaml +++ b/.github/workflows/precommit.yaml @@ -17,7 +17,7 @@ jobs: - name: Setup Python uses: "actions/setup-python@v5" with: - python-version: "3.12" + python-version: "3.13" - name: Upgrade pip run: | pip install --constraint=.github/workflows/constraints.txt pip diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 22a4110..235aa0c 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -17,7 +17,7 @@ jobs: - name: Setup Python uses: "actions/setup-python@v5" with: - python-version: "3.12" + python-version: "3.13" - name: Install requirements run: | pip install --constraint=.github/workflows/constraints.txt pip diff --git a/custom_components/daikin_onecta/climate.py b/custom_components/daikin_onecta/climate.py index a6fc783..9ea3743 100644 --- a/custom_components/daikin_onecta/climate.py +++ b/custom_components/daikin_onecta/climate.py @@ -16,10 +16,6 @@ from homeassistant.components.climate.const import PRESET_COMFORT from homeassistant.components.climate.const import PRESET_ECO from homeassistant.components.climate.const import PRESET_NONE -from homeassistant.components.climate.const import SWING_BOTH -from homeassistant.components.climate.const import SWING_HORIZONTAL -from homeassistant.components.climate.const import SWING_OFF -from homeassistant.components.climate.const import SWING_VERTICAL from homeassistant.const import ATTR_TEMPERATURE from homeassistant.const import CONF_HOST from homeassistant.const import CONF_NAME @@ -31,10 +27,6 @@ from .const import DAIKIN_DEVICES from .const import DOMAIN as DAIKIN_DOMAIN from .const import FANMODE_FIXED -from .const import SWING_COMFORT -from .const import SWING_COMFORT_HORIZONTAL -from .const import SWING_FLOOR -from .const import SWING_FLOOR_HORIZONTAL _LOGGER = logging.getLogger(__name__) @@ -133,10 +125,12 @@ def update_state(self) -> None: self._attr_target_temperature = self.get_target_temperature() self._attr_hvac_modes = self.get_hvac_modes() self._attr_swing_modes = self.get_swing_modes() + self._attr_swing_horizontal_modes = self.get_swing_horizontal_modes() self._attr_preset_modes = self.get_preset_modes() self._attr_fan_modes = self.get_fan_modes() self._attr_hvac_mode = self.get_hvac_mode() self._attr_swing_mode = self.get_swing_mode() + self._attr_swing_horizontal_mode = self.get_swing_horizontal_mode() self._attr_preset_mode = self.get_preset_mode() self._attr_fan_mode = self.get_fan_mode() self._attr_device_info = self._device.device_info() @@ -225,8 +219,12 @@ def get_supported_features(self): if operationmodedict is not None: if operationmodedict.get("fanSpeed") is not None: supported_features |= ClimateEntityFeature.FAN_MODE - if operationmodedict.get("fanDirection") is not None: - supported_features |= ClimateEntityFeature.SWING_MODE + fan_direction = operationmodedict.get("fanDirection") + if fan_direction is not None: + if fan_direction.get("vertical") is not None: + supported_features |= ClimateEntityFeature.SWING_MODE + if fan_direction.get("horizontal") is not None: + supported_features |= ClimateEntityFeature.SWING_HORIZONTAL_MODE _LOGGER.info("Device '%s' supports features %s", self._device.name, supported_features) @@ -558,90 +556,64 @@ async def async_set_fan_mode(self, fan_mode): return res - def get_swing_mode(self): - swingMode = None + def __get_swing_mode(self, direction): + swingMode = "" cc = self.climate_control() fanControl = cc.get("fanControl") - h = SWING_OFF - v = SWING_OFF if fanControl is not None: - swingMode = SWING_OFF operationmode = cc["operationMode"]["value"] operationmodedict = fanControl["value"]["operationModes"].get(operationmode) if operationmodedict is not None: fan_direction = operationmodedict.get("fanDirection") if fan_direction is not None: - horizontal = fan_direction.get("horizontal") - vertical = fan_direction.get("vertical") - if horizontal is not None: - h = horizontal["currentMode"]["value"] - if vertical is not None: - v = vertical["currentMode"]["value"] - if h == "swing": - swingMode = SWING_HORIZONTAL - if v == "swing": - swingMode = SWING_VERTICAL - if v == "swing" and h == "swing": - swingMode = SWING_BOTH - if v == "floorHeatingAirflow": - if h == "swing": - swingMode = SWING_FLOOR_HORIZONTAL - else: - swingMode = SWING_FLOOR - if v == "windNice": - if h == "swing": - swingMode = SWING_COMFORT_HORIZONTAL - else: - swingMode = SWING_COMFORT + fd = fan_direction.get(direction) + if fd is not None: + swingMode = fd["currentMode"]["value"].lower() _LOGGER.info( - "Device '%s' has swing mode '%s', determined from h:%s v:%s", + "Device '%s' has %s swing mode '%s'", self._device.name, + direction, swingMode, - h, - v, ) return swingMode - def get_swing_modes(self): + def get_swing_mode(self): + return self.__get_swing_mode("vertical") + + def get_swing_horizontal_mode(self): + return self.__get_swing_mode("horizontal") + + def __get_swing_modes(self, direction): swingModes = [] cc = self.climate_control() fanControl = cc.get("fanControl") if fanControl is not None: - swingModes = [SWING_OFF] + swingModes = [] operationmode = cc["operationMode"]["value"] operationmodedict = fanControl["value"]["operationModes"].get(operationmode) if operationmodedict is not None: fanDirection = operationmodedict.get("fanDirection") if fanDirection is not None: - horizontal = fanDirection.get("horizontal") - vertical = fanDirection.get("vertical") - if horizontal is not None: - for mode in horizontal["currentMode"]["values"]: - if mode == "swing": - swingModes.append(SWING_HORIZONTAL) + vertical = fanDirection.get(direction) if vertical is not None: for mode in vertical["currentMode"]["values"]: - if mode == "swing": - swingModes.append(SWING_VERTICAL) - if horizontal is not None: - swingModes.append(SWING_BOTH) - if mode == "floorHeatingAirflow": - swingModes.append(SWING_FLOOR) - if horizontal is not None: - swingModes.append(SWING_FLOOR_HORIZONTAL) - if mode == "windNice": - swingModes.append(SWING_COMFORT) - if horizontal is not None: - swingModes.append(SWING_COMFORT_HORIZONTAL) - _LOGGER.info("Device '%s' support swing modes %s", self._device.name, swingModes) + swingModes.append(mode.lower()) + _LOGGER.info("Device '%s' support %s swing modes %s", self._device.name, direction, swingModes) return swingModes - async def async_set_swing_mode(self, swing_mode): + def get_swing_modes(self): + return self.__get_swing_modes("vertical") + + def get_swing_horizontal_modes(self): + return self.__get_swing_modes("horizontal") + + async def __set_swing(self, direction, swing_mode): _LOGGER.debug( - "Device '%s' request to set swing_mode to %s", + "Device '%s' request to set swing %s mode to %s", self._device.name, + direction, swing_mode, ) res = True @@ -652,51 +624,61 @@ async def async_set_swing_mode(self, swing_mode): operation_mode = cc["operationMode"]["value"] fan_direction = fan_control["value"]["operationModes"][operation_mode].get("fanDirection") if fan_direction is not None: - horizontal = fan_direction.get("horizontal") - vertical = fan_direction.get("vertical") - if horizontal is not None: - new_h_mode = "stop" - if swing_mode in (SWING_HORIZONTAL, SWING_BOTH, SWING_COMFORT_HORIZONTAL, SWING_FLOOR_HORIZONTAL): - new_h_mode = "swing" - res &= await self._device.patch( + fd = fan_direction.get(direction) + if fd is not None: + new_mode = "stop" + # For translation the current mode is always lower case, but we need to send + # the daikin mixed case mode, so search that + for mode in fd["currentMode"]["values"]: + if swing_mode == mode.lower(): + new_mode = mode + res = await self._device.patch( self._device.id, self._embedded_id, "fanControl", - f"/operationModes/{operation_mode}/fanDirection/horizontal/currentMode", - new_h_mode, + f"/operationModes/{operation_mode}/fanDirection/{direction}/currentMode", + new_mode, ) if res is False: _LOGGER.warning( - "Device '%s' problem setting horizontal swing mode to %s", + "Device '%s' problem setting %s swing mode to %s", self._device.name, - new_h_mode, + direction, + new_mode, ) + return res - if vertical is not None: - new_v_mode = "stop" - if swing_mode in (SWING_VERTICAL, SWING_BOTH): - new_v_mode = "swing" - if swing_mode in (SWING_FLOOR, SWING_FLOOR_HORIZONTAL): - new_v_mode = "floorHeatingAirflow" - if swing_mode in (SWING_COMFORT, SWING_COMFORT_HORIZONTAL): - new_v_mode = "windNice" - res &= await self._device.patch( - self._device.id, - self._embedded_id, - "fanControl", - f"/operationModes/{operation_mode}/fanDirection/vertical/currentMode", - new_v_mode, - ) - if res is False: - _LOGGER.warning( - "Device '%s' problem setting vertical swing mode to %s", - self._device.name, - new_v_mode, - ) + async def async_set_swing_mode(self, swing_mode): + res = True + if self.swing_mode != swing_mode: + res = await self.__set_swing("vertical", swing_mode) - if res is True: - self._attr_swing_mode = swing_mode - self.async_write_ha_state() + if res is True: + self._attr_swing_mode = swing_mode + self.async_write_ha_state() + else: + _LOGGER.debug( + "Device '%s' request to set vertical swing mode '%s' ignored already set", + self._device.name, + swing_mode, + ) + + return res + + async def async_set_swing_horizontal_mode(self, swing_mode): + res = True + if self.swing_horizontal_mode != swing_mode: + res = await self.__set_swing("horizontal", swing_mode) + + if res is True: + self._attr_swing_horizontal_mode = swing_mode + self.async_write_ha_state() + else: + _LOGGER.debug( + "Device '%s' request to set horizontal swing mode '%s' ignored already set", + self._device.name, + swing_mode, + ) return res diff --git a/custom_components/daikin_onecta/const.py b/custom_components/daikin_onecta/const.py index a199128..6279420 100644 --- a/custom_components/daikin_onecta/const.py +++ b/custom_components/daikin_onecta/const.py @@ -29,11 +29,6 @@ FANMODE_FIXED = "fixed" -SWING_FLOOR = "floor" -SWING_FLOOR_HORIZONTAL = "floor_horizontal" -SWING_COMFORT = "comfort" -SWING_COMFORT_HORIZONTAL = "comfort_horizontal" - SENSOR_PERIOD_DAILY = "d" SENSOR_PERIOD_WEEKLY = "w" SENSOR_PERIOD_YEARLY = "m" diff --git a/custom_components/daikin_onecta/icons.json b/custom_components/daikin_onecta/icons.json index bb92803..c391ad7 100644 --- a/custom_components/daikin_onecta/icons.json +++ b/custom_components/daikin_onecta/icons.json @@ -14,10 +14,18 @@ "5": "mdi:numeric-5" } }, + "swing_horizontal_mode": { + "state": { + "stop": "mdi:arrow-oscillating-off", + "swing": "mdi:arrow-left-right" + } + }, "swing_mode": { "state": { - "comfort": "mdi:waves", - "comfort_horizontal": "mdi:waves-arrow-left" + "stop": "mdi:arrow-oscillating-off", + "swing": "mdi:arrow-up-down", + "windnice": "mdi:waves", + "floorheatingairflow": "mdi:arrow-right-bottom" } }, "preset_mode": { diff --git a/custom_components/daikin_onecta/manifest.json b/custom_components/daikin_onecta/manifest.json index 1eae465..77dec8d 100644 --- a/custom_components/daikin_onecta/manifest.json +++ b/custom_components/daikin_onecta/manifest.json @@ -8,5 +8,5 @@ "iot_class": "cloud_polling", "issue_tracker": "https://github.com/jwillemsen/daikin_onecta/issues", "requirements": [], - "version": "4.1.23" + "version": "4.2.0" } diff --git a/custom_components/daikin_onecta/translations/el.json b/custom_components/daikin_onecta/translations/el.json index 8b10431..3a61e4d 100644 --- a/custom_components/daikin_onecta/translations/el.json +++ b/custom_components/daikin_onecta/translations/el.json @@ -61,10 +61,8 @@ }, "swing_mode": { "state": { - "floor": "Ροή Αέρα Θέρμανσης Δαπέδου", - "floor_horizontal": "Ροή Αέρα Θέρμανσης Δαπέδου και Οριζόντια", - "comfort": "Άνετη Ροή Αέρα", - "comfort_horizontal": "Άνετη Ροή Αέρα και Οριζόντια" + "floorheatingairflow": "Ροή Αέρα Θέρμανσης Δαπέδου", + "windnice": "Άνετη Ροή Αέρα" } } } diff --git a/custom_components/daikin_onecta/translations/en.json b/custom_components/daikin_onecta/translations/en.json index 7bef020..760f3ab 100644 --- a/custom_components/daikin_onecta/translations/en.json +++ b/custom_components/daikin_onecta/translations/en.json @@ -61,10 +61,16 @@ }, "swing_mode": { "state": { - "floor": "FloorHeating Airflow", - "floor_horizontal": "FloorHeating Airflow and Horizontal", - "comfort": "Comfort Airflow", - "comfort_horizontal": "Comfort Airflow and Horizontal" + "stop": "Stop", + "swing": "Swing", + "floorheatingairflow": "FloorHeating Airflow", + "windnice": "Comfort Airflow" + } + }, + "swing_horizontal_mode": { + "state": { + "stop": "Stop", + "swing": "Swing" } } } diff --git a/custom_components/daikin_onecta/translations/nl.json b/custom_components/daikin_onecta/translations/nl.json index 4ce79ae..d94870f 100644 --- a/custom_components/daikin_onecta/translations/nl.json +++ b/custom_components/daikin_onecta/translations/nl.json @@ -45,10 +45,16 @@ }, "swing_mode": { "state": { - "floor": "Vloer Heating Airflow", - "floor_horizontal": "Vloer Heating Airflow en Horizontaal", - "comfort": "Comfort Airflow", - "comfort_horizontal": "Comfort Airflow en Horizontaal" + "stop": "Draaien uit", + "swing": "Draaien", + "floorheatingairflow": "Vloer Heating Airflow", + "windnice": "Comfort Airflow" + } + }, + "swing_horizontal_mode": { + "state": { + "stop": "Draaien uit", + "swing": "Draaien" } } } diff --git a/custom_components/daikin_onecta/translations/sl.json b/custom_components/daikin_onecta/translations/sl.json index bd883ae..f7b82ba 100644 --- a/custom_components/daikin_onecta/translations/sl.json +++ b/custom_components/daikin_onecta/translations/sl.json @@ -61,10 +61,8 @@ }, "swing_mode": { "state": { - "floor": "Tlačni tok ogrevanja", - "floor_horizontal": "Tlačni tok ogrevanja in vodoravni", - "comfort": "Tok udobja", - "comfort_horizontal": "Tok udobja in vodoravni" + "floorheatingairflow": "Tlačni tok ogrevanja", + "windnice": "Tok udobja" } } } diff --git a/custom_components/daikin_onecta/water_heater.py b/custom_components/daikin_onecta/water_heater.py index 773ed36..656cbac 100644 --- a/custom_components/daikin_onecta/water_heater.py +++ b/custom_components/daikin_onecta/water_heater.py @@ -54,7 +54,7 @@ def __init__(self, device, coordinator, management_point_type, embedded_id): self._management_point_type = management_point_type self.update_state() if self.supported_features & WaterHeaterEntityFeature.TARGET_TEMPERATURE: - _LOGGER.debug("Device '%'s: tank temperature is settable", device.name) + _LOGGER.debug("Device '%s': tank temperature is settable", device.name) def update_state(self) -> None: self._attr_name = self._device.name diff --git a/hacs.json b/hacs.json index 6e1873f..d92b742 100644 --- a/hacs.json +++ b/hacs.json @@ -1,5 +1,5 @@ { "name": "Daikin Onecta", "render_readme": true, - "homeassistant": "2024.8.0" + "homeassistant": "2024.12.0b0" } diff --git a/requirements_dev.txt b/requirements_dev.txt index 4f7998b..e8ececa 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,5 +1,5 @@ pre-commit==3.6.2 flake8==7.0.0 reorder-python-imports==3.12.0 -homeassistant>=2024.10.0 +homeassistant>=2024.12.0b pytest diff --git a/tests/snapshots/test_init.ambr b/tests/snapshots/test_init.ambr index 7b27f8f..1d8b797 100644 --- a/tests/snapshots/test_init.ambr +++ b/tests/snapshots/test_init.ambr @@ -5967,13 +5967,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -5998,7 +5999,7 @@ 'original_name': 'Johnny&Maaike Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '32db6075-b739-4026-b661-127009254b42_roomTemperature', 'unit_of_measurement': None, @@ -6036,15 +6037,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 25, @@ -6088,13 +6091,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -6119,7 +6123,7 @@ 'original_name': 'Linde Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': 'c04342c4-2fbc-4a32-b54d-6067fa1311f6_roomTemperature', 'unit_of_measurement': None, @@ -6157,15 +6161,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 23, @@ -6209,13 +6215,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -6240,7 +6247,7 @@ 'original_name': 'Sanne Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': 'f7ff41ad-4169-45e5-8df4-15e033a05668_roomTemperature', 'unit_of_measurement': None, @@ -6278,15 +6285,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 23, @@ -6330,13 +6339,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -6361,7 +6371,7 @@ 'original_name': 'Werkkamer Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '6f944461-08cb-4fee-979c-710ff66cea77_roomTemperature', 'unit_of_measurement': None, @@ -6399,15 +6409,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 25, @@ -19449,13 +19461,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -19480,7 +19493,7 @@ 'original_name': 'Johnny&Maaike Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '32db6075-b739-4026-b661-127009254b42_roomTemperature', 'unit_of_measurement': None, @@ -19518,15 +19531,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 25, @@ -19570,13 +19585,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -19601,7 +19617,7 @@ 'original_name': 'Linde Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': 'c04342c4-2fbc-4a32-b54d-6067fa1311f6_roomTemperature', 'unit_of_measurement': None, @@ -19639,15 +19655,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 23, @@ -19691,13 +19709,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -19722,7 +19741,7 @@ 'original_name': 'Sanne Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': 'f7ff41ad-4169-45e5-8df4-15e033a05668_roomTemperature', 'unit_of_measurement': None, @@ -19760,15 +19779,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 23, @@ -19812,13 +19833,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -19843,7 +19865,7 @@ 'original_name': 'Werkkamer Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '6f944461-08cb-4fee-979c-710ff66cea77_roomTemperature', 'unit_of_measurement': None, @@ -19881,15 +19903,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 25, @@ -32931,13 +32955,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -32962,7 +32987,7 @@ 'original_name': 'Johnny&Maaike Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '32db6075-b739-4026-b661-127009254b42_roomTemperature', 'unit_of_measurement': None, @@ -33000,15 +33025,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 25, @@ -33052,13 +33079,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -33083,7 +33111,7 @@ 'original_name': 'Linde Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': 'c04342c4-2fbc-4a32-b54d-6067fa1311f6_roomTemperature', 'unit_of_measurement': None, @@ -33121,15 +33149,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 23, @@ -33173,13 +33203,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -33204,7 +33235,7 @@ 'original_name': 'Sanne Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': 'f7ff41ad-4169-45e5-8df4-15e033a05668_roomTemperature', 'unit_of_measurement': None, @@ -33242,15 +33273,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 23, @@ -33294,13 +33327,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -33325,7 +33359,7 @@ 'original_name': 'Werkkamer Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '6f944461-08cb-4fee-979c-710ff66cea77_roomTemperature', 'unit_of_measurement': None, @@ -33363,15 +33397,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 25, @@ -43474,13 +43510,14 @@ 'boost', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -43505,7 +43542,7 @@ 'original_name': 'Werkkamer Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '6f944461-08cb-4fee-979c-710ff66cea77_roomTemperature', 'unit_of_measurement': None, @@ -43542,15 +43579,17 @@ 'boost', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 21, @@ -46073,13 +46112,14 @@ 'eco', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -46104,7 +46144,7 @@ 'original_name': 'Laurens Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '71f33ee1-a82d-4f08-8f61-bf25fd872731_roomTemperature', 'unit_of_measurement': None, @@ -46142,15 +46182,17 @@ 'eco', 'none', ]), - 'supported_features': , - 'swing_mode': 'comfort', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'windnice', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, 'temperature': 23, @@ -46195,9 +46237,9 @@ 'none', ]), 'swing_modes': list([ - 'off', - 'vertical', - 'floor', + 'stop', + 'swing', + 'floorheatingairflow', ]), 'target_temp_step': 0.5, }), @@ -46261,11 +46303,11 @@ 'none', ]), 'supported_features': , - 'swing_mode': 'off', + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'vertical', - 'floor', + 'stop', + 'swing', + 'floorheatingairflow', ]), 'target_temp_step': 0.5, 'temperature': 23.5, @@ -52948,8 +52990,8 @@ 'none', ]), 'swing_modes': list([ - 'off', - 'vertical', + 'swing', + 'fixed', ]), }), 'config_entry_id': , @@ -52999,10 +53041,10 @@ 'none', ]), 'supported_features': , - 'swing_mode': 'off', + 'swing_mode': 'fixed', 'swing_modes': list([ - 'off', - 'vertical', + 'swing', + 'fixed', ]), }), 'context': , @@ -62986,8 +63028,8 @@ 'none', ]), 'swing_modes': list([ - 'off', - 'vertical', + 'swing', + 'fixed', ]), }), 'config_entry_id': , @@ -63037,10 +63079,10 @@ 'none', ]), 'supported_features': , - 'swing_mode': 'off', + 'swing_mode': 'fixed', 'swing_modes': list([ - 'off', - 'vertical', + 'swing', + 'fixed', ]), }), 'context': , @@ -70065,11 +70107,13 @@ 'boost', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', + 'stop', + 'swing', ]), 'target_temp_step': 0.5, }), @@ -70094,7 +70138,7 @@ 'original_name': 'Sala Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '13995b32-fc6e-43ed-918e-5d2b01095ccb_roomTemperature', 'unit_of_measurement': None, @@ -70131,13 +70175,16 @@ 'boost', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', + 'stop', + 'swing', ]), 'target_temp_step': 0.5, 'temperature': 25, @@ -82558,13 +82605,14 @@ 'boost', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -82589,7 +82637,7 @@ 'original_name': 'Studio Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '1c80e348-61c1-4f0d-a8b1-917f2f904529_roomTemperature', 'unit_of_measurement': None, @@ -82619,14 +82667,15 @@ 'boost', 'none', ]), - 'supported_features': , + 'supported_features': , + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - 'comfort', - 'comfort_horizontal', + 'stop', + 'swing', + 'windnice', ]), 'target_temp_step': 0.5, }), @@ -83927,179 +83976,6 @@ 'state': '0', }) # --- -# name: test_schedule[binary_sensor.bureau_climatecontrol_is_holiday_mode_active-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'binary_sensor', - 'entity_category': , - 'entity_id': 'binary_sensor.bureau_climatecontrol_is_holiday_mode_active', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'ClimateControl Is Holiday Mode Active', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'climatecontrol_isholidaymodeactive', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_None_isHolidayModeActive', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[binary_sensor.bureau_climatecontrol_is_holiday_mode_active-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau ClimateControl Is Holiday Mode Active', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'binary_sensor.bureau_climatecontrol_is_holiday_mode_active', - 'last_changed': , - 'last_updated': , - 'state': 'off', - }) -# --- -# name: test_schedule[binary_sensor.bureau_climatecontrol_is_in_error_state-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'binary_sensor', - 'entity_category': , - 'entity_id': 'binary_sensor.bureau_climatecontrol_is_in_error_state', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': 'mdi:information-outline', - 'original_name': 'ClimateControl Is In Error State', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'climatecontrol_isinerrorstate', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_None_isInErrorState', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[binary_sensor.bureau_climatecontrol_is_in_error_state-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'problem', - 'friendly_name': 'Bureau ClimateControl Is In Error State', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'binary_sensor.bureau_climatecontrol_is_in_error_state', - 'last_changed': , - 'last_updated': , - 'state': 'off', - }) -# --- -# name: test_schedule[binary_sensor.bureau_climatecontrol_is_powerful_mode_active-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'binary_sensor', - 'entity_category': , - 'entity_id': 'binary_sensor.bureau_climatecontrol_is_powerful_mode_active', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'ClimateControl Is Powerful Mode Active', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'climatecontrol_ispowerfulmodeactive', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_None_isPowerfulModeActive', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[binary_sensor.bureau_climatecontrol_is_powerful_mode_active-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau ClimateControl Is Powerful Mode Active', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'binary_sensor.bureau_climatecontrol_is_powerful_mode_active', - 'last_changed': , - 'last_updated': , - 'state': 'off', - }) -# --- -# name: test_schedule[binary_sensor.bureau_gateway_is_firmware_update_supported-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'binary_sensor', - 'entity_category': , - 'entity_id': 'binary_sensor.bureau_gateway_is_firmware_update_supported', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'Gateway Is Firmware Update Supported', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'gateway_isfirmwareupdatesupported', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_gateway_None_isFirmwareUpdateSupported', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[binary_sensor.bureau_gateway_is_firmware_update_supported-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau Gateway Is Firmware Update Supported', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'binary_sensor.bureau_gateway_is_firmware_update_supported', - 'last_changed': , - 'last_updated': , - 'state': 'on', - }) -# --- # name: test_schedule[binary_sensor.master_climatecontrol_is_holiday_mode_active-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -84289,117 +84165,6 @@ 'state': 'on', }) # --- -# name: test_schedule[climate.bureau_room_temperature-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'fan_modes': list([ - 'quiet', - 'auto', - '1', - '2', - '3', - '4', - '5', - ]), - 'hvac_modes': list([ - , - , - , - , - , - , - ]), - 'max_temp': 30, - 'min_temp': 18, - 'preset_modes': list([ - 'away', - 'boost', - 'none', - ]), - 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - ]), - 'target_temp_step': 0.5, - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'climate', - 'entity_category': None, - 'entity_id': 'climate.bureau_room_temperature', - 'has_entity_name': False, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': None, - 'original_name': 'Bureau Room Temperature', - 'platform': 'daikin_onecta', - 'supported_features': , - 'translation_key': 'daikin_onecta', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_roomTemperature', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[climate.bureau_room_temperature-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'current_temperature': 19, - 'fan_mode': 'auto', - 'fan_modes': list([ - 'quiet', - 'auto', - '1', - '2', - '3', - '4', - '5', - ]), - 'friendly_name': 'Bureau Room Temperature', - 'hvac_modes': list([ - , - , - , - , - , - , - ]), - 'max_temp': 30, - 'min_temp': 18, - 'preset_mode': 'none', - 'preset_modes': list([ - 'away', - 'boost', - 'none', - ]), - 'supported_features': , - 'swing_mode': 'off', - 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', - ]), - 'target_temp_step': 0.5, - 'temperature': 18, - }), - 'context': , - 'entity_id': 'climate.bureau_room_temperature', - 'last_changed': , - 'last_updated': , - 'state': 'heat_cool', - }) -# --- # name: test_schedule[climate.master_room_temperature-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -84494,62 +84259,6 @@ 'state': 'off', }) # --- -# name: test_schedule[select.bureau_climatecontrol_schedule-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'options': list([ - '0', - '1', - '2', - 'off', - ]), - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'select', - 'entity_category': None, - 'entity_id': 'select.bureau_climatecontrol_schedule', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:calendar-clock', - 'original_name': 'ClimateControl Schedule', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_schedule', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[select.bureau_climatecontrol_schedule-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau ClimateControl Schedule', - 'icon': 'mdi:calendar-clock', - 'options': list([ - '0', - '1', - '2', - 'off', - ]), - }), - 'context': , - 'entity_id': 'select.bureau_climatecontrol_schedule', - 'last_changed': , - 'last_updated': , - 'state': 'off', - }) -# --- # name: test_schedule[select.master_climatecontrol_schedule-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -84610,1053 +84319,6 @@ 'state': 'off', }) # --- -# name: test_schedule[sensor.bureau_climatecontrol_cooling_daily_electrical_consumption-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': None, - 'entity_id': 'sensor.bureau_climatecontrol_cooling_daily_electrical_consumption', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': 'mdi:snowflake', - 'original_name': 'ClimateControl Cooling Daily Electrical Consumption', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_electrical_cooling_d', - 'unit_of_measurement': , - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_cooling_daily_electrical_consumption-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'energy', - 'friendly_name': 'Bureau ClimateControl Cooling Daily Electrical Consumption', - 'icon': 'mdi:snowflake', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_cooling_daily_electrical_consumption', - 'last_changed': , - 'last_updated': , - 'state': '0.1', - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_cooling_weekly_electrical_consumption-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': None, - 'entity_id': 'sensor.bureau_climatecontrol_cooling_weekly_electrical_consumption', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': 'mdi:snowflake', - 'original_name': 'ClimateControl Cooling Weekly Electrical Consumption', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_electrical_cooling_w', - 'unit_of_measurement': , - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_cooling_weekly_electrical_consumption-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'energy', - 'friendly_name': 'Bureau ClimateControl Cooling Weekly Electrical Consumption', - 'icon': 'mdi:snowflake', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_cooling_weekly_electrical_consumption', - 'last_changed': , - 'last_updated': , - 'state': '0.8', - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_cooling_yearly_electrical_consumption-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': None, - 'entity_id': 'sensor.bureau_climatecontrol_cooling_yearly_electrical_consumption', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': 'mdi:snowflake', - 'original_name': 'ClimateControl Cooling Yearly Electrical Consumption', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_electrical_cooling_m', - 'unit_of_measurement': , - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_cooling_yearly_electrical_consumption-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'energy', - 'friendly_name': 'Bureau ClimateControl Cooling Yearly Electrical Consumption', - 'icon': 'mdi:snowflake', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_cooling_yearly_electrical_consumption', - 'last_changed': , - 'last_updated': , - 'state': '1.4', - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_error_code-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_climatecontrol_error_code', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'ClimateControl Error Code', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'climatecontrol_errorcode', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_None_errorCode', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_error_code-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau ClimateControl Error Code', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_error_code', - 'last_changed': , - 'last_updated': , - 'state': '00', - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_heating_daily_electrical_consumption-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': None, - 'entity_id': 'sensor.bureau_climatecontrol_heating_daily_electrical_consumption', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': 'mdi:fire', - 'original_name': 'ClimateControl Heating Daily Electrical Consumption', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_electrical_heating_d', - 'unit_of_measurement': , - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_heating_daily_electrical_consumption-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'energy', - 'friendly_name': 'Bureau ClimateControl Heating Daily Electrical Consumption', - 'icon': 'mdi:fire', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_heating_daily_electrical_consumption', - 'last_changed': , - 'last_updated': , - 'state': '0', - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_heating_weekly_electrical_consumption-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': None, - 'entity_id': 'sensor.bureau_climatecontrol_heating_weekly_electrical_consumption', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': 'mdi:fire', - 'original_name': 'ClimateControl Heating Weekly Electrical Consumption', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_electrical_heating_w', - 'unit_of_measurement': , - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_heating_weekly_electrical_consumption-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'energy', - 'friendly_name': 'Bureau ClimateControl Heating Weekly Electrical Consumption', - 'icon': 'mdi:fire', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_heating_weekly_electrical_consumption', - 'last_changed': , - 'last_updated': , - 'state': '0', - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_heating_yearly_electrical_consumption-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': None, - 'entity_id': 'sensor.bureau_climatecontrol_heating_yearly_electrical_consumption', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': 'mdi:fire', - 'original_name': 'ClimateControl Heating Yearly Electrical Consumption', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_electrical_heating_m', - 'unit_of_measurement': , - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_heating_yearly_electrical_consumption-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'energy', - 'friendly_name': 'Bureau ClimateControl Heating Yearly Electrical Consumption', - 'icon': 'mdi:fire', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_heating_yearly_electrical_consumption', - 'last_changed': , - 'last_updated': , - 'state': '21.6', - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_name-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_climatecontrol_name', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'ClimateControl Name', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'climatecontrol_name', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_None_name', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_name-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau ClimateControl Name', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_name', - 'last_changed': , - 'last_updated': , - 'state': 'Bureau', - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_outdoor_temperature-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': None, - 'entity_id': 'sensor.bureau_climatecontrol_outdoor_temperature', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': '', - 'original_name': 'ClimateControl Outdoor Temperature', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'climatecontrol_outdoortemperature', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_sensoryData_outdoorTemperature', - 'unit_of_measurement': , - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_outdoor_temperature-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'temperature', - 'friendly_name': 'Bureau ClimateControl Outdoor Temperature', - 'icon': '', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_outdoor_temperature', - 'last_changed': , - 'last_updated': , - 'state': '30', - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_room_temperature-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': None, - 'entity_id': 'sensor.bureau_climatecontrol_room_temperature', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': , - 'original_icon': '', - 'original_name': 'ClimateControl Room Temperature', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'climatecontrol_roomtemperature', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_climateControl_sensoryData_roomTemperature', - 'unit_of_measurement': , - }) -# --- -# name: test_schedule[sensor.bureau_climatecontrol_room_temperature-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'device_class': 'temperature', - 'friendly_name': 'Bureau ClimateControl Room Temperature', - 'icon': '', - 'state_class': , - 'unit_of_measurement': , - }), - 'context': , - 'entity_id': 'sensor.bureau_climatecontrol_room_temperature', - 'last_changed': , - 'last_updated': , - 'state': '19', - }) -# --- -# name: test_schedule[sensor.bureau_gateway_firmware_version-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_gateway_firmware_version', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'Gateway Firmware Version', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'gateway_firmwareversion', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_gateway_None_firmwareVersion', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_gateway_firmware_version-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau Gateway Firmware Version', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'sensor.bureau_gateway_firmware_version', - 'last_changed': , - 'last_updated': , - 'state': '1_14_88', - }) -# --- -# name: test_schedule[sensor.bureau_gateway_ip_address-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_gateway_ip_address', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:ip-network', - 'original_name': 'Gateway Ip Address', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'gateway_ipaddress', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_gateway_None_ipAddress', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_gateway_ip_address-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau Gateway Ip Address', - 'icon': 'mdi:ip-network', - }), - 'context': , - 'entity_id': 'sensor.bureau_gateway_ip_address', - 'last_changed': , - 'last_updated': , - 'state': '192.168.0.27', - }) -# --- -# name: test_schedule[sensor.bureau_gateway_mac_address-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_gateway_mac_address', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'Gateway Mac Address', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'gateway_macaddress', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_gateway_None_macAddress', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_gateway_mac_address-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau Gateway Mac Address', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'sensor.bureau_gateway_mac_address', - 'last_changed': , - 'last_updated': , - 'state': '2c:3b:70:b9:f5:bb', - }) -# --- -# name: test_schedule[sensor.bureau_gateway_model_info-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_gateway_model_info', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'Gateway Model Info', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'gateway_modelinfo', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_gateway_None_modelInfo', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_gateway_model_info-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau Gateway Model Info', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'sensor.bureau_gateway_model_info', - 'last_changed': , - 'last_updated': , - 'state': 'BRP069B4x', - }) -# --- -# name: test_schedule[sensor.bureau_gateway_name-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_gateway_name', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'Gateway Name', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'gateway_name', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_gateway_None_name', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_gateway_name-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau Gateway Name', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'sensor.bureau_gateway_name', - 'last_changed': , - 'last_updated': , - 'state': 'Gateway', - }) -# --- -# name: test_schedule[sensor.bureau_indoorunit_name-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_indoorunit_name', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'IndoorUnit Name', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'indoorunit_name', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_indoorUnit_None_name', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_indoorunit_name-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau IndoorUnit Name', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'sensor.bureau_indoorunit_name', - 'last_changed': , - 'last_updated': , - 'state': 'Indoor Unit', - }) -# --- -# name: test_schedule[sensor.bureau_indoorunit_software_version-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': None, - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_indoorunit_software_version', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'IndoorUnit Software Version', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': 'indoorunit_softwareversion', - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_indoorUnit_None_softwareVersion', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_indoorunit_software_version-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau IndoorUnit Software Version', - 'icon': 'mdi:information-outline', - }), - 'context': , - 'entity_id': 'sensor.bureau_indoorunit_software_version', - 'last_changed': , - 'last_updated': , - 'state': '3.30', - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_day-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_ratelimit_day', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'RateLimit day', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_limitsensor_day', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_day-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau RateLimit day', - 'icon': 'mdi:information-outline', - 'state_class': , - }), - 'context': , - 'entity_id': 'sensor.bureau_ratelimit_day', - 'last_changed': , - 'last_updated': , - 'state': '0', - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_minute-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_ratelimit_minute', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'RateLimit minute', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_limitsensor_minute', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_minute-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau RateLimit minute', - 'icon': 'mdi:information-outline', - 'state_class': , - }), - 'context': , - 'entity_id': 'sensor.bureau_ratelimit_minute', - 'last_changed': , - 'last_updated': , - 'state': '0', - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_ratelimit_reset-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_ratelimit_ratelimit_reset', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'RateLimit ratelimit_reset', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_limitsensor_ratelimit_reset', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_ratelimit_reset-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau RateLimit ratelimit_reset', - 'icon': 'mdi:information-outline', - 'state_class': , - }), - 'context': , - 'entity_id': 'sensor.bureau_ratelimit_ratelimit_reset', - 'last_changed': , - 'last_updated': , - 'state': '0', - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_remaining_day-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_ratelimit_remaining_day', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'RateLimit remaining_day', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_limitsensor_remaining_day', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_remaining_day-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau RateLimit remaining_day', - 'icon': 'mdi:information-outline', - 'state_class': , - }), - 'context': , - 'entity_id': 'sensor.bureau_ratelimit_remaining_day', - 'last_changed': , - 'last_updated': , - 'state': '0', - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_remaining_minutes-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_ratelimit_remaining_minutes', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'RateLimit remaining_minutes', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_limitsensor_remaining_minutes', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_remaining_minutes-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau RateLimit remaining_minutes', - 'icon': 'mdi:information-outline', - 'state_class': , - }), - 'context': , - 'entity_id': 'sensor.bureau_ratelimit_remaining_minutes', - 'last_changed': , - 'last_updated': , - 'state': '0', - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_retry_after-entry] - EntityRegistryEntrySnapshot({ - 'aliases': set({ - }), - 'area_id': None, - 'capabilities': dict({ - 'state_class': , - }), - 'config_entry_id': , - 'device_class': None, - 'device_id': , - 'disabled_by': None, - 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.bureau_ratelimit_retry_after', - 'has_entity_name': True, - 'hidden_by': None, - 'icon': None, - 'id': , - 'name': None, - 'options': dict({ - }), - 'original_device_class': None, - 'original_icon': 'mdi:information-outline', - 'original_name': 'RateLimit retry_after', - 'platform': 'daikin_onecta', - 'supported_features': 0, - 'translation_key': None, - 'unique_id': 'e7ed83b2-030e-4b8b-a6e7-9142dbb26d4c_limitsensor_retry_after', - 'unit_of_measurement': None, - }) -# --- -# name: test_schedule[sensor.bureau_ratelimit_retry_after-state] - StateSnapshot({ - 'attributes': ReadOnlyDict({ - 'friendly_name': 'Bureau RateLimit retry_after', - 'icon': 'mdi:information-outline', - 'state_class': , - }), - 'context': , - 'entity_id': 'sensor.bureau_ratelimit_retry_after', - 'last_changed': , - 'last_updated': , - 'state': '0', - }) -# --- # name: test_schedule[sensor.master_climatecontrol_error_code-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -86696,11 +85358,13 @@ 'away', 'none', ]), + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', + 'stop', + 'swing', ]), 'target_temp_step': 0.5, }), @@ -86725,7 +85389,7 @@ 'original_name': 'DaikinAP95800 Room Temperature', 'platform': 'daikin_onecta', 'previous_unique_id': None, - 'supported_features': , + 'supported_features': , 'translation_key': 'daikin_onecta', 'unique_id': '95c2f177-dd7a-4bdc-ad48-1a7f47f34a01_roomTemperature', 'unit_of_measurement': None, @@ -86760,13 +85424,16 @@ 'away', 'none', ]), - 'supported_features': , - 'swing_mode': 'off', + 'supported_features': , + 'swing_horizontal_mode': 'stop', + 'swing_horizontal_modes': list([ + 'stop', + 'swing', + ]), + 'swing_mode': 'stop', 'swing_modes': list([ - 'off', - 'horizontal', - 'vertical', - 'both', + 'stop', + 'swing', ]), 'target_temp_step': 0.5, 'temperature': 20, diff --git a/tests/test_init.py b/tests/test_init.py index aa037a3..e287649 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -10,6 +10,7 @@ from homeassistant.components.climate import ATTR_FAN_MODE from homeassistant.components.climate import ATTR_HVAC_MODE from homeassistant.components.climate import ATTR_PRESET_MODE +from homeassistant.components.climate import ATTR_SWING_HORIZONTAL_MODE from homeassistant.components.climate import ATTR_SWING_MODE from homeassistant.components.climate import DOMAIN as CLIMATE_DOMAIN from homeassistant.components.climate import PRESET_AWAY @@ -18,10 +19,10 @@ from homeassistant.components.climate import SERVICE_SET_FAN_MODE from homeassistant.components.climate import SERVICE_SET_HVAC_MODE from homeassistant.components.climate import SERVICE_SET_PRESET_MODE +from homeassistant.components.climate import SERVICE_SET_SWING_HORIZONTAL_MODE from homeassistant.components.climate import SERVICE_SET_SWING_MODE from homeassistant.components.climate import SERVICE_TURN_OFF from homeassistant.components.climate import SERVICE_TURN_ON -from homeassistant.components.climate import SWING_BOTH from homeassistant.components.climate.const import HVACMode from homeassistant.components.homeassistant import DOMAIN as HA_DOMAIN from homeassistant.components.homeassistant import SERVICE_UPDATE_ENTITY @@ -811,11 +812,20 @@ async def test_climate( assert hass.states.get("climate.werkkamer_room_temperature").state == HVACMode.COOL assert hass.states.get("climate.werkkamer_room_temperature").attributes["temperature"] == 20 - # Set the swing mode to SWING_BOTH, should result in two calls + # Set the horizontal swing mode to swing + await hass.services.async_call( + CLIMATE_DOMAIN, + SERVICE_SET_SWING_HORIZONTAL_MODE, + {ATTR_ENTITY_ID: "climate.werkkamer_room_temperature", ATTR_SWING_HORIZONTAL_MODE: "swing"}, + blocking=True, + ) + await hass.async_block_till_done() + + # Set the vertical swing mode to swing await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_SWING_MODE, - {ATTR_ENTITY_ID: "climate.werkkamer_room_temperature", ATTR_SWING_MODE: SWING_BOTH}, + {ATTR_ENTITY_ID: "climate.werkkamer_room_temperature", ATTR_SWING_MODE: "swing"}, blocking=True, ) await hass.async_block_till_done() @@ -823,7 +833,28 @@ async def test_climate( assert len(responses.calls) == 15 assert responses.calls[13].request.body == '{"value": "swing", "path": "/operationModes/cooling/fanDirection/horizontal/currentMode"}' assert responses.calls[14].request.body == '{"value": "swing", "path": "/operationModes/cooling/fanDirection/vertical/currentMode"}' - assert hass.states.get("climate.werkkamer_room_temperature").attributes["swing_mode"] == SWING_BOTH + assert hass.states.get("climate.werkkamer_room_temperature").attributes["swing_horizontal_mode"] == "swing" + assert hass.states.get("climate.werkkamer_room_temperature").attributes["swing_mode"] == "swing" + + # Set the horizontal swing mode another time to swing, should not result in a call + await hass.services.async_call( + CLIMATE_DOMAIN, + SERVICE_SET_SWING_HORIZONTAL_MODE, + {ATTR_ENTITY_ID: "climate.werkkamer_room_temperature", ATTR_SWING_HORIZONTAL_MODE: "swing"}, + blocking=True, + ) + await hass.async_block_till_done() + + # Set the vertical swing mode another time to swing, should not result in a call + await hass.services.async_call( + CLIMATE_DOMAIN, + SERVICE_SET_SWING_MODE, + {ATTR_ENTITY_ID: "climate.werkkamer_room_temperature", ATTR_SWING_MODE: "swing"}, + blocking=True, + ) + await hass.async_block_till_done() + + assert len(responses.calls) == 15 # Set the preset mode boost await hass.services.async_call( @@ -1076,6 +1107,19 @@ async def test_climate( assert len(rsps.calls) == 1 assert rsps.calls[0].request.url == DAIKIN_API_URL + "/v1/gateway-devices" + # Set the swing mode to windnice, should result in a call with windNice + await hass.services.async_call( + CLIMATE_DOMAIN, + SERVICE_SET_SWING_MODE, + {ATTR_ENTITY_ID: "climate.werkkamer_room_temperature", ATTR_SWING_MODE: "windnice"}, + blocking=True, + ) + await hass.async_block_till_done() + + assert len(responses.calls) == 33 + assert responses.calls[32].request.body == '{"value": "windNice", "path": "/operationModes/cooling/fanDirection/vertical/currentMode"}' + assert hass.states.get("climate.werkkamer_room_temperature").attributes["swing_mode"] == "windnice" + async def test_minimal_data( hass: HomeAssistant,