diff --git a/homeassistant/components/vesync/humidifier.py b/homeassistant/components/vesync/humidifier.py index 8edb405121a..6a6400d74af 100644 --- a/homeassistant/components/vesync/humidifier.py +++ b/homeassistant/components/vesync/humidifier.py @@ -37,7 +37,7 @@ _LOGGER = logging.getLogger(__name__) VS_TO_HA_MODE_MAP = { VS_HUMIDIFIER_MODE_AUTO: MODE_AUTO, - VS_HUMIDIFIER_MODE_HUMIDITY: MODE_AUTO, + VS_HUMIDIFIER_MODE_HUMIDITY: VS_HUMIDIFIER_MODE_HUMIDITY, VS_HUMIDIFIER_MODE_MANUAL: MODE_NORMAL, VS_HUMIDIFIER_MODE_SLEEP: MODE_SLEEP, } @@ -93,6 +93,8 @@ class VeSyncHumidifierHA(VeSyncBaseEntity, HumidifierEntity): _attr_supported_features = HumidifierEntityFeature.MODES + _attr_translation_key = "vesync" + def __init__( self, device: VeSyncBaseDevice, diff --git a/homeassistant/components/vesync/strings.json b/homeassistant/components/vesync/strings.json index 6d3154d1ac1..4eee92d3c49 100644 --- a/homeassistant/components/vesync/strings.json +++ b/homeassistant/components/vesync/strings.json @@ -49,6 +49,17 @@ } } }, + "humidifier": { + "vesync": { + "state_attributes": { + "mode": { + "state": { + "humidity": "Humidity" + } + } + } + } + }, "number": { "mist_level": { "name": "Mist level" diff --git a/tests/components/vesync/common.py b/tests/components/vesync/common.py index dd80cf277a2..a33edcc48ab 100644 --- a/tests/components/vesync/common.py +++ b/tests/components/vesync/common.py @@ -74,6 +74,9 @@ DEVICE_FIXTURES: dict[str, list[tuple[str, str, str]]] = { ("post", "/cloud/v1/deviceManaged/deviceDetail", "dimmer-detail.json") ], "SmartTowerFan": [("post", "/cloud/v2/deviceManaged/bypassV2", "fan-detail.json")], + "Humidifier 6000s": [ + ("post", "/cloud/v2/deviceManaged/bypassV2", "humidifier-6000s-detail.json") + ], } diff --git a/tests/components/vesync/fixtures/humidifier-6000s-detail.json b/tests/components/vesync/fixtures/humidifier-6000s-detail.json new file mode 100644 index 00000000000..4c144d9d14c --- /dev/null +++ b/tests/components/vesync/fixtures/humidifier-6000s-detail.json @@ -0,0 +1,52 @@ +{ + "traceId": "0", + "code": 0, + "msg": "request success", + "module": null, + "stacktrace": null, + "result": { + "traceId": "0", + "code": 0, + "result": { + "powerSwitch": 1, + "humidity": 36, + "targetHumidity": 40, + "virtualLevel": 1, + "mistLevel": 1, + "workMode": "humidity", + "waterLacksState": 0, + "waterTankLifted": 0, + "autoStopSwitch": 1, + "autoStopState": 1, + "screenSwitch": 0, + "screenState": 0, + "scheduleCount": 0, + "timerRemain": 0, + "errorCode": 0, + "autoPreference": 1, + "childLockSwitch": 1, + "filterLifePercent": 77, + "temperature": 640, + "maxLevelNotify": 0, + "waterShortageDryingSwitch": 1, + "humidityPreference": 1, + "dryingMode": { + "dryingLevel": 1, + "autoDryingSwitch": 1, + "dryingState": 2, + "dryingRemain": 7200 + }, + "isSupportSensor": 1, + "sensorContent": { + "sensorStatus": "noDevices" + }, + "waterPump": { + "cleanStatus": 0, + "remainTime": 0, + "totalTime": 65 + }, + "lastDryingCompletedTime": 1761850797, + "afterDryLastHumidityTime": 1761883500 + } + } +} diff --git a/tests/components/vesync/fixtures/vesync-devices.json b/tests/components/vesync/fixtures/vesync-devices.json index 7fbc9b03e3b..2786018b433 100644 --- a/tests/components/vesync/fixtures/vesync-devices.json +++ b/tests/components/vesync/fixtures/vesync-devices.json @@ -185,6 +185,52 @@ "connectionStatus": "online", "uuid": "00000000-1111-2222-3333-444444444444", "configModule": "configModule" + }, + { + "deviceRegion": "US", + "isOwner": false, + "authKey": null, + "deviceName": "Humidifier 6000s", + "deviceImg": "https://image.vesync.com/defaultImages/LEH-S601S-WUS/icon_LEH_S601S_WUS_240.png", + "cid": "6000s", + "deviceStatus": null, + "connectionStatus": null, + "connectionType": "WiFi+BTOnboarding+BTNotify", + "deviceType": "LEH-S601S-WUS", + "type": "wifi-air", + "uuid": "00000000-1111-2222-3333-444444444444", + "configModule": "VS_WFON_AHM_LEH-S601S-WUS_US", + "macID": "00:10:f0:aa:bb:cc", + "mode": null, + "speed": null, + "currentFirmVersion": null, + "subDeviceNo": null, + "subDeviceType": null, + "deviceFirstSetupTime": "Jul 26, 2024 3:32:26 AM", + "subDeviceList": null, + "extension": null, + "deviceProp": { + "workMode": "humidity", + "autoPreference": 1, + "dryingState": 2, + "virtualLevel": 5, + "filterLifePercent": 77, + "BTMac": "00:10:f0:aa:bb:cc", + "autoDryingSwitch": 1, + "waterLacksState": 0, + "screenSwitch": 0, + "childLockSwitch": 1, + "humidity": 36, + "wifiRssi": -74, + "dryingLevel": 1, + "targetHumidity": 40, + "humidityPreference": 1, + "powerSwitch": 1, + "waterShortageDryingSwitch": 1, + "connectionStatus": "online", + "wifiMac": "00:10:f0:aa:bb:cc", + "mistLevel": 2 + } } ] } diff --git a/tests/components/vesync/snapshots/test_binary_sensor.ambr b/tests/components/vesync/snapshots/test_binary_sensor.ambr index 3b851ea989c..6ee31aacdce 100644 --- a/tests/components/vesync/snapshots/test_binary_sensor.ambr +++ b/tests/components/vesync/snapshots/test_binary_sensor.ambr @@ -352,6 +352,137 @@ }), ]) # --- +# name: test_sensor_state[Humidifier 6000s][binary_sensor.humidifier_6000s_low_water] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'problem', + 'friendly_name': 'Humidifier 6000s Low water', + }), + 'context': , + 'entity_id': 'binary_sensor.humidifier_6000s_low_water', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'off', + }) +# --- +# name: test_sensor_state[Humidifier 6000s][binary_sensor.humidifier_6000s_water_tank_lifted] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'problem', + 'friendly_name': 'Humidifier 6000s Water tank lifted', + }), + 'context': , + 'entity_id': 'binary_sensor.humidifier_6000s_water_tank_lifted', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'off', + }) +# --- +# name: test_sensor_state[Humidifier 6000s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '6000s', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LEH-S601S-WUS', + 'model_id': None, + 'name': 'Humidifier 6000s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_sensor_state[Humidifier 6000s][entities] + list([ + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.humidifier_6000s_low_water', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Low water', + 'platform': 'vesync', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_lacks', + 'unique_id': '6000s-water_lacks', + 'unit_of_measurement': None, + }), + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.humidifier_6000s_water_tank_lifted', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Water tank lifted', + 'platform': 'vesync', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'water_tank_lifted', + 'unique_id': '6000s-details.water_tank_lifted', + 'unit_of_measurement': None, + }), + ]) +# --- # name: test_sensor_state[Humidifier 600S][binary_sensor.humidifier_600s_low_water] StateSnapshot({ 'attributes': ReadOnlyDict({ diff --git a/tests/components/vesync/snapshots/test_fan.ambr b/tests/components/vesync/snapshots/test_fan.ambr index d9596f23bf8..7b33ef94fa4 100644 --- a/tests/components/vesync/snapshots/test_fan.ambr +++ b/tests/components/vesync/snapshots/test_fan.ambr @@ -511,6 +511,43 @@ list([ ]) # --- +# name: test_fan_state[Humidifier 6000s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '6000s', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LEH-S601S-WUS', + 'model_id': None, + 'name': 'Humidifier 6000s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_fan_state[Humidifier 6000s][entities] + list([ + ]) +# --- # name: test_fan_state[Humidifier 600S][devices] list([ DeviceRegistryEntrySnapshot({ diff --git a/tests/components/vesync/snapshots/test_humidifier.ambr b/tests/components/vesync/snapshots/test_humidifier.ambr new file mode 100644 index 00000000000..5e5e77cca3f --- /dev/null +++ b/tests/components/vesync/snapshots/test_humidifier.ambr @@ -0,0 +1,677 @@ +# serializer version: 1 +# name: test_humidifier_state[Air Purifier 131s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + 'air-purifier', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LV-PUR131S', + 'model_id': None, + 'name': 'Air Purifier 131s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Air Purifier 131s][entities] + list([ + ]) +# --- +# name: test_humidifier_state[Air Purifier 200s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + 'asd_sdfKIHG7IJHGwJGJ7GJ_ag5h3G55', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'Core200S', + 'model_id': None, + 'name': 'Air Purifier 200s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Air Purifier 200s][entities] + list([ + ]) +# --- +# name: test_humidifier_state[Air Purifier 400s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '400s-purifier', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LAP-C401S-WJP', + 'model_id': None, + 'name': 'Air Purifier 400s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Air Purifier 400s][entities] + list([ + ]) +# --- +# name: test_humidifier_state[Air Purifier 600s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '600s-purifier', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LAP-C601S-WUS', + 'model_id': None, + 'name': 'Air Purifier 600s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Air Purifier 600s][entities] + list([ + ]) +# --- +# name: test_humidifier_state[Dimmable Light][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + 'dimmable-bulb', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'ESL100', + 'model_id': None, + 'name': 'Dimmable Light', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Dimmable Light][entities] + list([ + ]) +# --- +# name: test_humidifier_state[Dimmer Switch][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + 'dimmable-switch', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'ESWD16', + 'model_id': None, + 'name': 'Dimmer Switch', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Dimmer Switch][entities] + list([ + ]) +# --- +# name: test_humidifier_state[Humidifier 200s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '200s-humidifier4321', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'Classic200S', + 'model_id': None, + 'name': 'Humidifier 200s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Humidifier 200s][entities] + list([ + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'available_modes': list([ + 'auto', + 'normal', + ]), + 'max_humidity': 80, + 'min_humidity': 30, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'humidifier', + 'entity_category': None, + 'entity_id': 'humidifier.humidifier_200s', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': None, + 'platform': 'vesync', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': , + 'translation_key': 'vesync', + 'unique_id': '200s-humidifier4321', + 'unit_of_measurement': None, + }), + ]) +# --- +# name: test_humidifier_state[Humidifier 200s][humidifier.humidifier_200s] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'available_modes': list([ + 'auto', + 'normal', + ]), + 'current_humidity': 35, + 'friendly_name': 'Humidifier 200s', + 'humidity': 40, + 'max_humidity': 80, + 'min_humidity': 30, + 'mode': 'normal', + 'supported_features': , + }), + 'context': , + 'entity_id': 'humidifier.humidifier_200s', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- +# name: test_humidifier_state[Humidifier 6000s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '6000s', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LEH-S601S-WUS', + 'model_id': None, + 'name': 'Humidifier 6000s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Humidifier 6000s][entities] + list([ + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'available_modes': list([ + 'auto', + 'humidity', + 'normal', + 'sleep', + ]), + 'max_humidity': 80, + 'min_humidity': 30, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'humidifier', + 'entity_category': None, + 'entity_id': 'humidifier.humidifier_6000s', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': None, + 'platform': 'vesync', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': , + 'translation_key': 'vesync', + 'unique_id': '6000s', + 'unit_of_measurement': None, + }), + ]) +# --- +# name: test_humidifier_state[Humidifier 6000s][humidifier.humidifier_6000s] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'available_modes': list([ + 'auto', + 'humidity', + 'normal', + 'sleep', + ]), + 'current_humidity': 36, + 'friendly_name': 'Humidifier 6000s', + 'humidity': 40, + 'max_humidity': 80, + 'min_humidity': 30, + 'mode': 'humidity', + 'supported_features': , + }), + 'context': , + 'entity_id': 'humidifier.humidifier_6000s', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- +# name: test_humidifier_state[Humidifier 600S][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '600s-humidifier', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LUH-A602S-WUS', + 'model_id': None, + 'name': 'Humidifier 600S', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Humidifier 600S][entities] + list([ + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'available_modes': list([ + 'auto', + 'normal', + 'sleep', + ]), + 'max_humidity': 80, + 'min_humidity': 30, + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'humidifier', + 'entity_category': None, + 'entity_id': 'humidifier.humidifier_600s', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': None, + 'platform': 'vesync', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': , + 'translation_key': 'vesync', + 'unique_id': '600s-humidifier', + 'unit_of_measurement': None, + }), + ]) +# --- +# name: test_humidifier_state[Humidifier 600S][humidifier.humidifier_600s] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'available_modes': list([ + 'auto', + 'normal', + 'sleep', + ]), + 'current_humidity': 35, + 'friendly_name': 'Humidifier 600S', + 'humidity': 40, + 'max_humidity': 80, + 'min_humidity': 30, + 'mode': 'normal', + 'supported_features': , + }), + 'context': , + 'entity_id': 'humidifier.humidifier_600s', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- +# name: test_humidifier_state[Outlet][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + 'outlet', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'wifi-switch-1.3', + 'model_id': None, + 'name': 'Outlet', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Outlet][entities] + list([ + ]) +# --- +# name: test_humidifier_state[SmartTowerFan][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + 'smarttowerfan', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LTF-F422S-KEU', + 'model_id': None, + 'name': 'SmartTowerFan', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[SmartTowerFan][entities] + list([ + ]) +# --- +# name: test_humidifier_state[Temperature Light][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + 'tunable-bulb', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'ESL100CW', + 'model_id': None, + 'name': 'Temperature Light', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Temperature Light][entities] + list([ + ]) +# --- +# name: test_humidifier_state[Wall Switch][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + 'switch', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'ESWL01', + 'model_id': None, + 'name': 'Wall Switch', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_humidifier_state[Wall Switch][entities] + list([ + ]) +# --- diff --git a/tests/components/vesync/snapshots/test_light.ambr b/tests/components/vesync/snapshots/test_light.ambr index a55659b6130..9560292b174 100644 --- a/tests/components/vesync/snapshots/test_light.ambr +++ b/tests/components/vesync/snapshots/test_light.ambr @@ -368,6 +368,43 @@ list([ ]) # --- +# name: test_light_state[Humidifier 6000s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '6000s', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LEH-S601S-WUS', + 'model_id': None, + 'name': 'Humidifier 6000s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_light_state[Humidifier 6000s][entities] + list([ + ]) +# --- # name: test_light_state[Humidifier 600S][devices] list([ DeviceRegistryEntrySnapshot({ diff --git a/tests/components/vesync/snapshots/test_sensor.ambr b/tests/components/vesync/snapshots/test_sensor.ambr index efd9138e76b..5e3a6958eb0 100644 --- a/tests/components/vesync/snapshots/test_sensor.ambr +++ b/tests/components/vesync/snapshots/test_sensor.ambr @@ -749,6 +749,94 @@ 'state': '35', }) # --- +# name: test_sensor_state[Humidifier 6000s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '6000s', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LEH-S601S-WUS', + 'model_id': None, + 'name': 'Humidifier 6000s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_sensor_state[Humidifier 6000s][entities] + list([ + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.humidifier_6000s_humidity', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Humidity', + 'platform': 'vesync', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': None, + 'unique_id': '6000s-humidity', + 'unit_of_measurement': '%', + }), + ]) +# --- +# name: test_sensor_state[Humidifier 6000s][sensor.humidifier_6000s_humidity] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'humidity', + 'friendly_name': 'Humidifier 6000s Humidity', + 'state_class': , + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'sensor.humidifier_6000s_humidity', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '36', + }) +# --- # name: test_sensor_state[Humidifier 600S][devices] list([ DeviceRegistryEntrySnapshot({ diff --git a/tests/components/vesync/snapshots/test_switch.ambr b/tests/components/vesync/snapshots/test_switch.ambr index e7917397063..2dcdbc058b1 100644 --- a/tests/components/vesync/snapshots/test_switch.ambr +++ b/tests/components/vesync/snapshots/test_switch.ambr @@ -488,6 +488,89 @@ 'state': 'on', }) # --- +# name: test_switch_state[Humidifier 6000s][devices] + list([ + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'vesync', + '6000s', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'VeSync', + 'model': 'LEH-S601S-WUS', + 'model_id': None, + 'name': 'Humidifier 6000s', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }), + ]) +# --- +# name: test_switch_state[Humidifier 6000s][entities] + list([ + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'switch', + 'entity_category': None, + 'entity_id': 'switch.humidifier_6000s_display', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Display', + 'platform': 'vesync', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'display', + 'unique_id': '6000s-display', + 'unit_of_measurement': None, + }), + ]) +# --- +# name: test_switch_state[Humidifier 6000s][switch.humidifier_6000s_display] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'Humidifier 6000s Display', + }), + 'context': , + 'entity_id': 'switch.humidifier_6000s_display', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'off', + }) +# --- # name: test_switch_state[Humidifier 600S][devices] list([ DeviceRegistryEntrySnapshot({ diff --git a/tests/components/vesync/test_humidifier.py b/tests/components/vesync/test_humidifier.py index e96efd355ee..a6aa63643b8 100644 --- a/tests/components/vesync/test_humidifier.py +++ b/tests/components/vesync/test_humidifier.py @@ -5,6 +5,7 @@ import logging from unittest.mock import patch import pytest +from syrupy.assertion import SnapshotAssertion from homeassistant.components.humidifier import ( ATTR_HUMIDITY, @@ -29,20 +30,61 @@ from homeassistant.const import ( ) from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError, ServiceValidationError -from homeassistant.helpers import entity_registry as er +from homeassistant.helpers import device_registry as dr, entity_registry as er from .common import ( + ALL_DEVICE_NAMES, ENTITY_HUMIDIFIER, ENTITY_HUMIDIFIER_HUMIDITY, ENTITY_HUMIDIFIER_MIST_LEVEL, + mock_devices_response, ) from tests.common import MockConfigEntry +from tests.test_util.aiohttp import AiohttpClientMocker NoException = nullcontext() +@pytest.mark.parametrize("device_name", ALL_DEVICE_NAMES) async def test_humidifier_state( + hass: HomeAssistant, + snapshot: SnapshotAssertion, + config_entry: MockConfigEntry, + device_registry: dr.DeviceRegistry, + entity_registry: er.EntityRegistry, + aioclient_mock: AiohttpClientMocker, + device_name: str, +) -> None: + """Test the resulting setup state is as expected for the platform.""" + + # Configure the API devices call for device_name + mock_devices_response(aioclient_mock, device_name) + + # setup platform - only including the named device + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + + # Check device registry + devices = dr.async_entries_for_config_entry(device_registry, config_entry.entry_id) + assert devices == snapshot(name="devices") + + # Check entity registry + entities = [ + entity + for entity in er.async_entries_for_config_entry( + entity_registry, config_entry.entry_id + ) + if entity.domain == HUMIDIFIER_DOMAIN + ] + assert entities == snapshot(name="entities") + + # Check states + for entity in entities: + assert hass.states.get(entity.entity_id) == snapshot(name=entity.entity_id) + + +async def test_humidifier_state_assert( hass: HomeAssistant, humidifier_config_entry: MockConfigEntry ) -> None: """Test the resulting setup state is as expected for the platform."""