From 697a0496dba280e4b7bd3b87a99d0f180083ab5f Mon Sep 17 00:00:00 2001 From: Pavel Sieder Date: Wed, 15 Nov 2023 11:23:46 +0100 Subject: [PATCH 1/6] Fix Ko-fi link --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a9da7d6..1a4b5f2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![version](https://img.shields.io/github/manifest-json/v/Tasshack/dreame-vacuum?filename=custom_components%2Fdreame_vacuum%2Fmanifest.json&color=green)](https://github.com/Tasshack/dreame-vacuum/releases/latest) [![HACS](https://img.shields.io/badge/HACS-Default-orange.svg?logo=HomeAssistantCommunityStore&logoColor=white)](https://github.com/hacs/integration) [![Community Forum](https://img.shields.io/static/v1.svg?label=Community&message=Forum&color=41bdf5&logo=HomeAssistant&logoColor=white)](https://community.home-assistant.io/t/custom-component-dreame-vacuum/473026) -[![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi/Tasshack) +[![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi.com/Tasshack) [![PayPal.Me](https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal)](https://paypal.me/Tasshackk) ![dreame Logo](https://cdn.shopify.com/s/files/1/0302/5276/1220/files/rsz_logo_-01_400x_2ecfe8c0-2756-4bd1-a3f4-593b1f73e335_284x.jpg "dreame Logo") @@ -270,4 +270,4 @@ To submit your changes please fork this repository and open a pull request. Buy Me a Coffee at ko-fi.com -PayPal Logo \ No newline at end of file +PayPal Logo From 5b4d2f2a0566f3971e407decd7729286aead5d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yi=C4=9Fit=20Topcu?= Date: Mon, 20 Nov 2023 08:34:44 +0300 Subject: [PATCH 2/6] v1.0.2 --- README.md | 2 +- .../dreame_vacuum/config_flow.py | 4 +- custom_components/dreame_vacuum/const.py | 2 + .../dreame_vacuum/coordinator.py | 81 +-- .../dreame_vacuum/dreame/device.py | 1 + custom_components/dreame_vacuum/dreame/map.py | 25 +- .../dreame_vacuum/dreame/protocol.py | 17 + custom_components/dreame_vacuum/manifest.json | 5 +- .../dreame_vacuum/translations/de.json | 519 +++++++++++------- .../dreame_vacuum/translations/en.json | 183 +++++- .../dreame_vacuum/translations/fr.json | 415 +++++++++----- .../dreame_vacuum/translations/it.json | 431 ++++++++++----- .../dreame_vacuum/translations/pl.json | 431 ++++++++++----- .../dreame_vacuum/translations/ru.json | 433 ++++++++++----- .../dreame_vacuum/translations/uk.json | 429 ++++++++++----- info.md | 2 +- 16 files changed, 2010 insertions(+), 970 deletions(-) diff --git a/README.md b/README.md index a9da7d6..baedb40 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![version](https://img.shields.io/github/manifest-json/v/Tasshack/dreame-vacuum?filename=custom_components%2Fdreame_vacuum%2Fmanifest.json&color=green)](https://github.com/Tasshack/dreame-vacuum/releases/latest) [![HACS](https://img.shields.io/badge/HACS-Default-orange.svg?logo=HomeAssistantCommunityStore&logoColor=white)](https://github.com/hacs/integration) [![Community Forum](https://img.shields.io/static/v1.svg?label=Community&message=Forum&color=41bdf5&logo=HomeAssistant&logoColor=white)](https://community.home-assistant.io/t/custom-component-dreame-vacuum/473026) -[![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi/Tasshack) +[![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi.com/Tasshack) [![PayPal.Me](https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal)](https://paypal.me/Tasshackk) ![dreame Logo](https://cdn.shopify.com/s/files/1/0302/5276/1220/files/rsz_logo_-01_400x_2ecfe8c0-2756-4bd1-a3f4-593b1f73e335_284x.jpg "dreame Logo") diff --git a/custom_components/dreame_vacuum/config_flow.py b/custom_components/dreame_vacuum/config_flow.py index 7ea84ff..49837b1 100644 --- a/custom_components/dreame_vacuum/config_flow.py +++ b/custom_components/dreame_vacuum/config_flow.py @@ -52,7 +52,7 @@ "dreame.vacuum.p2187", "dreame.vacuum.r2328", "dreame.vacuum.p2028a", - "dreame.vacuum.r2251a", + #"dreame.vacuum.r2251a", Map private key missing "dreame.vacuum.p2029", "dreame.vacuum.r2257o", "dreame.vacuum.r2215o", @@ -91,7 +91,7 @@ "dreame.vacuum.p2140a", "dreame.vacuum.p2114a", "dreame.vacuum.p2114o", - "dreame.vacuum.r2210", + #"dreame.vacuum.r2210", Map private key missing "dreame.vacuum.p2149o", "dreame.vacuum.p2150a", "dreame.vacuum.p2150b", diff --git a/custom_components/dreame_vacuum/const.py b/custom_components/dreame_vacuum/const.py index 54f9333..dc35c6e 100644 --- a/custom_components/dreame_vacuum/const.py +++ b/custom_components/dreame_vacuum/const.py @@ -110,6 +110,8 @@ NOTIFICATION_ID_REPLACE_DETERGENT: Final = "replace_detergent" NOTIFICATION_ID_CLEANUP_COMPLETED: Final = "cleanup_completed" NOTIFICATION_ID_WARNING: Final = "warning" +NOTIFICATION_ID_INFORMATION: Final = "information" +NOTIFICATION_ID_CONSUMABLE: Final = "consumable" NOTIFICATION_ID_ERROR: Final = "error" NOTIFICATION_ID_REPLACE_TEMPORARY_MAP: Final = "replace_temporary_map" NOTIFICATION_ID_2FA_LOGIN: Final = "2fa_login" diff --git a/custom_components/dreame_vacuum/coordinator.py b/custom_components/dreame_vacuum/coordinator.py index 8cc7cb7..81120a8 100644 --- a/custom_components/dreame_vacuum/coordinator.py +++ b/custom_components/dreame_vacuum/coordinator.py @@ -14,6 +14,7 @@ ATTR_ENTITY_ID ) from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import generate_entity_id from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from .dreame import DreameVacuumDevice, DreameVacuumProperty @@ -52,6 +53,8 @@ NOTIFICATION_ID_CLEANUP_COMPLETED, NOTIFICATION_ID_WARNING, NOTIFICATION_ID_ERROR, + NOTIFICATION_ID_INFORMATION, + NOTIFICATION_ID_CONSUMABLE, NOTIFICATION_ID_REPLACE_TEMPORARY_MAP, NOTIFICATION_ID_2FA_LOGIN, EVENT_TASK_STATUS, @@ -120,9 +123,9 @@ def __init__( LOGGER, name=DOMAIN, ) - - hass.bus.async_listen( - persistent_notification.EVENT_PERSISTENT_NOTIFICATIONS_UPDATED, + async_dispatcher_connect( + hass, + persistent_notification.SIGNAL_PERSISTENT_NOTIFICATIONS_UPDATED, self._notification_dismiss_listener, ) @@ -255,52 +258,60 @@ def _has_temporary_map_changed(self, previous_value=None) -> None: NOTIFICATION_ID_REPLACE_TEMPORARY_MAP) def _create_persistent_notification(self, content, notification_id) -> None: - if self._notify: - if isinstance(self._notify, list): + if self._notify or notification_id == NOTIFICATION_ID_2FA_LOGIN: + if isinstance(self._notify, list) and notification_id != NOTIFICATION_ID_2FA_LOGIN: if notification_id == NOTIFICATION_ID_CLEANUP_COMPLETED: if NOTIFICATION_ID_CLEANUP_COMPLETED not in self._notify: return - elif NOTIFICATION_ID_WARNING in notification_id: + elif ( + NOTIFICATION_ID_WARNING in notification_id + ): if NOTIFICATION_ID_WARNING not in self._notify: return elif NOTIFICATION_ID_ERROR in notification_id: if NOTIFICATION_ID_ERROR not in self._notify: return - elif notification_id == NOTIFICATION_ID_DUST_COLLECTION or notification_id == NOTIFICATION_ID_CLEANING_PAUSED: - if "information" not in self._notify: - return - elif notification_id != NOTIFICATION_ID_REPLACE_TEMPORARY_MAP: - if "consumable" not in self._notify: + elif ( + notification_id == NOTIFICATION_ID_DUST_COLLECTION + or notification_id == NOTIFICATION_ID_CLEANING_PAUSED + ): + if NOTIFICATION_ID_INFORMATION not in self._notify: return + elif ( + notification_id != NOTIFICATION_ID_REPLACE_TEMPORARY_MAP + ): + if NOTIFICATION_ID_CONSUMABLE not in self._notify: + return + persistent_notification.async_create( self.hass, content, title=self.device.name, - notification_id=f"{DOMAIN}_{notification_id}", + notification_id=f"{DOMAIN}_{self.device.mac}_{notification_id}" ) def _remove_persistent_notification(self, notification_id) -> None: persistent_notification.async_dismiss( - self.hass, f"{DOMAIN}_{notification_id}") - - def _notification_dismiss_listener(self, event) -> None: - notifications = self.hass.data.get(persistent_notification.DOMAIN) - - if self._has_warning: - if ( - f"{persistent_notification.DOMAIN}.{DOMAIN}_{NOTIFICATION_ID_WARNING}" - not in notifications - ): - self._has_warning = False - self.device.clear_warning() - - if self._two_factor_url: - if ( - f"{persistent_notification.DOMAIN}.{DOMAIN}_{NOTIFICATION_ID_2FA_LOGIN}" - not in notifications - ): - self._two_factor_url = None + self.hass, f"{DOMAIN}_{self.device.mac}_{notification_id}") + + def _notification_dismiss_listener(self, type, data) -> None: + if type == persistent_notification.UpdateType.REMOVED and self.device: + notifications = self.hass.data.get(persistent_notification.DOMAIN) + if self._has_warning: + if ( + f"{DOMAIN}_{self.device.mac}_{NOTIFICATION_ID_WARNING}" + not in notifications + ): + if NOTIFICATION_ID_WARNING in self._notify: + self.device.clear_warning() + self._has_warning = self.device.status.has_warning + if self._two_factor_url: + if ( + f"{DOMAIN}_{self.device.mac}_{NOTIFICATION_ID_2FA_LOGIN}" + not in notifications + ): + self._two_factor_url = None def _fire_event(self, event_id, data) -> None: event_data = {ATTR_ENTITY_ID: generate_entity_id("vacuum.{}", self.device.name, hass=self.hass)} @@ -311,12 +322,18 @@ def _fire_event(self, event_id, data) -> None: async def _async_update_data(self) -> DreameVacuumDevice: """Handle device update. This function is only called once when the integration is added to Home Assistant.""" try: + LOGGER.info("Integration starting...") await self.hass.async_add_executor_job(self.device.update) self.device.schedule_update() self.async_set_updated_data() return self.device except Exception as ex: - LOGGER.error("Update failed: %s", traceback.format_exc()) + LOGGER.warning("Integration start failed: %s", traceback.format_exc()) + if self.device is not None: + self.device.listen(None) + self.device.disconnect() + del self.device + self.device = None raise UpdateFailed(ex) from ex @callback diff --git a/custom_components/dreame_vacuum/dreame/device.py b/custom_components/dreame_vacuum/dreame/device.py index c5afe0b..14121e0 100644 --- a/custom_components/dreame_vacuum/dreame/device.py +++ b/custom_components/dreame_vacuum/dreame/device.py @@ -802,6 +802,7 @@ def disconnect(self) -> None: """Disconnect from device and cancel timers""" _LOGGER.info("Disconnect") self.schedule_update(-1) + self._protocol.disconnect() if self._map_manager: self._map_manager.schedule_update(-1) diff --git a/custom_components/dreame_vacuum/dreame/map.py b/custom_components/dreame_vacuum/dreame/map.py index b6f5640..29fd5ca 100644 --- a/custom_components/dreame_vacuum/dreame/map.py +++ b/custom_components/dreame_vacuum/dreame/map.py @@ -171,6 +171,7 @@ def _init_data(self) -> None: self._map_request_time: int = None self._map_request_count: int = 0 self._new_map_request_time: int = None + self._aes_iv: str = None def _request_map_from_cloud(self) -> bool: if self._current_timestamp_ms is not None: @@ -599,7 +600,7 @@ def _get_interim_file_url(self, object_name: str) -> str | None: return url def _decode_map_partial(self, raw_map, timestamp=None, key=None) -> MapDataPartial | None: - partial_map = DreameVacuumMapDecoder.decode_map_partial(raw_map, key) + partial_map = DreameVacuumMapDecoder.decode_map_partial(raw_map, self._aes_iv, key) if partial_map is not None: # After restart or unsuccessful start robot returns timestamp_ms as uptime and that messes up with the latest map/frame id detection. # I could not figure out how app handles with this issue but i have added this code to update time stamp as request/object time. @@ -1012,7 +1013,7 @@ def update(self) -> None: def set_aes_iv(self, aes_iv: str) -> None: if aes_iv: - DreameVacuumMapDecoder.AES_IV = aes_iv + self._aes_iv = aes_iv def set_vslam_map(self) -> None: self._vslam_map = True @@ -1130,7 +1131,7 @@ def request_map_list(self) -> None: if v.get(MAP_PARAMETER_MAP): saved_map_data = DreameVacuumMapDecoder.decode_saved_map( v[MAP_PARAMETER_MAP], self._vslam_map, int(v[MAP_PARAMETER_ANGLE]) if v.get( - MAP_PARAMETER_ANGLE) else 0 + MAP_PARAMETER_ANGLE) else 0, self._aes_iv ) if saved_map_data is not None: name = v.get(MAP_PARAMETER_NAME) @@ -1216,7 +1217,7 @@ def request_recovery_map_list(self) -> None: "Get recovery map file url result: %s", response) map_url = response[MAP_PARAMETER_RESULT][MAP_PARAMETER_URL] recovery_map_data = DreameVacuumMapDecoder.decode_saved_map( - map_info[MAP_PARAMETER_THB], self._vslam_map, self._saved_map_data[map_id].rotation) + map_info[MAP_PARAMETER_THB], self._vslam_map, self._saved_map_data[map_id].rotation, self._aes_iv) # TODO: store recovery map @property @@ -1846,7 +1847,6 @@ def _current_timestamp_ms(self) -> int | None: class DreameVacuumMapDecoder: HEADER_SIZE = 27 - AES_IV = "" @staticmethod def _read_int_8(data: bytes, offset: int = 0) -> int: @@ -1985,7 +1985,7 @@ def _get_segment_center(map_data, segment_id: int, center: int, vertical: bool) @staticmethod - def decode_map_partial(raw_map, key=None) -> MapDataPartial | None: + def decode_map_partial(raw_map, iv=None, key=None) -> MapDataPartial | None: _LOGGER.debug("raw_map: %s", raw_map) raw_map = raw_map.replace("_", "/").replace("-", "+") @@ -1997,12 +1997,13 @@ def decode_map_partial(raw_map, key=None) -> MapDataPartial | None: raw_map = base64.decodebytes(raw_map.encode("utf8")) if key is not None: + if iv is None: + iv = "" try: key = hashlib.sha256(key.encode()).hexdigest()[ 0:32].encode('utf8') - iv = DreameVacuumMapDecoder.AES_IV.encode('utf8') cipher = Cipher(algorithms.AES(key), modes.CBC( - iv), backend=default_backend()) + iv.encode("utf8")), backend=default_backend()) decryptor = cipher.decryptor() raw_map = decryptor.update(raw_map) + decryptor.finalize() except Exception as ex: @@ -2040,14 +2041,14 @@ def decode_map_partial(raw_map, key=None) -> MapDataPartial | None: return partial_map @staticmethod - def decode_map(raw_map: str, vslam_map: bool, rotation: int = 0) -> Tuple[MapData, Optional[MapData]]: + def decode_map(raw_map: str, vslam_map: bool, rotation: int = 0, iv: str = None, key: str = None) -> Tuple[MapData, Optional[MapData]]: return DreameVacuumMapDecoder.decode_map_data_from_partial( - DreameVacuumMapDecoder.decode_map_partial(raw_map), vslam_map, rotation + DreameVacuumMapDecoder.decode_map_partial(raw_map, iv, key), vslam_map, rotation ) @staticmethod - def decode_saved_map(raw_map: str, vslam_map: bool, rotation: int = 0) -> MapData | None: - return DreameVacuumMapDecoder.decode_map(raw_map, vslam_map, rotation)[0] + def decode_saved_map(raw_map: str, vslam_map: bool, rotation: int = 0, iv: str = None) -> MapData | None: + return DreameVacuumMapDecoder.decode_map(raw_map, vslam_map, rotation, iv)[0] @staticmethod def decode_map_data_from_partial( diff --git a/custom_components/dreame_vacuum/dreame/protocol.py b/custom_components/dreame_vacuum/dreame/protocol.py index d023207..4b16cc2 100644 --- a/custom_components/dreame_vacuum/dreame/protocol.py +++ b/custom_components/dreame_vacuum/dreame/protocol.py @@ -37,6 +37,9 @@ def set_credentials(self, ip: str, token: str): def connected(self) -> bool: return self._discovered + def disconnect(self): + self._discovered = False + class DreameVacuumCloudProtocol: def __init__(self, username: str, password: str, country: str) -> None: self._username = username @@ -355,6 +358,11 @@ def signed_nonce(self, nonce: str) -> str: ) return base64.b64encode(hash_object.digest()).decode("utf-8") + def disconnect(self): + self._session.close() + self._connected = False + self._logged_in = False + @staticmethod def generate_nonce(): millis = int(round(time.time() * 1000)) @@ -489,6 +497,15 @@ def connect(self, retry_count=1) -> Any: self._connected = True return response + def disconnect(self): + if self.device is not None: + self.device.disconnect() + if self.cloud is not None: + self.cloud.disconnect() + if self.device_cloud is not None: + self.device_cloud.disconnect() + self._connected = False + def send(self, method, parameters: Any = None, retry_count: int = 1) -> Any: if (self.prefer_cloud or not self.device) and self.device_cloud: if not self.device_cloud.logged_in: diff --git a/custom_components/dreame_vacuum/manifest.json b/custom_components/dreame_vacuum/manifest.json index a37919c..b59981a 100644 --- a/custom_components/dreame_vacuum/manifest.json +++ b/custom_components/dreame_vacuum/manifest.json @@ -16,7 +16,8 @@ "pycryptodome", "python-miio", "py-mini-racer", - "tzlocal" + "tzlocal", + "paho-mqtt" ], - "version": "v1.0.1" + "version": "v1.0.2" } \ No newline at end of file diff --git a/custom_components/dreame_vacuum/translations/de.json b/custom_components/dreame_vacuum/translations/de.json index 49c49f8..82d6821 100644 --- a/custom_components/dreame_vacuum/translations/de.json +++ b/custom_components/dreame_vacuum/translations/de.json @@ -48,12 +48,14 @@ "color_scheme": "Farbschema der Karte", "icon_set": "Kartensymbol gesetzt", "notify": "Benachrichtigung", - "map_objects": "Karten objekte" + "map_objects": "Karten-Objekte", + "low_resolution": "Karte mit niedriger Auflösung", + "square": "Quadratische Karte" } }, "reauth_confirm": { - "description": "Die Dreame Wischroboter-Integration benötigt eine erneute Authentifizierung Ihres Kontos, um die Token zu aktualisieren oder um die fehlende Cloud-Anmeldeinformationen hinzuzufügen", - "title": "Reauthentifiziere Integration" + "description": "Die Dreame Wischroboter-Integration benötigt eine erneute Authentifizierung deines Kontos, um die Token zu aktualisieren oder um die fehlenden Cloud-Anmeldeinformationen hinzuzufügen", + "title": "Integration erneut authentifizieren" } } }, @@ -64,14 +66,16 @@ "color_scheme": "Farbschema der Karte", "icon_set": "Kartensymbol gesetzt", "notify": "Benachrichtigung", - "map_objects": "Karten objekte", + "map_objects": "Karten-Objekte", + "low_resolution": "Karte mit niedriger Auflösung", + "square": "Quadratische Karte", "configuration_type": "Konfigurationstyp", - "prefer_cloud": "Bevorzugen Sie eine Cloud-Verbindung" + "prefer_cloud": "Cloud-Verbindung bevorzugen" } } }, "error": { - "cloud_credentials_incomplete": "Anmeldedaten unvollständig, bitte geben Sie Benutzername, Passwort und das Land ein" + "cloud_credentials_incomplete": "Anmeldedaten unvollständig, bitte Benutzername, Passwort und das Land eingeben" } }, "entity": { @@ -103,7 +107,7 @@ "sweeping": "Saugen", "mopping": "Wischen", "sweeping_and_mopping": "Saugen und Wischen", - "mopping_after_sweeping": "Wischen nach dem Kehren" + "mopping_after_sweeping": "Wischen nach dem Saugen" } }, "carpet_sensitivity": { @@ -116,22 +120,22 @@ "carpet_cleaning": { "state": { "avoidance": "Vermeidung", - "adaptation": "Anpassung", - "remove_mop": "Entfernen Sie den Mopp" + "adaptation": "Intelligent", + "remove_mop": "Wischpad demontieren" } }, "mop_wash_level": { "state": { "water_saving": "Wassersparend", "daily": "Täglich", - "deep": "Tief" + "deep": "Tiefenreinigung" } }, "mopping_type": { "state": { "accurate": "Genau", "daily": "Täglich", - "deep": "Tief" + "deep": "Tiefenreinigung" } }, "wider_corner_coverage": { @@ -141,9 +145,17 @@ "low_frequency": "Niederfrequenz" } }, + "mop_pad_swing": { + "state": { + "off": "Aus", + "auto": "Auto", + "daily": "Täglich", + "weekly": "Wöchentlich" + } + }, "floor_material": { "state": { - "none": "Keiner", + "none": "Kein Material", "tile": "Bodenfliese", "wood": "Holzboden" } @@ -155,6 +167,11 @@ "german": "Deutsch", "chinese": "Chinesisch" } + }, + "order": { + "state": { + "not_set": "Nicht eingestellt" + } } }, "sensor": { @@ -171,25 +188,25 @@ "drying": "Trocknen", "washing": "Waschen", "returning_to_wash": "Zurückkehren zum Waschen", - "building": "Building", + "building": "Zusammenbauen", "sweeping_and_mopping": "Saugen und Wischen", "charging_completed": "Aufladen abgeschlossen", "upgrading": "Upgrade durchführen", "clean_summon": "Zum Putzen rufen", "station_reset": "Zurücksetzen der Station", - "returning_install_mop": "Zurück zur Installation des Mopps", - "returning_remove_mop": "Zurückkommen, um den Mopp zu entfernen", + "returning_install_mop": "Zurück zur Installation des Wischpads", + "returning_remove_mop": "Zurück zum Entfernen des Wischpads", "water_check": "Wasserkontrolle", "clean_add_water": "Reinigen und Wasser hinzufügen", "washing_paused": "Der Waschvorgang wurde unterbrochen", "auto_emptying": "Automatische Entleerung", - "remote_control": "Fernbedienung", + "remote_control": "Fernsteuerung", "smart_charging": "Intelligentes Laden", "second_cleaning": "Zum zweiten Mal gereinigt", - "human_following": "Menschliche Gefolgschaft", - "spot_cleaning": "Punktuelle Reinigung", + "human_following": "Person folgen", + "spot_cleaning": "Spotreinigung", "returning_auto_empty": "Rückkehr zur automatischen Entleerung", - "shortcut": "Abkürzung", + "shortcut": "Verknüpfung", "monitoring": "Überwachung", "monitoring_paused": "Überwachung pausiert" } @@ -201,7 +218,7 @@ "paused": "Pausiert", "cleaning": "Reinigen", "returning": "Kehre zum Dock zurück", - "spot_cleaning": "Spot Reinigung", + "spot_cleaning": "Spotreinigung", "follow_wall_cleaning": "Folge Wand Reinigung", "charging": "Aufladen", "ota": "OTA", @@ -220,9 +237,9 @@ "fast_mapping": "Schnelles Mapping", "cruising_path": "Cruising auf dem Weg", "cruising_point": "Eine Kreuzfahrt zu einem Punkt", - "summon_clean": "Reinigung rufen", - "shortcut": "Abkürzung", - "person_follow": "Person folgt", + "summon_clean": "Zur Reinigung rufen", + "shortcut": "Verknüpfung", + "person_follow": "Person folgen", "water_check": "Wasserkontrolle" } }, @@ -239,7 +256,7 @@ "room_cleaning_paused": "Raumreinigung pausiert", "zone_cleaning_paused": "Zonenreinigung pausiert", "spot_cleaning_paused": "Spotreinigung pausiert", - "map_cleaning_paused": "Kartenreinigugn pausiert", + "map_cleaning_paused": "Kartenreinigung pausiert", "docking_paused": "Docking pausiert", "mopping_paused": "Wischen pausiert", "zone_mopping_paused": "Zonenwischen pausiert", @@ -247,12 +264,12 @@ "zone_docking_paused": "Zonenwischen pausiert", "room_docking_paused": "Raumdocking pausiert", "cruising_path": "Cruising auf dem Weg", - "cruising_path_paused": "Die Fahrt auf dem Weg wurde unterbrochen", - "cruising_point": "Eine Kreuzfahrt zu einem Punkt", + "cruising_path_paused": "Die Fahrt wurde auf dem Weg unterbrochen", + "cruising_point": "Eine Fahrt zu einem Punkt", "cruising_point_paused": "Die Fahrt zu einem Punkt wurde unterbrochen", - "summon_clean_paused": "Reinigung rufen angehalten", - "returning_to_install_mop": "Zurückkehren zum Installieren des Wischmopps", - "returning_to_remove_mop": "Zurückkehren zum Entfernen des Wischmopps" + "summon_clean_paused": "Zur Reinigung rufen wurde angehalten", + "returning_to_install_mop": "Zurückkehren zum Installieren des Wischpads", + "returning_to_remove_mop": "Zurückkehren zum Entfernen des Wischpads" } }, "water_tank": { @@ -261,7 +278,7 @@ "installed": "Installiert", "not_installed": "Nicht installiert", "mop_installed": "Wassertank installiert", - "in_station": "Im Bahnhof" + "in_station": "In der Station" } }, "mop_pad": { @@ -270,7 +287,7 @@ "installed": "Installiert", "not_installed": "Nicht installiert", "mop_installed": "Wassertank installiert", - "in_station": "Im Bahnhof" + "in_station": "In der Station" } }, "dust_collection": { @@ -300,7 +317,7 @@ "drop_repeat": "Räder in der Luft", "optical_flow": "Fehler des optischen Flow-Sensors", "no_box": "Staubbehälter nicht installiert", - "no_tank_box": "Wassertank nicht installiertd", + "no_tank_box": "Wassertank nicht installiert", "water_box_empty": "Wassertank ist leer", "box_full": "Der Filter ist nicht trocken oder verstopft", "brush": "Die Hauptbürste ist eingewickelt", @@ -343,28 +360,28 @@ "lds_bumper": "Laserentfernungssensors (Bumper) Fehler", "filter_blocked": "Der Filter ist nicht trocken oder verstopft", "edge": "Kantensensor Fehler", - "carpet": "Bitte starten Sie den Roboter in einem Nicht-Teppich-Bereich.", + "carpet": "Bitte den Roboter in einem Bereich ohne Teppich starten.", "laser": "Der 3D-Hindernisvermeidungssensor ist defekt.", "ultrasonic": "Der Ultraschallsensor ist gestört.", "no_go_zone": "No-Go-Zone oder virtuelle Wand erkannt.", "route": "Die Reinigungsroute ist blockiert.", "restricted": "Es wurde festgestellt, dass sich der Staubsauger in einem Sperrgebiet befindet.", - "remove_mop": "Wischen abgeschlossen. Bitte entfernen Sie den Mopp rechtzeitig und reinigen Sie ihn.", - "mop_removed": "Der Wischmopp hat sich während der Reinigung gelöst.", - "mop_pad_stop_rotate": "Der Wischmopp dreht sich nicht mehr", + "remove_mop": "Wischen abgeschlossen. Bitte das Wischpad rechtzeitig entfernen und reinigen.", + "mop_removed": "Der Wischpad hat sich während der Reinigung gelöst.", + "mop_pad_stop_rotate": "Der Wischpad dreht sich nicht mehr", "bin_full": "Der Staubsammelbeutel ist voll, oder der Luftkanal ist verstopft.", "bin_open": "Die obere Abdeckung des automatischen Leergutbehälters ist nicht geschlossen, oder der Staubbeutel ist nicht installiert.", "water_tank": "Der Frischwassertank ist nicht installiert.", "dirty_water_tank": "Der Schmutzwassertank ist voll oder nicht installiert.", - "water_tank_dry": "Niedriger Wasserstand im Frischwassertank, bitte füllen Sie rechtzeitig Wasser nach.", + "water_tank_dry": "Niedriger Wasserstand im Frischwassertank, bitte rechtzeitig Wasser nachfüllen.", "dirty_water_tank_blocked": "Schmutzwassertank blockiert.", "dirty_water_tank_pump": "Schmutzwassertank Pumpenfehler.", - "mop_pad": "Das Wischtuch ist nicht richtig installiert.", - "wet_mop_pad": "Der Wasserstand des Wischtuchs ist ungewöhnlich, bitte reinigen Sie den Wischtuch rechtzeitig.", - "clean_mop_pad": "Die Reinigungsaufgabe ist abgeschlossen, bitte reinigen Sie das Wischtuch.", - "clean_tank_level": "Überprüfen und füllen Sie den Reinwassertank umgehend nach.", + "mop_pad": "Der Wischpad ist nicht richtig installiert.", + "wet_mop_pad": "Der Wasserstand des Wischpads ist ungewöhnlich, bitte den Wischpad rechtzeitig reinigen.", + "clean_mop_pad": "Die Reinigungsaufgabe ist abgeschlossen, bitte den Wischpad reinigen.", + "clean_tank_level": "Bitte den Frischwassertank umgehend überprüfen und nachfüllen.", "station_disconnected": "Basisstation nicht eingeschaltet", - "dirty_tank_level": "Der Wasserstand im Brauchwassertank ist zu hoch.", + "dirty_tank_level": "Der Wasserstand im Schmutzwassertank ist zu hoch.", "washboard_level": "Wasserstand im Waschbrett ist zu hoch.", "no_mop_in_station": "Wischpad ist nicht in der Station.", "dust_bag_full": "Der Staubbeutel ist voll oder die Lüftungsschlitze sind blockiert." @@ -403,11 +420,11 @@ "low_water_warning": { "state": { "no_warning": "Keine Warnung", - "no_water_left_dismiss": "Bitte überprüfen Sie den Frischwassertank.", - "no_water_left": "Das Wasser im Frischwassertank ist bald aufgebraucht. ", - "no_water_left_after_clean": "Wischpad wurde gereinigt. ", - "no_water_for_clean": "Niedriger Wasserstand im Frischwassertank. ", - "low_water": "Das Wasser geht mir bald aus. ", + "no_water_left_dismiss": "Bitte den Frischwassertank überprüfen.", + "no_water_left": "Das Wasser im Frischwassertank ist bald aufgebraucht.", + "no_water_left_after_clean": "Wischpad wurde gereinigt.", + "no_water_for_clean": "Niedriger Wasserstand im Frischwassertank.", + "low_water": "Das Wasser geht mir bald aus.", "tank_not_installed": "Der Frischwassertank ist nicht installiert." } }, @@ -443,7 +460,7 @@ "smart_paused": "Intelligente Reinigung pausiert", "partial": "Teilweise Reinigung", "partial_paused": "Teilreinigung pausiert", - "summon": "Rufen Sie die Reinigung an", + "summon": "Zur Reinigung heranrufen", "summon_paused": "Reinigung herbeirufen pausiert" } } @@ -451,318 +468,444 @@ }, "services": { "vacuum_clean_segment": { - "name": "Clean Segment", - "description": "Start the cleaning operation in the selected rooms.", + "name": "Reinige Segment", + "description": "Starte den Reinigungsvorgang in den ausgewählten Räumen.", "fields": { "segments": { - "name": "Segments", - "description": "List of rooms to be cleaned. Only room's Character or an array of room's character, cleaning times, fan speed and mop mode to override the default values per room." + "name": "Segmente", + "description": "Liste der Räume, die gereinigt werden sollen. Entweder der Raumname oder ein Array mit Raumnamen, Reinigungszeiten, Lüftergeschwindigkeiten und Wischmodus, um die Standardwerte pro Raum zu überschreiben." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Wiederholungen", + "description": "Anzahl der Reinigungsdurchgänge für jeden ausgewählten Raum (sofern nicht durch benutzerdefinierte Reinigungsparameter überschrieben)." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Saugstufe", + "description": "Lüftergeschwindigkeit für jeden ausgewählten Raum (sofern nicht durch benutzerdefinierte Reinigungsparameter überschrieben)." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Wassermenge", + "description": "Wasserstand für jeden ausgewählten Raum (sofern nicht durch benutzerdefinierte Reinigungsparameter überschrieben)." } } }, "vacuum_clean_zone": { - "name": "Clean Zone", - "description": "Start the cleaning operation in the selected area.", + "name": "Bereich reinigen", + "description": "Starte den Reinigungsvorgang im ausgewählten Bereich.", "fields": { "zone": { - "name": "Zone", - "description": "Coordinates." + "name": "Bereich", + "description": "Koordinaten." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for each zone between 1 and 3." + "name": "Wiederholungen", + "description": "Anzahl der Reinigungsdurchgänge für jeden ausgewählten Bereich." + }, + "suction_level": { + "name": "Saugstufe", + "description": "Lüftergeschwindigkeit für jeden ausgewählten Bereich." + }, + "water_volume": { + "name": "Wassermenge", + "description": "Wasserstand für jeden ausgewählten Bereich." } } }, "vacuum_clean_spot": { - "name": "Clean Spot", - "description": "Start the cleaning operation in the selected points on the map.", + "name": "Punkt reinigen", + "description": "Starte den Reinigungsvorgang an den ausgewählten Punkten auf der Karte.", "fields": { "points": { - "name": "Points", - "description": "List of coordinates to be cleaned." + "name": "Punkte", + "description": "Liste von Koordinaten, die gereinigt werden sollen." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected zone." + "name": "Wiederholungen", + "description": "Anzahl der Reinigungsdurchgänge für jeden ausgewählten Bereich." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected zone." + "name": "Saugstufe", + "description": "Lüftergeschwindigkeit für jeden ausgewählten Bereich." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected zone." + "name": "Wassermenge", + "description": "Wasserstand für jeden ausgewählten Bereich." } } }, - "vacuum_set_dnd": { - "name": "Set DnD", - "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "vacuum_goto": { + "name": "Gehe zu", + "description": "Gehe zu den Koordinaten auf der Karte und stoppe.", "fields": { - "dnd_enabled": { - "name": "DnD Enabled", - "description": "Enable or disable DnD feature." - }, - "dnd_start": { - "name": "DnD Start", - "description": "Start time of DnD feature." + "x": { + "name": "X", + "description": "X-Koordinate des Punktes." }, - "dnd_end": { - "name": "Dnd End", - "description": "End time of DnD feature." + "y": { + "name": "Y", + "description": "Y-Koordinate des Punktes." + } + } + }, + "vacuum_follow_path": { + "name": "Pfad verfolgen", + "description": "Folge einer Liste von Koordinaten auf der Karte und kehre zur Basis zurück. (Nur bei Staubsaugern mit Kamera unterstützt)", + "fields": { + "points": { + "name": "Punkte", + "description": "Liste von Koordinaten des Pfads." } } }, "vacuum_remote_control_move_step": { - "name": "Remote Control Move Step", - "description": "Remotely control move the bot one step.", + "name": "Schrittweise Fernbedienung", + "description": "Bewege den Roboter ferngesteuert einen Schritt.", "fields": { "rotation": { "name": "Rotation", - "description": "Turn in binary degrees between -128 and 128." + "description": "Drehung in binären Grad zwischen -128 und 128." }, "velocity": { - "name": "Velocity", - "description": "Move speed, from 100 (forward) to -300 (backward)." + "name": "Geschwindigkeit", + "description": "Bewegungsgeschwindigkeit, von 100 (vorwärts) bis -300 (rückwärts)." } } }, "vacuum_install_voice_pack": { - "name": "Install Voice Pack", - "description": "Install official or custom voice pack.", + "name": "Sprachpaket installieren", + "description": "Installiere ein offizielles oder benutzerdefiniertes Sprachpaket.", "fields": { "lang_id": { - "name": "Language ID", - "description": "Language ID of this pack." + "name": "Sprach-ID", + "description": "Sprach-ID dieses Paketes." }, "url": { "name": "URL", - "description": "Url of this pack it should be reachable by the vacuum bot." + "description": "URL dieses Paketes, das vom Staubsaugerroboter erreichbar sein sollte." }, "md5": { "name": "MD5", - "description": "MD5 checksum of the language pack." + "description": "MD5-Prüfsumme des Sprachpakets." }, "size": { - "name": "Size", - "description": "Size of the language pack in bytes." + "name": "Größe", + "description": "Größe des Sprachpakets in Bytes." } } }, "vacuum_request_map": { - "name": "Request Map", - "description": "Request map data" + "name": "Karte anfordern", + "description": "Fordere Kartendaten an." }, "vacuum_select_map": { - "name": "Select Map", - "description": "Select current map. Used when having multiple maps/floors.", + "name": "Karte auswählen", + "description": "Wähle die aktuelle Karte aus. Wird verwendet, wenn mehrere Karten/Etagen vorhanden sind.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be selected." + "name": "Karten-ID", + "description": "ID der auszuwählenden Karte." } } }, "vacuum_delete_map": { - "name": "Delete map", - "description": "Delete a map.", + "name": "Karte löschen", + "description": "Lösche eine Karte.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be deleted." + "name": "Karten-ID", + "description": "ID der zu löschenden Karte." } } }, "vacuum_save_temporary_map": { - "name": "Save Temporary Map", - "description": "Save the temporary map." + "name": "Temporäre Karte speichern", + "description": "Speichere die temporäre Karte." }, "vacuum_discard_temporary_map": { - "name": "Discard Temporary Map", - "description": "Discard the temporary map." + "name": "Temporäre Karte verwerfen", + "description": "Verwerfe die temporäre Karte." }, "vacuum_replace_temporary_map": { - "name": "Replace Temporary Map", - "description": "Replace the temporary map with another saved map.", + "name": "Temporäre Karte ersetzen", + "description": "Ersetze die temporäre Karte durch eine andere gespeicherte Karte.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be replaced with." + "name": "Karten-ID", + "description": "ID der Karte, die ersetzt werden soll." } } }, "vacuum_rename_map": { - "name": "Rename map", - "description": "Rename a map.", + "name": "Karte umbenennen", + "description": "Benenne eine Karte um.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Karten-ID", + "description": "ID der Karte." }, "map_name": { - "name": "Map Name", - "description": "New name of the map." + "name": "Kartenname", + "description": "Neuer Name der Karte." } } }, "vacuum_restore_map": { - "name": "Restore Map", - "description": "Restore a map.", + "name": "Karte wiederherstellen", + "description": "Stelle eine Karte wieder her.", + "fields": { + "map_id": { + "name": "Karten-ID", + "description": "ID der wiederherzustellenden Karte." + }, + "recovery_map_index": { + "name": "Wiederherstellungskartenindex", + "description": "Index der gespeicherten Wiederherstellungskarte" + } + } + }, + "vacuum_restore_map_from_file": { + "name": "Karte aus Datei wiederherstellen", + "description": "Stellen Sie eine Karte aus einer Datei wieder her.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be restored." + "name": "Karten-ID", + "description": "ID der wiederherzustellenden Karte." }, - "map_url": { - "name": "Map URL", - "description": "File Url of the map." + "file_url": { + "name": "Datei-URL", + "description": "URL der gespeicherten bz2.gz- oder tar.gz-Datei" + } + } + }, + "vacuum_backup_map": { + "name": "Backup-Karte", + "description": "Sichern Sie eine Karte in der Cloud.", + "fields": { + "map_id": { + "name": "Karten-ID", + "description": "ID der wiederherzustellenden Karte." } } }, "vacuum_merge_segments": { - "name": "Merge Segments", - "description": "Merge rooms.", + "name": "Segmente zusammenführen", + "description": "Räume zusammenführen.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Karten-ID", + "description": "ID der Karte." }, "segments": { - "name": "Segments", - "description": "Room IDs." + "name": "Segmente", + "description": "Raum-IDs." } } }, "vacuum_split_segments": { - "name": "Split Segments", - "description": "Split rooms.", + "name": "Segmente aufteilen", + "description": "Räume aufteilen.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Karten-ID", + "description": "ID der Karte." }, "segment": { "name": "Segment", - "description": "Room ID." + "description": "Raum-ID." }, "line": { - "name": "Line", - "description": "Split line coordinates." + "name": "Linie", + "description": "Koordinaten der Aufteilungslinie." } } }, "vacuum_rename_segment": { - "name": "Rename Segment", - "description": "Rename a segment.", + "name": "Segment umbenennen", + "description": "Benenne ein Segment um.", "fields": { "segment_id": { - "name": "Segment ID", - "description": "ID of the segment" + "name": "Segment-ID", + "description": "ID des Segments" }, "segment_name": { - "name": "Segment Name", - "description": "New name of the segment" + "name": "Segmentname", + "description": "Neuer Name des Segments" } } }, "vacuum_set_cleaning_sequence": { - "name": "Set Cleaning Sequence", - "description": "Set room cleaning sequence.", + "name": "Reihenfolge der Reinigung festlegen", + "description": "Reihenfolge der Raumreinigung festlegen. (Nur bei unterstützten Geräten)", "fields": { "cleaning_sequence": { - "name": "Cleanin sequence", - "description": "Segment ID list of cleaning sequence." + "name": "Reinigungsreihenfolge", + "description": "Segment-ID-Liste für die Reinigungsreihenfolge." } } }, "vacuum_set_custom_cleaning": { - "name": "Set Custom Cleaning", - "description": "Set custom cleaning parameters.", + "name": "Benutzerdefinierte Reinigung festlegen", + "description": "Benutzerdefinierte Reinigungsparameter festlegen. (Nur bei unterstützten Geräten)", "fields": { "segment_id": { - "name": "Segment ID", - "description": "Room IDs." + "name": "Segment-ID", + "description": "Raum-IDs." }, "suction_level": { - "name": "Suction Level", - "description": "Suction level for each room." + "name": "Saugstufe", + "description": "Saugstufe für jeden Raum." }, "water_volume": { - "name": "Water Volume", - "description": "Water volume for each room." + "name": "Wassermenge", + "description": "Wassermenge für jeden Raum." + }, + "cleaning_mode": { + "name": "Reinigungsmodus", + "description": "Reinigungsmodus für jeden Raum (nur bei Staubsaugern mit Wischpad-Hebefunktion unterstützt)." }, "repeats": { - "name": "Repeats", - "description": "Cleaning times for each room." + "name": "Wiederholungen", + "description": "Reinigungszeiten für jeden Raum." } } }, "vacuum_set_restricted_zone": { - "name": "Set Restriced Zone", - "description": "Define virtual walls, restricted zones, and/or no mop zones.", + "name": "Eingeschränkten Bereich festlegen", + "description": "Virtuelle Wände, eingeschränkte Bereiche und/oder Nicht-Wischzonen definieren.", "fields": { "walls": { - "name": "Walls", - "description": "Virtual walls." + "name": "Wände", + "description": "Virtuelle Wände." }, "zones": { - "name": "Zones", - "description": "No go zones." + "name": "Zonen", + "description": "Nicht-Bereichszonen." }, "no_mops": { - "name": "No Mops", - "description": "No mop zones." + "name": "Kein Wischen", + "description": "Nicht-Wischzonen." } } }, "vacuum_reset_consumable": { - "name": "Reset Consumable", - "description": "Reset a consumable.", + "name": "Verbrauchsmaterial zurücksetzen", + "description": "Ein Verbrauchsmaterial zurücksetzen.", "fields": { "consumable": { - "name": "Consumable", - "description": "Consumable type." + "name": "Verbrauchsmaterial", + "description": "Verbrauchsmaterialtyp." + } + } + }, + "vacuum_rename_shortcut": { + "name": "Verknüpfung umbenennen", + "description": "Benenne eine Verknüpfung um. (Nur bei unterstützten Geräten)", + "fields": { + "shortcut_id": { + "name": "Verknüpfungs-ID", + "description": "ID der Verknüpfung." + }, + "shortcut_name": { + "name": "Verknüpfungsname", + "description": "Neuer Name der Verknüpfung." + } + } + }, + "vacuum_set_carpet_area": { + "name": "Teppichbereich festlegen", + "description": "Teppiche und ignorierte Teppiche definieren. (Nur bei unterstützten Geräten)", + "fields": { + "carpets": { + "name": "Teppiche", + "description": "Teppichbereiche." + }, + "ignored_carpets": { + "name": "Ignorierte Teppiche", + "description": "Bereiche von ignorierten Teppichen zum Löschen der automatisch erkannten Teppiche." + } + } + }, + "vacuum_set_pathway": { + "name": "Weg festlegen", + "description": "Wege definieren.", + "fields": { + "pathways": { + "name": "Wege", + "description": "Koordinaten der Weglinien." + } + } + }, + "vacuum_set_predefined_points": { + "name": "Vordefinierte Punkte festlegen", + "description": "Vordefinierte Koordinaten auf der aktuellen Karte festlegen. (Nur bei Staubsaugern mit Kamera unterstützt)", + "fields": { + "points": { + "name": "Punkte", + "description": "Liste von Koordinaten zum Speichern." + } + } + }, + "vacuum_set_obstacle_ignore": { + "name": "Hindernis ignorieren festlegen", + "description": "Den Ignorierstatus eines Hindernisses festlegen. (Nur bei Staubsaugern mit AI-Hinderniserkennungsfunktion unterstützt)", + "fields": { + "x": { + "name": "X", + "description": "X-Koordinate des Hindernisses." + }, + "y": { + "name": "Y", + "description": "Y-Koordinate des Hindernisses." + }, + "obstacle_type": { + "name": "Hindernistyp", + "description": "Typ des Hindernisses, das ignoriert werden soll." + }, + "obstacle_ignored": { + "name": "Hindernis ignorieren", + "description": "Ob das Hindernis ignoriert wird oder nicht." + } + } + }, + "vacuum_set_router_position": { + "name": "Routerposition festlegen", + "description": "Die Position des Routers auf der aktuellen Karte festlegen. (Nur bei Staubsaugern mit WLAN-Kartierungsfunktion unterstützt)", + "fields": { + "x": { + "name": "X", + "description": "X-Koordinate des Routers." + }, + "y": { + "name": "Y", + "description": "Y-Koordinate des Routers." } } }, "select_select_previous": { - "name": "Select Previous", - "description": "Select the previous options of an select entity.", + "name": "Vorheriges auswählen", + "description": "Wähle die vorherigen Optionen eines Auswahlelements aus.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Zyklus", + "description": "Ob die Option vom ersten bis zum letzten Element durchlaufen soll." } } }, "select_select_first": { - "name": "Select First", - "description": "Select the first option of an select entity." + "name": "Erstes auswählen", + "description": "Wähle die erste Option eines Auswahlelements aus." }, "select_select_last": { - "name": "Select Last", - "description": "Select the last option of an select entity." + "name": "Letztes auswählen", + "description": "Wähle die letzte Option eines Auswahlelements aus." }, "select_select_next": { - "name": "Select Next", - "description": "Select the next options of an select entity.", + "name": "Nächstes auswählen", + "description": "Wähle die nächsten Optionen eines Auswahlelements aus.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Zyklus", + "description": "Ob die Option vom ersten bis zum letzten Element durchlaufen soll." } } } diff --git a/custom_components/dreame_vacuum/translations/en.json b/custom_components/dreame_vacuum/translations/en.json index a9a0977..a2d96b4 100644 --- a/custom_components/dreame_vacuum/translations/en.json +++ b/custom_components/dreame_vacuum/translations/en.json @@ -48,7 +48,9 @@ "color_scheme": "Map color scheme", "icon_set": "Map icon set", "notify": "Notification", - "map_objects": "Map objects" + "map_objects": "Map objects", + "low_resolution": "Low resolution map", + "square": "Square map" } }, "reauth_confirm": { @@ -65,6 +67,8 @@ "icon_set": "Map icon set", "notify": "Notification", "map_objects": "Map objects", + "low_resolution": "Low resolution map", + "square": "Square map", "configuration_type": "Configuration type", "prefer_cloud": "Prefer cloud connection" } @@ -140,6 +144,14 @@ "high_frequency": "High Frequency", "low_frequency": "Low Frequency" } + }, + "mop_pad_swing": { + "state": { + "off": "Off", + "auto": "Auto", + "daily": "Daily", + "weekly": "Weekly" + } }, "floor_material": { "state": { @@ -155,6 +167,11 @@ "german": "German", "chinese": "Chinese" } + }, + "order": { + "state": { + "not_set": "Not Set" + } } }, "sensor": { @@ -482,7 +499,15 @@ }, "repeats": { "name": "Repeats", - "description": "Number of cleaning passes for each zone between 1 and 3." + "description": "Number of cleaning passes for every selected zone." + }, + "suction_level": { + "name": "Suction Level", + "description": "Fan speed for every selected zone." + }, + "water_volume": { + "name": "Water Volume", + "description": "Water level for every selected zone." } } }, @@ -508,21 +533,27 @@ } } }, - "vacuum_set_dnd": { - "name": "Set DnD", - "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "vacuum_goto": { + "name": "Go To", + "description": "Go to the coordinate of the map and stop.", "fields": { - "dnd_enabled": { - "name": "DnD Enabled", - "description": "Enable or disable DnD feature." - }, - "dnd_start": { - "name": "DnD Start", - "description": "Start time of DnD feature." + "x": { + "name": "X", + "description": "X Coordinate of the point." }, - "dnd_end": { - "name": "Dnd End", - "description": "End time of DnD feature." + "y": { + "name": "Y", + "description": "Y Coordinate of the point." + } + } + }, + "vacuum_follow_path": { + "name": "Follow Path", + "description": "Follow list of coordinates on the map and return to base. (Only supported on vacuums with camera)", + "fields": { + "points": { + "name": "Points", + "description": "List of coordinates of the path." } } }, @@ -626,9 +657,33 @@ "name": "Map ID", "description": "ID of the map to be restored." }, - "map_url": { - "name": "Map URL", - "description": "File Url of the map." + "recovery_map_index": { + "name": "Recovery Map Index", + "description": "Index of the saved recovery map" + } + } + }, + "vacuum_restore_map_from_file": { + "name": "Restore Map From File", + "description": "Restore a map from file.", + "fields": { + "map_id": { + "name": "Map ID", + "description": "ID of the map to be restored." + }, + "file_url": { + "name": "File Url", + "description": "Url of the saved bz2.gz or tar.gz file" + } + } + }, + "vacuum_backup_map": { + "name": "Backup Map", + "description": "Backup a map to cloud.", + "fields": { + "map_id": { + "name": "Map ID", + "description": "ID of the map to be restored." } } }, @@ -680,7 +735,7 @@ }, "vacuum_set_cleaning_sequence": { "name": "Set Cleaning Sequence", - "description": "Set room cleaning sequence.", + "description": "Set room cleaning sequence. (Only on supported devices)", "fields": { "cleaning_sequence": { "name": "Cleanin sequence", @@ -690,7 +745,7 @@ }, "vacuum_set_custom_cleaning": { "name": "Set Custom Cleaning", - "description": "Set custom cleaning parameters.", + "description": "Set custom cleaning parameters. (Only on supported devices)", "fields": { "segment_id": { "name": "Segment ID", @@ -704,6 +759,10 @@ "name": "Water Volume", "description": "Water volume for each room." }, + "cleaning_mode": { + "name": "Cleaning Mode", + "description": "Cleaning for each room (only supported on vacuums with mop pad lifting feature)." + }, "repeats": { "name": "Repeats", "description": "Cleaning times for each room." @@ -738,6 +797,90 @@ } } }, + "vacuum_rename_shortcut": { + "name": "Rename Shortcut", + "description": "Rename a shortcut. (Only on supported devices)", + "fields": { + "shortcut_id": { + "name": "Shortcut ID", + "description": "ID of the shortcut." + }, + "shortcut_name": { + "name": "Shortcut Name", + "description": "New name of the shortcut." + } + } + }, + "vacuum_set_carpet_area": { + "name": "Set Carpet Area", + "description": "Define carpets and ignored carpets. (Only on supported devices)", + "fields": { + "carpets": { + "name": "Carpets", + "description": "Carpet areas." + }, + "ignored_carpets": { + "name": "Ignored Carpets", + "description": "Ignored carpet areas for deleting the automatically detected carpets." + } + } + }, + "vacuum_set_pathway": { + "name": "Set Pathway", + "description": "Define pathways.", + "fields": { + "pathways": { + "name": "Pathways", + "description": "Pathway line coordinates." + } + } + }, + "vacuum_set_predefined_points": { + "name": "Set Predefined Points", + "description": "Define predefined coordinates on current map. (Only supported on vacuums with camera)", + "fields": { + "points": { + "name": "Points", + "description": "List of coordinates to be saved." + } + } + }, + "vacuum_set_obstacle_ignore": { + "name": "Set Obstacle Ignore", + "description": "Set ignore status of an obstacle. (Only supported on vacuums with AI Obstacle detection feature)", + "fields": { + "x": { + "name": "X", + "description": "X Coordinate of the obstacle." + }, + "y": { + "name": "Y", + "description": "Y Coordinate of the obstacle." + }, + "obstacle_type": { + "name": "Obstacle Type", + "description": "Type of the obstacle that will be ignored." + }, + "obstacle_ignored": { + "name": "Obstacle Ignored", + "description": "Obstacle is ignored or not." + } + } + }, + "vacuum_set_router_position": { + "name": "Set router position", + "description": "Set router position on current map. (Only supported on vacuums with WiFi map feature)", + "fields": { + "x": { + "name": "X", + "description": "X Coordinate of the router." + }, + "y": { + "name": "Y", + "description": "Y Coordinate of the router." + } + } + }, "select_select_previous": { "name": "Select Previous", "description": "Select the previous options of an select entity.", diff --git a/custom_components/dreame_vacuum/translations/fr.json b/custom_components/dreame_vacuum/translations/fr.json index a26f1cb..a7cd9e6 100644 --- a/custom_components/dreame_vacuum/translations/fr.json +++ b/custom_components/dreame_vacuum/translations/fr.json @@ -48,7 +48,9 @@ "color_scheme": "Palette de couleurs de la carte", "icon_set": "Jeu d'icônes de la carte", "notify": "Notification", - "map_objects": "Objets de la carte" + "map_objects": "Objets de la carte", + "low_resolution": "Carte basse résolution", + "square": "Carte carrée" } }, "reauth_confirm": { @@ -65,6 +67,8 @@ "icon_set": "Jeu d'icônes de la carte", "notify": "Notification", "map_objects": "Objets de la carte", + "low_resolution": "Carte basse résolution", + "square": "Carte carrée", "configuration_type": "Type de configuration", "prefer_cloud": "Privilégier la connexion cloud" } @@ -141,6 +145,14 @@ "low_frequency": "Basse fréquence" } }, + "mop_pad_swing": { + "state": { + "off": "Désactivé", + "auto": "Auto", + "daily": "Tous les jours", + "weekly": "Hebdomadaire" + } + }, "floor_material": { "state": { "none": "Aucun", @@ -155,6 +167,11 @@ "german": "Allemand", "chinese": "Chinois" } + }, + "order": { + "state": { + "not_set": "Pas encore défini" + } } }, "sensor": { @@ -451,318 +468,444 @@ }, "services": { "vacuum_clean_segment": { - "name": "Clean Segment", - "description": "Start the cleaning operation in the selected rooms.", + "name": "Nettoyer le segment", + "description": "Démarrez l’opération de nettoyage dans les pièces sélectionnées.", "fields": { "segments": { "name": "Segments", - "description": "List of rooms to be cleaned. Only room's Character or an array of room's character, cleaning times, fan speed and mop mode to override the default values per room." + "description": "Liste des pièces à nettoyer. " }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Répétitions", + "description": "Nombre de passes de nettoyage pour chaque pièce sélectionnée (sauf si cela est annulé par un paramètre de nettoyage personnalisé)." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Niveau d'aspiration", + "description": "Vitesse du ventilateur pour chaque pièce sélectionnée (sauf si elle est annulée par un paramètre de nettoyage personnalisé)." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Volume d'eau", + "description": "Niveau d'eau pour chaque pièce sélectionnée (sauf s'il est annulé par un paramètre de nettoyage personnalisé)." } } }, "vacuum_clean_zone": { - "name": "Clean Zone", - "description": "Start the cleaning operation in the selected area.", + "name": "Zone propre", + "description": "Démarrez l'opération de nettoyage dans la zone sélectionnée.", "fields": { "zone": { "name": "Zone", - "description": "Coordinates." + "description": "Coordonnées." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for each zone between 1 and 3." + "name": "Répétitions", + "description": "Nombre de passes de nettoyage pour chaque zone sélectionnée." + }, + "suction_level": { + "name": "Niveau d'aspiration", + "description": "Vitesse du ventilateur pour chaque zone sélectionnée." + }, + "water_volume": { + "name": "Volume d'eau", + "description": "Niveau d'eau pour chaque zone sélectionnée." } } }, "vacuum_clean_spot": { - "name": "Clean Spot", - "description": "Start the cleaning operation in the selected points on the map.", + "name": "Endroit propre", + "description": "Démarrez l'opération de nettoyage dans les points sélectionnés sur la carte.", "fields": { "points": { "name": "Points", - "description": "List of coordinates to be cleaned." + "description": "Liste des coordonnées à nettoyer." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected zone." + "name": "Répétitions", + "description": "Nombre de passes de nettoyage pour chaque zone sélectionnée." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected zone." + "name": "Niveau d'aspiration", + "description": "Vitesse du ventilateur pour chaque zone sélectionnée." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected zone." + "name": "Volume d'eau", + "description": "Niveau d'eau pour chaque zone sélectionnée." } } }, - "vacuum_set_dnd": { - "name": "Set DnD", - "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "vacuum_goto": { + "name": "Aller à", + "description": "Allez aux coordonnées de la carte et arrêtez-vous.", "fields": { - "dnd_enabled": { - "name": "DnD Enabled", - "description": "Enable or disable DnD feature." + "x": { + "name": "X", + "description": "X Coordonnée du point." }, - "dnd_start": { - "name": "DnD Start", - "description": "Start time of DnD feature." - }, - "dnd_end": { - "name": "Dnd End", - "description": "End time of DnD feature." + "y": { + "name": "Oui", + "description": "Y Coordonnée du point." + } + } + }, + "vacuum_follow_path": { + "name": "Suivre le chemin", + "description": "Suivez la liste des coordonnées sur la carte et revenez à la base. ", + "fields": { + "points": { + "name": "Points", + "description": "Liste des coordonnées du chemin." } } }, "vacuum_remote_control_move_step": { - "name": "Remote Control Move Step", - "description": "Remotely control move the bot one step.", + "name": "Étape de déplacement de la télécommande", + "description": "Contrôlez à distance le déplacement du robot d'une étape.", "fields": { "rotation": { "name": "Rotation", - "description": "Turn in binary degrees between -128 and 128." + "description": "Tournez en degrés binaires entre -128 et 128." }, "velocity": { - "name": "Velocity", - "description": "Move speed, from 100 (forward) to -300 (backward)." + "name": "Rapidité", + "description": "Vitesse de déplacement, de 100 (avant) à -300 (arrière)." } } }, "vacuum_install_voice_pack": { - "name": "Install Voice Pack", - "description": "Install official or custom voice pack.", + "name": "Installer le pack vocal", + "description": "Installez un pack vocal officiel ou personnalisé.", "fields": { "lang_id": { - "name": "Language ID", - "description": "Language ID of this pack." + "name": "Identifiant de langue", + "description": "ID de langue de ce pack." }, "url": { "name": "URL", - "description": "Url of this pack it should be reachable by the vacuum bot." + "description": "URL de ce pack, il devrait être accessible par le robot aspirateur." }, "md5": { "name": "MD5", - "description": "MD5 checksum of the language pack." + "description": "Somme de contrôle MD5 du module linguistique." }, "size": { - "name": "Size", - "description": "Size of the language pack in bytes." + "name": "Taille", + "description": "Taille du module linguistique en octets." } } }, "vacuum_request_map": { - "name": "Request Map", - "description": "Request map data" + "name": "Demander une carte", + "description": "Demander des données cartographiques" }, "vacuum_select_map": { - "name": "Select Map", - "description": "Select current map. Used when having multiple maps/floors.", + "name": "Sélectionnez la carte", + "description": "Sélectionnez la carte actuelle. ", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be selected." + "name": "ID de carte", + "description": "ID de la carte à sélectionner." } } }, "vacuum_delete_map": { - "name": "Delete map", - "description": "Delete a map.", + "name": "Supprimer la carte", + "description": "Supprimer une carte.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be deleted." + "name": "ID de carte", + "description": "ID de la carte à supprimer." } } }, "vacuum_save_temporary_map": { - "name": "Save Temporary Map", - "description": "Save the temporary map." + "name": "Enregistrer la carte temporaire", + "description": "Enregistrez la carte temporaire." }, "vacuum_discard_temporary_map": { - "name": "Discard Temporary Map", - "description": "Discard the temporary map." + "name": "Supprimer la carte temporaire", + "description": "Jetez la carte temporaire." }, "vacuum_replace_temporary_map": { - "name": "Replace Temporary Map", - "description": "Replace the temporary map with another saved map.", + "name": "Remplacer la carte temporaire", + "description": "Remplacez la carte temporaire par une autre carte enregistrée.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be replaced with." + "name": "ID de carte", + "description": "ID de la carte par laquelle remplacer." } } }, "vacuum_rename_map": { - "name": "Rename map", - "description": "Rename a map.", + "name": "Renommer la carte", + "description": "Renommer une carte.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "ID de carte", + "description": "ID de la carte." }, "map_name": { - "name": "Map Name", - "description": "New name of the map." + "name": "Nom de la carte", + "description": "Nouveau nom de la carte." } } }, "vacuum_restore_map": { - "name": "Restore Map", - "description": "Restore a map.", + "name": "Restaurer la carte", + "description": "Restaurer une carte.", + "fields": { + "map_id": { + "name": "ID de carte", + "description": "ID de la carte à restaurer." + }, + "recovery_map_index": { + "name": "Index de la carte de récupération", + "description": "Index de la carte de récupération enregistrée" + } + } + }, + "vacuum_restore_map_from_file": { + "name": "Restaurer la carte à partir d'un fichier", + "description": "Restaurer une carte à partir d'un fichier.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be restored." + "name": "ID de carte", + "description": "ID de la carte à restaurer." }, - "map_url": { - "name": "Map URL", - "description": "File Url of the map." + "file_url": { + "name": "URL du fichier", + "description": "URL du fichier bz2.gz ou tar.gz enregistré" + } + } + }, + "vacuum_backup_map": { + "name": "Carte de sauvegarde", + "description": "Sauvegardez une carte sur le cloud.", + "fields": { + "map_id": { + "name": "ID de carte", + "description": "ID de la carte à restaurer." } } }, "vacuum_merge_segments": { - "name": "Merge Segments", - "description": "Merge rooms.", + "name": "Fusionner des segments", + "description": "Fusionner les pièces.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "ID de carte", + "description": "ID de la carte." }, "segments": { "name": "Segments", - "description": "Room IDs." + "description": "ID des chambres." } } }, "vacuum_split_segments": { - "name": "Split Segments", - "description": "Split rooms.", + "name": "Segments divisés", + "description": "Chambres divisées.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "ID de carte", + "description": "ID de la carte." }, "segment": { "name": "Segment", - "description": "Room ID." + "description": "ID de la pièce." }, "line": { - "name": "Line", - "description": "Split line coordinates." + "name": "Doubler", + "description": "Coordonnées de ligne divisée." } } }, "vacuum_rename_segment": { - "name": "Rename Segment", - "description": "Rename a segment.", + "name": "Renommer le segment", + "description": "Renommez un segment.", "fields": { "segment_id": { - "name": "Segment ID", - "description": "ID of the segment" + "name": "ID de segment", + "description": "ID du segment" }, "segment_name": { - "name": "Segment Name", - "description": "New name of the segment" + "name": "Nom du segment", + "description": "Nouveau nom du segment" } } }, "vacuum_set_cleaning_sequence": { - "name": "Set Cleaning Sequence", - "description": "Set room cleaning sequence.", + "name": "Définir la séquence de nettoyage", + "description": "Définir la séquence de nettoyage de la pièce. ", "fields": { "cleaning_sequence": { - "name": "Cleanin sequence", - "description": "Segment ID list of cleaning sequence." + "name": "Séquence de nettoyage", + "description": "Liste d’ID de segment de la séquence de nettoyage." } } }, "vacuum_set_custom_cleaning": { - "name": "Set Custom Cleaning", - "description": "Set custom cleaning parameters.", + "name": "Définir un nettoyage personnalisé", + "description": "Définissez des paramètres de nettoyage personnalisés. ", "fields": { "segment_id": { - "name": "Segment ID", - "description": "Room IDs." + "name": "ID de segment", + "description": "ID des chambres." }, "suction_level": { - "name": "Suction Level", - "description": "Suction level for each room." + "name": "Niveau d'aspiration", + "description": "Niveau d'aspiration pour chaque pièce." }, "water_volume": { - "name": "Water Volume", - "description": "Water volume for each room." + "name": "Volume d'eau", + "description": "Volume d'eau pour chaque pièce." + }, + "cleaning_mode": { + "name": "Mode de nettoyage", + "description": "Nettoyage de chaque pièce (uniquement pris en charge sur les aspirateurs dotés de la fonction de levage du tampon de vadrouille)." }, "repeats": { - "name": "Repeats", - "description": "Cleaning times for each room." + "name": "Répétitions", + "description": "Horaires de ménage pour chaque pièce." } } }, "vacuum_set_restricted_zone": { - "name": "Set Restriced Zone", - "description": "Define virtual walls, restricted zones, and/or no mop zones.", + "name": "Définir une zone restreinte", + "description": "Définissez des murs virtuels, des zones restreintes et/ou des zones sans vadrouille.", "fields": { "walls": { - "name": "Walls", - "description": "Virtual walls." + "name": "Des murs", + "description": "Murs virtuels." }, "zones": { "name": "Zones", - "description": "No go zones." + "description": "Zones interdites." }, "no_mops": { - "name": "No Mops", - "description": "No mop zones." + "name": "Pas de vadrouille", + "description": "Aucune zone de vadrouille." } } }, "vacuum_reset_consumable": { - "name": "Reset Consumable", - "description": "Reset a consumable.", + "name": "Réinitialiser le consommable", + "description": "Réinitialisez un consommable.", "fields": { "consumable": { - "name": "Consumable", - "description": "Consumable type." + "name": "Consommable", + "description": "Type de consommable." + } + } + }, + "vacuum_rename_shortcut": { + "name": "Renommer le raccourci", + "description": "Renommez un raccourci. ", + "fields": { + "shortcut_id": { + "name": "ID de raccourci", + "description": "ID du raccourci." + }, + "shortcut_name": { + "name": "Nom du raccourci", + "description": "Nouveau nom du raccourci." + } + } + }, + "vacuum_set_carpet_area": { + "name": "Définir la zone de tapis", + "description": "Définir les tapis et les tapis ignorés. ", + "fields": { + "carpets": { + "name": "Les tapis", + "description": "Zones de moquette." + }, + "ignored_carpets": { + "name": "Tapis ignorés", + "description": "Zones de tapis ignorées pour supprimer les tapis détectés automatiquement." + } + } + }, + "vacuum_set_pathway": { + "name": "Définir le chemin", + "description": "Définir des parcours.", + "fields": { + "pathways": { + "name": "Voies", + "description": "Coordonnées de la ligne de chemin." + } + } + }, + "vacuum_set_predefined_points": { + "name": "Définir des points prédéfinis", + "description": "Définissez des coordonnées prédéfinies sur la carte actuelle. ", + "fields": { + "points": { + "name": "Points", + "description": "Liste des coordonnées à sauvegarder." + } + } + }, + "vacuum_set_obstacle_ignore": { + "name": "Définir l'obstacle à ignorer", + "description": "Définir le statut d'ignorance d'un obstacle. ", + "fields": { + "x": { + "name": "X", + "description": "X Coordonnée de l'obstacle." + }, + "y": { + "name": "Oui", + "description": "Y Coordonnée de l'obstacle." + }, + "obstacle_type": { + "name": "Type d'obstacle", + "description": "Type d'obstacle qui sera ignoré." + }, + "obstacle_ignored": { + "name": "Obstacle ignoré", + "description": "L'obstacle est ignoré ou non." + } + } + }, + "vacuum_set_router_position": { + "name": "Définir la position du routeur", + "description": "Définissez la position du routeur sur la carte actuelle. ", + "fields": { + "x": { + "name": "X", + "description": "X Coordonnée du routeur." + }, + "y": { + "name": "Oui", + "description": "Y Coordonnée du routeur." } } }, "select_select_previous": { - "name": "Select Previous", - "description": "Select the previous options of an select entity.", + "name": "Sélectionnez Précédent", + "description": "Sélectionnez les options précédentes d'une entité sélectionnée.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Faire du vélo", + "description": "Si l’option doit passer du premier au dernier." } } }, "select_select_first": { - "name": "Select First", - "description": "Select the first option of an select entity." + "name": "Sélectionnez d'abord", + "description": "Sélectionnez la première option d'une entité sélectionnée." }, "select_select_last": { - "name": "Select Last", - "description": "Select the last option of an select entity." + "name": "Sélectionner le dernier", + "description": "Sélectionnez la dernière option d'une entité sélectionnée." }, "select_select_next": { - "name": "Select Next", - "description": "Select the next options of an select entity.", + "name": "Sélectionnez Suivant", + "description": "Sélectionnez les options suivantes d'une entité sélectionnée.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Faire du vélo", + "description": "Si l’option doit passer du premier au dernier." } } } diff --git a/custom_components/dreame_vacuum/translations/it.json b/custom_components/dreame_vacuum/translations/it.json index 25621f0..b852fe2 100644 --- a/custom_components/dreame_vacuum/translations/it.json +++ b/custom_components/dreame_vacuum/translations/it.json @@ -48,7 +48,9 @@ "color_scheme": "Schema colori della mappa", "icon_set": "Set di icone", "notify": "Notifica", - "map_objects": "Oggetti della mappa" + "map_objects": "Oggetti della mappa", + "low_resolution": "Mappa a bassa risoluzione", + "square": "Mappa quadrata" } }, "reauth_confirm": { @@ -65,6 +67,8 @@ "icon_set": "Set di icone", "notify": "Notifica", "map_objects": "Oggetti della mappa", + "low_resolution": "Mappa a bassa risoluzione", + "square": "Mappa quadrata", "configuration_type": "Tipo di configurazione", "prefer_cloud": "Preferisci la connessione cloud" } @@ -141,6 +145,14 @@ "low_frequency": "Bassa frequenza" } }, + "mop_pad_swing": { + "state": { + "off": "Spento", + "auto": "Auto", + "daily": "Quotidiano", + "weekly": "settimanalmente" + } + }, "floor_material": { "state": { "none": "Nessuno", @@ -155,6 +167,11 @@ "german": "Tedesco", "chinese": "Cinese" } + }, + "order": { + "state": { + "not_set": "Non impostato" + } } }, "sensor": { @@ -451,320 +468,446 @@ }, "services": { "vacuum_clean_segment": { - "name": "Clean Segment", - "description": "Start the cleaning operation in the selected rooms.", + "name": "Segmento pulito", + "description": "Avviare l'operazione di pulizia nelle stanze selezionate.", "fields": { "segments": { - "name": "Segments", - "description": "List of rooms to be cleaned. Only room's Character or an array of room's character, cleaning times, fan speed and mop mode to override the default values per room." + "name": "Segmenti", + "description": "Elenco delle stanze da pulire. " }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Si ripete", + "description": "Numero di passaggi di pulizia per ogni stanza selezionata (a meno che non venga sovrascritto dal parametro di pulizia personalizzato)." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Livello di aspirazione", + "description": "Velocità della ventola per ogni stanza selezionata (a meno che non venga sovrascritta dal parametro di pulizia personalizzato)." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Volume d'acqua", + "description": "Livello dell'acqua per ogni stanza selezionata (a meno che non venga ignorato dal parametro di pulizia personalizzato)." } } }, "vacuum_clean_zone": { - "name": "Clean Zone", - "description": "Start the cleaning operation in the selected area.", + "name": "Zona Pulita", + "description": "Avviare l'operazione di pulizia nell'area selezionata.", "fields": { "zone": { - "name": "Zone", - "description": "Coordinates." + "name": "Zona", + "description": "Coordinate." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for each zone between 1 and 3." + "name": "Si ripete", + "description": "Numero di passaggi di pulizia per ogni zona selezionata." + }, + "suction_level": { + "name": "Livello di aspirazione", + "description": "Velocità della ventola per ogni zona selezionata." + }, + "water_volume": { + "name": "Volume d'acqua", + "description": "Livello dell'acqua per ogni zona selezionata." } } }, "vacuum_clean_spot": { - "name": "Clean Spot", - "description": "Start the cleaning operation in the selected points on the map.", + "name": "Posto pulito", + "description": "Avvia l'operazione di pulizia nei punti selezionati sulla mappa.", "fields": { "points": { - "name": "Points", - "description": "List of coordinates to be cleaned." + "name": "Punti", + "description": "Elenco delle coordinate da pulire." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected zone." + "name": "Si ripete", + "description": "Numero di passaggi di pulizia per ogni zona selezionata." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected zone." + "name": "Livello di aspirazione", + "description": "Velocità della ventola per ogni zona selezionata." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected zone." + "name": "Volume d'acqua", + "description": "Livello dell'acqua per ogni zona selezionata." } } }, - "vacuum_set_dnd": { - "name": "Set DnD", - "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "vacuum_goto": { + "name": "Vai a", + "description": "Vai alle coordinate della mappa e fermati.", "fields": { - "dnd_enabled": { - "name": "DnD Enabled", - "description": "Enable or disable DnD feature." - }, - "dnd_start": { - "name": "DnD Start", - "description": "Start time of DnD feature." + "x": { + "name": "X", + "description": "Coordinata X del punto." }, - "dnd_end": { - "name": "Dnd End", - "description": "End time of DnD feature." + "y": { + "name": "Y", + "description": "Coordinata Y del punto." + } + } + }, + "vacuum_follow_path": { + "name": "Segui il percorso", + "description": "Segui l'elenco delle coordinate sulla mappa e torna alla base. ", + "fields": { + "points": { + "name": "Punti", + "description": "Elenco delle coordinate del percorso." } } }, "vacuum_remote_control_move_step": { - "name": "Remote Control Move Step", - "description": "Remotely control move the bot one step.", + "name": "Passaggio di spostamento del telecomando", + "description": "Controlla da remoto e muovi il bot di un passo.", "fields": { "rotation": { - "name": "Rotation", - "description": "Turn in binary degrees between -128 and 128." + "name": "Rotazione", + "description": "Ruota in gradi binari tra -128 e 128." }, "velocity": { - "name": "Velocity", - "description": "Move speed, from 100 (forward) to -300 (backward)." + "name": "Velocità", + "description": "Velocità di movimento, da 100 (avanti) a -300 (indietro)." } } }, "vacuum_install_voice_pack": { - "name": "Install Voice Pack", - "description": "Install official or custom voice pack.", + "name": "Installa il pacchetto vocale", + "description": "Installa il pacchetto vocale ufficiale o personalizzato.", "fields": { "lang_id": { - "name": "Language ID", - "description": "Language ID of this pack." + "name": "Identificativo della lingua", + "description": "ID lingua di questo pacchetto." }, "url": { "name": "URL", - "description": "Url of this pack it should be reachable by the vacuum bot." + "description": "L'URL di questo pacchetto dovrebbe essere raggiungibile dal robot dell'aspirapolvere." }, "md5": { "name": "MD5", - "description": "MD5 checksum of the language pack." + "description": "Checksum MD5 del pacchetto lingua." }, "size": { - "name": "Size", - "description": "Size of the language pack in bytes." + "name": "Misurare", + "description": "Dimensioni del pacchetto lingua in byte." } } }, "vacuum_request_map": { - "name": "Request Map", - "description": "Request map data" + "name": "Richiedi mappa", + "description": "Richiedi dati cartografici" }, "vacuum_select_map": { - "name": "Select Map", - "description": "Select current map. Used when having multiple maps/floors.", + "name": "Seleziona Mappa", + "description": "Seleziona la mappa corrente. ", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be selected." + "name": "Identificativo della mappa", + "description": "ID della mappa da selezionare." } } }, "vacuum_delete_map": { - "name": "Delete map", - "description": "Delete a map.", + "name": "Elimina mappa", + "description": "Elimina una mappa.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be deleted." + "name": "Identificativo della mappa", + "description": "ID della mappa da eliminare." } } }, "vacuum_save_temporary_map": { - "name": "Save Temporary Map", - "description": "Save the temporary map." + "name": "Salva mappa temporanea", + "description": "Salva la mappa temporanea." }, "vacuum_discard_temporary_map": { - "name": "Discard Temporary Map", - "description": "Discard the temporary map." + "name": "Scarta la mappa temporanea", + "description": "Elimina la mappa temporanea." }, "vacuum_replace_temporary_map": { - "name": "Replace Temporary Map", - "description": "Replace the temporary map with another saved map.", + "name": "Sostituisci mappa temporanea", + "description": "Sostituisci la mappa temporanea con un'altra mappa salvata.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be replaced with." + "name": "Identificativo della mappa", + "description": "ID della mappa con cui sostituire." } } }, "vacuum_rename_map": { - "name": "Rename map", - "description": "Rename a map.", + "name": "Rinomina mappa", + "description": "Rinominare una mappa.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Identificativo della mappa", + "description": "ID della mappa." }, "map_name": { - "name": "Map Name", - "description": "New name of the map." + "name": "Nome della mappa", + "description": "Nuovo nome della mappa." } } }, "vacuum_restore_map": { - "name": "Restore Map", - "description": "Restore a map.", + "name": "Ripristina mappa", + "description": "Ripristina una mappa.", + "fields": { + "map_id": { + "name": "Identificativo della mappa", + "description": "ID della mappa da ripristinare." + }, + "recovery_map_index": { + "name": "Indice della mappa di ripristino", + "description": "Indice della mappa di ripristino salvata" + } + } + }, + "vacuum_restore_map_from_file": { + "name": "Ripristina mappa da file", + "description": "Ripristina una mappa da un file.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be restored." + "name": "Identificativo della mappa", + "description": "ID della mappa da ripristinare." }, - "map_url": { - "name": "Map URL", - "description": "File Url of the map." + "file_url": { + "name": "URL del file", + "description": "URL del file bz2.gz o tar.gz salvato" + } + } + }, + "vacuum_backup_map": { + "name": "Mappa di backup", + "description": "Esegui il backup di una mappa sul cloud.", + "fields": { + "map_id": { + "name": "Identificativo della mappa", + "description": "ID della mappa da ripristinare." } } }, "vacuum_merge_segments": { - "name": "Merge Segments", - "description": "Merge rooms.", + "name": "Unisci segmenti", + "description": "Unisci stanze.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Identificativo della mappa", + "description": "ID della mappa." }, "segments": { - "name": "Segments", - "description": "Room IDs." + "name": "Segmenti", + "description": "Identificativi delle stanze." } } }, "vacuum_split_segments": { - "name": "Split Segments", - "description": "Split rooms.", + "name": "Segmenti divisi", + "description": "Camere divise.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Identificativo della mappa", + "description": "ID della mappa." }, "segment": { - "name": "Segment", - "description": "Room ID." + "name": "Segmento", + "description": "Identificativo della stanza." }, "line": { - "name": "Line", - "description": "Split line coordinates." + "name": "Linea", + "description": "Coordinate della linea di divisione." } } }, "vacuum_rename_segment": { - "name": "Rename Segment", - "description": "Rename a segment.", + "name": "Rinomina segmento", + "description": "Rinominare un segmento.", "fields": { "segment_id": { - "name": "Segment ID", - "description": "ID of the segment" + "name": "Identificativo del segmento", + "description": "ID del segmento" }, "segment_name": { - "name": "Segment Name", - "description": "New name of the segment" + "name": "Nome del segmento", + "description": "Nuovo nome del segmento" } } }, "vacuum_set_cleaning_sequence": { - "name": "Set Cleaning Sequence", - "description": "Set room cleaning sequence.", + "name": "Imposta la sequenza di pulizia", + "description": "Imposta la sequenza di pulizia della stanza. ", "fields": { "cleaning_sequence": { - "name": "Cleanin sequence", - "description": "Segment ID list of cleaning sequence." + "name": "Sequenza di pulizia", + "description": "Elenco ID segmento della sequenza di pulizia." } } }, "vacuum_set_custom_cleaning": { - "name": "Set Custom Cleaning", - "description": "Set custom cleaning parameters.", + "name": "Imposta la pulizia personalizzata", + "description": "Imposta parametri di pulizia personalizzati. ", "fields": { "segment_id": { - "name": "Segment ID", - "description": "Room IDs." + "name": "Identificativo del segmento", + "description": "Identificativi delle stanze." }, "suction_level": { - "name": "Suction Level", - "description": "Suction level for each room." + "name": "Livello di aspirazione", + "description": "Livello di aspirazione per ogni stanza." }, "water_volume": { - "name": "Water Volume", - "description": "Water volume for each room." + "name": "Volume d'acqua", + "description": "Volume d'acqua per ogni stanza." + }, + "cleaning_mode": { + "name": "Modalità di pulizia", + "description": "Pulizia per ogni stanza (supportata solo sugli aspirapolvere con funzione di sollevamento del panno)." }, "repeats": { - "name": "Repeats", - "description": "Cleaning times for each room." + "name": "Si ripete", + "description": "Orari di pulizia per ogni camera." } } }, "vacuum_set_restricted_zone": { - "name": "Set Restriced Zone", - "description": "Define virtual walls, restricted zones, and/or no mop zones.", + "name": "Imposta zona riservata", + "description": "Definisci muri virtuali, zone limitate e/o zone senza spazzolone.", "fields": { "walls": { - "name": "Walls", - "description": "Virtual walls." + "name": "Muri", + "description": "Muri virtuali." }, "zones": { - "name": "Zones", - "description": "No go zones." + "name": "Zone", + "description": "Zone vietate." }, "no_mops": { - "name": "No Mops", - "description": "No mop zones." + "name": "Niente spazzoloni", + "description": "Nessuna zona per lo spazzolone." } } }, "vacuum_reset_consumable": { - "name": "Reset Consumable", - "description": "Reset a consumable.", + "name": "Reimposta i materiali di consumo", + "description": "Reimposta un materiale di consumo.", "fields": { "consumable": { - "name": "Consumable", - "description": "Consumable type." + "name": "Consumabile", + "description": "Tipo di materiale di consumo." + } + } + }, + "vacuum_rename_shortcut": { + "name": "Rinomina collegamento", + "description": "Rinominare una scorciatoia. ", + "fields": { + "shortcut_id": { + "name": "ID della scorciatoia", + "description": "ID del collegamento." + }, + "shortcut_name": { + "name": "Nome della scorciatoia", + "description": "Nuovo nome della scorciatoia." + } + } + }, + "vacuum_set_carpet_area": { + "name": "Imposta l'area del tappeto", + "description": "Definisci i tappeti e i tappeti ignorati. ", + "fields": { + "carpets": { + "name": "Tappeti", + "description": "Aree di moquette." + }, + "ignored_carpets": { + "name": "Tappeti ignorati", + "description": "Aree del tappeto ignorate per eliminare i tappeti rilevati automaticamente." + } + } + }, + "vacuum_set_pathway": { + "name": "Imposta il percorso", + "description": "Definire percorsi.", + "fields": { + "pathways": { + "name": "Percorsi", + "description": "Coordinate della linea del percorso." + } + } + }, + "vacuum_set_predefined_points": { + "name": "Imposta punti predefiniti", + "description": "Definire le coordinate predefinite sulla mappa corrente. ", + "fields": { + "points": { + "name": "Punti", + "description": "Elenco delle coordinate da salvare." + } + } + }, + "vacuum_set_obstacle_ignore": { + "name": "Impostare Ignora ostacolo", + "description": "Imposta lo stato di ignoranza di un ostacolo. ", + "fields": { + "x": { + "name": "X", + "description": "X Coordinata dell'ostacolo." + }, + "y": { + "name": "Y", + "description": "Y Coordinata dell'ostacolo." + }, + "obstacle_type": { + "name": "Tipo di ostacolo", + "description": "Tipo di ostacolo che verrà ignorato." + }, + "obstacle_ignored": { + "name": "Ostacolo ignorato", + "description": "L'ostacolo viene ignorato o meno." + } + } + }, + "vacuum_set_router_position": { + "name": "Imposta la posizione del router", + "description": "Imposta la posizione del router sulla mappa corrente. ", + "fields": { + "x": { + "name": "X", + "description": "Coordinata X del router." + }, + "y": { + "name": "Y", + "description": "Coordinata Y del router." } } }, "select_select_previous": { - "name": "Select Previous", - "description": "Select the previous options of an select entity.", + "name": "Seleziona Precedente", + "description": "Seleziona le opzioni precedenti di un'entità selezionata.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Ciclo", + "description": "Se l'opzione deve scorrere dal primo all'ultimo." } } }, "select_select_first": { - "name": "Select First", - "description": "Select the first option of an select entity." + "name": "Seleziona Prima", + "description": "Seleziona la prima opzione di un'entità selezionata." }, "select_select_last": { - "name": "Select Last", - "description": "Select the last option of an select entity." + "name": "Seleziona Ultimo", + "description": "Seleziona l'ultima opzione di un'entità selezionata." }, "select_select_next": { - "name": "Select Next", - "description": "Select the next options of an select entity.", + "name": "Seleziona Avanti", + "description": "Seleziona le opzioni successive di un'entità selezionata.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Ciclo", + "description": "Se l'opzione deve scorrere dal primo all'ultimo." } } } } -} +} \ No newline at end of file diff --git a/custom_components/dreame_vacuum/translations/pl.json b/custom_components/dreame_vacuum/translations/pl.json index 83d096b..466fdef 100644 --- a/custom_components/dreame_vacuum/translations/pl.json +++ b/custom_components/dreame_vacuum/translations/pl.json @@ -48,7 +48,9 @@ "color_scheme": "Schemat kolorów mapy", "icon_set": "Zestaw ikon mapy", "notify": "Powiadomienia", - "map_objects": "Mapuj obiekty" + "map_objects": "Mapuj obiekty", + "low_resolution": "Mapa w niskiej rozdzielczości", + "square": "Kwadratowa mapa" } }, "reauth_confirm": { @@ -65,6 +67,8 @@ "icon_set": "Zestaw ikon mapy", "notify": "Powiadomienia", "map_objects": "Mapuj obiekty", + "low_resolution": "Mapa w niskiej rozdzielczości", + "square": "Kwadratowa mapa", "configuration_type": "Typ konfiguracji", "prefer_cloud": "Preferuj połączenie z chmurą" } @@ -141,6 +145,14 @@ "low_frequency": "Niska częstotliwość" } }, + "mop_pad_swing": { + "state": { + "off": "Wyłączony", + "auto": "Automatyczny", + "daily": "Codziennie", + "weekly": "Co tydzień" + } + }, "floor_material": { "state": { "none": "Nic", @@ -155,6 +167,11 @@ "german": "Niemiecki", "chinese": "chiński" } + }, + "order": { + "state": { + "not_set": "Nie ustawiony" + } } }, "sensor": { @@ -451,318 +468,444 @@ }, "services": { "vacuum_clean_segment": { - "name": "Clean Segment", - "description": "Start the cleaning operation in the selected rooms.", + "name": "Czysty odcinek", + "description": "Rozpocznij czyszczenie w wybranych pomieszczeniach.", "fields": { "segments": { - "name": "Segments", - "description": "List of rooms to be cleaned. Only room's Character or an array of room's character, cleaning times, fan speed and mop mode to override the default values per room." + "name": "Segmenty", + "description": "Lista pokoi do sprzątania. " }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Powtarza", + "description": "Liczba przebiegów czyszczenia dla każdego wybranego pomieszczenia (chyba, że ​​zostanie to zastąpione przez niestandardowy parametr czyszczenia)." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Poziom ssania", + "description": "Prędkość wentylatora dla każdego wybranego pomieszczenia (chyba że zostanie ona nadpisana przez dostosowany parametr czyszczenia)." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Objętość wody", + "description": "Poziom wody dla każdego wybranego pomieszczenia (chyba, że ​​zostanie on nadpisany przez dostosowany parametr czyszczenia)." } } }, "vacuum_clean_zone": { - "name": "Clean Zone", - "description": "Start the cleaning operation in the selected area.", + "name": "Strefa Czysta", + "description": "Rozpocznij czyszczenie w wybranym obszarze.", "fields": { "zone": { - "name": "Zone", - "description": "Coordinates." + "name": "Strefa", + "description": "Współrzędne." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for each zone between 1 and 3." + "name": "Powtarza", + "description": "Liczba przebiegów czyszczenia dla każdej wybranej strefy." + }, + "suction_level": { + "name": "Poziom ssania", + "description": "Prędkość wentylatora dla każdej wybranej strefy." + }, + "water_volume": { + "name": "Objętość wody", + "description": "Poziom wody dla każdej wybranej strefy." } } }, "vacuum_clean_spot": { - "name": "Clean Spot", - "description": "Start the cleaning operation in the selected points on the map.", + "name": "Czyste miejsce", + "description": "Rozpocznij operację czyszczenia w wybranych punktach na mapie.", "fields": { "points": { - "name": "Points", - "description": "List of coordinates to be cleaned." + "name": "Zwrotnica", + "description": "Lista współrzędnych do oczyszczenia." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected zone." + "name": "Powtarza", + "description": "Liczba przebiegów czyszczenia dla każdej wybranej strefy." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected zone." + "name": "Poziom ssania", + "description": "Prędkość wentylatora dla każdej wybranej strefy." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected zone." + "name": "Objętość wody", + "description": "Poziom wody dla każdej wybranej strefy." } } }, - "vacuum_set_dnd": { - "name": "Set DnD", - "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "vacuum_goto": { + "name": "Iść do", + "description": "Przejdź do współrzędnych mapy i zatrzymaj się.", "fields": { - "dnd_enabled": { - "name": "DnD Enabled", - "description": "Enable or disable DnD feature." + "x": { + "name": "X", + "description": "X Współrzędna punktu." }, - "dnd_start": { - "name": "DnD Start", - "description": "Start time of DnD feature." - }, - "dnd_end": { - "name": "Dnd End", - "description": "End time of DnD feature." + "y": { + "name": "Y", + "description": "Współrzędna Y punktu." + } + } + }, + "vacuum_follow_path": { + "name": "Podążaj ścieżką", + "description": "Postępuj zgodnie z listą współrzędnych na mapie i wróć do bazy. ", + "fields": { + "points": { + "name": "Zwrotnica", + "description": "Lista współrzędnych ścieżki." } } }, "vacuum_remote_control_move_step": { - "name": "Remote Control Move Step", - "description": "Remotely control move the bot one step.", + "name": "Krok przesuwania pilota", + "description": "Zdalnie kontroluj przesuwanie bota o jeden krok.", "fields": { "rotation": { - "name": "Rotation", - "description": "Turn in binary degrees between -128 and 128." + "name": "Obrót", + "description": "Włącz stopnie binarne w zakresie od -128 do 128." }, "velocity": { - "name": "Velocity", - "description": "Move speed, from 100 (forward) to -300 (backward)." + "name": "Prędkość", + "description": "Prędkość poruszania się od 100 (do przodu) do -300 (do tyłu)." } } }, "vacuum_install_voice_pack": { - "name": "Install Voice Pack", - "description": "Install official or custom voice pack.", + "name": "Zainstaluj pakiet głosowy", + "description": "Zainstaluj oficjalny lub niestandardowy pakiet głosowy.", "fields": { "lang_id": { - "name": "Language ID", - "description": "Language ID of this pack." + "name": "Identyfikator języka", + "description": "Identyfikator języka tego pakietu." }, "url": { - "name": "URL", - "description": "Url of this pack it should be reachable by the vacuum bot." + "name": "Adres URL", + "description": "Adres URL tego pakietu powinien być osiągalny dla robota próżniowego." }, "md5": { "name": "MD5", - "description": "MD5 checksum of the language pack." + "description": "Suma kontrolna MD5 pakietu językowego." }, "size": { - "name": "Size", - "description": "Size of the language pack in bytes." + "name": "Rozmiar", + "description": "Rozmiar pakietu językowego w bajtach." } } }, "vacuum_request_map": { - "name": "Request Map", - "description": "Request map data" + "name": "Poproś o mapę", + "description": "Poproś o dane mapy" }, "vacuum_select_map": { - "name": "Select Map", - "description": "Select current map. Used when having multiple maps/floors.", + "name": "Wybierz opcję Mapa", + "description": "Wybierz aktualną mapę. ", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be selected." + "name": "Identyfikator mapy", + "description": "Identyfikator mapy, która ma zostać wybrana." } } }, "vacuum_delete_map": { - "name": "Delete map", - "description": "Delete a map.", + "name": "Usuń mapę", + "description": "Usuń mapę.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be deleted." + "name": "Identyfikator mapy", + "description": "Identyfikator mapy do usunięcia." } } }, "vacuum_save_temporary_map": { - "name": "Save Temporary Map", - "description": "Save the temporary map." + "name": "Zapisz tymczasową mapę", + "description": "Zapisz tymczasową mapę." }, "vacuum_discard_temporary_map": { - "name": "Discard Temporary Map", - "description": "Discard the temporary map." + "name": "Odrzuć mapę tymczasową", + "description": "Odrzuć mapę tymczasową." }, "vacuum_replace_temporary_map": { - "name": "Replace Temporary Map", - "description": "Replace the temporary map with another saved map.", + "name": "Zamień mapę tymczasową", + "description": "Zastąp mapę tymczasową inną zapisaną mapą.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be replaced with." + "name": "Identyfikator mapy", + "description": "Identyfikator mapy, na którą ma zostać zastąpiona." } } }, "vacuum_rename_map": { - "name": "Rename map", - "description": "Rename a map.", + "name": "Zmień nazwę mapy", + "description": "Zmień nazwę mapy.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Identyfikator mapy", + "description": "Identyfikator mapy." }, "map_name": { - "name": "Map Name", - "description": "New name of the map." + "name": "Nazwa mapy", + "description": "Nowa nazwa mapy." } } }, "vacuum_restore_map": { - "name": "Restore Map", - "description": "Restore a map.", + "name": "Przywróć mapę", + "description": "Przywróć mapę.", + "fields": { + "map_id": { + "name": "Identyfikator mapy", + "description": "Identyfikator mapy, która ma zostać przywrócona." + }, + "recovery_map_index": { + "name": "Indeks mapy odzyskiwania", + "description": "Indeks zapisanej mapy odzyskiwania" + } + } + }, + "vacuum_restore_map_from_file": { + "name": "Przywróć mapę z pliku", + "description": "Przywróć mapę z pliku.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be restored." + "name": "Identyfikator mapy", + "description": "Identyfikator mapy, która ma zostać przywrócona." }, - "map_url": { - "name": "Map URL", - "description": "File Url of the map." + "file_url": { + "name": "Adres pliku", + "description": "Adres URL zapisanego pliku bz2.gz lub tar.gz" + } + } + }, + "vacuum_backup_map": { + "name": "Mapa zapasowa", + "description": "Utwórz kopię zapasową mapy w chmurze.", + "fields": { + "map_id": { + "name": "Identyfikator mapy", + "description": "Identyfikator mapy, która ma zostać przywrócona." } } }, "vacuum_merge_segments": { - "name": "Merge Segments", - "description": "Merge rooms.", + "name": "Połącz segmenty", + "description": "Połącz pokoje.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Identyfikator mapy", + "description": "Identyfikator mapy." }, "segments": { - "name": "Segments", - "description": "Room IDs." + "name": "Segmenty", + "description": "Identyfikatory pokoi." } } }, "vacuum_split_segments": { - "name": "Split Segments", - "description": "Split rooms.", + "name": "Podziel segmenty", + "description": "Pokoje podzielone.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Identyfikator mapy", + "description": "Identyfikator mapy." }, "segment": { - "name": "Segment", - "description": "Room ID." + "name": "Człon", + "description": "Identyfikator pokoju." }, "line": { - "name": "Line", - "description": "Split line coordinates." + "name": "Linia", + "description": "Współrzędne linii podziału." } } }, "vacuum_rename_segment": { - "name": "Rename Segment", - "description": "Rename a segment.", + "name": "Zmień nazwę segmentu", + "description": "Zmień nazwę segmentu.", "fields": { "segment_id": { - "name": "Segment ID", - "description": "ID of the segment" + "name": "Identyfikator segmentu", + "description": "Identyfikator segmentu" }, "segment_name": { - "name": "Segment Name", - "description": "New name of the segment" + "name": "Nazwa segmentu", + "description": "Nowa nazwa segmentu" } } }, "vacuum_set_cleaning_sequence": { - "name": "Set Cleaning Sequence", - "description": "Set room cleaning sequence.", + "name": "Ustaw sekwencję czyszczenia", + "description": "Ustaw sekwencję sprzątania pokoju. ", "fields": { "cleaning_sequence": { - "name": "Cleanin sequence", - "description": "Segment ID list of cleaning sequence." + "name": "Sekwencja czyszczenia", + "description": "Lista identyfikatorów segmentów sekwencji czyszczenia." } } }, "vacuum_set_custom_cleaning": { - "name": "Set Custom Cleaning", - "description": "Set custom cleaning parameters.", + "name": "Ustaw czyszczenie niestandardowe", + "description": "Ustaw niestandardowe parametry czyszczenia. ", "fields": { "segment_id": { - "name": "Segment ID", - "description": "Room IDs." + "name": "Identyfikator segmentu", + "description": "Identyfikatory pokoi." }, "suction_level": { - "name": "Suction Level", - "description": "Suction level for each room." + "name": "Poziom ssania", + "description": "Poziom ssania dla każdego pomieszczenia." }, "water_volume": { - "name": "Water Volume", - "description": "Water volume for each room." + "name": "Objętość wody", + "description": "Objętość wody dla każdego pomieszczenia." + }, + "cleaning_mode": { + "name": "Tryb czyszczenia", + "description": "Sprzątanie każdego pomieszczenia (obsługiwane tylko w odkurzaczach z funkcją podnoszenia nakładki mopa)." }, "repeats": { - "name": "Repeats", - "description": "Cleaning times for each room." + "name": "Powtarza", + "description": "Godziny sprzątania każdego pokoju." } } }, "vacuum_set_restricted_zone": { - "name": "Set Restriced Zone", - "description": "Define virtual walls, restricted zones, and/or no mop zones.", + "name": "Ustaw strefę zamkniętą", + "description": "Zdefiniuj wirtualne ściany, strefy ograniczone i/lub strefy bez mopa.", "fields": { "walls": { - "name": "Walls", - "description": "Virtual walls." + "name": "Ściany", + "description": "Wirtualne ściany." }, "zones": { - "name": "Zones", - "description": "No go zones." + "name": "Strefy", + "description": "Strefy zakazu wstępu." }, "no_mops": { - "name": "No Mops", - "description": "No mop zones." + "name": "Żadnych mopów", + "description": "Brak stref mopa." } } }, "vacuum_reset_consumable": { - "name": "Reset Consumable", - "description": "Reset a consumable.", + "name": "Zresetuj materiały eksploatacyjne", + "description": "Zresetuj materiał eksploatacyjny.", "fields": { "consumable": { - "name": "Consumable", - "description": "Consumable type." + "name": "Materiały eksploatacyjne", + "description": "Typ materiału eksploatacyjnego." + } + } + }, + "vacuum_rename_shortcut": { + "name": "Zmień nazwę skrótu", + "description": "Zmień nazwę skrótu. ", + "fields": { + "shortcut_id": { + "name": "Identyfikator skrótu", + "description": "Identyfikator skrótu." + }, + "shortcut_name": { + "name": "Nazwa skrótu", + "description": "Nowa nazwa skrótu." + } + } + }, + "vacuum_set_carpet_area": { + "name": "Ustaw obszar dywanu", + "description": "Zdefiniuj dywany i ignorowane dywany. ", + "fields": { + "carpets": { + "name": "Dywany", + "description": "Obszary dywanowe." + }, + "ignored_carpets": { + "name": "Ignorowane dywany", + "description": "Zignorowano obszary dywanów w celu usunięcia automatycznie wykrytych dywanów." + } + } + }, + "vacuum_set_pathway": { + "name": "Ustaw ścieżkę", + "description": "Zdefiniuj ścieżki.", + "fields": { + "pathways": { + "name": "Ścieżki", + "description": "Współrzędne linii ścieżki." + } + } + }, + "vacuum_set_predefined_points": { + "name": "Ustaw predefiniowane punkty", + "description": "Zdefiniuj predefiniowane współrzędne na bieżącej mapie. ", + "fields": { + "points": { + "name": "Zwrotnica", + "description": "Lista współrzędnych do zapisania." + } + } + }, + "vacuum_set_obstacle_ignore": { + "name": "Ustaw ignorowanie przeszkód", + "description": "Ustaw ignorowanie stanu przeszkody. ", + "fields": { + "x": { + "name": "X", + "description": "X Współrzędna przeszkody." + }, + "y": { + "name": "Y", + "description": "Współrzędna Y przeszkody." + }, + "obstacle_type": { + "name": "Typ przeszkody", + "description": "Rodzaj przeszkody, która zostanie zignorowana." + }, + "obstacle_ignored": { + "name": "Przeszkoda zignorowana", + "description": "Przeszkoda jest ignorowana lub nie." + } + } + }, + "vacuum_set_router_position": { + "name": "Ustaw pozycję routera", + "description": "Ustaw pozycję routera na bieżącej mapie. ", + "fields": { + "x": { + "name": "X", + "description": "Współrzędna X routera." + }, + "y": { + "name": "Y", + "description": "Współrzędna Y routera." } } }, "select_select_previous": { - "name": "Select Previous", - "description": "Select the previous options of an select entity.", + "name": "Wybierz opcję Poprzedni", + "description": "Wybierz poprzednie opcje wybranej jednostki.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Cykl", + "description": "Jeśli opcja powinna przechodzić od pierwszej do ostatniej." } } }, "select_select_first": { - "name": "Select First", - "description": "Select the first option of an select entity." + "name": "Wybierz opcję Najpierw", + "description": "Wybierz pierwszą opcję wybranej jednostki." }, "select_select_last": { - "name": "Select Last", - "description": "Select the last option of an select entity." + "name": "Wybierz opcję Ostatni", + "description": "Wybierz ostatnią opcję wybranej jednostki." }, "select_select_next": { - "name": "Select Next", - "description": "Select the next options of an select entity.", + "name": "Wybierz Dalej", + "description": "Wybierz kolejne opcje wybranej jednostki.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Cykl", + "description": "Jeśli opcja powinna przechodzić od pierwszej do ostatniej." } } } diff --git a/custom_components/dreame_vacuum/translations/ru.json b/custom_components/dreame_vacuum/translations/ru.json index 96c2698..8a71be0 100644 --- a/custom_components/dreame_vacuum/translations/ru.json +++ b/custom_components/dreame_vacuum/translations/ru.json @@ -48,7 +48,9 @@ "color_scheme": "Цветовая схема карты", "icon_set": "Набор значков карты", "notify": "Уведомление", - "map_objects": "Объекты на карте" + "map_objects": "Объекты на карте", + "low_resolution": "Карта низкого разрешения", + "square": "Квадратная карта" } }, "reauth_confirm": { @@ -65,6 +67,8 @@ "icon_set": "Набор значков карты", "notify": "Уведомления", "map_objects": "Объекты на карте", + "low_resolution": "Карта низкого разрешения", + "square": "Квадратная карта", "configuration_type": "Тип настройки", "prefer_cloud": "Предпочитаю облачное подключение" } @@ -141,6 +145,14 @@ "low_frequency": "Низкая частота" } }, + "mop_pad_swing": { + "state": { + "off": "Выключенный", + "auto": "Авто", + "daily": "Ежедневно", + "weekly": "Еженедельно" + } + }, "floor_material": { "state": { "none": "Никто", @@ -155,6 +167,11 @@ "german": "Немецкий", "chinese": "Китайский" } + }, + "order": { + "state": { + "not_set": "Не задано" + } } }, "sensor": { @@ -451,320 +468,446 @@ }, "services": { "vacuum_clean_segment": { - "name": "Clean Segment", - "description": "Start the cleaning operation in the selected rooms.", + "name": "Очистить сегмент", + "description": "Запустите операцию уборки в выбранных комнатах.", "fields": { "segments": { - "name": "Segments", - "description": "List of rooms to be cleaned. Only room's Character or an array of room's character, cleaning times, fan speed and mop mode to override the default values per room." + "name": "Сегменты", + "description": "Список помещений, подлежащих уборке. " }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Повторы", + "description": "Количество проходов уборки для каждой выбранной комнаты (если оно не переопределено настраиваемым параметром уборки)." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Уровень всасывания", + "description": "Скорость вентилятора для каждой выбранной комнаты (если она не изменена пользовательским параметром очистки)." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Объем воды", + "description": "Уровень воды для каждой выбранной комнаты (если он не изменен настраиваемым параметром очистки)." } } }, "vacuum_clean_zone": { - "name": "Clean Zone", - "description": "Start the cleaning operation in the selected area.", + "name": "Чистая зона", + "description": "Запустите операцию очистки в выбранной области.", "fields": { "zone": { - "name": "Zone", - "description": "Coordinates." + "name": "Зона", + "description": "Координаты." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for each zone between 1 and 3." + "name": "Повторы", + "description": "Количество проходов очистки для каждой выбранной зоны." + }, + "suction_level": { + "name": "Уровень всасывания", + "description": "Скорость вентилятора для каждой выбранной зоны." + }, + "water_volume": { + "name": "Объем воды", + "description": "Уровень воды для каждой выбранной зоны." } } }, "vacuum_clean_spot": { - "name": "Clean Spot", - "description": "Start the cleaning operation in the selected points on the map.", + "name": "Чистое место", + "description": "Начните операцию по очистке в выбранных точках на карте.", "fields": { "points": { - "name": "Points", - "description": "List of coordinates to be cleaned." + "name": "Точки", + "description": "Список координат, подлежащих очистке." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected zone." + "name": "Повторы", + "description": "Количество проходов очистки для каждой выбранной зоны." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected zone." + "name": "Уровень всасывания", + "description": "Скорость вентилятора для каждой выбранной зоны." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected zone." + "name": "Объем воды", + "description": "Уровень воды для каждой выбранной зоны." } } }, - "vacuum_set_dnd": { - "name": "Set DnD", - "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "vacuum_goto": { + "name": "Идти к", + "description": "Идите к координате карты и остановитесь.", "fields": { - "dnd_enabled": { - "name": "DnD Enabled", - "description": "Enable or disable DnD feature." + "x": { + "name": "Икс", + "description": "X Координата точки." }, - "dnd_start": { - "name": "DnD Start", - "description": "Start time of DnD feature." - }, - "dnd_end": { - "name": "Dnd End", - "description": "End time of DnD feature." + "y": { + "name": "Да", + "description": "Y Координата точки." + } + } + }, + "vacuum_follow_path": { + "name": "Следовать по пути", + "description": "Следуйте списку координат на карте и вернитесь на базу. ", + "fields": { + "points": { + "name": "Точки", + "description": "Список координат пути." } } }, "vacuum_remote_control_move_step": { - "name": "Remote Control Move Step", - "description": "Remotely control move the bot one step.", + "name": "Шаг перемещения пульта дистанционного управления", + "description": "Дистанционное управление перемещением бота на один шаг.", "fields": { "rotation": { - "name": "Rotation", - "description": "Turn in binary degrees between -128 and 128." + "name": "Вращение", + "description": "Поверните в двоичных градусах от -128 до 128." }, "velocity": { - "name": "Velocity", - "description": "Move speed, from 100 (forward) to -300 (backward)." + "name": "Скорость", + "description": "Скорость перемещения от 100 (вперед) до -300 (назад)." } } }, "vacuum_install_voice_pack": { - "name": "Install Voice Pack", - "description": "Install official or custom voice pack.", + "name": "Установить голосовой пакет", + "description": "Установите официальный или собственный голосовой пакет.", "fields": { "lang_id": { - "name": "Language ID", - "description": "Language ID of this pack." + "name": "Идентификатор языка", + "description": "Идентификатор языка этого пакета." }, "url": { - "name": "URL", - "description": "Url of this pack it should be reachable by the vacuum bot." + "name": "URL-адрес", + "description": "URL-адрес этого пакета должен быть доступен вакуумному боту." }, "md5": { "name": "MD5", - "description": "MD5 checksum of the language pack." + "description": "Контрольная сумма MD5 языкового пакета." }, "size": { - "name": "Size", - "description": "Size of the language pack in bytes." + "name": "Размер", + "description": "Размер языкового пакета в байтах." } } }, "vacuum_request_map": { - "name": "Request Map", - "description": "Request map data" + "name": "Запросить карту", + "description": "Запросить данные карты" }, "vacuum_select_map": { - "name": "Select Map", - "description": "Select current map. Used when having multiple maps/floors.", + "name": "Выберите карту", + "description": "Выберите текущую карту. ", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be selected." + "name": "Идентификатор карты", + "description": "Идентификатор карты, которую нужно выбрать." } } }, "vacuum_delete_map": { - "name": "Delete map", - "description": "Delete a map.", + "name": "Удалить карту", + "description": "Удалить карту.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be deleted." + "name": "Идентификатор карты", + "description": "Идентификатор карты, которую нужно удалить." } } }, "vacuum_save_temporary_map": { - "name": "Save Temporary Map", - "description": "Save the temporary map." + "name": "Сохранить временную карту", + "description": "Сохраните временную карту." }, "vacuum_discard_temporary_map": { - "name": "Discard Temporary Map", - "description": "Discard the temporary map." + "name": "Сбросить временную карту", + "description": "Откажитесь от временной карты." }, "vacuum_replace_temporary_map": { - "name": "Replace Temporary Map", - "description": "Replace the temporary map with another saved map.", + "name": "Заменить временную карту", + "description": "Замените временную карту другой сохраненной картой.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be replaced with." + "name": "Идентификатор карты", + "description": "Идентификатор карты, на которую будет заменена." } } }, "vacuum_rename_map": { - "name": "Rename map", - "description": "Rename a map.", + "name": "Переименовать карту", + "description": "Переименуйте карту.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Идентификатор карты", + "description": "Идентификатор карты." }, "map_name": { - "name": "Map Name", - "description": "New name of the map." + "name": "Название карты", + "description": "Новое название карты." } } }, "vacuum_restore_map": { - "name": "Restore Map", - "description": "Restore a map.", + "name": "Восстановить карту", + "description": "Восстановить карту.", + "fields": { + "map_id": { + "name": "Идентификатор карты", + "description": "Идентификатор восстанавливаемой карты." + }, + "recovery_map_index": { + "name": "Индекс карты восстановления", + "description": "Индекс сохраненной карты восстановления" + } + } + }, + "vacuum_restore_map_from_file": { + "name": "Восстановить карту из файла", + "description": "Восстановить карту из файла.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be restored." + "name": "Идентификатор карты", + "description": "Идентификатор восстанавливаемой карты." }, - "map_url": { - "name": "Map URL", - "description": "File Url of the map." + "file_url": { + "name": "URL-адрес файла", + "description": "URL сохраненного файла bz2.gz или tar.gz" + } + } + }, + "vacuum_backup_map": { + "name": "Резервная карта", + "description": "Резервное копирование карты в облако.", + "fields": { + "map_id": { + "name": "Идентификатор карты", + "description": "Идентификатор восстанавливаемой карты." } } }, "vacuum_merge_segments": { - "name": "Merge Segments", - "description": "Merge rooms.", + "name": "Объединить сегменты", + "description": "Объединить комнаты.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Идентификатор карты", + "description": "Идентификатор карты." }, "segments": { - "name": "Segments", - "description": "Room IDs." + "name": "Сегменты", + "description": "Идентификаторы комнат." } } }, "vacuum_split_segments": { - "name": "Split Segments", - "description": "Split rooms.", + "name": "Разделить сегменты", + "description": "Разделенные комнаты.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "Идентификатор карты", + "description": "Идентификатор карты." }, "segment": { - "name": "Segment", - "description": "Room ID." + "name": "Сегмент", + "description": "Идентификатор комнаты." }, "line": { - "name": "Line", - "description": "Split line coordinates." + "name": "Линия", + "description": "Координаты линии разделения." } } }, "vacuum_rename_segment": { - "name": "Rename Segment", - "description": "Rename a segment.", + "name": "Переименовать сегмент", + "description": "Переименуйте сегмент.", "fields": { "segment_id": { - "name": "Segment ID", - "description": "ID of the segment" + "name": "Идентификатор сегмента", + "description": "Идентификатор сегмента" }, "segment_name": { - "name": "Segment Name", - "description": "New name of the segment" + "name": "Имя сегмента", + "description": "Новое название сегмента" } } }, "vacuum_set_cleaning_sequence": { - "name": "Set Cleaning Sequence", - "description": "Set room cleaning sequence.", + "name": "Установить последовательность очистки", + "description": "Установите порядок уборки помещения. ", "fields": { "cleaning_sequence": { - "name": "Cleanin sequence", - "description": "Segment ID list of cleaning sequence." + "name": "Последовательность очистки", + "description": "Список идентификаторов сегментов последовательности очистки." } } }, "vacuum_set_custom_cleaning": { - "name": "Set Custom Cleaning", - "description": "Set custom cleaning parameters.", + "name": "Установить пользовательскую очистку", + "description": "Установите индивидуальные параметры очистки. ", "fields": { "segment_id": { - "name": "Segment ID", - "description": "Room IDs." + "name": "Идентификатор сегмента", + "description": "Идентификаторы комнат." }, "suction_level": { - "name": "Suction Level", - "description": "Suction level for each room." + "name": "Уровень всасывания", + "description": "Уровень всасывания для каждой комнаты." }, "water_volume": { - "name": "Water Volume", - "description": "Water volume for each room." + "name": "Объем воды", + "description": "Объем воды для каждой комнаты." + }, + "cleaning_mode": { + "name": "Режим очистки", + "description": "Уборка каждой комнаты (поддерживается только для пылесосов с функцией подъема подушечки швабры)." }, "repeats": { - "name": "Repeats", - "description": "Cleaning times for each room." + "name": "Повторы", + "description": "Время уборки в каждой комнате." } } }, "vacuum_set_restricted_zone": { - "name": "Set Restriced Zone", - "description": "Define virtual walls, restricted zones, and/or no mop zones.", + "name": "Установить зону ограниченного доступа", + "description": "Определите виртуальные стены, зоны с ограниченным доступом и/или зоны без швабры.", "fields": { "walls": { - "name": "Walls", - "description": "Virtual walls." + "name": "Стены", + "description": "Виртуальные стены." }, "zones": { - "name": "Zones", - "description": "No go zones." + "name": "Зоны", + "description": "Нет ходовых зон." }, "no_mops": { - "name": "No Mops", - "description": "No mop zones." + "name": "Нет швабр", + "description": "Нет зон для швабры." } } }, "vacuum_reset_consumable": { - "name": "Reset Consumable", - "description": "Reset a consumable.", + "name": "Сбросить расходные материалы", + "description": "Сбросьте расходный материал.", "fields": { "consumable": { - "name": "Consumable", - "description": "Consumable type." + "name": "Расходный материал", + "description": "Тип расходного материала." + } + } + }, + "vacuum_rename_shortcut": { + "name": "Переименовать ярлык", + "description": "Переименуйте ярлык. ", + "fields": { + "shortcut_id": { + "name": "Идентификатор ярлыка", + "description": "Идентификатор ярлыка." + }, + "shortcut_name": { + "name": "Имя ярлыка", + "description": "Новое имя ярлыка." + } + } + }, + "vacuum_set_carpet_area": { + "name": "Установить площадь ковра", + "description": "Дайте определение коврам и игнорируемым коврам. ", + "fields": { + "carpets": { + "name": "Ковры", + "description": "Ковровые зоны." + }, + "ignored_carpets": { + "name": "Игнорируемые ковры", + "description": "Игнорируемые области ковров для удаления автоматически обнаруженных ковров." + } + } + }, + "vacuum_set_pathway": { + "name": "Установить путь", + "description": "Определите пути.", + "fields": { + "pathways": { + "name": "Пути", + "description": "Координаты линии пути." + } + } + }, + "vacuum_set_predefined_points": { + "name": "Установить предопределенные точки", + "description": "Определите предопределенные координаты на текущей карте. ", + "fields": { + "points": { + "name": "Точки", + "description": "Список координат, которые необходимо сохранить." + } + } + }, + "vacuum_set_obstacle_ignore": { + "name": "Установить игнорирование препятствий", + "description": "Установить статус игнорирования препятствия. ", + "fields": { + "x": { + "name": "Икс", + "description": "X Координата препятствия." + }, + "y": { + "name": "Да", + "description": "Y Координата препятствия." + }, + "obstacle_type": { + "name": "Тип препятствия", + "description": "Тип препятствия, которое будет игнорироваться." + }, + "obstacle_ignored": { + "name": "Препятствие игнорируется", + "description": "Препятствие игнорируется или нет." + } + } + }, + "vacuum_set_router_position": { + "name": "Установить положение маршрутизатора", + "description": "Установите положение маршрутизатора на текущей карте. ", + "fields": { + "x": { + "name": "Икс", + "description": "X Координата маршрутизатора." + }, + "y": { + "name": "Да", + "description": "Y Координата маршрутизатора." } } }, "select_select_previous": { - "name": "Select Previous", - "description": "Select the previous options of an select entity.", + "name": "Выбрать предыдущий", + "description": "Выберите предыдущие параметры выбранной сущности.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Цикл", + "description": "Если опция должна циклически изменяться от первой к последней." } } }, "select_select_first": { - "name": "Select First", - "description": "Select the first option of an select entity." + "name": "Выберите сначала", + "description": "Выберите первый вариант выбранного объекта." }, "select_select_last": { - "name": "Select Last", - "description": "Select the last option of an select entity." + "name": "Выбрать последний", + "description": "Выберите последнюю опцию выбранного объекта." }, "select_select_next": { - "name": "Select Next", - "description": "Select the next options of an select entity.", + "name": "Выберите Далее", + "description": "Выберите следующие параметры выбранного объекта.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Цикл", + "description": "Если опция должна циклически изменяться от первой к последней." } } } } -} +} \ No newline at end of file diff --git a/custom_components/dreame_vacuum/translations/uk.json b/custom_components/dreame_vacuum/translations/uk.json index 990447d..af4dcbd 100644 --- a/custom_components/dreame_vacuum/translations/uk.json +++ b/custom_components/dreame_vacuum/translations/uk.json @@ -48,7 +48,9 @@ "color_scheme": "Колірна схема мапи", "icon_set": "Набір піктограм для мапи", "notify": "Сповіщення", - "map_objects": "Об'єкти мапи" + "map_objects": "Об'єкти мапи", + "low_resolution": "Карта низької роздільної здатності", + "square": "Квадратна карта" } }, "reauth_confirm": { @@ -65,6 +67,8 @@ "icon_set": "Набір піктограм для мапи", "notify": "Сповіщення", "map_objects": "Об'єкти мапи", + "low_resolution": "Карта низької роздільної здатності", + "square": "Квадратна карта", "configuration_type": "Тип конфігурації", "prefer_cloud": "Перевага хмарного з'єднання" } @@ -141,6 +145,14 @@ "low_frequency": "Низька частота" } }, + "mop_pad_swing": { + "state": { + "off": "Вимкнено", + "auto": "Авто", + "daily": "Щодня", + "weekly": "Щотижня" + } + }, "floor_material": { "state": { "none": "Не вибрано", @@ -155,6 +167,11 @@ "german": "Німецька", "chinese": "Китайська" } + }, + "order": { + "state": { + "not_set": "Не встановлено" + } } }, "sensor": { @@ -451,318 +468,444 @@ }, "services": { "vacuum_clean_segment": { - "name": "Clean Segment", - "description": "Start the cleaning operation in the selected rooms.", + "name": "Чистий сегмент", + "description": "Почніть прибирання у вибраних кімнатах.", "fields": { "segments": { - "name": "Segments", - "description": "List of rooms to be cleaned. Only room's Character or an array of room's character, cleaning times, fan speed and mop mode to override the default values per room." + "name": "Сегменти", + "description": "Список приміщень, що підлягають прибиранню. " }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Повтори", + "description": "Кількість проходів прибирання для кожної вибраної кімнати (якщо це не перевизначено спеціальним параметром прибирання)." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Рівень всмоктування", + "description": "Швидкість вентилятора для кожної вибраної кімнати (якщо вона не перевизначена індивідуальним параметром прибирання)." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected room (unless it is overridden by customized cleaning parameter)." + "name": "Об'єм води", + "description": "Рівень води для кожної вибраної кімнати (якщо він не перекривається індивідуальним параметром очищення)." } } }, "vacuum_clean_zone": { - "name": "Clean Zone", - "description": "Start the cleaning operation in the selected area.", + "name": "Чиста зона", + "description": "Почніть операцію очищення у вибраній зоні.", "fields": { "zone": { - "name": "Zone", - "description": "Coordinates." + "name": "зона", + "description": "Координати." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for each zone between 1 and 3." + "name": "Повтори", + "description": "Кількість проходів очищення для кожної вибраної зони." + }, + "suction_level": { + "name": "Рівень всмоктування", + "description": "Швидкість вентилятора для кожної вибраної зони." + }, + "water_volume": { + "name": "Об'єм води", + "description": "Рівень води для кожної вибраної зони." } } }, "vacuum_clean_spot": { - "name": "Clean Spot", - "description": "Start the cleaning operation in the selected points on the map.", + "name": "Чисте місце", + "description": "Почніть операцію з очищення у вибраних точках на карті.", "fields": { "points": { - "name": "Points", - "description": "List of coordinates to be cleaned." + "name": "Очки", + "description": "Список координат для очищення." }, "repeats": { - "name": "Repeats", - "description": "Number of cleaning passes for every selected zone." + "name": "Повтори", + "description": "Кількість проходів очищення для кожної вибраної зони." }, "suction_level": { - "name": "Suction Level", - "description": "Fan speed for every selected zone." + "name": "Рівень всмоктування", + "description": "Швидкість вентилятора для кожної вибраної зони." }, "water_volume": { - "name": "Water Volume", - "description": "Water level for every selected zone." + "name": "Об'єм води", + "description": "Рівень води для кожної вибраної зони." } } }, - "vacuum_set_dnd": { - "name": "Set DnD", - "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "vacuum_goto": { + "name": "Йти до", + "description": "Перейдіть до координати карти і зупиніться.", "fields": { - "dnd_enabled": { - "name": "DnD Enabled", - "description": "Enable or disable DnD feature." + "x": { + "name": "X", + "description": "X Координата точки." }, - "dnd_start": { - "name": "DnD Start", - "description": "Start time of DnD feature." - }, - "dnd_end": { - "name": "Dnd End", - "description": "End time of DnD feature." + "y": { + "name": "Ю", + "description": "Y Координата точки." + } + } + }, + "vacuum_follow_path": { + "name": "Дотримуйтесь шляху", + "description": "Дотримуйтеся списку координат на карті та повертайтеся на базу. ", + "fields": { + "points": { + "name": "Очки", + "description": "Список координат шляху." } } }, "vacuum_remote_control_move_step": { - "name": "Remote Control Move Step", - "description": "Remotely control move the bot one step.", + "name": "Крок переміщення пульта дистанційного керування", + "description": "Дистанційне керування переміщення бота на один крок.", "fields": { "rotation": { - "name": "Rotation", - "description": "Turn in binary degrees between -128 and 128." + "name": "Обертання", + "description": "Переведіть у двійкові градуси від -128 до 128." }, "velocity": { - "name": "Velocity", - "description": "Move speed, from 100 (forward) to -300 (backward)." + "name": "швидкість", + "description": "Швидкість пересування від 100 (вперед) до -300 (назад)." } } }, "vacuum_install_voice_pack": { - "name": "Install Voice Pack", - "description": "Install official or custom voice pack.", + "name": "Встановіть Voice Pack", + "description": "Встановіть офіційний або спеціальний голосовий пакет.", "fields": { "lang_id": { - "name": "Language ID", - "description": "Language ID of this pack." + "name": "ID мови", + "description": "Ідентифікатор мови цього пакета." }, "url": { "name": "URL", - "description": "Url of this pack it should be reachable by the vacuum bot." + "description": "URL-адреса цього пакета має бути доступна для вакуумного бота." }, "md5": { "name": "MD5", - "description": "MD5 checksum of the language pack." + "description": "Контрольна сума MD5 мовного пакета." }, "size": { - "name": "Size", - "description": "Size of the language pack in bytes." + "name": "Розмір", + "description": "Розмір мовного пакета в байтах." } } }, "vacuum_request_map": { - "name": "Request Map", - "description": "Request map data" + "name": "Карта запиту", + "description": "Запит картографічних даних" }, "vacuum_select_map": { - "name": "Select Map", - "description": "Select current map. Used when having multiple maps/floors.", + "name": "Виберіть Карта", + "description": "Виберіть поточну карту. ", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be selected." + "name": "ID карти", + "description": "ID карти, яку потрібно вибрати." } } }, "vacuum_delete_map": { - "name": "Delete map", - "description": "Delete a map.", + "name": "Видалити карту", + "description": "Видалити карту.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be deleted." + "name": "ID карти", + "description": "ID карти, яку потрібно видалити." } } }, "vacuum_save_temporary_map": { - "name": "Save Temporary Map", - "description": "Save the temporary map." + "name": "Зберегти тимчасову карту", + "description": "Збережіть тимчасову карту." }, "vacuum_discard_temporary_map": { - "name": "Discard Temporary Map", - "description": "Discard the temporary map." + "name": "Видалити тимчасову карту", + "description": "Відмовтеся від тимчасової карти." }, "vacuum_replace_temporary_map": { - "name": "Replace Temporary Map", - "description": "Replace the temporary map with another saved map.", + "name": "Замінити тимчасову карту", + "description": "Замініть тимчасову карту іншою збереженою.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be replaced with." + "name": "ID карти", + "description": "ID карти, на яку потрібно замінити." } } }, "vacuum_rename_map": { - "name": "Rename map", - "description": "Rename a map.", + "name": "Перейменувати карту", + "description": "Перейменувати карту.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "ID карти", + "description": "ID карти." }, "map_name": { - "name": "Map Name", - "description": "New name of the map." + "name": "Назва карти", + "description": "Нова назва карти." } } }, "vacuum_restore_map": { - "name": "Restore Map", - "description": "Restore a map.", + "name": "Відновити карту", + "description": "Відновити карту.", + "fields": { + "map_id": { + "name": "ID карти", + "description": "ID карти, яку потрібно відновити." + }, + "recovery_map_index": { + "name": "Індекс карти відновлення", + "description": "Індекс збереженої карти відновлення" + } + } + }, + "vacuum_restore_map_from_file": { + "name": "Відновити карту з файлу", + "description": "Відновити карту з файлу.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map to be restored." + "name": "ID карти", + "description": "ID карти, яку потрібно відновити." }, - "map_url": { - "name": "Map URL", - "description": "File Url of the map." + "file_url": { + "name": "URL-адреса файлу", + "description": "URL-адреса збереженого файлу bz2.gz або tar.gz" + } + } + }, + "vacuum_backup_map": { + "name": "Резервна карта", + "description": "Резервне копіювання карти в хмару.", + "fields": { + "map_id": { + "name": "ID карти", + "description": "ID карти, яку потрібно відновити." } } }, "vacuum_merge_segments": { - "name": "Merge Segments", - "description": "Merge rooms.", + "name": "Об’єднати сегменти", + "description": "Об'єднати кімнати.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "ID карти", + "description": "ID карти." }, "segments": { - "name": "Segments", - "description": "Room IDs." + "name": "Сегменти", + "description": "Ідентифікатори кімнат." } } }, "vacuum_split_segments": { - "name": "Split Segments", - "description": "Split rooms.", + "name": "Розбиті сегменти", + "description": "Розділені кімнати.", "fields": { "map_id": { - "name": "Map ID", - "description": "ID of the map." + "name": "ID карти", + "description": "ID карти." }, "segment": { - "name": "Segment", - "description": "Room ID." + "name": "Відрізок", + "description": "ID кімнати." }, "line": { - "name": "Line", - "description": "Split line coordinates." + "name": "лінія", + "description": "Координати розбитої лінії." } } }, "vacuum_rename_segment": { - "name": "Rename Segment", - "description": "Rename a segment.", + "name": "Перейменувати сегмент", + "description": "Перейменувати сегмент.", "fields": { "segment_id": { - "name": "Segment ID", - "description": "ID of the segment" + "name": "Ідентифікатор сегмента", + "description": "ID сегмента" }, "segment_name": { - "name": "Segment Name", - "description": "New name of the segment" + "name": "Назва сегмента", + "description": "Нова назва сегмента" } } }, "vacuum_set_cleaning_sequence": { - "name": "Set Cleaning Sequence", - "description": "Set room cleaning sequence.", + "name": "Встановіть послідовність очищення", + "description": "Встановити послідовність прибирання приміщення. ", "fields": { "cleaning_sequence": { - "name": "Cleanin sequence", - "description": "Segment ID list of cleaning sequence." + "name": "Послідовність очищення", + "description": "Список ідентифікаторів сегментів послідовності очищення." } } }, "vacuum_set_custom_cleaning": { - "name": "Set Custom Cleaning", - "description": "Set custom cleaning parameters.", + "name": "Встановити спеціальне очищення", + "description": "Встановіть власні параметри очищення. ", "fields": { "segment_id": { - "name": "Segment ID", - "description": "Room IDs." + "name": "Ідентифікатор сегмента", + "description": "Ідентифікатори кімнат." }, "suction_level": { - "name": "Suction Level", - "description": "Suction level for each room." + "name": "Рівень всмоктування", + "description": "Рівень всмоктування для кожної кімнати." }, "water_volume": { - "name": "Water Volume", - "description": "Water volume for each room." + "name": "Об'єм води", + "description": "Обсяг води для кожної кімнати." + }, + "cleaning_mode": { + "name": "Режим очищення", + "description": "Прибирання для кожної кімнати (підтримується лише на пилососах із функцією підйому мочалки)." }, "repeats": { - "name": "Repeats", - "description": "Cleaning times for each room." + "name": "Повтори", + "description": "Час прибирання для кожної кімнати." } } }, "vacuum_set_restricted_zone": { - "name": "Set Restriced Zone", - "description": "Define virtual walls, restricted zones, and/or no mop zones.", + "name": "Встановити заборонену зону", + "description": "Визначте віртуальні стіни, зони обмеження та/або зони без швабри.", "fields": { "walls": { - "name": "Walls", - "description": "Virtual walls." + "name": "Стіни", + "description": "Віртуальні стіни." }, "zones": { - "name": "Zones", - "description": "No go zones." + "name": "Зони", + "description": "Зони заборонені." }, "no_mops": { - "name": "No Mops", - "description": "No mop zones." + "name": "Без швабр", + "description": "Без зон для швабри." } } }, "vacuum_reset_consumable": { - "name": "Reset Consumable", - "description": "Reset a consumable.", + "name": "Скидання витратних матеріалів", + "description": "Скинути витратний матеріал.", "fields": { "consumable": { - "name": "Consumable", - "description": "Consumable type." + "name": "Витратний матеріал", + "description": "Тип витратного матеріалу." + } + } + }, + "vacuum_rename_shortcut": { + "name": "Перейменувати ярлик", + "description": "Перейменувати ярлик. ", + "fields": { + "shortcut_id": { + "name": "Ідентифікатор ярлика", + "description": "ID ярлика." + }, + "shortcut_name": { + "name": "Назва ярлика", + "description": "Нова назва ярлика." + } + } + }, + "vacuum_set_carpet_area": { + "name": "Встановити килимову зону", + "description": "Визначте килими та ігноровані килими. ", + "fields": { + "carpets": { + "name": "Килими", + "description": "Килимові зони." + }, + "ignored_carpets": { + "name": "Ігноровані килими", + "description": "Ігноровані ділянки килима для видалення автоматично виявлених килимів." + } + } + }, + "vacuum_set_pathway": { + "name": "Встановити шлях", + "description": "Визначте шляхи.", + "fields": { + "pathways": { + "name": "Шляхи", + "description": "Координати лінії шляху." + } + } + }, + "vacuum_set_predefined_points": { + "name": "Встановіть попередньо визначені точки", + "description": "Визначте попередньо визначені координати на поточній карті. ", + "fields": { + "points": { + "name": "Очки", + "description": "Список координат для збереження." + } + } + }, + "vacuum_set_obstacle_ignore": { + "name": "Встановити ігнорування перешкод", + "description": "Встановити статус ігнорування перешкоди. ", + "fields": { + "x": { + "name": "X", + "description": "X Координата перешкоди." + }, + "y": { + "name": "Ю", + "description": "Y Координата перешкоди." + }, + "obstacle_type": { + "name": "Тип перешкоди", + "description": "Тип перешкоди, яка буде проігнорована." + }, + "obstacle_ignored": { + "name": "Перешкода проігнорована", + "description": "Перешкода ігнорується чи ні." + } + } + }, + "vacuum_set_router_position": { + "name": "Встановіть положення маршрутизатора", + "description": "Встановити положення маршрутизатора на поточній карті. ", + "fields": { + "x": { + "name": "X", + "description": "X Координата маршрутизатора." + }, + "y": { + "name": "Ю", + "description": "Y Координата маршрутизатора." } } }, "select_select_previous": { - "name": "Select Previous", - "description": "Select the previous options of an select entity.", + "name": "Виберіть Назад", + "description": "Виберіть попередні параметри вибраної сутності.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Цикл", + "description": "Якщо параметр має циклічно переходити від першого до останнього." } } }, "select_select_first": { - "name": "Select First", - "description": "Select the first option of an select entity." + "name": "Виберіть Перший", + "description": "Виберіть перший параметр вибраної сутності." }, "select_select_last": { - "name": "Select Last", - "description": "Select the last option of an select entity." + "name": "Виберіть Останній", + "description": "Виберіть останню опцію вибраної сутності." }, "select_select_next": { - "name": "Select Next", - "description": "Select the next options of an select entity.", + "name": "Виберіть Далі", + "description": "Виберіть наступні параметри вибраної сутності.", "fields": { "cycle": { - "name": "Cycle", - "description": "If the option should cycle from the first to the last." + "name": "Цикл", + "description": "Якщо параметр має циклічно переходити від першого до останнього." } } } diff --git a/info.md b/info.md index 58e51ba..431b266 100644 --- a/info.md +++ b/info.md @@ -1,7 +1,7 @@ [![version](https://img.shields.io/github/manifest-json/v/Tasshack/dreame-vacuum?filename=custom_components%2Fdreame_vacuum%2Fmanifest.json&color=green)](https://github.com/Tasshack/dreame-vacuum/releases/latest) [![HACS](https://img.shields.io/badge/HACS-Default-orange.svg?logo=HomeAssistantCommunityStore&logoColor=white)](https://github.com/hacs/integration) [![Community Forum](https://img.shields.io/static/v1.svg?label=Community&message=Forum&color=41bdf5&logo=HomeAssistant&logoColor=white)](https://community.home-assistant.io/t/custom-component-dreame-vacuum/473026) -[![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi/Tasshack) +[![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi.com/Tasshack) [![PayPal.Me](https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal)](https://paypal.me/Tasshackk) ![dreame Logo](https://cdn.shopify.com/s/files/1/0302/5276/1220/files/rsz_logo_-01_400x_2ecfe8c0-2756-4bd1-a3f4-593b1f73e335_284x.jpg "dreame Logo") From 0954f8b6e3d06347f9573664323c2fe945a11bce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yi=C4=9Fit=20Topcu?= Date: Mon, 20 Nov 2023 08:44:14 +0300 Subject: [PATCH 3/6] v1.0.2 --- custom_components/dreame_vacuum/const.py | 1 - custom_components/dreame_vacuum/services.yaml | 16 -- custom_components/dreame_vacuum/strings.json | 195 ++++++++++++++++-- .../dreame_vacuum/translations/de.json | 32 +-- .../dreame_vacuum/translations/en.json | 18 ++ .../dreame_vacuum/translations/fr.json | 18 ++ .../dreame_vacuum/translations/it.json | 18 ++ .../dreame_vacuum/translations/pl.json | 18 ++ .../dreame_vacuum/translations/ru.json | 18 ++ .../dreame_vacuum/translations/uk.json | 18 ++ custom_components/dreame_vacuum/vacuum.py | 20 -- docs/services.md | 4 - 12 files changed, 304 insertions(+), 72 deletions(-) diff --git a/custom_components/dreame_vacuum/const.py b/custom_components/dreame_vacuum/const.py index dc35c6e..3aec62a 100644 --- a/custom_components/dreame_vacuum/const.py +++ b/custom_components/dreame_vacuum/const.py @@ -42,7 +42,6 @@ SERVICE_SET_RESTRICTED_ZONE: Final = "vacuum_set_restricted_zone" SERVICE_MOVE_REMOTE_CONTROL_STEP: Final = "vacuum_remote_control_move_step" SERVICE_RENAME_MAP: Final = "vacuum_rename_map" -SERVICE_RESTORE_MAP: Final = "vacuum_restore_map" SERVICE_SAVE_TEMPORARY_MAP: Final = "vacuum_save_temporary_map" SERVICE_DISCARD_TEMPORARY_MAP: Final = "vacuum_discard_temporary_map" SERVICE_REPLACE_TEMPORARY_MAP: Final = "vacuum_replace_temporary_map" diff --git a/custom_components/dreame_vacuum/services.yaml b/custom_components/dreame_vacuum/services.yaml index 27c968a..68f68f3 100644 --- a/custom_components/dreame_vacuum/services.yaml +++ b/custom_components/dreame_vacuum/services.yaml @@ -217,22 +217,6 @@ vacuum_rename_map: selector: text: -vacuum_restore_map: - target: - entity: - domain: vacuum - fields: - map_id: - example: 14 - required: true - selector: - number: - mode: box - map_url: - required: true - selector: - text: - vacuum_merge_segments: target: entity: diff --git a/custom_components/dreame_vacuum/strings.json b/custom_components/dreame_vacuum/strings.json index 3ccc9f4..6bdf1c5 100644 --- a/custom_components/dreame_vacuum/strings.json +++ b/custom_components/dreame_vacuum/strings.json @@ -48,7 +48,9 @@ "color_scheme": "Map color scheme", "icon_set": "Map icon set", "notify": "Notification", - "map_objects": "Map objects" + "map_objects": "Map objects", + "low_resolution": "Low resolution map", + "square": "Square map" } }, "reauth_confirm": { @@ -65,6 +67,8 @@ "icon_set": "Map icon set", "notify": "Notification", "map_objects": "Map objects", + "low_resolution": "Low resolution map", + "square": "Square map", "configuration_type": "Configuration type", "prefer_cloud": "Prefer cloud connection" } @@ -141,6 +145,14 @@ "low_frequency": "Low Frequency" } }, + "mop_pad_swing": { + "state": { + "off": "Off", + "auto": "Auto", + "daily": "Daily", + "weekly": "Weekly" + } + }, "floor_material": { "state": { "none": "None", @@ -155,6 +167,11 @@ "german": "German", "chinese": "Chinese" } + }, + "order": { + "state": { + "not_set": "Not Set" + } } }, "sensor": { @@ -164,8 +181,8 @@ "sweeping": "Sweeping", "charging": "Charging", "error": "Error", - "idle": "[%key:common::state::idle%]", - "paused": "[%key:common::state::paused%]", + "idle": "Idle", + "paused": "Paused", "returning": "Returning to dock", "mopping": "Mopping", "drying": "Drying", @@ -197,8 +214,8 @@ "status": { "state": { "unknown": "Unknown", - "idle": "[%key:common::state::idle%]", - "paused": "[%key:common::state::paused%]", + "idle": "Idle", + "paused": "Paused", "cleaning": "Cleaning", "returning": "Returning to dock", "spot_cleaning": "Spot cleaning", @@ -255,7 +272,7 @@ "returning_to_remove_mop": "Returning to remove mop" } }, - "mop": { + "water_tank": { "state": { "unknown": "Unknown", "installed": "Installed", @@ -264,7 +281,7 @@ "in_station": "In station" } }, - "water_tank": { + "mop_pad": { "state": { "unknown": "Unknown", "installed": "Installed", @@ -283,7 +300,7 @@ "auto_empty_status": { "state": { "unknown": "Unknown", - "idle": "[%key:common::state::idle%]", + "idle": "Idle", "active": "Active", "not_performed": "Not performed" } @@ -391,7 +408,7 @@ "self_wash_base_status": { "state": { "unknown": "Unknown", - "idle": "[%key:common::state::idle%]", + "idle": "Idle", "washing": "Washing", "drying": "Drying", "paused": "Paused", @@ -414,7 +431,7 @@ "stream_status": { "state": { "unknown": "Unknown", - "idle": "[%key:common::state::idle%]", + "idle": "Idle", "video": "Video", "audio": "Audio", "recording": "Recording" @@ -423,7 +440,7 @@ "drainage_status": { "state": { "unknown": "Unknown", - "idle": "[%key:common::state::idle%]", + "idle": "Idle", "draining": "Draining", "draining_successful": "Draining successful", "draining_failed": "Draining failed" @@ -482,7 +499,15 @@ }, "repeats": { "name": "Repeats", - "description": "Number of cleaning passes for each zone between 1 and 3." + "description": "Number of cleaning passes for every selected zone." + }, + "suction_level": { + "name": "Suction Level", + "description": "Fan speed for every selected zone." + }, + "water_volume": { + "name": "Water Volume", + "description": "Water level for every selected zone." } } }, @@ -526,6 +551,30 @@ } } }, + "vacuum_goto": { + "name": "Go To", + "description": "Go to the coordinate of the map and stop.", + "fields": { + "x": { + "name": "X", + "description": "X Coordinate of the point." + }, + "y": { + "name": "Y", + "description": "Y Coordinate of the point." + } + } + }, + "vacuum_follow_path": { + "name": "Follow Path", + "description": "Follow list of coordinates on the map and return to base. (Only supported on vacuums with camera)", + "fields": { + "points": { + "name": "Points", + "description": "List of coordinates of the path." + } + } + }, "vacuum_remote_control_move_step": { "name": "Remote Control Move Step", "description": "Remotely control move the bot one step.", @@ -626,9 +675,33 @@ "name": "Map ID", "description": "ID of the map to be restored." }, - "map_url": { - "name": "Map URL", - "description": "File Url of the map." + "recovery_map_index": { + "name": "Recovery Map Index", + "description": "Index of the saved recovery map" + } + } + }, + "vacuum_restore_map_from_file": { + "name": "Restore Map From File", + "description": "Restore a map from file.", + "fields": { + "map_id": { + "name": "Map ID", + "description": "ID of the map to be restored." + }, + "file_url": { + "name": "File Url", + "description": "Url of the saved bz2.gz or tar.gz file" + } + } + }, + "vacuum_backup_map": { + "name": "Backup Map", + "description": "Backup a map to cloud.", + "fields": { + "map_id": { + "name": "Map ID", + "description": "ID of the map to be restored." } } }, @@ -680,7 +753,7 @@ }, "vacuum_set_cleaning_sequence": { "name": "Set Cleaning Sequence", - "description": "Set room cleaning sequence.", + "description": "Set room cleaning sequence. (Only on supported devices)", "fields": { "cleaning_sequence": { "name": "Cleanin sequence", @@ -690,7 +763,7 @@ }, "vacuum_set_custom_cleaning": { "name": "Set Custom Cleaning", - "description": "Set custom cleaning parameters.", + "description": "Set custom cleaning parameters. (Only on supported devices)", "fields": { "segment_id": { "name": "Segment ID", @@ -704,6 +777,10 @@ "name": "Water Volume", "description": "Water volume for each room." }, + "cleaning_mode": { + "name": "Cleaning Mode", + "description": "Cleaning for each room (only supported on vacuums with mop pad lifting feature)." + }, "repeats": { "name": "Repeats", "description": "Cleaning times for each room." @@ -738,6 +815,90 @@ } } }, + "vacuum_rename_shortcut": { + "name": "Rename Shortcut", + "description": "Rename a shortcut. (Only on supported devices)", + "fields": { + "shortcut_id": { + "name": "Shortcut ID", + "description": "ID of the shortcut." + }, + "shortcut_name": { + "name": "Shortcut Name", + "description": "New name of the shortcut." + } + } + }, + "vacuum_set_carpet_area": { + "name": "Set Carpet Area", + "description": "Define carpets and ignored carpets. (Only on supported devices)", + "fields": { + "carpets": { + "name": "Carpets", + "description": "Carpet areas." + }, + "ignored_carpets": { + "name": "Ignored Carpets", + "description": "Ignored carpet areas for deleting the automatically detected carpets." + } + } + }, + "vacuum_set_pathway": { + "name": "Set Pathway", + "description": "Define pathways.", + "fields": { + "pathways": { + "name": "Pathways", + "description": "Pathway line coordinates." + } + } + }, + "vacuum_set_predefined_points": { + "name": "Set Predefined Points", + "description": "Define predefined coordinates on current map. (Only supported on vacuums with camera)", + "fields": { + "points": { + "name": "Points", + "description": "List of coordinates to be saved." + } + } + }, + "vacuum_set_obstacle_ignore": { + "name": "Set Obstacle Ignore", + "description": "Set ignore status of an obstacle. (Only supported on vacuums with AI Obstacle detection feature)", + "fields": { + "x": { + "name": "X", + "description": "X Coordinate of the obstacle." + }, + "y": { + "name": "Y", + "description": "Y Coordinate of the obstacle." + }, + "obstacle_type": { + "name": "Obstacle Type", + "description": "Type of the obstacle that will be ignored." + }, + "obstacle_ignored": { + "name": "Obstacle Ignored", + "description": "Obstacle is ignored or not." + } + } + }, + "vacuum_set_router_position": { + "name": "Set router position", + "description": "Set router position on current map. (Only supported on vacuums with WiFi map feature)", + "fields": { + "x": { + "name": "X", + "description": "X Coordinate of the router." + }, + "y": { + "name": "Y", + "description": "Y Coordinate of the router." + } + } + }, "select_select_previous": { "name": "Select Previous", "description": "Select the previous options of an select entity.", diff --git a/custom_components/dreame_vacuum/translations/de.json b/custom_components/dreame_vacuum/translations/de.json index 82d6821..18b9ad0 100644 --- a/custom_components/dreame_vacuum/translations/de.json +++ b/custom_components/dreame_vacuum/translations/de.json @@ -533,6 +533,24 @@ } } }, + "vacuum_set_dnd": { + "name": "Set DnD", + "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "fields": { + "dnd_enabled": { + "name": "DnD Enabled", + "description": "Enable or disable DnD feature." + }, + "dnd_start": { + "name": "DnD Start", + "description": "Start time of DnD feature." + }, + "dnd_end": { + "name": "Dnd End", + "description": "End time of DnD feature." + } + } + }, "vacuum_goto": { "name": "Gehe zu", "description": "Gehe zu den Koordinaten auf der Karte und stoppe.", @@ -649,20 +667,6 @@ } } }, - "vacuum_restore_map": { - "name": "Karte wiederherstellen", - "description": "Stelle eine Karte wieder her.", - "fields": { - "map_id": { - "name": "Karten-ID", - "description": "ID der wiederherzustellenden Karte." - }, - "recovery_map_index": { - "name": "Wiederherstellungskartenindex", - "description": "Index der gespeicherten Wiederherstellungskarte" - } - } - }, "vacuum_restore_map_from_file": { "name": "Karte aus Datei wiederherstellen", "description": "Stellen Sie eine Karte aus einer Datei wieder her.", diff --git a/custom_components/dreame_vacuum/translations/en.json b/custom_components/dreame_vacuum/translations/en.json index a2d96b4..a5e3b75 100644 --- a/custom_components/dreame_vacuum/translations/en.json +++ b/custom_components/dreame_vacuum/translations/en.json @@ -533,6 +533,24 @@ } } }, + "vacuum_set_dnd": { + "name": "Set DnD", + "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "fields": { + "dnd_enabled": { + "name": "DnD Enabled", + "description": "Enable or disable DnD feature." + }, + "dnd_start": { + "name": "DnD Start", + "description": "Start time of DnD feature." + }, + "dnd_end": { + "name": "Dnd End", + "description": "End time of DnD feature." + } + } + }, "vacuum_goto": { "name": "Go To", "description": "Go to the coordinate of the map and stop.", diff --git a/custom_components/dreame_vacuum/translations/fr.json b/custom_components/dreame_vacuum/translations/fr.json index a7cd9e6..d8d7344 100644 --- a/custom_components/dreame_vacuum/translations/fr.json +++ b/custom_components/dreame_vacuum/translations/fr.json @@ -533,6 +533,24 @@ } } }, + "vacuum_set_dnd": { + "name": "Set DnD", + "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "fields": { + "dnd_enabled": { + "name": "DnD Enabled", + "description": "Enable or disable DnD feature." + }, + "dnd_start": { + "name": "DnD Start", + "description": "Start time of DnD feature." + }, + "dnd_end": { + "name": "Dnd End", + "description": "End time of DnD feature." + } + } + }, "vacuum_goto": { "name": "Aller à", "description": "Allez aux coordonnées de la carte et arrêtez-vous.", diff --git a/custom_components/dreame_vacuum/translations/it.json b/custom_components/dreame_vacuum/translations/it.json index b852fe2..71ab3a8 100644 --- a/custom_components/dreame_vacuum/translations/it.json +++ b/custom_components/dreame_vacuum/translations/it.json @@ -533,6 +533,24 @@ } } }, + "vacuum_set_dnd": { + "name": "Set DnD", + "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "fields": { + "dnd_enabled": { + "name": "DnD Enabled", + "description": "Enable or disable DnD feature." + }, + "dnd_start": { + "name": "DnD Start", + "description": "Start time of DnD feature." + }, + "dnd_end": { + "name": "Dnd End", + "description": "End time of DnD feature." + } + } + }, "vacuum_goto": { "name": "Vai a", "description": "Vai alle coordinate della mappa e fermati.", diff --git a/custom_components/dreame_vacuum/translations/pl.json b/custom_components/dreame_vacuum/translations/pl.json index 466fdef..6724679 100644 --- a/custom_components/dreame_vacuum/translations/pl.json +++ b/custom_components/dreame_vacuum/translations/pl.json @@ -533,6 +533,24 @@ } } }, + "vacuum_set_dnd": { + "name": "Set DnD", + "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "fields": { + "dnd_enabled": { + "name": "DnD Enabled", + "description": "Enable or disable DnD feature." + }, + "dnd_start": { + "name": "DnD Start", + "description": "Start time of DnD feature." + }, + "dnd_end": { + "name": "Dnd End", + "description": "End time of DnD feature." + } + } + }, "vacuum_goto": { "name": "Iść do", "description": "Przejdź do współrzędnych mapy i zatrzymaj się.", diff --git a/custom_components/dreame_vacuum/translations/ru.json b/custom_components/dreame_vacuum/translations/ru.json index 8a71be0..e75d39b 100644 --- a/custom_components/dreame_vacuum/translations/ru.json +++ b/custom_components/dreame_vacuum/translations/ru.json @@ -533,6 +533,24 @@ } } }, + "vacuum_set_dnd": { + "name": "Set DnD", + "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "fields": { + "dnd_enabled": { + "name": "DnD Enabled", + "description": "Enable or disable DnD feature." + }, + "dnd_start": { + "name": "DnD Start", + "description": "Start time of DnD feature." + }, + "dnd_end": { + "name": "Dnd End", + "description": "End time of DnD feature." + } + } + }, "vacuum_goto": { "name": "Идти к", "description": "Идите к координате карты и остановитесь.", diff --git a/custom_components/dreame_vacuum/translations/uk.json b/custom_components/dreame_vacuum/translations/uk.json index af4dcbd..bdacaf9 100644 --- a/custom_components/dreame_vacuum/translations/uk.json +++ b/custom_components/dreame_vacuum/translations/uk.json @@ -533,6 +533,24 @@ } } }, + "vacuum_set_dnd": { + "name": "Set DnD", + "description": "Enable/disable DnD functionality and/or setting its start and end time.", + "fields": { + "dnd_enabled": { + "name": "DnD Enabled", + "description": "Enable or disable DnD feature." + }, + "dnd_start": { + "name": "DnD Start", + "description": "Start time of DnD feature." + }, + "dnd_end": { + "name": "Dnd End", + "description": "End time of DnD feature." + } + } + }, "vacuum_goto": { "name": "Йти до", "description": "Перейдіть до координати карти і зупиніться.", diff --git a/custom_components/dreame_vacuum/vacuum.py b/custom_components/dreame_vacuum/vacuum.py index eb5b073..7fbc017 100644 --- a/custom_components/dreame_vacuum/vacuum.py +++ b/custom_components/dreame_vacuum/vacuum.py @@ -68,7 +68,6 @@ SERVICE_REQUEST_MAP, SERVICE_SELECT_MAP, SERVICE_DELETE_MAP, - SERVICE_RESTORE_MAP, SERVICE_SET_CLEANING_SEQUENCE, SERVICE_SET_CUSTOM_CLEANING, SERVICE_SET_DND, @@ -338,15 +337,6 @@ async def async_setup_entry( DreameVacuum.async_rename_map.__name__, ) - platform.async_register_entity_service( - SERVICE_RESTORE_MAP, - { - vol.Required(INPUT_MAP_ID): cv.positive_int, - vol.Required(INPUT_MAP_URL): cv.string, - }, - DreameVacuum.async_restore_map.__name__, - ) - platform.async_register_entity_service( SERVICE_MERGE_SEGMENTS, { @@ -666,16 +656,6 @@ async def async_rename_map(self, map_id, map_name="") -> None: map_name, ) - async def async_restore_map(self, map_id, map_url) -> None: - """Restore a map""" - if map_url and map_url != "": - await self._try_command( - "Unable to call restore_map: %s", - self.device.restore_map, - map_id, - map_url, - ) - async def async_rename_segment(self, segment_id, segment_name="") -> None: """Rename a segment""" if segment_name != "": diff --git a/docs/services.md b/docs/services.md index 354ede2..2b6fa5a 100644 --- a/docs/services.md +++ b/docs/services.md @@ -447,10 +447,6 @@ Rename a map. entity_id: vacuum.vacuum ``` -### `dreame_vacuum.vacuum_restore_map` - -Restore a map from previous state that are created and uploaded by the device. - ### `dreame_vacuum.vacuum_set_restricted_zone` Set invisible walls, no go and no mopping zones on current map. From c80f28b83be1d1fbc90e27a7af8fa57af88827a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yi=C4=9Fit=20Topcu?= Date: Fri, 15 Dec 2023 13:30:50 +0300 Subject: [PATCH 4/6] Doc updates --- README.md | 5 +++-- docs/services.md | 14 +++++++------- info.md | 6 ++++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 1a4b5f2..a800437 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ -[![version](https://img.shields.io/github/manifest-json/v/Tasshack/dreame-vacuum?filename=custom_components%2Fdreame_vacuum%2Fmanifest.json&color=green)](https://github.com/Tasshack/dreame-vacuum/releases/latest) +[![version](https://img.shields.io/github/manifest-json/v/Tasshack/dreame-vacuum?filename=custom_components%2Fdreame_vacuum%2Fmanifest.json&color=slateblue)](https://github.com/Tasshack/dreame-vacuum/releases/latest) +![GitHub all releases](https://img.shields.io/github/downloads/Tasshack/dreame-vacuum/total) [![HACS](https://img.shields.io/badge/HACS-Default-orange.svg?logo=HomeAssistantCommunityStore&logoColor=white)](https://github.com/hacs/integration) [![Community Forum](https://img.shields.io/static/v1.svg?label=Community&message=Forum&color=41bdf5&logo=HomeAssistant&logoColor=white)](https://community.home-assistant.io/t/custom-component-dreame-vacuum/473026) [![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi.com/Tasshack) [![PayPal.Me](https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal)](https://paypal.me/Tasshackk) -![dreame Logo](https://cdn.shopify.com/s/files/1/0302/5276/1220/files/rsz_logo_-01_400x_2ecfe8c0-2756-4bd1-a3f4-593b1f73e335_284x.jpg "dreame Logo") +![Dreame Logo](https://raw.githubusercontent.com/Tasshack/dreame-vacuum/dev/docs/media/logo.png "Dreame") # Dreame vacuum integration for Home Assistant diff --git a/docs/services.md b/docs/services.md index 2b6fa5a..5074c1f 100644 --- a/docs/services.md +++ b/docs/services.md @@ -166,7 +166,7 @@ Start selected spot cleaning with optional customized cleaning parameters. **Examples:** -- Clean selected zone +- Clean selected spot ```yaml service: dreame_vacuum.vacuum_clean_spot data: @@ -176,7 +176,7 @@ Start selected spot cleaning with optional customized cleaning parameters. target: entity_id: vacuum.vacuum ``` -- Clean multiple zones +- Clean multiple spots ```yaml service: dreame_vacuum.vacuum_clean_spot data: @@ -188,7 +188,7 @@ Start selected spot cleaning with optional customized cleaning parameters. target: entity_id: vacuum.vacuum ``` -- Clean selected zone two times +- Clean selected spot two times ```yaml service: dreame_vacuum.vacuum_clean_spot data: @@ -200,7 +200,7 @@ Start selected spot cleaning with optional customized cleaning parameters. entity_id: vacuum.vacuum ``` -- Clean first zone two times second zone three times +- Clean first spot two times second spot three times ```yaml service: dreame_vacuum.vacuum_clean_spot data: @@ -351,11 +351,11 @@ Send command service can be used to send raw api requests that are not available service: vacuum.send_command data: entity_id: vacuum.vacuum - command: "action" + command: action params: did: "15.1" siid: 15 - aaid: 1 + aiid: 1 in: [] ``` @@ -364,7 +364,7 @@ Send command service can be used to send raw api requests that are not available service: vacuum.send_command data: entity_id: vacuum.vacuum - command: "set_properties" + command: set_properties params: - did: "4.29" siid: 4 diff --git a/info.md b/info.md index 431b266..b6b4abe 100644 --- a/info.md +++ b/info.md @@ -1,10 +1,12 @@ -[![version](https://img.shields.io/github/manifest-json/v/Tasshack/dreame-vacuum?filename=custom_components%2Fdreame_vacuum%2Fmanifest.json&color=green)](https://github.com/Tasshack/dreame-vacuum/releases/latest) +[![version](https://img.shields.io/github/manifest-json/v/Tasshack/dreame-vacuum?filename=custom_components%2Fdreame_vacuum%2Fmanifest.json&color=slateblue)](https://github.com/Tasshack/dreame-vacuum/releases/latest) +![GitHub all releases](https://img.shields.io/github/downloads/Tasshack/dreame-vacuum/total) +![GitHub issues](https://img.shields.io/github/issues/Tasshack/dreame-vacuum) [![HACS](https://img.shields.io/badge/HACS-Default-orange.svg?logo=HomeAssistantCommunityStore&logoColor=white)](https://github.com/hacs/integration) [![Community Forum](https://img.shields.io/static/v1.svg?label=Community&message=Forum&color=41bdf5&logo=HomeAssistant&logoColor=white)](https://community.home-assistant.io/t/custom-component-dreame-vacuum/473026) [![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi.com/Tasshack) [![PayPal.Me](https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal)](https://paypal.me/Tasshackk) -![dreame Logo](https://cdn.shopify.com/s/files/1/0302/5276/1220/files/rsz_logo_-01_400x_2ecfe8c0-2756-4bd1-a3f4-593b1f73e335_284x.jpg "dreame Logo") +![Dreame Logo](https://raw.githubusercontent.com/Tasshack/dreame-vacuum/dev/docs/media/logo.png "Dreame") # Dreame vacuum integration for Home Assistant From 4d99c69d0f79b8d77d3a5af52160ec05a15141d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yi=C4=9Fit=20Topcu?= Date: Mon, 1 Apr 2024 17:44:53 +0300 Subject: [PATCH 5/6] Docs update --- custom_components/dreame_vacuum/translations/en.json | 2 +- docs/entities.md | 2 +- docs/map.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/custom_components/dreame_vacuum/translations/en.json b/custom_components/dreame_vacuum/translations/en.json index a5e3b75..6b1c8ad 100644 --- a/custom_components/dreame_vacuum/translations/en.json +++ b/custom_components/dreame_vacuum/translations/en.json @@ -788,7 +788,7 @@ } }, "vacuum_set_restricted_zone": { - "name": "Set Restriced Zone", + "name": "Set Restricted Zone", "description": "Define virtual walls, restricted zones, and/or no mop zones.", "fields": { "walls": { diff --git a/docs/entities.md b/docs/entities.md index 306cead..59ee406 100644 --- a/docs/entities.md +++ b/docs/entities.md @@ -6,7 +6,7 @@ - Some entities may not be available on devices with older firmware versions like *customized_cleaning* and *cleaning_mode* that are also not available on valetudo. - Most of the entities including the vacuum entity has dynamic icons for their state and can be overridden from entity settings. - Most of the sensor and all select entities returns their current raw integer value on `raw_value`, `map_id` or `segment_id` attributes for ease of use on automations and services. -- All entities has dynamic refresh rate determined by its change range and device state. Integration only inform Home Assistant when a device property has changed trough listeners. This is more like a *local_push* type of approach instead of *local_pull* but please note that it may take time entity to reflect the changes when you edit related setting from the official App. +- All entities has dynamic refresh rate determined by its change range and device state. Integration only inform Home Assistant when a device property has changed through listeners. This is more like a *local_push* type of approach instead of *local_pull* but please note that it may take time entity to reflect the changes when you edit related setting from the official App. - Some entities has custom availability rules for another specific entity or state. E.g. *tight_mopping* entity will become *unavailable* when water tank or mop pad is not attached. (All off the rules extracted from the official App) - Exposed cloud connected entities for all available settings that are stored not on the device but on specific map data itself. E.g. *map_rotation* - Generated entities have the following naming schema: diff --git a/docs/map.md b/docs/map.md index 8ff9679..8bff24a 100644 --- a/docs/map.md +++ b/docs/map.md @@ -87,7 +87,7 @@ Automatically generated saved and live map entities for map editing and automati -**For more info about map entities** +**For more info about map entities** ### Dynamic room entities for selected map From adbe6ece29639910ba6ee177ab338cd6aa504ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yi=C4=9Fit=20Topcu?= Date: Sat, 13 Apr 2024 07:35:00 +0300 Subject: [PATCH 6/6] v1.0.3 --- README.md | 2 +- custom_components/dreame_vacuum/coordinator.py | 14 ++++++++++---- custom_components/dreame_vacuum/manifest.json | 2 +- info.md | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a800437..204d1e1 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi.com/Tasshack) [![PayPal.Me](https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal)](https://paypal.me/Tasshackk) -![Dreame Logo](https://raw.githubusercontent.com/Tasshack/dreame-vacuum/dev/docs/media/logo.png "Dreame") +![Logo](https://raw.githubusercontent.com/Tasshack/dreame-vacuum/dev/docs/media/logo.png) # Dreame vacuum integration for Home Assistant diff --git a/custom_components/dreame_vacuum/coordinator.py b/custom_components/dreame_vacuum/coordinator.py index 81120a8..35ce70e 100644 --- a/custom_components/dreame_vacuum/coordinator.py +++ b/custom_components/dreame_vacuum/coordinator.py @@ -115,8 +115,8 @@ def __init__( self.device.listen( self._cleaning_paused_changed, DreameVacuumProperty.CLEANING_PAUSED ) - self.device.listen(self.async_set_updated_data) - self.device.listen_error(self.async_set_update_error) + self.device.listen(self.set_updated_data) + self.device.listen_error(self.set_update_error) super().__init__( hass, @@ -284,7 +284,7 @@ def _create_persistent_notification(self, content, notification_id) -> None: return - persistent_notification.async_create( + persistent_notification.create( self.hass, content, title=self.device.name, @@ -292,7 +292,7 @@ def _create_persistent_notification(self, content, notification_id) -> None: ) def _remove_persistent_notification(self, notification_id) -> None: - persistent_notification.async_dismiss( + persistent_notification.dismiss( self.hass, f"{DOMAIN}_{self.device.mac}_{notification_id}") def _notification_dismiss_listener(self, type, data) -> None: @@ -336,6 +336,12 @@ async def _async_update_data(self) -> DreameVacuumDevice: self.device = None raise UpdateFailed(ex) from ex + def set_update_error(self, ex=None) -> None: + self.hass.loop.call_soon_threadsafe(self.async_set_update_error, ex) + + def set_updated_data(self, device=None) -> None: + self.hass.loop.call_soon_threadsafe(self.async_set_updated_data, device) + @callback def async_set_updated_data(self, device=None) -> None: if self._has_temporary_map != self.device.status.has_temporary_map: diff --git a/custom_components/dreame_vacuum/manifest.json b/custom_components/dreame_vacuum/manifest.json index b59981a..5b99e35 100644 --- a/custom_components/dreame_vacuum/manifest.json +++ b/custom_components/dreame_vacuum/manifest.json @@ -19,5 +19,5 @@ "tzlocal", "paho-mqtt" ], - "version": "v1.0.2" + "version": "v1.0.3" } \ No newline at end of file diff --git a/info.md b/info.md index b6b4abe..1f1bf8d 100644 --- a/info.md +++ b/info.md @@ -6,7 +6,7 @@ [![Ko-Fi](https://img.shields.io/static/v1.svg?label=%20&message=Ko-Fi&color=F16061&logo=ko-fi&logoColor=white)](https://www.ko-fi.com/Tasshack) [![PayPal.Me](https://img.shields.io/static/v1.svg?label=%20&message=PayPal.Me&logo=paypal)](https://paypal.me/Tasshackk) -![Dreame Logo](https://raw.githubusercontent.com/Tasshack/dreame-vacuum/dev/docs/media/logo.png "Dreame") +![Logo](https://raw.githubusercontent.com/Tasshack/dreame-vacuum/dev/docs/media/logo.png) # Dreame vacuum integration for Home Assistant