Skip to content

Commit 291a6b2

Browse files
fix: refactor roborock device info
1 parent b2f2f15 commit 291a6b2

File tree

4 files changed

+19
-24
lines changed

4 files changed

+19
-24
lines changed

roborock/api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ def _decode_msg(self, msg: bytes, local_key: str) -> dict[str, Any]:
147147
}
148148

149149
def _encode_msg(self, device_id, request_id, protocol, timestamp, payload, prefix=None) -> bytes:
150-
local_key = self.devices_info[device_id].device.local_key
150+
local_key = self.devices_info[device_id].local_key
151151
aes_key = md5bin(encode_timestamp(timestamp) + local_key + self._salt)
152152
cipher = AES.new(aes_key, AES.MODE_ECB)
153153
encrypted = cipher.encrypt(pad(payload, AES.block_size))
@@ -173,7 +173,7 @@ def _encode_msg(self, device_id, request_id, protocol, timestamp, payload, prefi
173173

174174
async def on_message(self, device_id, msg) -> bool:
175175
try:
176-
data = self._decode_msg(msg, self.devices_info[device_id].device.local_key)
176+
data = self._decode_msg(msg, self.devices_info[device_id].local_key)
177177
protocol = data.get("protocol")
178178
if protocol == 102 or protocol == 4:
179179
payload = json.loads(data.get("payload").decode())

roborock/local_api.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from roborock.api import RoborockClient, SPECIAL_COMMANDS
1212
from roborock.exceptions import RoborockTimeout, CommandVacuumError
13-
from roborock.typing import RoborockCommand, RoborockDeviceInfo
13+
from roborock.typing import RoborockCommand, RoborockLocalDeviceInfo
1414
from roborock.util import get_running_loop_or_create_one
1515

1616
secured_prefix = 199
@@ -35,11 +35,11 @@ def error_received(self, exc):
3535

3636
class RoborockLocalClient(RoborockClient):
3737

38-
def __init__(self, devices_info: dict[str, RoborockDeviceInfo]):
38+
def __init__(self, devices_info: dict[str, RoborockLocalDeviceInfo]):
3939
super().__init__("abc", devices_info)
4040
self.loop = get_running_loop_or_create_one()
4141
self.device_listener: dict[str, RoborockSocketListener] = {
42-
device_id: RoborockSocketListener(device_info.network_info.ip, device_id, self.on_message)
42+
device_id: RoborockSocketListener(device_info.ip, device_id, self.on_message)
4343
for device_id, device_info in devices_info.items()
4444
}
4545
self._mutex = Lock()

roborock/offline/offline.py

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import asyncio
22
import logging
33

4-
from roborock.containers import HomeDataDevice, HomeDataDeviceField, HomeDataProduct, HomeDataProductField, NetworkInfo, \
5-
NetworkInfoField
64
from roborock.local_api import RoborockLocalClient
7-
from roborock.typing import RoborockDeviceInfo
5+
from roborock.typing import RoborockLocalDeviceInfo
86

9-
local_ip = "192.168.1.232"
10-
local_key = "nXTBj42ej5WxQopO"
11-
device_id = "1r9W0cAmDZ2COuVekgRhKA"
7+
local_ip = "<local_ip>"
8+
local_key = "<local_key>"
9+
device_id = "<device_id>"
1210

1311

1412
async def main():
@@ -17,14 +15,7 @@ async def main():
1715
}
1816
logging.basicConfig(**logging_config)
1917
client = RoborockLocalClient({
20-
device_id: RoborockDeviceInfo(HomeDataDevice({
21-
HomeDataDeviceField.DUID: device_id,
22-
HomeDataDeviceField.LOCAL_KEY: local_key
23-
}), HomeDataProduct({
24-
HomeDataProductField.MODEL: "test"
25-
}), NetworkInfo({
26-
NetworkInfoField.IP: local_ip
27-
}))
18+
device_id: RoborockLocalDeviceInfo(local_key, "model_test", local_ip)
2819
})
2920
await client.async_connect()
3021
props = await client.get_prop(device_id)

roborock/typing.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from .code_mappings import RoborockDockDustCollectionType, RoborockDockWashingModeType
66
from .containers import Status, CleanSummary, Consumable, \
7-
DNDTimer, CleanRecord, SmartWashParameters, HomeDataDevice, HomeDataProduct, NetworkInfo
7+
DNDTimer, CleanRecord, SmartWashParameters
88

99

1010
class RoborockDevicePropField(str, Enum):
@@ -89,10 +89,14 @@ class RoborockCommand(str, Enum):
8989
GET_NETWORK_INFO = "get_network_info"
9090

9191
class RoborockDeviceInfo:
92-
def __init__(self, device: HomeDataDevice, product: HomeDataProduct, network_info: NetworkInfo = None):
93-
self.device = device
94-
self.product = product
95-
self.network_info: NetworkInfo | None = network_info
92+
def __init__(self, local_key: str, model: str):
93+
self.local_key = local_key
94+
self.model = model
95+
96+
class RoborockLocalDeviceInfo(RoborockDeviceInfo):
97+
def __init__(self, local_key: str, model: str, ip: str):
98+
super().__init__(local_key, model)
99+
self.ip = ip
96100

97101
class RoborockDockSummary:
98102
def __init__(self, dust_collection_mode: RoborockDockDustCollectionType,

0 commit comments

Comments
 (0)