Skip to content

Commit 50290d1

Browse files
Add image changes detection
1 parent 97a6b39 commit 50290d1

3 files changed

Lines changed: 14 additions & 8 deletions

File tree

custom_components/xiaomi_cloud_map_extractor/connector/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import hashlib
12
import logging
23
from collections.abc import Callable
34
from datetime import datetime
@@ -60,6 +61,7 @@ class XiaomiCloudMapExtractorConnector:
6061
_connector_config: XiaomiCloudConnectorConfig | None
6162
_forced_refresh: bool
6263
_auto_update: bool
64+
_last_hash: str | None
6365

6466
def __init__(
6567
self: Self,
@@ -78,6 +80,7 @@ def __init__(
7880
self._used_api = self._config.used_api
7981
self._forced_refresh = False
8082
self._auto_update = True
83+
self._last_hash = None
8184

8285
async def get_data(self: Self) -> XiaomiCloudMapExtractorData:
8386
if self._should_get_map():
@@ -155,6 +158,10 @@ async def _get_map(self: Self) -> None:
155158
self._map_cache.status = XiaomiCloudMapExtractorConnectorStatus.OK
156159
self._map_cache.last_successful_update_timestamp = datetime.now()
157160
self._map_cache.two_factor_url = None
161+
if self._last_hash != (new_hash := hashlib.sha256(self._map_cache.map_data_raw).hexdigest()):
162+
self._last_hash = new_hash
163+
self._map_cache.last_real_update_timestamp = self._map_cache.last_successful_update_timestamp
164+
158165
except DeviceNotFoundException as e:
159166
self._map_cache.status = XiaomiCloudMapExtractorConnectorStatus.DEVICE_NOT_FOUND
160167
raise e

custom_components/xiaomi_cloud_map_extractor/connector/model.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,17 @@ class XiaomiCloudMapExtractorData:
5656
two_factor_url: str | None = None
5757
last_update_timestamp: datetime | None = None
5858
last_successful_update_timestamp: datetime | None = None
59+
last_real_update_timestamp: datetime | None = None
5960
status: XiaomiCloudMapExtractorConnectorStatus = XiaomiCloudMapExtractorConnectorStatus.UNKNOWN
6061
additional_vacuum_data: dict[str, Any] | None = None
6162

6263
def as_dict(self: Self) -> dict[str, Any]:
63-
map_image_dict = self.map_data and self.map_data.image and {
64-
**self.map_data.image.as_dict(),
65-
"image_bytes": base64.b64encode(self.map_data.image.data.tobytes()).decode()
66-
}
67-
6864
map_data_dict = self.map_data and {
6965
"blocks": self.map_data.blocks,
7066
"charger": self.map_data.charger and self.map_data.charger.as_dict(),
7167
"goto": self.map_data.goto and self.map_data.goto.as_dict(),
7268
"goto_path": self.map_data.goto_path and self.map_data.goto_path.as_dict(),
73-
"image": map_image_dict,
69+
"image": self.map_data and self.map_data.image and self.map_data.image.as_dict(),
7470
"no_go_areas": as_list_of_dict(self.map_data.no_go_areas),
7571
"no_mopping_areas": as_list_of_dict(self.map_data.no_mopping_areas),
7672
"no_carpet_areas": as_list_of_dict(self.map_data.no_carpet_areas),
@@ -102,5 +98,7 @@ def as_dict(self: Self) -> dict[str, Any]:
10298
"%Y-%m-%d %H:%M:%S"),
10399
"last_successful_update_timestamp": self.last_successful_update_timestamp and self.last_successful_update_timestamp.strftime(
104100
"%Y-%m-%d %H:%M:%S"),
101+
"last_real_update_timestamp": self.last_real_update_timestamp and self.last_real_update_timestamp.strftime(
102+
"%Y-%m-%d %H:%M:%S"),
105103
"status": self.status,
106104
}

custom_components/xiaomi_cloud_map_extractor/image.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from datetime import datetime
12
import logging
23
from typing import Self, Any
34

@@ -45,11 +46,11 @@ def image(self: Self) -> bytes | None:
4546
return data.map_image
4647

4748
@property
48-
def image_last_updated(self: Self):
49+
def image_last_updated(self: Self) -> datetime | None:
4950
data = self._data()
5051
if data is None:
5152
return None
52-
return data.last_successful_update_timestamp
53+
return data.last_real_update_timestamp
5354

5455
@property
5556
def extra_state_attributes(self: Self) -> dict[str, Any]:

0 commit comments

Comments
 (0)