Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add water_level and water_tank_detached property for humidifiers, deprecate depth #1089

Merged
merged 6 commits into from
Jul 7, 2021
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
30 changes: 23 additions & 7 deletions miio/airhumidifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,15 +185,29 @@ def motor_speed(self) -> Optional[int]:

@property
def depth(self) -> Optional[int]:
"""The remaining amount of water in percent."""
"""Return raw value of depth."""
rytilahti marked this conversation as resolved.
Show resolved Hide resolved
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 +275,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