Skip to content

Commit 6279736

Browse files
committed
Roborock: Add WiFi strength sensor
I plan to use this to draw a WiFi signal strength map of my house
1 parent c03410a commit 6279736

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

miio/integrations/roborock/vacuum/vacuum.py

+7
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
CarpetModeStatus,
4848
CleaningDetails,
4949
CleaningSummary,
50+
ConnectivityStatus,
5051
ConsumableStatus,
5152
DNDStatus,
5253
MapList,
@@ -155,6 +156,7 @@ def __init__(
155156
self._map_enum_cache = None
156157
self._status_helper = UpdateHelper(self.vacuum_status)
157158
self._status_helper.add_update_method("consumables", self.consumable_status)
159+
self._status_helper.add_update_method("connectivity", self.connectivity_status)
158160
self._status_helper.add_update_method("dnd_status", self.dnd_status)
159161
self._status_helper.add_update_method("clean_history", self.clean_history)
160162
self._status_helper.add_update_method("last_clean", self.last_clean_details)
@@ -620,6 +622,11 @@ def dnd_status(self) -> DNDStatus:
620622
# 'start_hour': 22, 'end_hour': 8}], 'id': 1}
621623
return DNDStatus(self.send("get_dnd_timer")[0])
622624

625+
@command()
626+
def connectivity_status(self) -> ConnectivityStatus:
627+
"""Returns WiFi connectivity information."""
628+
return ConnectivityStatus(self.info(skip_cache=True))
629+
623630
@command(
624631
click.argument("start_hr", type=int),
625632
click.argument("start_min", type=int),

miio/integrations/roborock/vacuum/vacuumcontainers.py

+18
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from pytz import BaseTzInfo
99

1010
from miio.device import DeviceStatus
11+
from miio.deviceinfo import DeviceInfo
1112
from miio.devicestatus import sensor, setting
1213
from miio.identifiers import VacuumId, VacuumState
1314
from miio.utils import pretty_seconds, pretty_time
@@ -1062,3 +1063,20 @@ def enabled(self) -> bool:
10621063
def dry_time(self) -> timedelta:
10631064
"""Return mop dry time."""
10641065
return pretty_seconds(self.data["on"]["dry_time"])
1066+
1067+
1068+
class ConnectivityStatus(DeviceStatus):
1069+
def __init__(self, info: DeviceInfo) -> None:
1070+
self.info = info
1071+
1072+
@property
1073+
@sensor(
1074+
"Wifi Signal Strengh",
1075+
unit="dBm",
1076+
icon="mdi:wifi-strength-2", # TODO: Make this dynamic?
1077+
device_class="signal_strength",
1078+
entity_category="diagnostic",
1079+
)
1080+
def total_duration(self) -> timedelta:
1081+
"""Total cleaning duration."""
1082+
return self.info.accesspoint["rssi"]

0 commit comments

Comments
 (0)