Skip to content

Commit

Permalink
Add water_level and water_tank_detached property for humidifiers,…
Browse files Browse the repository at this point in the history
… deprecate `depth` (#1089)

* Unify water_level

* Black

* Add log about the depth deprecation

* Black

* Add info about water_tank_detached in the log string

* Suggested change
  • Loading branch information
bieniu committed Jul 7, 2021
1 parent b9393f3 commit 83cd097
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 12 deletions.
33 changes: 26 additions & 7 deletions miio/airhumidifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,15 +185,32 @@ def motor_speed(self) -> Optional[int]:

@property
def depth(self) -> Optional[int]:
"""The remaining amount of water in percent."""
"""Return raw value of depth."""
_LOGGER.warning(
"The 'depth' property is deprecated and will be removed in the future. Use 'water_level' and 'water_tank_detached' properties instead."
)
if "depth" in self.data:
return self.data["depth"]
return None

# MODEL_HUMIDIFIER_CA1 and MODEL_HUMIDIFIER_CB2
# 127 without water tank. 125 = 100% water
if self.device_info.model in [MODEL_HUMIDIFIER_CA1, MODEL_HUMIDIFIER_CB2]:
return int(int(self.data["depth"]) / 1.25)
@property
def water_level(self) -> Optional[int]:
"""Return current water level in percent.
if "depth" in self.data and self.data["depth"] is not None:
return self.data["depth"]
If water tank is full, depth is 125.
"""
if self.depth is not None and self.depth <= 125:
return int(self.depth / 1.25)
return None

@property
def water_tank_detached(self) -> Optional[bool]:
"""True if the water tank is detached.
If water tank is detached, depth is 127.
"""
if self.data.get("depth") is not None:
return self.data["depth"] == 127
return None

@property
Expand Down Expand Up @@ -261,6 +278,8 @@ def __init__(
"Trans level: {result.trans_level}\n"
"Speed: {result.motor_speed}\n"
"Depth: {result.depth}\n"
"Water Level: {result.water_level} %\n"
"Water tank detached: {result.water_tank_detached}\n"
"Dry: {result.dry}\n"
"Use time: {result.use_time}\n"
"Hardware version: {result.hardware_version}\n"
Expand Down
21 changes: 17 additions & 4 deletions miio/airhumidifier_miot.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,10 +126,22 @@ def target_humidity(self) -> int:
return self.data["target_humidity"]

@property
def water_level(self) -> int:
"""Return current water level."""
# 127 without water tank. 120 = 100% water
return int(self.data["water_level"] / 1.20)
def water_level(self) -> Optional[int]:
"""Return current water level in percent.
If water tank is full, depth is 125.
"""
if self.data["water_level"] <= 125:
return int(self.data["water_level"] / 1.25)
return None

@property
def water_tank_detached(self) -> bool:
"""True if the water tank is detached.
If water tank is detached, water_level is 127.
"""
return self.data["water_level"] == 127

@property
def dry(self) -> Optional[bool]:
Expand Down Expand Up @@ -245,6 +257,7 @@ class AirHumidifierMiot(MiotDevice):
"Temperature: {result.temperature} °C\n"
"Temperature: {result.fahrenheit} °F\n"
"Water Level: {result.water_level} %\n"
"Water tank detached: {result.water_tank_detached}\n"
"Mode: {result.mode}\n"
"LED brightness: {result.led_brightness}\n"
"Buzzer: {result.buzzer}\n"
Expand Down
4 changes: 4 additions & 0 deletions miio/tests/test_airhumidifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,10 @@ def test_status(self):
assert self.state().trans_level is None
assert self.state().motor_speed == self.device.start_state["speed"]
assert self.state().depth == self.device.start_state["depth"]
assert self.state().water_level == int(self.device.start_state["depth"] / 1.25)
assert self.state().water_tank_detached == (
self.device.start_state["depth"] == 127
)
assert self.state().dry == (self.device.start_state["dry"] == "on")
assert self.state().use_time == self.device.start_state["use_time"]
assert self.state().hardware_version == self.device.start_state["hw_version"]
Expand Down
3 changes: 2 additions & 1 deletion miio/tests/test_airhumidifier_miot.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ def test_status(self):
assert status.error == _INITIAL_STATE["fault"]
assert status.mode == OperationMode(_INITIAL_STATE["mode"])
assert status.target_humidity == _INITIAL_STATE["target_humidity"]
assert status.water_level == int(_INITIAL_STATE["water_level"] / 1.20)
assert status.water_level == int(_INITIAL_STATE["water_level"] / 1.25)
assert status.water_tank_detached == (_INITIAL_STATE["water_level"] == 127)
assert status.dry == _INITIAL_STATE["dry"]
assert status.use_time == _INITIAL_STATE["use_time"]
assert status.button_pressed == PressedButton(_INITIAL_STATE["button_pressed"])
Expand Down

0 comments on commit 83cd097

Please sign in to comment.