Compare commits

..

1 Commits

Author SHA1 Message Date
Gavin
2ff57761b8
Merge c1a6c7e6d2 into e09676661c 2025-07-09 14:20:20 +08:00
37 changed files with 62 additions and 252 deletions

View File

@ -1,20 +1,4 @@
# CHANGELOG # CHANGELOG
## v0.4.0
### Added
- Add the watch as the device tracker entity. [#1189](https://github.com/XiaoMi/ha_xiaomi_home/pull/1189)
- Add the wifi speaker and the television as the media player entity. [#706](https://github.com/XiaoMi/ha_xiaomi_home/pull/706)
- Add an option in CONFIGURE to set the cover closed position. [#1242](https://github.com/XiaoMi/ha_xiaomi_home/pull/1242)
- Add notifications to show the status of the local connection to the central hub gateway. [#1280](https://github.com/XiaoMi/ha_xiaomi_home/pull/1280)
- Import the device from the third party cloud. [#1258](https://github.com/XiaoMi/ha_xiaomi_home/pull/1258)
### Changed
- Add an alongside switch entity for viomi.waterheater.m1. [#1255](https://github.com/XiaoMi/ha_xiaomi_home/pull/1255)
- Do not subscribe BLE device online/offline state message. [#1264](https://github.com/XiaoMi/ha_xiaomi_home/pull/1264)
### Fixed
- Keep the first element of the discovered ip address list as the recently added address when getting mdns result. [#1250](https://github.com/XiaoMi/ha_xiaomi_home/pull/1250)
- Subscribe local topics every time when connected to the central hub gateway. [#1266](https://github.com/XiaoMi/ha_xiaomi_home/pull/1266)
- Record the "closing" and "closed" status that occur frequently in the motor-controller, the window-opener and the curtain service. [#1262](https://github.com/XiaoMi/ha_xiaomi_home/pull/1262)
- Fix xiaomi.aircondition.c24 total power consumption unit, adp.motor.adswb4 motor switch, cgllc.airm.cgd1st environment temperature, and shhf.light.sflt11 fan switch status. [#1256](https://github.com/XiaoMi/ha_xiaomi_home/pull/1256)
## v0.3.4 ## v0.3.4
### Added ### Added
- Exclude the unsupported device models. [#1205](https://github.com/XiaoMi/ha_xiaomi_home/pull/1205) - Exclude the unsupported device models. [#1205](https://github.com/XiaoMi/ha_xiaomi_home/pull/1205)

View File

@ -83,9 +83,9 @@ Xiaomi Home Integration and the affiliated cloud interface is provided by Xiaomi
## FAQ ## FAQ
- Does Xiaomi Home Integration support all Xiaomi smart devices? - Does Xiaomi Home Integration support all Xiaomi Home devices?
Xiaomi Home Integration currently supports most categories of the smart device. Only a few categories are not supported. They are Bluetooth device, infrared device and virtual device. Xiaomi Home Integration currently supports most categories of Home device. Only a few categories are not supported. They are Bluetooth device, infrared device and virtual device.
- Does Xiaomi Home Integration support multiple Xiaomi accounts? - Does Xiaomi Home Integration support multiple Xiaomi accounts?
@ -93,7 +93,7 @@ Xiaomi Home Integration and the affiliated cloud interface is provided by Xiaomi
- Does Xiaomi Home Integration support local control? - Does Xiaomi Home Integration support local control?
Local control is implemented by [Xiaomi Central Hub Gateway](https://www.mi.com/shop/buy/detail?product_id=15755&cfrom=search) (firmware version 3.3.0_0023 and above) or Xiaomi smart devices with built-in central hub gateway (software version 0.8.9 and above) inside. If you do not have a Xiaomi central hub gateway or other devices having central hub gateway function, all control commands are sent through Xiaomi Cloud. The firmware for Xiaomi central hub gateway including the built-in central hub gateway supporting Home Assistant local control feature has not been released yet. Please refer to MIoT team's notification for upgrade plans. Local control is implemented by [Xiaomi Central Hub Gateway](https://www.mi.com/shop/buy/detail?product_id=15755&cfrom=search) (firmware version 3.4.0_0000 above) or Xiaomi home devices with built-in central hub gateway (software version 0.8.0 above) inside. If you do not have a Xiaomi central hub gateway or other devices having central hub gateway function, all control commands are sent through Xiaomi Cloud. The firmware for Xiaomi central hub gateway including the built-in central hub gateway supporting Home Assistant local control feature has not been released yet. Please refer to MIoT team's notification for upgrade plans.
Xiaomi central hub gateway is only available in mainland China. In other regions, it is not available. Xiaomi central hub gateway is only available in mainland China. In other regions, it is not available.
@ -293,7 +293,7 @@ The value of the event instance name indicates `_attr_device_class` of the Home
`spec_filter.yaml` is used to filter out the MIoT-Spec-V2 instance that will not be converted to Home Assistant entity. `spec_filter.yaml` is used to filter out the MIoT-Spec-V2 instance that will not be converted to Home Assistant entity.
The format of `spec_filter.yaml` is as follows. The format of `spec_filter.json` is as follows.
```yaml ```yaml
<MIoT-Spec-V2 device instance urn without the version field>: <MIoT-Spec-V2 device instance urn without the version field>:

View File

@ -75,9 +75,6 @@ from .miot.const import (
DEFAULT_CLOUD_SERVER, DEFAULT_CLOUD_SERVER,
DEFAULT_CTRL_MODE, DEFAULT_CTRL_MODE,
DEFAULT_INTEGRATION_LANGUAGE, DEFAULT_INTEGRATION_LANGUAGE,
DEFAULT_COVER_CLOSED_POSITION,
MIN_COVER_CLOSED_POSITION,
MAX_COVER_CLOSED_POSITION,
DEFAULT_NICK_NAME, DEFAULT_NICK_NAME,
DEFAULT_OAUTH2_API_HOST, DEFAULT_OAUTH2_API_HOST,
DOMAIN, DOMAIN,
@ -132,7 +129,6 @@ class XiaomiMihomeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
_cloud_server: str _cloud_server: str
_integration_language: str _integration_language: str
_cover_closed_position: int
_auth_info: dict _auth_info: dict
_nick_name: str _nick_name: str
_home_selected: dict _home_selected: dict
@ -155,7 +151,6 @@ class XiaomiMihomeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
self._main_loop = asyncio.get_running_loop() self._main_loop = asyncio.get_running_loop()
self._cloud_server = DEFAULT_CLOUD_SERVER self._cloud_server = DEFAULT_CLOUD_SERVER
self._integration_language = DEFAULT_INTEGRATION_LANGUAGE self._integration_language = DEFAULT_INTEGRATION_LANGUAGE
self._cover_closed_position = DEFAULT_COVER_CLOSED_POSITION
self._storage_path = '' self._storage_path = ''
self._virtual_did = '' self._virtual_did = ''
self._uid = '' self._uid = ''
@ -956,7 +951,6 @@ class XiaomiMihomeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
'action_debug': self._action_debug, 'action_debug': self._action_debug,
'hide_non_standard_entities': 'hide_non_standard_entities':
self._hide_non_standard_entities, self._hide_non_standard_entities,
'cover_closed_position': self._cover_closed_position,
'display_binary_mode': self._display_binary_mode, 'display_binary_mode': self._display_binary_mode,
'display_devices_changed_notify': 'display_devices_changed_notify':
self._display_devices_changed_notify self._display_devices_changed_notify
@ -1001,7 +995,6 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
_hide_non_standard_entities: bool _hide_non_standard_entities: bool
_display_binary_mode: list[str] _display_binary_mode: list[str]
_display_devs_notify: list[str] _display_devs_notify: list[str]
_cover_closed_position: int
_oauth_redirect_url_full: str _oauth_redirect_url_full: str
_auth_info: dict _auth_info: dict
@ -1022,7 +1015,6 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
_opt_lan_ctrl_cfg: bool _opt_lan_ctrl_cfg: bool
_opt_network_detect_cfg: bool _opt_network_detect_cfg: bool
_opt_check_network_deps: bool _opt_check_network_deps: bool
_cover_pos_new: int
_trans_rules_count: int _trans_rules_count: int
_trans_rules_count_success: int _trans_rules_count_success: int
@ -1051,8 +1043,6 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
self._ctrl_mode = self._entry_data.get('ctrl_mode', DEFAULT_CTRL_MODE) self._ctrl_mode = self._entry_data.get('ctrl_mode', DEFAULT_CTRL_MODE)
self._integration_language = self._entry_data.get( self._integration_language = self._entry_data.get(
'integration_language', DEFAULT_INTEGRATION_LANGUAGE) 'integration_language', DEFAULT_INTEGRATION_LANGUAGE)
self._cover_closed_position = self._entry_data.get(
'cover_closed_position', DEFAULT_COVER_CLOSED_POSITION)
self._nick_name = self._entry_data.get('nick_name', DEFAULT_NICK_NAME) self._nick_name = self._entry_data.get('nick_name', DEFAULT_NICK_NAME)
self._action_debug = self._entry_data.get('action_debug', False) self._action_debug = self._entry_data.get('action_debug', False)
self._hide_non_standard_entities = self._entry_data.get( self._hide_non_standard_entities = self._entry_data.get(
@ -1078,7 +1068,6 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
self._action_debug_new = False self._action_debug_new = False
self._hide_non_standard_entities_new = False self._hide_non_standard_entities_new = False
self._display_binary_mode_new = [] self._display_binary_mode_new = []
self._cover_pos_new = self._cover_closed_position
self._update_user_info = False self._update_user_info = False
self._update_devices = False self._update_devices = False
self._update_trans_rules = False self._update_trans_rules = False
@ -1351,12 +1340,6 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
): cv.multi_select( ): cv.multi_select(
self._miot_i18n.translate( self._miot_i18n.translate(
'config.binary_mode')), # type: ignore 'config.binary_mode')), # type: ignore
vol.Optional(
'cover_closed_position',
default=self._cover_closed_position # type: ignore
): vol.All(vol.Coerce(int), vol.Range(
min=MIN_COVER_CLOSED_POSITION,
max=MAX_COVER_CLOSED_POSITION)),
vol.Required( vol.Required(
'update_trans_rules', 'update_trans_rules',
default=self._update_trans_rules # type: ignore default=self._update_trans_rules # type: ignore
@ -1395,8 +1378,6 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
'update_lan_ctrl_config', self._opt_lan_ctrl_cfg) 'update_lan_ctrl_config', self._opt_lan_ctrl_cfg)
self._opt_network_detect_cfg = user_input.get( self._opt_network_detect_cfg = user_input.get(
'network_detect_config', self._opt_network_detect_cfg) 'network_detect_config', self._opt_network_detect_cfg)
self._cover_pos_new = user_input.get(
'cover_closed_position', self._cover_closed_position)
return await self.async_step_update_user_info() return await self.async_step_update_user_info()
@ -1945,7 +1926,6 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
'nick_name': self._nick_name, 'nick_name': self._nick_name,
'lang_new': INTEGRATION_LANGUAGES[self._lang_new], 'lang_new': INTEGRATION_LANGUAGES[self._lang_new],
'nick_name_new': self._nick_name_new, 'nick_name_new': self._nick_name_new,
'cover_pos_new': self._cover_pos_new,
'devices_add': len(self._devices_add), 'devices_add': len(self._devices_add),
'devices_remove': len(self._devices_remove), 'devices_remove': len(self._devices_remove),
'trans_rules_count': self._trans_rules_count, 'trans_rules_count': self._trans_rules_count,
@ -1972,9 +1952,6 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
if self._lang_new != self._integration_language: if self._lang_new != self._integration_language:
self._entry_data['integration_language'] = self._lang_new self._entry_data['integration_language'] = self._lang_new
self._need_reload = True self._need_reload = True
if self._cover_pos_new != self._cover_closed_position:
self._entry_data['cover_closed_position'] = self._cover_pos_new
self._need_reload = True
if self._update_user_info: if self._update_user_info:
self._entry_data['nick_name'] = self._nick_name_new self._entry_data['nick_name'] = self._nick_name_new
if self._update_devices: if self._update_devices:

View File

@ -91,7 +91,6 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry,
class Cover(MIoTServiceEntity, CoverEntity): class Cover(MIoTServiceEntity, CoverEntity):
"""Cover entities for Xiaomi Home.""" """Cover entities for Xiaomi Home."""
# pylint: disable=unused-argument # pylint: disable=unused-argument
_cover_closed_position: int
_prop_motor_control: Optional[MIoTSpecProperty] _prop_motor_control: Optional[MIoTSpecProperty]
_prop_motor_value_open: Optional[int] _prop_motor_value_open: Optional[int]
_prop_motor_value_close: Optional[int] _prop_motor_value_close: Optional[int]
@ -116,9 +115,6 @@ class Cover(MIoTServiceEntity, CoverEntity):
self._attr_supported_color_modes = set() self._attr_supported_color_modes = set()
self._attr_supported_features = CoverEntityFeature(0) self._attr_supported_features = CoverEntityFeature(0)
self._cover_closed_position = (
miot_device.miot_client.cover_closed_position)
self._prop_motor_control = None self._prop_motor_control = None
self._prop_motor_value_open = None self._prop_motor_value_open = None
self._prop_motor_value_close = None self._prop_motor_value_close = None
@ -170,13 +166,12 @@ class Cover(MIoTServiceEntity, CoverEntity):
self._prop_status_opening.append(item.value) self._prop_status_opening.append(item.value)
elif item_name in { elif item_name in {
'closing', 'close', 'down', 'dowm', 'falling', 'closing', 'close', 'down', 'dowm', 'falling',
'fallin', 'dropping', 'downing', 'lower' 'dropping', 'downing', 'lower'
}: }:
self._prop_status_closing.append(item.value) self._prop_status_closing.append(item.value)
elif item_name in { elif item_name in {
'closed', 'closeover', 'stopatlowest', 'stopatlowest', 'stoplowerlimit', 'lowerlimitstop',
'stoplowerlimit', 'lowerlimitstop', 'floor', 'floor', 'lowerlimit'
'lowerlimit'
}: }:
self._prop_status_closed.append(item.value) self._prop_status_closed.append(item.value)
self._prop_status = prop self._prop_status = prop
@ -302,7 +297,7 @@ class Cover(MIoTServiceEntity, CoverEntity):
def is_closed(self) -> Optional[bool]: def is_closed(self) -> Optional[bool]:
"""Return if the cover is closed.""" """Return if the cover is closed."""
if self.current_cover_position is not None: if self.current_cover_position is not None:
return self.current_cover_position <= self._cover_closed_position return self.current_cover_position == 0
# The current position is prior to the status when determining # The current position is prior to the status when determining
# whether the cover is closed. # whether the cover is closed.
if self._prop_status and self._prop_status_closed: if self._prop_status and self._prop_status_closed:

View File

@ -260,7 +260,8 @@ class Light(MIoTServiceEntity, LightEntity):
device_id = list( device_id = list(
self.miot_device.device_info.get("identifiers"))[0][1] self.miot_device.device_info.get("identifiers"))[0][1]
self._command_send_mode_entity_id = entity_registry.async_get_entity_id( self._command_send_mode_entity_id = entity_registry.async_get_entity_id(
"select", DOMAIN, f"select.light_{device_id}_command_send_mode") "select", DOMAIN,
f"{DOMAIN}.light_{device_id}_command_send_mode")
if self._command_send_mode_entity_id is None: if self._command_send_mode_entity_id is None:
_LOGGER.error( _LOGGER.error(
"light command_send_mode not found, %s", "light command_send_mode not found, %s",
@ -269,12 +270,6 @@ class Light(MIoTServiceEntity, LightEntity):
return return
command_send_mode = self.hass.states.get( command_send_mode = self.hass.states.get(
self._command_send_mode_entity_id) self._command_send_mode_entity_id)
send_brightness_first = False
if ATTR_BRIGHTNESS in kwargs:
brightness_new = kwargs[ATTR_BRIGHTNESS]
brightness_old = self.brightness
if brightness_old and brightness_new <= brightness_old:
send_brightness_first = True
if command_send_mode and command_send_mode.state == "Send Together": if command_send_mode and command_send_mode.state == "Send Together":
set_properties_list: List[Dict[str, Any]] = [] set_properties_list: List[Dict[str, Any]] = []
# mode # mode
@ -286,14 +281,6 @@ class Light(MIoTServiceEntity, LightEntity):
self.get_map_key(map_=self._mode_map, self.get_map_key(map_=self._mode_map,
value=kwargs[ATTR_EFFECT]), value=kwargs[ATTR_EFFECT]),
}) })
# brightness
if send_brightness_first and ATTR_BRIGHTNESS in kwargs:
brightness = brightness_to_value(self._brightness_scale,
kwargs[ATTR_BRIGHTNESS])
set_properties_list.append({
"prop": self._prop_brightness,
"value": brightness
})
# color-temperature # color-temperature
if ATTR_COLOR_TEMP_KELVIN in kwargs: if ATTR_COLOR_TEMP_KELVIN in kwargs:
set_properties_list.append({ set_properties_list.append({
@ -313,7 +300,7 @@ class Light(MIoTServiceEntity, LightEntity):
}) })
self._attr_color_mode = ColorMode.RGB self._attr_color_mode = ColorMode.RGB
# brightness # brightness
if not send_brightness_first and ATTR_BRIGHTNESS in kwargs: if ATTR_BRIGHTNESS in kwargs:
brightness = brightness_to_value(self._brightness_scale, brightness = brightness_to_value(self._brightness_scale,
kwargs[ATTR_BRIGHTNESS]) kwargs[ATTR_BRIGHTNESS])
set_properties_list.append({ set_properties_list.append({
@ -346,14 +333,6 @@ class Light(MIoTServiceEntity, LightEntity):
self.get_map_key(map_=self._mode_map, self.get_map_key(map_=self._mode_map,
value=kwargs[ATTR_EFFECT]), value=kwargs[ATTR_EFFECT]),
}) })
# brightness
if send_brightness_first and ATTR_BRIGHTNESS in kwargs:
brightness = brightness_to_value(self._brightness_scale,
kwargs[ATTR_BRIGHTNESS])
set_properties_list.append({
"prop": self._prop_brightness,
"value": brightness
})
# color-temperature # color-temperature
if ATTR_COLOR_TEMP_KELVIN in kwargs: if ATTR_COLOR_TEMP_KELVIN in kwargs:
set_properties_list.append({ set_properties_list.append({
@ -373,7 +352,7 @@ class Light(MIoTServiceEntity, LightEntity):
}) })
self._attr_color_mode = ColorMode.RGB self._attr_color_mode = ColorMode.RGB
# brightness # brightness
if not send_brightness_first and ATTR_BRIGHTNESS in kwargs: if ATTR_BRIGHTNESS in kwargs:
brightness = brightness_to_value(self._brightness_scale, brightness = brightness_to_value(self._brightness_scale,
kwargs[ATTR_BRIGHTNESS]) kwargs[ATTR_BRIGHTNESS])
set_properties_list.append({ set_properties_list.append({

View File

@ -25,7 +25,7 @@
"cryptography", "cryptography",
"psutil" "psutil"
], ],
"version": "v0.4.0", "version": "v0.3.4",
"zeroconf": [ "zeroconf": [
"_miot-central._tcp.local." "_miot-central._tcp.local."
] ]

View File

@ -120,10 +120,6 @@ INTEGRATION_LANGUAGES = {
'zh-Hant': '繁體中文' 'zh-Hant': '繁體中文'
} }
DEFAULT_COVER_CLOSED_POSITION: int = 0
MIN_COVER_CLOSED_POSITION: int = 0
MAX_COVER_CLOSED_POSITION: int = 5
DEFAULT_CTRL_MODE: str = 'auto' DEFAULT_CTRL_MODE: str = 'auto'
# Registered in Xiaomi OAuth 2.0 Service # Registered in Xiaomi OAuth 2.0 Service

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} Geräte offline:** \n{message}", "device_list_offline": "\n**{count} Geräte offline:** \n{message}",
"network_status_online": "Online", "network_status_online": "Online",
"network_status_offline": "Offline", "network_status_offline": "Offline",
"central_state_changed_title": "Verbindungsstatus des Zentral-Gateways",
"central_state_changed": "**{nick_name}({uid}, {cloud_server})** Lokale Verbindungsstrecke des Zentral-Gateways: {conn_status}",
"central_state_connected": "verbunden",
"central_state_disconnected": "getrennt",
"device_exec_error": "Fehler bei der Ausführung" "device_exec_error": "Fehler bei der Ausführung"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} devices offline:** \n{message}", "device_list_offline": "\n**{count} devices offline:** \n{message}",
"network_status_online": "Online", "network_status_online": "Online",
"network_status_offline": "Offline", "network_status_offline": "Offline",
"central_state_changed_title": "Central Hub Gateway Connection Status",
"central_state_changed":"**{nick_name}({uid}, {cloud_server})** local connection to Xiaomi central hub gateway: {conn_status}",
"central_state_connected": "Connected",
"central_state_disconnected": "Disconnected",
"device_exec_error": "Execution error" "device_exec_error": "Execution error"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} dispositivos sin conexión:** \n{message}", "device_list_offline": "\n**{count} dispositivos sin conexión:** \n{message}",
"network_status_online": "En línea", "network_status_online": "En línea",
"network_status_offline": "Desconectado", "network_status_offline": "Desconectado",
"central_state_changed_title": "Estado de conexión de la puerta de enlace central",
"central_state_changed": "**{nick_name}({uid}, {cloud_server})** enlace de conexión local de la puerta de enlace central: {conn_status}",
"central_state_connected": "conectado",
"central_state_disconnected": "desconectado",
"device_exec_error": "Error de ejecución" "device_exec_error": "Error de ejecución"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} appareils hors ligne :** \n{message}", "device_list_offline": "\n**{count} appareils hors ligne :** \n{message}",
"network_status_online": "En ligne", "network_status_online": "En ligne",
"network_status_offline": "Hors ligne", "network_status_offline": "Hors ligne",
"central_state_changed_title": "État de connexion de la passerelle centrale",
"central_state_changed": "**{nick_name}({uid}, {cloud_server})** liaison de connexion locale de la passerelle centrale : {conn_status}",
"central_state_connected": "connecté",
"central_state_disconnected": "déconnecté",
"device_exec_error": "Erreur d'exécution" "device_exec_error": "Erreur d'exécution"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} dispositivi offline:** \n{message}", "device_list_offline": "\n**{count} dispositivi offline:** \n{message}",
"network_status_online": "Online", "network_status_online": "Online",
"network_status_offline": "Offline", "network_status_offline": "Offline",
"central_state_changed_title": "Stato di connessione del gateway centrale",
"central_state_changed": "**{nick_name}({uid}, {cloud_server})** collegamento locale del gateway centrale: {conn_status}",
"central_state_connected": "connesso",
"central_state_disconnected": "disconnesso",
"device_exec_error": "Errore di esecuzione" "device_exec_error": "Errore di esecuzione"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} デバイスがオフライン:** \n{message}", "device_list_offline": "\n**{count} デバイスがオフライン:** \n{message}",
"network_status_online": "オンライン", "network_status_online": "オンライン",
"network_status_offline": "オフライン", "network_status_offline": "オフライン",
"central_state_changed_title": "中枢ゲートウェイ接続ステータス",
"central_state_changed": "**{nick_name}({uid}, {cloud_server})** 中枢ゲートウェイのローカル接続リンク: {conn_status}",
"central_state_connected": "接続済み",
"central_state_disconnected": "切断されました",
"device_exec_error": "実行エラー" "device_exec_error": "実行エラー"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} apparaten offline:** \n{message}", "device_list_offline": "\n**{count} apparaten offline:** \n{message}",
"network_status_online": "Online", "network_status_online": "Online",
"network_status_offline": "Offline", "network_status_offline": "Offline",
"central_state_changed_title": "Verbindingsstatus van centrale gateway",
"central_state_changed": "**{nick_name}({uid}, {cloud_server})** Lokale verbinding van centrale gateway: {conn_status}",
"central_state_connected": "verbonden",
"central_state_disconnected": "verbinding verbroken",
"device_exec_error": "Uitvoeringsfout" "device_exec_error": "Uitvoeringsfout"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} dispositivos offline**: \n{message}", "device_list_offline": "\n**{count} dispositivos offline**: \n{message}",
"network_status_online": "online", "network_status_online": "online",
"network_status_offline": "offline", "network_status_offline": "offline",
"central_state_changed_title": "Status de conexão do gateway central",
"central_state_changed": "**{nick_name}({uid}, {cloud_server})** conexão local do gateway central: {conn_status}",
"central_state_connected": "conectado",
"central_state_disconnected": "desconectado",
"device_exec_error": "Erro na execução" "device_exec_error": "Erro na execução"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} dispositivos offline**: \n{message}", "device_list_offline": "\n**{count} dispositivos offline**: \n{message}",
"network_status_online": "Online", "network_status_online": "Online",
"network_status_offline": "Offline", "network_status_offline": "Offline",
"central_state_changed_title": "Estado da ligação do gateway central",
"central_state_changed": "**{nick_name}({uid}, {cloud_server})** ligação local do gateway central: {conn_status}",
"central_state_connected": "ligado",
"central_state_disconnected": "desligado",
"device_exec_error": "Erro de execução" "device_exec_error": "Erro de execução"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} устройств недоступно:** \n{message}", "device_list_offline": "\n**{count} устройств недоступно:** \n{message}",
"network_status_online": "В сети", "network_status_online": "В сети",
"network_status_offline": "Не в сети", "network_status_offline": "Не в сети",
"central_state_changed_title": "Статус подключения центрального шлюза",
"central_state_changed": "**{nick_name}({uid}, {cloud_server})** локальное подключение центрального шлюза: {conn_status}",
"central_state_connected": "подключено",
"central_state_disconnected": "разъединено",
"device_exec_error": "Ошибка выполнения" "device_exec_error": "Ошибка выполнения"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} 个设备离线**: \n{message}", "device_list_offline": "\n**{count} 个设备离线**: \n{message}",
"network_status_online": "在线", "network_status_online": "在线",
"network_status_offline": "离线", "network_status_offline": "离线",
"central_state_changed_title": "中枢网关连接状态",
"central_state_changed":"**{nick_name}({uid}, {cloud_server})** 中枢网关本地连接链路: {conn_status}",
"central_state_connected": "已连接",
"central_state_disconnected": "断连",
"device_exec_error": "执行错误" "device_exec_error": "执行错误"
} }
}, },

View File

@ -99,10 +99,6 @@
"device_list_offline": "\n**{count} 個設備離線:** \n{message}", "device_list_offline": "\n**{count} 個設備離線:** \n{message}",
"network_status_online": "在線", "network_status_online": "在線",
"network_status_offline": "離線", "network_status_offline": "離線",
"central_state_changed_title": "中枢網關連接狀態",
"central_state_changed":"**{nick_name}({uid}, {cloud_server})** 中枢網關本地連接鏈路: {conn_status}",
"central_state_connected": "已連接",
"central_state_disconnected": "断連",
"device_exec_error": "執行錯誤" "device_exec_error": "執行錯誤"
} }
}, },

View File

@ -61,10 +61,16 @@ from homeassistant.components import zeroconf
# pylint: disable=relative-beyond-top-level # pylint: disable=relative-beyond-top-level
from .common import MIoTMatcher, slugify_did from .common import MIoTMatcher, slugify_did
from .const import (DEFAULT_CTRL_MODE, DEFAULT_INTEGRATION_LANGUAGE, from .const import (
DEFAULT_NICK_NAME, DOMAIN, MIHOME_CERT_EXPIRE_MARGIN, DEFAULT_CTRL_MODE,
NETWORK_REFRESH_INTERVAL, OAUTH2_CLIENT_ID, DEFAULT_INTEGRATION_LANGUAGE,
SUPPORT_CENTRAL_GATEWAY_CTRL, DEFAULT_COVER_CLOSED_POSITION) DEFAULT_NICK_NAME,
DOMAIN,
MIHOME_CERT_EXPIRE_MARGIN,
NETWORK_REFRESH_INTERVAL,
OAUTH2_CLIENT_ID,
SUPPORT_CENTRAL_GATEWAY_CTRL,
)
from .miot_cloud import MIoTHttpClient, MIoTOauthClient from .miot_cloud import MIoTHttpClient, MIoTOauthClient
from .miot_error import MIoTClientError, MIoTErrorCode from .miot_error import MIoTClientError, MIoTErrorCode
from .miot_mips import ( from .miot_mips import (
@ -496,11 +502,6 @@ class MIoTClient:
def display_binary_bool(self) -> bool: def display_binary_bool(self) -> bool:
return self._display_binary_bool return self._display_binary_bool
@property
def cover_closed_position(self) -> int:
return self._entry_data.get('cover_closed_position',
DEFAULT_COVER_CLOSED_POSITION)
@display_devices_changed_notify.setter @display_devices_changed_notify.setter
def display_devices_changed_notify(self, value: list[str]) -> None: def display_devices_changed_notify(self, value: list[str]) -> None:
if set(value) == set(self._display_devs_notify): if set(value) == set(self._display_devs_notify):
@ -1093,8 +1094,8 @@ class MIoTClient:
from_new = "lan" from_new = "lan"
if (from_new is None and did in self._device_list_cloud and if (from_new is None and did in self._device_list_cloud and
self._device_list_cloud[did].get('online', False)): self._device_list_cloud[did].get("online", False)):
from_new = 'cloud' from_new = "cloud"
if from_new == from_old: if from_new == from_old:
# No need to update # No need to update
return return
@ -1211,7 +1212,7 @@ class MIoTClient:
_LOGGER.info("local mips state changed, %s, %s", group_id, state) _LOGGER.info("local mips state changed, %s, %s", group_id, state)
mips = self._mips_local.get(group_id, None) mips = self._mips_local.get(group_id, None)
if not mips: if not mips:
_LOGGER.error('local mips state changed, mips not exist, %s', _LOGGER.error("local mips state changed, mips not exist, %s",
group_id) group_id)
return return
if state: if state:
@ -1247,7 +1248,6 @@ class MIoTClient:
if sub and sub.handler: if sub and sub.handler:
sub.handler(did, MIoTDeviceState.OFFLINE, sub.handler_ctx) sub.handler(did, MIoTDeviceState.OFFLINE, sub.handler_ctx)
self.__request_show_devices_changed_notify() self.__request_show_devices_changed_notify()
self.__show_central_state_changed_notify(state)
@final @final
async def __on_miot_lan_state_change(self, state: bool) -> None: async def __on_miot_lan_state_change(self, state: bool) -> None:
@ -1606,7 +1606,7 @@ class MIoTClient:
if did not in filter_dids: if did not in filter_dids:
continue continue
device_old = self._device_list_gateway.get(did, None) device_old = self._device_list_gateway.get(did, None)
gw_state_old = device_old.get('online', gw_state_old = device_old.get("online",
False) if device_old else False False) if device_old else False
gw_state_new: bool = False gw_state_new: bool = False
device_new = gw_list.pop(did, None) device_new = gw_list.pop(did, None)
@ -1621,7 +1621,7 @@ class MIoTClient:
if device_old: if device_old:
device_old["online"] = False device_old["online"] = False
# Update cache group_id # Update cache group_id
info['group_id'] = group_id info["group_id"] = group_id
if gw_state_old == gw_state_new: if gw_state_old == gw_state_new:
continue continue
self.__update_device_msg_sub(did=did) self.__update_device_msg_sub(did=did)
@ -2065,28 +2065,6 @@ class MIoTClient:
self._show_devices_changed_notify_timer = self._main_loop.call_later( self._show_devices_changed_notify_timer = self._main_loop.call_later(
delay_sec, self.__show_devices_changed_notify) delay_sec, self.__show_devices_changed_notify)
@final
def __show_central_state_changed_notify(self, connected: bool) -> None:
conn_status: str = (
self._i18n.translate('miot.client.central_state_connected')
if connected else
self._i18n.translate('miot.client.central_state_disconnected'))
self._persistence_notify(
self.__gen_notify_key('central_state_changed'),
self._i18n.translate('miot.client.central_state_changed_title'),
self._i18n.translate(key='miot.client.central_state_changed',
replace={
'nick_name':
self._entry_data.get(
'nick_name', DEFAULT_NICK_NAME),
'uid':
self._uid,
'cloud_server':
self._cloud_server,
'conn_status':
conn_status
}))
@staticmethod @staticmethod
async def get_miot_instance_async( async def get_miot_instance_async(

View File

@ -542,12 +542,7 @@ class MIoTHttpClient:
self, self,
dids: list[str], dids: list[str],
start_did: Optional[str] = None) -> dict[str, dict]: start_did: Optional[str] = None) -> dict[str, dict]:
req_data: dict = { req_data: dict = {"limit": 200, "get_split_device": True, "dids": dids}
'limit': 200,
'get_split_device': True,
'get_third_device': True,
'dids': dids
}
if start_did: if start_did:
req_data["start_did"] = start_did req_data["start_did"] = start_did
device_infos: dict = {} device_infos: dict = {}

View File

@ -110,6 +110,7 @@ class MipsServiceData:
version=IPVersion.V4Only) version=IPVersion.V4Only)
if not self.addresses: if not self.addresses:
raise MipsServiceError('invalid addresses') raise MipsServiceError('invalid addresses')
self.addresses.sort()
if not service_info.port: if not service_info.port:
raise MipsServiceError('invalid port') raise MipsServiceError('invalid port')
self.port = service_info.port self.port = service_info.port
@ -225,7 +226,7 @@ class MipsService:
state_change: ServiceStateChange state_change: ServiceStateChange
) -> None: ) -> None:
_LOGGER.debug( _LOGGER.debug(
'mdns discovery changed, %s, %s, %s', 'mips service state changed, %s, %s, %s',
state_change, name, service_type) state_change, name, service_type)
if state_change is ServiceStateChange.Removed: if state_change is ServiceStateChange.Removed:

View File

@ -1014,13 +1014,12 @@ class MipsCloudClient(_MipsClient):
if handler: if handler:
self.log_debug("cloud, device state changed, %s", payload) self.log_debug("cloud, device state changed, %s", payload)
handler( handler(
did, MIoTDeviceState.ONLINE if msg['event'] == 'online' else did,
MIoTDeviceState.OFFLINE, ctx) MIoTDeviceState.ONLINE
if msg["event"] == "online" else MIoTDeviceState.OFFLINE,
ctx,
)
if did.startswith('blt.'):
# MIoT cloud may not publish BLE device online/offline state message.
# Do not subscribe BLE device online/offline state.
return True
return self.__reg_broadcast_external(topic=topic, return self.__reg_broadcast_external(topic=topic,
handler=on_state_msg, handler=on_state_msg,
handler_ctx=handler_ctx) handler_ctx=handler_ctx)

View File

@ -203,26 +203,6 @@
] ]
} }
], ],
"urn:miot-spec-v2:device:water-heater:0000A02A:viomi-m1:2": [
{
"iid": 2,
"type": "urn:miot-spec-v2:service:switch:0000780C:viomi-m1:1",
"description": "Water Heater",
"properties": [
{
"iid": 6,
"type": "urn:miot-spec-v2:property:on:00000006:viomi-m1:1",
"description": "Switch Status",
"format": "bool",
"access": [
"read",
"write",
"notify"
]
}
]
}
],
"urn:miot-spec-v2:device:water-heater:0000A02A:xiaomi-yms2:1": [ "urn:miot-spec-v2:device:water-heater:0000A02A:xiaomi-yms2:1": [
{ {
"iid": 2, "iid": 2,

View File

@ -6,8 +6,6 @@ urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c20:1:
unit: none unit: none
urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c20:2: urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c20:1 urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c20:2: urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c20:1
urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c24:1: urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c24:1:
prop.8.6:
unit: kWh
prop.10.6: prop.10.6:
unit: none unit: none
urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c24:2: urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c24:1 urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c24:2: urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-c24:1
@ -28,12 +26,6 @@ urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-mt0:1:
prop.10.6: prop.10.6:
unit: none unit: none
urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-mt0:2: urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-mt0:1 urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-mt0:2: urn:miot-spec-v2:device:air-conditioner:0000A004:xiaomi-mt0:1
urn:miot-spec-v2:device:air-monitor:0000A008:cgllc-cgd1st:1:
prop.3.7:
value-range:
- -30
- 100
- 0.1
urn:miot-spec-v2:device:air-monitor:0000A008:cgllc-s1:1: urn:miot-spec-v2:device:air-monitor:0000A008:cgllc-s1:1:
prop.2.5: prop.2.5:
name: voc-density name: voc-density
@ -161,9 +153,6 @@ urn:miot-spec-v2:device:light:0000A001:shhf-sfla10:1:
urn:miot-spec-v2:device:light:0000A001:shhf-sfla12:1: urn:miot-spec-v2:device:light:0000A001:shhf-sfla12:1:
prop.8.11: prop.8.11:
name: on-a name: on-a
urn:miot-spec-v2:device:light:0000A001:shhf-sflt11:1:0000C802:
prop.11.14:
name: on-power
urn:miot-spec-v2:device:magnet-sensor:0000A016:linp-m1:1: urn:miot-spec-v2:device:magnet-sensor:0000A016:linp-m1:1:
prop.2.1004: prop.2.1004:
name: contact-state name: contact-state
@ -179,9 +168,6 @@ urn:miot-spec-v2:device:motion-sensor:0000A014:lumi-acn001:1:
- read - read
- notify - notify
unit: mV unit: mV
urn:miot-spec-v2:device:motor-controller:0000A01D:adp-adswb4:1:0000C837:
prop.2.1:
name: motor-switch
urn:miot-spec-v2:device:occupancy-sensor:0000A0BF:ainice-3b:1: urn:miot-spec-v2:device:occupancy-sensor:0000A0BF:ainice-3b:2 urn:miot-spec-v2:device:occupancy-sensor:0000A0BF:ainice-3b:1: urn:miot-spec-v2:device:occupancy-sensor:0000A0BF:ainice-3b:2
urn:miot-spec-v2:device:occupancy-sensor:0000A0BF:ainice-3b:2: urn:miot-spec-v2:device:occupancy-sensor:0000A0BF:ainice-3b:2:
prop.2.8: prop.2.8:

View File

@ -4,7 +4,7 @@
"step": { "step": {
"eula": { "eula": {
"title": "Risikohinweis", "title": "Risikohinweis",
"description": "1. Ihre **Xiaomi-Benutzerinformationen und Geräteinformationen** werden in Ihrem Home Assistant-System gespeichert. **Xiaomi kann die Sicherheit des Home Assistant-Speichermechanismus nicht garantieren**. Sie sind dafür verantwortlich, Ihre Informationen vor Diebstahl zu schützen.\r\n2. Diese Integration wird von der Open-Source-Community unterstützt und gewartet. Es können jedoch Stabilitätsprobleme oder andere Probleme auftreten. Wenn Sie auf ein Problem stoßen, das mit dieser Integration zusammenhängt, sollten Sie **die Open-Source-Community um Hilfe bitten, anstatt sich an den Xiaomi Home Kundendienst zu wenden**.\r\n3. Sie benötigen bestimmte technische Fähigkeiten, um Ihre lokale Laufzeitumgebung zu warten. Diese Integration ist für Anfänger nicht geeignet.\r\n4. Bevor Sie diese Integration verwenden, lesen Sie bitte die **README-Datei sorgfältig durch**.\r\n5. Um eine stabile Nutzung der Integration zu gewährleisten und Missbrauch der Schnittstelle zu verhindern, **darf diese Integration nur in Home Assistant verwendet werden. Weitere Informationen finden Sie in der LICENSE**.", "description": "1. Ihre **Xiaomi-Benutzerinformationen und Geräteinformationen** werden in Ihrem Home Assistant-System gespeichert. **Xiaomi kann die Sicherheit des Home Assistant-Speichermechanismus nicht garantieren**. Sie sind dafür verantwortlich, Ihre Informationen vor Diebstahl zu schützen.\r\n2. Diese Integration wird von der Open-Source-Community unterstützt und gewartet. Es können jedoch Stabilitätsprobleme oder andere Probleme auftreten. Wenn Sie auf ein Problem stoßen, das mit dieser Integration zusammenhängt, sollten Sie **die Open-Source-Community um Hilfe bitten, anstatt sich an den Xiaomi Home Kundendienst zu wenden**.\r\n3. Sie benötigen bestimmte technische Fähigkeiten, um Ihre lokale Laufzeitumgebung zu warten. Diese Integration ist für Anfänger nicht geeignet. \r\n4. Bevor Sie diese Integration verwenden, lesen Sie bitte die **README-Datei sorgfältig durch**.\r\n5. Um eine stabile Nutzung der Integration zu gewährleisten und Missbrauch der Schnittstelle zu verhindern, **darf diese Integration nur in Home Assistant verwendet werden. Weitere Informationen finden Sie in der LICENSE**.",
"data": { "data": {
"eula": "Ich habe das oben genannte Risiko zur Kenntnis genommen und übernehme freiwillig die damit verbundenen Risiken durch die Verwendung der Integration." "eula": "Ich habe das oben genannte Risiko zur Kenntnis genommen und übernehme freiwillig die damit verbundenen Risiken durch die Verwendung der Integration."
} }
@ -124,8 +124,7 @@
"display_devices_changed_notify": "Gerätestatusänderungen anzeigen", "display_devices_changed_notify": "Gerätestatusänderungen anzeigen",
"update_trans_rules": "Entitätskonvertierungsregeln aktualisieren", "update_trans_rules": "Entitätskonvertierungsregeln aktualisieren",
"update_lan_ctrl_config": "LAN-Steuerungskonfiguration aktualisieren", "update_lan_ctrl_config": "LAN-Steuerungskonfiguration aktualisieren",
"network_detect_config": "Integrierte Netzwerkkonfiguration", "network_detect_config": "Integrierte Netzwerkkonfiguration"
"cover_closed_position": "Die Position der geschlossenen Vorhänge"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "Bestätigen Sie die Konfiguration", "title": "Bestätigen Sie die Konfiguration",
"description": "**{nick_name}**, bitte bestätigen Sie die neuesten Konfigurationsinformationen und klicken Sie dann auf \"Senden\". Die Integration wird mit den aktualisierten Konfigurationen erneut geladen.\r\n\r\nIntegrationsprache:\t{lang_new}\r\nBenutzername:\t{nick_name_new}\r\nAction-Debug-Modus:\t{action_debug}\r\nVerstecke Nicht-Standard-Entitäten:\t{hide_non_standard_entities}\r\nDie Position der geschlossenen Vorhänge:\t{cover_pos_new}\r\nGerätestatusänderungen anzeigen:\t{display_devices_changed_notify}\r\nGeräteänderungen:\t{devices_add} neue Geräte hinzufügen, {devices_remove} Geräte entfernen\r\nKonvertierungsregeländerungen:\tInsgesamt {trans_rules_count} Regeln, aktualisiert {trans_rules_count_success} Regeln", "description": "**{nick_name}**, bitte bestätigen Sie die neuesten Konfigurationsinformationen und klicken Sie dann auf \"Senden\". Die Integration wird mit den aktualisierten Konfigurationen erneut geladen.\r\n\r\nIntegrationsprache:\t{lang_new}\r\nBenutzername:\t{nick_name_new}\r\nAction-Debug-Modus:\t{action_debug}\r\nVerstecke Nicht-Standard-Entitäten:\t{hide_non_standard_entities}\r\nGerätestatusänderungen anzeigen:\t{display_devices_changed_notify}\r\nGeräteänderungen:\t{devices_add} neue Geräte hinzufügen, {devices_remove} Geräte entfernen\r\nKonvertierungsregeländerungen:\tInsgesamt {trans_rules_count} Regeln, aktualisiert {trans_rules_count_success} Regeln",
"data": { "data": {
"confirm": "Änderungen bestätigen" "confirm": "Änderungen bestätigen"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "Display device status change notifications", "display_devices_changed_notify": "Display device status change notifications",
"update_trans_rules": "Update entity conversion rules", "update_trans_rules": "Update entity conversion rules",
"update_lan_ctrl_config": "Update LAN control configuration", "update_lan_ctrl_config": "Update LAN control configuration",
"network_detect_config": "Integrated network configuration", "network_detect_config": "Integrated Network Configuration"
"cover_closed_position": "Cover closed position"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "Confirm Configuration", "title": "Confirm Configuration",
"description": "Hello **{nick_name}**, please confirm the latest configuration information and then Click SUBMIT.\r\nThe integration will reload using the updated configuration.\r\n\r\nIntegration Language:\t{lang_new}\r\nNickname:\t{nick_name_new}\r\nDebug mode for action:\t{action_debug}\r\nHide non-standard created entities:\t{hide_non_standard_entities}\r\nCover closed position:\t{cover_pos_new}\r\nDisplay device status change notifications:\t{display_devices_changed_notify}\r\nDevice Changes:\tAdd **{devices_add}** devices, Remove **{devices_remove}** devices\r\nTransformation rules change:\tThere are a total of **{trans_rules_count}** rules, and updated **{trans_rules_count_success}** rules", "description": "Hello **{nick_name}**, please confirm the latest configuration information and then Click SUBMIT.\r\nThe integration will reload using the updated configuration.\r\n\r\nIntegration Language: \t{lang_new}\r\nNickname: \t{nick_name_new}\r\nDebug mode for action: \t{action_debug}\r\nHide non-standard created entities: \t{hide_non_standard_entities}\r\nDisplay device status change notifications:\t{display_devices_changed_notify}\r\nDevice Changes: \tAdd **{devices_add}** devices, Remove **{devices_remove}** devices\r\nTransformation rules change: \tThere are a total of **{trans_rules_count}** rules, and updated **{trans_rules_count_success}** rules",
"data": { "data": {
"confirm": "Confirm the change" "confirm": "Confirm the change"
} }

View File

@ -4,7 +4,7 @@
"step": { "step": {
"eula": { "eula": {
"title": "Aviso de riesgo", "title": "Aviso de riesgo",
"description": "1. Su **información de usuario de Xiaomi e información del dispositivo** se almacenará en su sistema Home Assistant. **Xiaomi no puede garantizar la seguridad del mecanismo de almacenamiento de Home Assistant**. Usted es responsable de evitar que su información sea robada.\r\n2. Esta integración es mantenida por la comunidad de código abierto y puede haber problemas de estabilidad u otros problemas. Cuando tenga problemas relacionados con el uso de esta integración, **busque ayuda en la comunidad de código abierto en lugar de contactar al servicio al cliente de Xiaomi**.\r\n3. Es necesario tener ciertas habilidades técnicas para mantener su entorno de ejecución local, esta integración no es amigable para los usuarios novatos.\r\n4. Antes de utilizar esta integración, por favor **lea detenidamente el archivo README**.\r\n5. Para garantizar el uso estable de la integración y prevenir el abuso de la interfaz, **esta integración solo está permitida en Home Assistant. Para más detalles, consulte la LICENSE**.", "description": "1. Su **información de usuario de Xiaomi e información del dispositivo** se almacenará en su sistema Home Assistant. **Xiaomi no puede garantizar la seguridad del mecanismo de almacenamiento de Home Assistant**. Usted es responsable de evitar que su información sea robada.\r\n2. Esta integración es mantenida por la comunidad de código abierto y puede haber problemas de estabilidad u otros problemas. Cuando tenga problemas relacionados con el uso de esta integración, **busque ayuda en la comunidad de código abierto en lugar de contactar al servicio al cliente de Xiaomi**.\r\n3. Es necesario tener ciertas habilidades técnicas para mantener su entorno de ejecución local, esta integración no es amigable para los usuarios novatos.\r\n4. Antes de utilizar esta integración, por favor **lea detenidamente el archivo README**. \r\n5. Para garantizar el uso estable de la integración y prevenir el abuso de la interfaz, **esta integración solo está permitida en Home Assistant. Para más detalles, consulte la LICENSE**.",
"data": { "data": {
"eula": "He leído y entiendo los riesgos anteriores, y estoy dispuesto a asumir cualquier riesgo relacionado con el uso de esta integración." "eula": "He leído y entiendo los riesgos anteriores, y estoy dispuesto a asumir cualquier riesgo relacionado con el uso de esta integración."
} }
@ -124,8 +124,7 @@
"display_devices_changed_notify": "Mostrar notificaciones de cambio de estado del dispositivo", "display_devices_changed_notify": "Mostrar notificaciones de cambio de estado del dispositivo",
"update_trans_rules": "Actualizar reglas de conversión de entidad", "update_trans_rules": "Actualizar reglas de conversión de entidad",
"update_lan_ctrl_config": "Actualizar configuración de control LAN", "update_lan_ctrl_config": "Actualizar configuración de control LAN",
"network_detect_config": "Configuración de Red Integrada", "network_detect_config": "Configuración de Red Integrada"
"cover_closed_position": "La posición de las cortinas cerradas"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "Confirmar configuración", "title": "Confirmar configuración",
"description": "¡Hola, **{nick_name}**! Por favor, confirme la última información de configuración y haga clic en \"Enviar\" para finalizar la configuración.\r\nLa integración se volverá a cargar con la nueva configuración.\r\n\r\nIdioma de la integración:\t{lang_new}\r\nApodo de usuario:\t{nick_name_new}\r\nModo de depuración de Action:\t{action_debug}\r\nOcultar entidades generadas no estándar:\t{hide_non_standard_entities}\r\nLa posición de las cortinas cerradas:\t{cover_pos_new}\r\nMostrar notificaciones de cambio de estado del dispositivo:\t{display_devices_changed_notify}\r\nCambios de dispositivos:\t{devices_add} dispositivos agregados, {devices_remove} dispositivos eliminados\r\nCambios en las reglas de conversión:\t{trans_rules_count} reglas en total, {trans_rules_count_success} reglas actualizadas", "description": "¡Hola, **{nick_name}**! Por favor, confirme la última información de configuración y haga clic en \"Enviar\" para finalizar la configuración.\r\nLa integración se volverá a cargar con la nueva configuración.\r\n\r\nIdioma de la integración:\t{lang_new}\r\nApodo de usuario:\t{nick_name_new}\r\nModo de depuración de Action:\t{action_debug}\r\nOcultar entidades generadas no estándar:\t{hide_non_standard_entities}\r\nMostrar notificaciones de cambio de estado del dispositivo:\t{display_devices_changed_notify}\r\nCambios de dispositivos:\t{devices_add} dispositivos agregados, {devices_remove} dispositivos eliminados\r\nCambios en las reglas de conversión:\t{trans_rules_count} reglas en total, {trans_rules_count_success} reglas actualizadas",
"data": { "data": {
"confirm": "Confirmar modificación" "confirm": "Confirmar modificación"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "Afficher les notifications de changement d'état de l'appareil", "display_devices_changed_notify": "Afficher les notifications de changement d'état de l'appareil",
"update_trans_rules": "Mettre à jour les règles de conversion d'entités", "update_trans_rules": "Mettre à jour les règles de conversion d'entités",
"update_lan_ctrl_config": "Mettre à jour la configuration de contrôle LAN", "update_lan_ctrl_config": "Mettre à jour la configuration de contrôle LAN",
"network_detect_config": "Configuration Réseau Intégrée", "network_detect_config": "Configuration Réseau Intégrée"
"cover_closed_position": "La position des rideaux fermés"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "Confirmer la configuration", "title": "Confirmer la configuration",
"description": "**{nick_name}** Bonjour ! Veuillez confirmer les dernières informations de configuration et cliquer sur \"Soumettre\".\r\nL'intégration rechargera avec la nouvelle configuration.\r\n\r\nLangue d'intégration : {lang_new}\r\nPseudo utilisateur : {nick_name_new}\r\nMode de débogage d'action : {action_debug}\r\nMasquer les entités générées non standard : {hide_non_standard_entities}\r\nLa position des rideaux fermés:\t{cover_pos_new}\r\nAfficher les notifications de changement d'état de l'appareil:\t{display_devices_changed_notify}\r\nModifications des appareils : Ajouter **{devices_add}** appareils, supprimer **{devices_remove}** appareils\r\nModifications des règles de conversion : **{trans_rules_count}** règles au total, mise à jour de **{trans_rules_count_success}** règles", "description": "**{nick_name}** Bonjour ! Veuillez confirmer les dernières informations de configuration et cliquer sur \"Soumettre\".\r\nL'intégration rechargera avec la nouvelle configuration.\r\n\r\nLangue d'intégration : {lang_new}\r\nPseudo utilisateur : {nick_name_new}\r\nMode de débogage d'action : {action_debug}\r\nMasquer les entités générées non standard : {hide_non_standard_entities}\r\nAfficher les notifications de changement d'état de l'appareil:\t{display_devices_changed_notify}\r\nModifications des appareils : Ajouter **{devices_add}** appareils, supprimer **{devices_remove}** appareils\r\nModifications des règles de conversion : **{trans_rules_count}** règles au total, mise à jour de **{trans_rules_count_success}** règles",
"data": { "data": {
"confirm": "Confirmer la modification" "confirm": "Confirmer la modification"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "Mostra notifiche di cambio stato del dispositivo", "display_devices_changed_notify": "Mostra notifiche di cambio stato del dispositivo",
"update_trans_rules": "Aggiorna le regole di conversione delle entità", "update_trans_rules": "Aggiorna le regole di conversione delle entità",
"update_lan_ctrl_config": "Aggiorna configurazione del controllo LAN", "update_lan_ctrl_config": "Aggiorna configurazione del controllo LAN",
"network_detect_config": "Configurazione di Rete Integrata", "network_detect_config": "Configurazione di Rete Integrata"
"cover_closed_position": "La posizione delle tende chiuse"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "Conferma Configurazione", "title": "Conferma Configurazione",
"description": "Ciao **{nick_name}**, si prega di confermare le informazioni di configurazione più recenti e poi fare clic su INVIA.\r\nL'integrazione verrà ricaricata utilizzando la configurazione aggiornata.\r\n\r\nLingua dell'Integrazione:\t{lang_new}\r\nSoprannome:\t{nick_name_new}\r\nModalità di debug per azione:\t{action_debug}\r\nNascondi entità create non standard:\t{hide_non_standard_entities}\r\nLa posizione delle tende chiuse:\t{cover_pos_new}\r\nMostra notifiche di cambio stato del dispositivo:\t{display_devices_changed_notify}\r\nCambiamenti del Dispositivo:\tAggiungi **{devices_add}** dispositivi, Rimuovi **{devices_remove}** dispositivi\r\nCambiamenti delle regole di trasformazione:\tCi sono un totale di **{trans_rules_count}** regole, e aggiornate **{trans_rules_count_success}** regole", "description": "Ciao **{nick_name}**, si prega di confermare le informazioni di configurazione più recenti e poi fare clic su INVIA.\r\nL'integrazione verrà ricaricata utilizzando la configurazione aggiornata.\r\n\r\nLingua dell'Integrazione: \t{lang_new}\r\nSoprannome: \t{nick_name_new}\r\nModalità di debug per azione: \t{action_debug}\r\nNascondi entità create non standard: \t{hide_non_standard_entities}\r\nMostra notifiche di cambio stato del dispositivo:\t{display_devices_changed_notify}\r\nCambiamenti del Dispositivo: \tAggiungi **{devices_add}** dispositivi, Rimuovi **{devices_remove}** dispositivi\r\nCambiamenti delle regole di trasformazione: \tCi sono un totale di **{trans_rules_count}** regole, e aggiornate **{trans_rules_count_success}** regole",
"data": { "data": {
"confirm": "Conferma la modifica" "confirm": "Conferma la modifica"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "デバイスの状態変化通知を表示", "display_devices_changed_notify": "デバイスの状態変化通知を表示",
"update_trans_rules": "エンティティ変換ルールを更新する", "update_trans_rules": "エンティティ変換ルールを更新する",
"update_lan_ctrl_config": "LAN制御構成を更新する", "update_lan_ctrl_config": "LAN制御構成を更新する",
"network_detect_config": "統合ネットワーク構成", "network_detect_config": "統合ネットワーク構成"
"cover_closed_position": "カーテンを閉じた位置"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "構成を確認する", "title": "構成を確認する",
"description": "**{nick_name}** さん、こんにちは! 最新の構成情報を確認してください。[送信] をクリックして、更新された構成を使用して再度読み込みます。\r\n\r\n統合言語\t{lang_new}\r\nユーザー名\t{nick_name_new}\r\nAction デバッグモード:\t{action_debug}\r\n非標準生成エンティティを非表示にする\t{hide_non_standard_entities}\r\nカーテンを閉じた位置:\t{cover_pos_new}\r\nデバイスの状態変化通知を表示:\t{display_devices_changed_notify}\r\nデバイス変更\t追加 **{devices_add}** 個のデバイス、削除 **{devices_remove}** 個のデバイス\r\n変換ルール変更\t合計 **{trans_rules_count}** 個の規則、更新 **{trans_rules_count_success}** 個の規則", "description": "**{nick_name}** さん、こんにちは! 最新の構成情報を確認してください。[送信] をクリックして、更新された構成を使用して再度読み込みます。\r\n\r\n統合言語\t{lang_new}\r\nユーザー名\t{nick_name_new}\r\nAction デバッグモード:\t{action_debug}\r\n非標準生成エンティティを非表示にする\t{hide_non_standard_entities}\r\nデバイスの状態変化通知を表示:\t{display_devices_changed_notify}\r\nデバイス変更\t追加 **{devices_add}** 個のデバイス、削除 **{devices_remove}** 個のデバイス\r\n変換ルール変更\t合計 **{trans_rules_count}** 個の規則、更新 **{trans_rules_count_success}** 個の規則",
"data": { "data": {
"confirm": "変更を確認する" "confirm": "変更を確認する"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "Apparaatstatuswijzigingen weergeven", "display_devices_changed_notify": "Apparaatstatuswijzigingen weergeven",
"update_trans_rules": "Werk entiteitsconversieregels bij", "update_trans_rules": "Werk entiteitsconversieregels bij",
"update_lan_ctrl_config": "Werk LAN controleconfiguratie bij", "update_lan_ctrl_config": "Werk LAN controleconfiguratie bij",
"network_detect_config": "Geïntegreerde Netwerkconfiguratie", "network_detect_config": "Geïntegreerde Netwerkconfiguratie"
"cover_closed_position": "De positie van de gesloten gordijnen"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "Bevestig Configuratie", "title": "Bevestig Configuratie",
"description": "Hallo **{nick_name}**, bevestig alstublieft de nieuwste configuratie-informatie en klik vervolgens op INDENKEN.\r\nDe integratie zal opnieuw laden met de bijgewerkte configuratie.\r\n\r\nIntegratietaal:\t{lang_new}\r\nBijnaam:\t{nick_name_new}\r\nDebugmodus voor actie:\t{action_debug}\r\nVerberg niet-standaard gemaakte entiteiten:\t{hide_non_standard_entities}\r\nDe positie van de gesloten gordijnen:\t{cover_pos_new}\r\nApparaatstatuswijzigingen weergeven:\t{display_devices_changed_notify}\r\nWijzigingen in apparaten:\tVoeg **{devices_add}** apparaten toe, Verwijder **{devices_remove}** apparaten\r\nWijzigingen in transformateregels:\tEr zijn in totaal **{trans_rules_count}** regels, en **{trans_rules_count_success}** regels zijn bijgewerkt", "description": "Hallo **{nick_name}**, bevestig alstublieft de nieuwste configuratie-informatie en klik vervolgens op INDENKEN.\r\nDe integratie zal opnieuw laden met de bijgewerkte configuratie.\r\n\r\nIntegratietaal: \t{lang_new}\r\nBijnaam: \t{nick_name_new}\r\nDebugmodus voor actie: \t{action_debug}\r\nVerberg niet-standaard gemaakte entiteiten: \t{hide_non_standard_entities}\r\nApparaatstatuswijzigingen weergeven:\t{display_devices_changed_notify}\r\nWijzigingen in apparaten: \tVoeg **{devices_add}** apparaten toe, Verwijder **{devices_remove}** apparaten\r\nWijzigingen in transformateregels: \tEr zijn in totaal **{trans_rules_count}** regels, en **{trans_rules_count_success}** regels zijn bijgewerkt",
"data": { "data": {
"confirm": "Bevestig de wijziging" "confirm": "Bevestig de wijziging"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "Exibir notificações de mudança de status do dispositivo", "display_devices_changed_notify": "Exibir notificações de mudança de status do dispositivo",
"update_trans_rules": "Atualizar regras de conversão de entidades", "update_trans_rules": "Atualizar regras de conversão de entidades",
"update_lan_ctrl_config": "Atualizar configuração de controle LAN", "update_lan_ctrl_config": "Atualizar configuração de controle LAN",
"network_detect_config": "Configuração de Rede Integrada", "network_detect_config": "Configuração de Rede Integrada"
"cover_closed_position": "A posição das cortinas fechadas"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "Confirmar Configuração", "title": "Confirmar Configuração",
"description": "Olá **{nick_name}**, confirme as informações da configuração mais recente e depois clique em ENVIAR.\r\nA integração será recarregada com a configuração atualizada.\r\n\r\nIdioma da Integração:\t{lang_new}\r\nApelido:\t{nick_name_new}\r\nModo de depuração para ação:\t{action_debug}\r\nOcultar entidades não padrão criadas:\t{hide_non_standard_entities}\r\nA posição das cortinas fechadas:\t{cover_pos_new}\r\nExibir notificações de mudança de status do dispositivo:\t{display_devices_changed_notify}\r\nAlterações de Dispositivos:\tAdicionar **{devices_add}** dispositivos, Remover **{devices_remove}** dispositivos\r\nAlteração nas Regras de Transformação:\tUm total de **{trans_rules_count}** regras, e **{trans_rules_count_success}** regras atualizadas", "description": "Olá **{nick_name}**, confirme as informações da configuração mais recente e depois clique em ENVIAR.\r\nA integração será recarregada com a configuração atualizada.\r\n\r\nIdioma da Integração:\t{lang_new}\r\nApelido:\t{nick_name_new}\r\nModo de depuração para ação:\t{action_debug}\r\nOcultar entidades não padrão criadas:\t{hide_non_standard_entities}\r\nExibir notificações de mudança de status do dispositivo:\t{display_devices_changed_notify}\r\nAlterações de Dispositivos:\tAdicionar **{devices_add}** dispositivos, Remover **{devices_remove}** dispositivos\r\nAlteração nas Regras de Transformação:\tUm total de **{trans_rules_count}** regras, e **{trans_rules_count_success}** regras atualizadas",
"data": { "data": {
"confirm": "Confirmar a mudança" "confirm": "Confirmar a mudança"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "Exibir notificações de mudança de status do dispositivo", "display_devices_changed_notify": "Exibir notificações de mudança de status do dispositivo",
"update_trans_rules": "Atualizar regras de conversão de entidades", "update_trans_rules": "Atualizar regras de conversão de entidades",
"update_lan_ctrl_config": "Atualizar configuração de controlo LAN", "update_lan_ctrl_config": "Atualizar configuração de controlo LAN",
"network_detect_config": "Configuração de Rede Integrada", "network_detect_config": "Configuração de Rede Integrada"
"cover_closed_position": "A posição das cortinas fechadas"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "Confirmar Configuração", "title": "Confirmar Configuração",
"description": "Olá **{nick_name}**, confirme a informação da configuração mais recente e depois clique em SUBMETER.\r\nA integração será recarregada com a configuração atualizada.\r\n\r\nIdioma da Integração:\t{lang_new}\r\nAlcunha:\t{nick_name_new}\r\nModo de depuração de ação:\t{action_debug}\r\nOcultar entidades não padrão:\t{hide_non_standard_entities}\r\nA posição das cortinas fechadas:\t{cover_pos_new}\r\nExibir notificações de mudança de status do dispositivo:\t{display_devices_changed_notify}\r\nAlterações aos Dispositivos:\tAdicionar **{devices_add}** dispositivos, Remover **{devices_remove}** dispositivos\r\nAlteração das Regras de Transformação:\tExistem **{trans_rules_count}** regras no total, com **{trans_rules_count_success}** regras atualizadas", "description": "Olá **{nick_name}**, confirme a informação da configuração mais recente e depois clique em SUBMETER.\r\nA integração será recarregada com a configuração atualizada.\r\n\r\nIdioma da Integração:\t{lang_new}\r\nAlcunha:\t{nick_name_new}\r\nModo de depuração de ação:\t{action_debug}\r\nOcultar entidades não padrão:\t{hide_non_standard_entities}\r\nExibir notificações de mudança de status do dispositivo:\t{display_devices_changed_notify}\r\nAlterações aos Dispositivos:\tAdicionar **{devices_add}** dispositivos, Remover **{devices_remove}** dispositivos\r\nAlteração das Regras de Transformação:\tExistem **{trans_rules_count}** regras no total, com **{trans_rules_count_success}** regras atualizadas",
"data": { "data": {
"confirm": "Confirmar a alteração" "confirm": "Confirmar a alteração"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "Отображать уведомления о изменении состояния устройства", "display_devices_changed_notify": "Отображать уведомления о изменении состояния устройства",
"update_trans_rules": "Обновить правила преобразования сущностей", "update_trans_rules": "Обновить правила преобразования сущностей",
"update_lan_ctrl_config": "Обновить конфигурацию управления LAN", "update_lan_ctrl_config": "Обновить конфигурацию управления LAN",
"network_detect_config": "Интегрированная Сетевая Конфигурация", "network_detect_config": "Интегрированная Сетевая Конфигурация"
"cover_closed_position": "Положение закрытых штор"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "Подтверждение настройки", "title": "Подтверждение настройки",
"description": "**{nick_name}** Здравствуйте! Подтвердите последнюю информацию о настройке и нажмите «Отправить». Интеграция будет перезагружена с использованием обновленных настроек.\r\n\r\nЯзык интеграции:\t{lang_new}\r\nИмя пользователя:\t{nick_name_new}\r\nРежим отладки Action:\t{action_debug}\r\nСкрыть непроизводственные сущности:\t{hide_non_standard_entities}\r\nПоложение закрытых штор:\t{cover_pos_new}\r\nОтображать уведомления о изменении состояния устройства:\t{display_devices_changed_notify}\r\nИзменение устройства:\tДобавлено **{devices_add}** устройство, удалено **{devices_remove}** устройства\r\nИзменение правил преобразования:\tВсего **{trans_rules_count}** правил, обновлено **{trans_rules_count_success}** правил", "description": "**{nick_name}** Здравствуйте! Подтвердите последнюю информацию о настройке и нажмите «Отправить». Интеграция будет перезагружена с использованием обновленных настроек.\r\n\r\nЯзык интеграции:\t{lang_new}\r\nИмя пользователя:\t{nick_name_new}\r\nРежим отладки Action:\t{action_debug}\r\nСкрыть непроизводственные сущности:\t{hide_non_standard_entities}\r\nОтображать уведомления о изменении состояния устройства:\t{display_devices_changed_notify}\r\nИзменение устройства:\tДобавлено **{devices_add}** устройство, удалено **{devices_remove}** устройства\r\nИзменение правил преобразования:\tВсего **{trans_rules_count}** правил, обновлено **{trans_rules_count_success}** правил",
"data": { "data": {
"confirm": "Подтвердить изменения" "confirm": "Подтвердить изменения"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "显示设备状态变化通知", "display_devices_changed_notify": "显示设备状态变化通知",
"update_trans_rules": "更新实体转换规则", "update_trans_rules": "更新实体转换规则",
"update_lan_ctrl_config": "更新局域网控制配置", "update_lan_ctrl_config": "更新局域网控制配置",
"network_detect_config": "集成网络配置", "network_detect_config": "集成网络配置"
"cover_closed_position": "窗帘关闭位置"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "确认配置", "title": "确认配置",
"description": "**{nick_name}** 您好!请确认最新的配置信息,然后点击“提交”。\r\n集成将会使用更新后的配置重新载入。\r\n\r\n集成语言\t{lang_new}\r\n用户昵称\t{nick_name_new}\r\nAction 调试模式:\t{action_debug}\r\n隐藏非标准生成实体\t{hide_non_standard_entities}\r\n窗帘关闭位置:\t{cover_pos_new}\r\n显示设备状态变化通知:\t{display_devices_changed_notify}\r\n设备变化\t新增 **{devices_add}** 个设备,移除 **{devices_remove}** 个设备\r\n转换规则变化\t共条 **{trans_rules_count}** 规则,更新 **{trans_rules_count_success}** 条规则", "description": "**{nick_name}** 您好!请确认最新的配置信息,然后点击“提交”。\r\n集成将会使用更新后的配置重新载入。\r\n\r\n集成语言\t{lang_new}\r\n用户昵称\t{nick_name_new}\r\nAction 调试模式:\t{action_debug}\r\n隐藏非标准生成实体\t{hide_non_standard_entities}\r\n显示设备状态变化通知:\t{display_devices_changed_notify}\r\n设备变化\t新增 **{devices_add}** 个设备,移除 **{devices_remove}** 个设备\r\n转换规则变化\t共条 **{trans_rules_count}** 规则,更新 **{trans_rules_count_success}** 条规则",
"data": { "data": {
"confirm": "确认修改" "confirm": "确认修改"
} }

View File

@ -124,8 +124,7 @@
"display_devices_changed_notify": "顯示設備狀態變化通知", "display_devices_changed_notify": "顯示設備狀態變化通知",
"update_trans_rules": "更新實體轉換規則", "update_trans_rules": "更新實體轉換規則",
"update_lan_ctrl_config": "更新局域網控制配置", "update_lan_ctrl_config": "更新局域網控制配置",
"network_detect_config": "集成網絡配置", "network_detect_config": "集成網絡配置"
"cover_closed_position": "窗簾關閉位置"
} }
}, },
"update_user_info": { "update_user_info": {
@ -184,7 +183,7 @@
}, },
"config_confirm": { "config_confirm": {
"title": "確認配置", "title": "確認配置",
"description": "**{nick_name}** 您好!請確認最新的配置信息,然後點擊“提交”。\r\n集成將會使用更新後的配置重新載入。\r\n\r\n集成語言\t{lang_new}\r\n用戶暱稱\t{nick_name_new}\r\nAction 調試模式:\t{action_debug}\r\n隱藏非標準生成實體\t{hide_non_standard_entities}\r\n窗簾關閉位置:\t{cover_pos_new}\r\n顯示設備狀態變化通知:\t{display_devices_changed_notify}\r\n設備變化\t新增 **{devices_add}** 個設備,移除 **{devices_remove}** 個設備\r\n轉換規則變化\t共條 **{trans_rules_count}** 規則,更新 **{trans_rules_count_success}** 條規則", "description": "**{nick_name}** 您好!請確認最新的配置信息,然後點擊“提交”。\r\n集成將會使用更新後的配置重新載入。\r\n\r\n集成語言\t{lang_new}\r\n用戶暱稱\t{nick_name_new}\r\nAction 調試模式:\t{action_debug}\r\n隱藏非標準生成實體\t{hide_non_standard_entities}\r\n顯示設備狀態變化通知:\t{display_devices_changed_notify}\r\n設備變化\t新增 **{devices_add}** 個設備,移除 **{devices_remove}** 個設備\r\n轉換規則變化\t共條 **{trans_rules_count}** 規則,更新 **{trans_rules_count_success}** 條規則",
"data": { "data": {
"confirm": "確認修改" "confirm": "確認修改"
} }