From 1ae609993339506dda73a861be4011780c8ac78c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Skowro=C5=84ski?= Date: Mon, 13 Jan 2025 20:15:31 +0100 Subject: [PATCH] initial support of Pure Multi 700 Humidifier-Purifier (#164) * initial support of Pure Multi 700 Humidifier-Purifier * remove leftover --- README.md | 3 ++ custom_components/wellbeing/api.py | 55 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/README.md b/README.md index 4792966..8f76733 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,9 @@ A custom component designed for [Home Assistant](https://www.home-assistant.io) - EHAW4010AG - EHAW6020AG +- Electrolux Pure Multi 700 Humidifier-Purifier + - EPU73771DG (all data is readable, but only fan can be controlled) + - Electrolux PUREi9 Vacuum Robot - PUREi9 - PUREi9.2 diff --git a/custom_components/wellbeing/api.py b/custom_components/wellbeing/api.py index 18e8c16..e4291f0 100644 --- a/custom_components/wellbeing/api.py +++ b/custom_components/wellbeing/api.py @@ -23,6 +23,7 @@ 48: "BREEZE Complete air filter", 49: "CLEAN Ultrafine particle filter", 51: "CARE Ultimate protect filter", + 55: "Breathe 400 filter", 64: "Breeze 360 filter", 65: "Clean 360 Ultrafine particle filter", 66: "Protect 360 filter", @@ -32,6 +33,7 @@ 99: "Breeze 360 filter", 100: "Fresh 360 filter", 192: "FRESH Odour protect filter", + 194: "FRESH Odour protect filter", 0: "Filter", } @@ -47,6 +49,7 @@ class Model(str, Enum): AX7 = "AX7" AX9 = "AX9" PUREi9 = "PUREi9" + PM700 = "Verbier" # "PUREMULTI700" Robot700series = "700series" # 700series vacuum robot series @@ -58,6 +61,11 @@ class WorkMode(str, Enum): QUITE = "Quiet" AUTO = "Auto" +class LouverSwingMode(str, Enum): + OFF = "off" + NARROW = "narrow" + WIDE = "wide" + NATURAL_BREEZE = "naturalbreeze" class ApplianceEntity: entity_type: int | None = None @@ -162,6 +170,47 @@ def _create_entities(data): ), ] + pm700_entities = [ + ApplianceSensor( + name=f"{FILTER_TYPE.get(data.get('FilterType_1', 0), 'Unknown filter')} Life", + attr="FilterLife_1", + unit=PERCENTAGE, + ), + ApplianceSensor( + name=f"{FILTER_TYPE.get(data.get('FilterType_2', 0), 'Unknown filter')} Life", + attr="FilterLife_2", + unit=PERCENTAGE, + ), + + ApplianceBinary( + name="Ionizer", + attr="Ionizer", + device_class=BinarySensorDeviceClass.RUNNING, + ), + ApplianceBinary( + name="AQI Light", + attr="AQILight", + device_class=BinarySensorDeviceClass.LIGHT, + ), + ApplianceBinary( + name="Humidification", + attr="Humidification", + device_class=BinarySensorDeviceClass.RUNNING, + ), + ApplianceSensor( + name="Humidification Target", + attr="HumidityTarget", + unit=PERCENTAGE, + ), + + ApplianceSensor(name="Louver Swing", attr="LouverSwing", device_class=SensorDeviceClass.ENUM), + ApplianceBinary( + name="Empty Water Tray", + attr="WaterTrayLevelLow", + device_class=BinarySensorDeviceClass.PROBLEM, + ), + + ] a7_entities = [ ApplianceSensor( name=f"{FILTER_TYPE.get(data.get('FilterType_1', 0), 'Unknown filter')} Life", @@ -321,6 +370,7 @@ def _create_entities(data): + a9_entities + a7_entities + pure500_entities + + pm700_entities + purei9_entities + Robot700series_entities ) @@ -343,6 +393,8 @@ def setup(self, data, capabilities): self.firmware = data.get("FrmVer_NIU") if "Workmode" in data: self.mode = WorkMode(data.get("Workmode")) + if "LouverSwingWorkmode" in data: + self.louver_swing_mode = LouverSwingMode(data.get("LouverSwing")) if "powerMode" in data: self.power_mode = data.get("powerMode") if "batteryStatus" in data: @@ -385,6 +437,8 @@ def speed_range(self) -> tuple[int, int]: return 1, 5 if self.model == Model.AX9: return 1, 9 + if self.model == Model.PM700: + return 1, 5 return 0, 0 @@ -443,6 +497,7 @@ async def async_get_appliances(self) -> Appliances: if ( appliance.device_type != "AIR_PURIFIER" and appliance.device_type != "ROBOTIC_VACUUM_CLEANER" + and appliance.device_type != "MULTI_AIR_PURIFIER" ): continue