homeassistant 2025.8.0b2__py3-none-any.whl → 2025.8.0b3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- homeassistant/components/airos/config_flow.py +9 -9
- homeassistant/components/airos/coordinator.py +11 -7
- homeassistant/components/airos/manifest.json +1 -1
- homeassistant/components/airos/sensor.py +0 -7
- homeassistant/components/airos/strings.json +0 -7
- homeassistant/components/airos/translations/bg.json +0 -7
- homeassistant/components/airos/translations/cs.json +0 -7
- homeassistant/components/airos/translations/de.json +0 -7
- homeassistant/components/airos/translations/en-GB.json +0 -7
- homeassistant/components/airos/translations/en.json +0 -7
- homeassistant/components/airos/translations/es.json +0 -7
- homeassistant/components/airos/translations/et.json +0 -7
- homeassistant/components/airos/translations/ga.json +0 -7
- homeassistant/components/airos/translations/he.json +29 -0
- homeassistant/components/airos/translations/sk.json +25 -6
- homeassistant/components/airos/translations/zh-Hans.json +0 -7
- homeassistant/components/airos/translations/zh-Hant.json +0 -7
- homeassistant/components/airthings/__init__.py +2 -5
- homeassistant/components/airthings/coordinator.py +10 -1
- homeassistant/components/alert/translations/he.json +1 -1
- homeassistant/components/alexa_devices/translations/es.json +192 -1
- homeassistant/components/alexa_devices/translations/sk.json +134 -1
- homeassistant/components/ambient_station/translations/ga.json +12 -0
- homeassistant/components/androidtv_remote/translations/sl.json +2 -1
- homeassistant/components/anova/translations/he.json +1 -1
- homeassistant/components/apcupsd/translations/ga.json +50 -0
- homeassistant/components/aprilaire/translations/he.json +4 -4
- homeassistant/components/assist_satellite/translations/he.json +1 -1
- homeassistant/components/asuswrt/router.py +12 -3
- homeassistant/components/backup/translations/he.json +1 -1
- homeassistant/components/bluemaestro/translations/ga.json +9 -0
- homeassistant/components/bmw_connected_drive/translations/ga.json +1 -0
- homeassistant/components/broadlink/updater.py +1 -0
- homeassistant/components/caldav/manifest.json +1 -1
- homeassistant/components/camera/translations/he.json +1 -1
- homeassistant/components/climate/translations/he.json +1 -1
- homeassistant/components/cloud/manifest.json +1 -1
- homeassistant/components/cloud/translations/ga.json +4 -0
- homeassistant/components/deluge/translations/he.json +1 -1
- homeassistant/components/downloader/translations/ga.json +3 -0
- homeassistant/components/ecovacs/manifest.json +1 -1
- homeassistant/components/ecovacs/translations/ga.json +23 -0
- homeassistant/components/ecovacs/translations/he.json +1 -1
- homeassistant/components/emoncms/translations/es.json +8 -0
- homeassistant/components/energy/translations/sl.json +4 -0
- homeassistant/components/enphase_envoy/translations/he.json +1 -1
- homeassistant/components/flexit_bacnet/translations/ga.json +33 -0
- homeassistant/components/fritzbox_callmonitor/translations/he.json +1 -1
- homeassistant/components/fronius/__init__.py +6 -0
- homeassistant/components/fronius/translations/he.json +1 -1
- homeassistant/components/glances/translations/ga.json +18 -0
- homeassistant/components/group/translations/he.json +18 -0
- homeassistant/components/hassio/strings.json +4 -0
- homeassistant/components/hassio/translations/de.json +5 -1
- homeassistant/components/hassio/translations/el.json +4 -0
- homeassistant/components/hassio/translations/en.json +4 -0
- homeassistant/components/hassio/translations/es.json +4 -0
- homeassistant/components/hassio/translations/et.json +4 -0
- homeassistant/components/hassio/translations/he.json +4 -0
- homeassistant/components/hassio/translations/lt.json +4 -0
- homeassistant/components/hassio/translations/zh-Hant.json +4 -0
- homeassistant/components/homeassistant/translations/ga.json +3 -0
- homeassistant/components/homekit_controller/translations/he.json +1 -1
- homeassistant/components/hue/v1/light.py +2 -0
- homeassistant/components/hue/v1/sensor_base.py +1 -0
- homeassistant/components/humidifier/translations/he.json +1 -1
- homeassistant/components/husqvarna_automower/manifest.json +1 -1
- homeassistant/components/husqvarna_automower/sensor.py +3 -4
- homeassistant/components/husqvarna_automower/translations/ga.json +10 -0
- homeassistant/components/husqvarna_automower/translations/he.json +5 -0
- homeassistant/components/imap/translations/ga.json +20 -0
- homeassistant/components/ipp/translations/he.json +1 -1
- homeassistant/components/iron_os/translations/he.json +1 -1
- homeassistant/components/ituran/translations/he.json +3 -0
- homeassistant/components/knx/manifest.json +1 -1
- homeassistant/components/knx/translations/zh-Hant.json +1 -1
- homeassistant/components/kraken/__init__.py +1 -0
- homeassistant/components/lg_netcast/translations/ga.json +14 -0
- homeassistant/components/lg_thinq/translations/he.json +2 -1
- homeassistant/components/matter/number.py +3 -1
- homeassistant/components/matter/translations/he.json +6 -0
- homeassistant/components/mealie/manifest.json +1 -1
- homeassistant/components/mealie/todo.py +3 -2
- homeassistant/components/media_extractor/manifest.json +1 -1
- homeassistant/components/media_player/translations/he.json +1 -1
- homeassistant/components/meteo_france/__init__.py +3 -0
- homeassistant/components/microbees/translations/ga.json +2 -1
- homeassistant/components/miele/translations/es.json +46 -1
- homeassistant/components/miele/translations/ga.json +1 -0
- homeassistant/components/miele/translations/he.json +32 -1
- homeassistant/components/miele/translations/lt.json +13 -1
- homeassistant/components/miele/translations/sk.json +22 -1
- homeassistant/components/mill/__init__.py +1 -0
- homeassistant/components/mill/coordinator.py +2 -0
- homeassistant/components/modbus/translations/ga.json +8 -0
- homeassistant/components/motionblinds_ble/translations/ga.json +25 -0
- homeassistant/components/mqtt/translations/el.json +1 -0
- homeassistant/components/mqtt/translations/es.json +39 -5
- homeassistant/components/mqtt/translations/he.json +67 -0
- homeassistant/components/mqtt/translations/lt.json +1 -0
- homeassistant/components/mqtt/translations/sk.json +1 -0
- homeassistant/components/mqtt/translations/sl.json +5 -0
- homeassistant/components/mqtt/translations/zh-Hant.json +45 -45
- homeassistant/components/mystrom/translations/ga.json +9 -0
- homeassistant/components/open_router/translations/he.json +10 -0
- homeassistant/components/openweathermap/translations/he.json +2 -1
- homeassistant/components/oralb/translations/ga.json +21 -0
- homeassistant/components/playstation_network/translations/es.json +27 -0
- homeassistant/components/playstation_network/translations/he.json +8 -0
- homeassistant/components/proximity/translations/ga.json +40 -0
- homeassistant/components/prusalink/translations/he.json +1 -1
- homeassistant/components/qbittorrent/translations/he.json +1 -1
- homeassistant/components/qnap/translations/ga.json +12 -0
- homeassistant/components/random/translations/el.json +2 -0
- homeassistant/components/random/translations/es.json +2 -0
- homeassistant/components/random/translations/he.json +2 -0
- homeassistant/components/random/translations/lt.json +1 -0
- homeassistant/components/random/translations/sk.json +1 -0
- homeassistant/components/remote_calendar/coordinator.py +1 -0
- homeassistant/components/rfxtrx/translations/ga.json +13 -0
- homeassistant/components/ring/translations/ga.json +11 -0
- homeassistant/components/roborock/translations/he.json +1 -1
- homeassistant/components/rympro/translations/ga.json +3 -0
- homeassistant/components/scrape/translations/el.json +1 -0
- homeassistant/components/scrape/translations/es.json +1 -0
- homeassistant/components/scrape/translations/he.json +1 -0
- homeassistant/components/screenlogic/translations/ga.json +1 -0
- homeassistant/components/sfr_box/translations/he.json +1 -1
- homeassistant/components/simplisafe/__init__.py +1 -0
- homeassistant/components/smartthings/translations/he.json +1 -1
- homeassistant/components/smarttub/controller.py +1 -0
- homeassistant/components/sms/__init__.py +2 -2
- homeassistant/components/sms/coordinator.py +4 -2
- homeassistant/components/snoo/__init__.py +1 -1
- homeassistant/components/snoo/coordinator.py +8 -1
- homeassistant/components/sql/translations/el.json +1 -0
- homeassistant/components/sql/translations/es.json +1 -0
- homeassistant/components/sql/translations/he.json +1 -0
- homeassistant/components/swiss_public_transport/translations/ga.json +3 -0
- homeassistant/components/template/cover.py +1 -0
- homeassistant/components/template/entity.py +9 -3
- homeassistant/components/template/strings.json +6 -0
- homeassistant/components/template/translations/de.json +6 -0
- homeassistant/components/template/translations/el.json +2 -0
- homeassistant/components/template/translations/en.json +6 -0
- homeassistant/components/template/translations/es.json +115 -17
- homeassistant/components/template/translations/et.json +6 -0
- homeassistant/components/template/translations/he.json +681 -18
- homeassistant/components/template/translations/lt.json +24 -0
- homeassistant/components/template/translations/sk.json +1 -0
- homeassistant/components/template/translations/sl.json +478 -12
- homeassistant/components/template/translations/zh-Hant.json +6 -0
- homeassistant/components/template/vacuum.py +46 -1
- homeassistant/components/teslemetry/models.py +1 -1
- homeassistant/components/teslemetry/sensor.py +8 -7
- homeassistant/components/teslemetry/translations/ga.json +19 -1
- homeassistant/components/teslemetry/translations/he.json +1 -1
- homeassistant/components/tessie/translations/ga.json +14 -1
- homeassistant/components/tibber/translations/ga.json +45 -0
- homeassistant/components/timer/translations/he.json +1 -1
- homeassistant/components/traccar_server/translations/ga.json +4 -1
- homeassistant/components/transmission/translations/he.json +1 -1
- homeassistant/components/tuya/fan.py +3 -1
- homeassistant/components/tuya/translations/es.json +12 -0
- homeassistant/components/tuya/translations/he.json +3 -0
- homeassistant/components/unifi/hub/entity_loader.py +5 -3
- homeassistant/components/unifi/hub/hub.py +1 -1
- homeassistant/components/unifiprotect/translations/ga.json +4 -2
- homeassistant/components/uptime_kuma/translations/es.json +10 -0
- homeassistant/components/uptime_kuma/translations/he.json +5 -0
- homeassistant/components/utility_meter/translations/ga.json +22 -0
- homeassistant/components/vacuum/translations/he.json +1 -1
- homeassistant/components/venstar/translations/he.json +1 -1
- homeassistant/components/volvo/icons.json +9 -5
- homeassistant/components/volvo/translations/he.json +59 -0
- homeassistant/components/waze_travel_time/translations/he.json +10 -0
- homeassistant/components/wyoming/manifest.json +1 -1
- homeassistant/components/xiaomi_ble/translations/ga.json +17 -1
- homeassistant/components/zha/translations/he.json +21 -1
- homeassistant/components/zha/translations/sl.json +1 -0
- homeassistant/components/zwave_js/__init__.py +33 -25
- homeassistant/components/zwave_js/config_flow.py +16 -2
- homeassistant/components/zwave_js/manifest.json +1 -1
- homeassistant/components/zwave_js/strings.json +1 -1
- homeassistant/components/zwave_js/translations/cs.json +0 -1
- homeassistant/components/zwave_js/translations/de.json +1 -1
- homeassistant/components/zwave_js/translations/el.json +0 -1
- homeassistant/components/zwave_js/translations/en-GB.json +0 -1
- homeassistant/components/zwave_js/translations/en.json +1 -1
- homeassistant/components/zwave_js/translations/es.json +1 -1
- homeassistant/components/zwave_js/translations/et.json +1 -1
- homeassistant/components/zwave_js/translations/ga.json +0 -1
- homeassistant/components/zwave_js/translations/hu.json +0 -1
- homeassistant/components/zwave_js/translations/lt.json +0 -1
- homeassistant/components/zwave_js/translations/nl.json +0 -1
- homeassistant/components/zwave_js/translations/pt.json +0 -1
- homeassistant/components/zwave_js/translations/ru.json +0 -1
- homeassistant/components/zwave_js/translations/sk.json +0 -1
- homeassistant/components/zwave_js/translations/sv.json +0 -1
- homeassistant/components/zwave_js/translations/zh-Hans.json +0 -1
- homeassistant/components/zwave_js/translations/zh-Hant.json +1 -1
- homeassistant/const.py +1 -1
- homeassistant/helpers/device_registry.py +5 -2
- homeassistant/package_constraints.txt +1 -1
- {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b3.dist-info}/METADATA +2 -2
- {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b3.dist-info}/RECORD +211 -205
- {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b3.dist-info}/WHEEL +0 -0
- {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b3.dist-info}/entry_points.txt +0 -0
- {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b3.dist-info}/licenses/LICENSE.md +0 -0
- {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b3.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
- {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b3.dist-info}/top_level.txt +0 -0
|
@@ -6,11 +6,11 @@ import logging
|
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
8
|
from airos.exceptions import (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
AirOSConnectionAuthenticationError,
|
|
10
|
+
AirOSConnectionSetupError,
|
|
11
|
+
AirOSDataMissingError,
|
|
12
|
+
AirOSDeviceConnectionError,
|
|
13
|
+
AirOSKeyDataMissingError,
|
|
14
14
|
)
|
|
15
15
|
import voluptuous as vol
|
|
16
16
|
|
|
@@ -59,13 +59,13 @@ class AirOSConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
|
59
59
|
airos_data = await airos_device.status()
|
|
60
60
|
|
|
61
61
|
except (
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
AirOSConnectionSetupError,
|
|
63
|
+
AirOSDeviceConnectionError,
|
|
64
64
|
):
|
|
65
65
|
errors["base"] = "cannot_connect"
|
|
66
|
-
except (
|
|
66
|
+
except (AirOSConnectionAuthenticationError, AirOSDataMissingError):
|
|
67
67
|
errors["base"] = "invalid_auth"
|
|
68
|
-
except
|
|
68
|
+
except AirOSKeyDataMissingError:
|
|
69
69
|
errors["base"] = "key_data_missing"
|
|
70
70
|
except Exception:
|
|
71
71
|
_LOGGER.exception("Unexpected exception")
|
|
@@ -6,10 +6,10 @@ import logging
|
|
|
6
6
|
|
|
7
7
|
from airos.airos8 import AirOS, AirOSData
|
|
8
8
|
from airos.exceptions import (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
AirOSConnectionAuthenticationError,
|
|
10
|
+
AirOSConnectionSetupError,
|
|
11
|
+
AirOSDataMissingError,
|
|
12
|
+
AirOSDeviceConnectionError,
|
|
13
13
|
)
|
|
14
14
|
|
|
15
15
|
from homeassistant.config_entries import ConfigEntry
|
|
@@ -47,18 +47,22 @@ class AirOSDataUpdateCoordinator(DataUpdateCoordinator[AirOSData]):
|
|
|
47
47
|
try:
|
|
48
48
|
await self.airos_device.login()
|
|
49
49
|
return await self.airos_device.status()
|
|
50
|
-
except (
|
|
50
|
+
except (AirOSConnectionAuthenticationError,) as err:
|
|
51
51
|
_LOGGER.exception("Error authenticating with airOS device")
|
|
52
52
|
raise ConfigEntryError(
|
|
53
53
|
translation_domain=DOMAIN, translation_key="invalid_auth"
|
|
54
54
|
) from err
|
|
55
|
-
except (
|
|
55
|
+
except (
|
|
56
|
+
AirOSConnectionSetupError,
|
|
57
|
+
AirOSDeviceConnectionError,
|
|
58
|
+
TimeoutError,
|
|
59
|
+
) as err:
|
|
56
60
|
_LOGGER.error("Error connecting to airOS device: %s", err)
|
|
57
61
|
raise UpdateFailed(
|
|
58
62
|
translation_domain=DOMAIN,
|
|
59
63
|
translation_key="cannot_connect",
|
|
60
64
|
) from err
|
|
61
|
-
except (
|
|
65
|
+
except (AirOSDataMissingError,) as err:
|
|
62
66
|
_LOGGER.error("Expected data not returned by airOS device: %s", err)
|
|
63
67
|
raise UpdateFailed(
|
|
64
68
|
translation_domain=DOMAIN,
|
|
@@ -69,13 +69,6 @@ SENSORS: tuple[AirOSSensorEntityDescription, ...] = (
|
|
|
69
69
|
translation_key="wireless_essid",
|
|
70
70
|
value_fn=lambda data: data.wireless.essid,
|
|
71
71
|
),
|
|
72
|
-
AirOSSensorEntityDescription(
|
|
73
|
-
key="wireless_mode",
|
|
74
|
-
translation_key="wireless_mode",
|
|
75
|
-
device_class=SensorDeviceClass.ENUM,
|
|
76
|
-
value_fn=lambda data: data.wireless.mode.value.replace("-", "_").lower(),
|
|
77
|
-
options=WIRELESS_MODE_OPTIONS,
|
|
78
|
-
),
|
|
79
72
|
AirOSSensorEntityDescription(
|
|
80
73
|
key="wireless_antenna_gain",
|
|
81
74
|
translation_key="wireless_antenna_gain",
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"wireless_frequency": {
|
|
47
47
|
"name": "\u0411\u0435\u0437\u0436\u0438\u0447\u043d\u0430 \u0447\u0435\u0441\u0442\u043e\u0442\u0430"
|
|
48
48
|
},
|
|
49
|
-
"wireless_mode": {
|
|
50
|
-
"name": "\u0411\u0435\u0437\u0436\u0438\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c",
|
|
51
|
-
"state": {
|
|
52
|
-
"ap_ptp": "\u0422\u043e\u0447\u043a\u0430 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f",
|
|
53
|
-
"sta_ptp": "\u0421\u0442\u0430\u043d\u0446\u0438\u044f"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
49
|
"wireless_polling_dl_capacity": {
|
|
57
50
|
"name": "\u041a\u0430\u043f\u0430\u0446\u0438\u0442\u0435\u0442 \u0437\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435"
|
|
58
51
|
},
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"wireless_frequency": {
|
|
47
47
|
"name": "Frekvence Wi-Fi"
|
|
48
48
|
},
|
|
49
|
-
"wireless_mode": {
|
|
50
|
-
"name": "Re\u017eim Wi-Fi",
|
|
51
|
-
"state": {
|
|
52
|
-
"ap_ptp": "P\u0159\u00edstupov\u00fd bod",
|
|
53
|
-
"sta_ptp": "Stanice"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
49
|
"wireless_polling_dl_capacity": {
|
|
57
50
|
"name": "Kapacita stahov\u00e1n\u00ed"
|
|
58
51
|
},
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"wireless_frequency": {
|
|
47
47
|
"name": "WLAN-Frequenz"
|
|
48
48
|
},
|
|
49
|
-
"wireless_mode": {
|
|
50
|
-
"name": "WLAN-Modus",
|
|
51
|
-
"state": {
|
|
52
|
-
"ap_ptp": "Zugangspunkt",
|
|
53
|
-
"sta_ptp": "Station"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
49
|
"wireless_polling_dl_capacity": {
|
|
57
50
|
"name": "Download-Kapazit\u00e4t"
|
|
58
51
|
},
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"wireless_frequency": {
|
|
47
47
|
"name": "Wireless frequency"
|
|
48
48
|
},
|
|
49
|
-
"wireless_mode": {
|
|
50
|
-
"name": "Wireless mode",
|
|
51
|
-
"state": {
|
|
52
|
-
"ap_ptp": "Access point",
|
|
53
|
-
"sta_ptp": "Station"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
49
|
"wireless_polling_dl_capacity": {
|
|
57
50
|
"name": "Download capacity"
|
|
58
51
|
},
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"wireless_frequency": {
|
|
47
47
|
"name": "Wireless frequency"
|
|
48
48
|
},
|
|
49
|
-
"wireless_mode": {
|
|
50
|
-
"name": "Wireless mode",
|
|
51
|
-
"state": {
|
|
52
|
-
"ap_ptp": "Access point",
|
|
53
|
-
"sta_ptp": "Station"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
49
|
"wireless_polling_dl_capacity": {
|
|
57
50
|
"name": "Download capacity"
|
|
58
51
|
},
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"wireless_frequency": {
|
|
47
47
|
"name": "Frecuencia inal\u00e1mbrica"
|
|
48
48
|
},
|
|
49
|
-
"wireless_mode": {
|
|
50
|
-
"name": "Modo inal\u00e1mbrico",
|
|
51
|
-
"state": {
|
|
52
|
-
"ap_ptp": "Punto de acceso",
|
|
53
|
-
"sta_ptp": "Estaci\u00f3n"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
49
|
"wireless_polling_dl_capacity": {
|
|
57
50
|
"name": "Capacidad de descarga"
|
|
58
51
|
},
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"wireless_frequency": {
|
|
47
47
|
"name": "Juhtmevaba side sagedus"
|
|
48
48
|
},
|
|
49
|
-
"wireless_mode": {
|
|
50
|
-
"name": "Juhtmevaba re\u017eiim",
|
|
51
|
-
"state": {
|
|
52
|
-
"ap_ptp": "Juurdep\u00e4\u00e4supunkt",
|
|
53
|
-
"sta_ptp": "Jaam"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
49
|
"wireless_polling_dl_capacity": {
|
|
57
50
|
"name": "Allalaadimise maht"
|
|
58
51
|
},
|
|
@@ -35,13 +35,6 @@
|
|
|
35
35
|
"wireless_frequency": {
|
|
36
36
|
"name": "Minic\u00edocht gan sreang"
|
|
37
37
|
},
|
|
38
|
-
"wireless_mode": {
|
|
39
|
-
"name": "M\u00f3d gan sreang",
|
|
40
|
-
"state": {
|
|
41
|
-
"ap_ptp": "Pointe rochtana",
|
|
42
|
-
"sta_ptp": "St\u00e1isi\u00fan"
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
38
|
"wireless_polling_dl_capacity": {
|
|
46
39
|
"name": "Cumas \u00edosl\u00f3d\u00e1la"
|
|
47
40
|
},
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"config": {
|
|
3
|
+
"abort": {
|
|
4
|
+
"already_configured": "\u05ea\u05e6\u05d5\u05e8\u05ea \u05d4\u05d4\u05ea\u05e7\u05df \u05db\u05d1\u05e8 \u05e0\u05e7\u05d1\u05e2\u05d4"
|
|
5
|
+
},
|
|
6
|
+
"error": {
|
|
7
|
+
"cannot_connect": "\u05d4\u05d4\u05ea\u05d7\u05d1\u05e8\u05d5\u05ea \u05e0\u05db\u05e9\u05dc\u05d4",
|
|
8
|
+
"invalid_auth": "\u05d0\u05d9\u05de\u05d5\u05ea \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9",
|
|
9
|
+
"unknown": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05dc\u05ea\u05d9 \u05e6\u05e4\u05d5\u05d9\u05d4"
|
|
10
|
+
},
|
|
11
|
+
"step": {
|
|
12
|
+
"user": {
|
|
13
|
+
"data": {
|
|
14
|
+
"host": "\u05de\u05d0\u05e8\u05d7",
|
|
15
|
+
"password": "\u05e1\u05d9\u05e1\u05de\u05d4",
|
|
16
|
+
"username": "\u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"exceptions": {
|
|
22
|
+
"cannot_connect": {
|
|
23
|
+
"message": "\u05d4\u05d4\u05ea\u05d7\u05d1\u05e8\u05d5\u05ea \u05e0\u05db\u05e9\u05dc\u05d4"
|
|
24
|
+
},
|
|
25
|
+
"invalid_auth": {
|
|
26
|
+
"message": "\u05d0\u05d9\u05de\u05d5\u05ea \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
},
|
|
20
20
|
"data_description": {
|
|
21
21
|
"host": "IP adresa alebo n\u00e1zov hostite\u013ea zariadenia airOS",
|
|
22
|
-
"password": "Heslo nakonfigurovan\u00e9 prostredn\u00edctvom aplik\u00e1cie UISP alebo webov\u00e9ho rozhrania"
|
|
22
|
+
"password": "Heslo nakonfigurovan\u00e9 prostredn\u00edctvom aplik\u00e1cie UISP alebo webov\u00e9ho rozhrania",
|
|
23
|
+
"username": "Pou\u017e\u00edvate\u013esk\u00e9 meno spr\u00e1vcu pre zariadenie airOS, zvy\u010dajne 'ubnt'"
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
}
|
|
@@ -42,11 +43,23 @@
|
|
|
42
43
|
"wireless_essid": {
|
|
43
44
|
"name": "Wireless SSID"
|
|
44
45
|
},
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
"wireless_frequency": {
|
|
47
|
+
"name": "Bezdr\u00f4tov\u00e1 frekvencia"
|
|
48
|
+
},
|
|
49
|
+
"wireless_polling_dl_capacity": {
|
|
50
|
+
"name": "Kapacita s\u0165ahovania"
|
|
51
|
+
},
|
|
52
|
+
"wireless_polling_ul_capacity": {
|
|
53
|
+
"name": "Kapacita nahr\u00e1vania"
|
|
54
|
+
},
|
|
55
|
+
"wireless_remote_hostname": {
|
|
56
|
+
"name": "N\u00e1zov vzdialen\u00e9ho hostite\u013ea"
|
|
57
|
+
},
|
|
58
|
+
"wireless_throughput_rx": {
|
|
59
|
+
"name": "Priepustnos\u0165 prijat\u00fdch \u00fadajov (skuto\u010dn\u00e1)"
|
|
60
|
+
},
|
|
61
|
+
"wireless_throughput_tx": {
|
|
62
|
+
"name": "Prenosov\u00e1 priepustnos\u0165 (skuto\u010dn\u00e1)"
|
|
50
63
|
}
|
|
51
64
|
}
|
|
52
65
|
},
|
|
@@ -54,8 +67,14 @@
|
|
|
54
67
|
"cannot_connect": {
|
|
55
68
|
"message": "Nepodarilo sa pripoji\u0165"
|
|
56
69
|
},
|
|
70
|
+
"error_data_missing": {
|
|
71
|
+
"message": "\u00dadaje s\u00fa ne\u00fapln\u00e9 alebo ch\u00fdbaj\u00fa"
|
|
72
|
+
},
|
|
57
73
|
"invalid_auth": {
|
|
58
74
|
"message": "Neplatn\u00e9 overenie"
|
|
75
|
+
},
|
|
76
|
+
"key_data_missing": {
|
|
77
|
+
"message": "K\u013e\u00fa\u010dov\u00e9 \u00fadaje sa nevr\u00e1tili zo zariadenia"
|
|
59
78
|
}
|
|
60
79
|
}
|
|
61
80
|
}
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"wireless_frequency": {
|
|
47
47
|
"name": "\u65e0\u7ebf\u9891\u7387"
|
|
48
48
|
},
|
|
49
|
-
"wireless_mode": {
|
|
50
|
-
"name": "\u65e0\u7ebf\u6a21\u5f0f",
|
|
51
|
-
"state": {
|
|
52
|
-
"ap_ptp": "\u63a5\u5165\u70b9",
|
|
53
|
-
"sta_ptp": "\u7ad9\u70b9"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
49
|
"wireless_polling_dl_capacity": {
|
|
57
50
|
"name": "\u4e0b\u8f7d\u5bb9\u91cf"
|
|
58
51
|
},
|
|
@@ -46,13 +46,6 @@
|
|
|
46
46
|
"wireless_frequency": {
|
|
47
47
|
"name": "\u7121\u7dda\u983b\u7387"
|
|
48
48
|
},
|
|
49
|
-
"wireless_mode": {
|
|
50
|
-
"name": "\u7121\u7dda\u6a21\u5f0f",
|
|
51
|
-
"state": {
|
|
52
|
-
"ap_ptp": "\u57fa\u5730\u53f0",
|
|
53
|
-
"sta_ptp": "\u7ad9\u53f0"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
49
|
"wireless_polling_dl_capacity": {
|
|
57
50
|
"name": "\u4e0b\u8f09\u5bb9\u91cf"
|
|
58
51
|
},
|
|
@@ -7,21 +7,18 @@ import logging
|
|
|
7
7
|
|
|
8
8
|
from airthings import Airthings
|
|
9
9
|
|
|
10
|
-
from homeassistant.config_entries import ConfigEntry
|
|
11
10
|
from homeassistant.const import CONF_ID, Platform
|
|
12
11
|
from homeassistant.core import HomeAssistant
|
|
13
12
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
14
13
|
|
|
15
14
|
from .const import CONF_SECRET
|
|
16
|
-
from .coordinator import AirthingsDataUpdateCoordinator
|
|
15
|
+
from .coordinator import AirthingsConfigEntry, AirthingsDataUpdateCoordinator
|
|
17
16
|
|
|
18
17
|
_LOGGER = logging.getLogger(__name__)
|
|
19
18
|
|
|
20
19
|
PLATFORMS: list[Platform] = [Platform.SENSOR]
|
|
21
20
|
SCAN_INTERVAL = timedelta(minutes=6)
|
|
22
21
|
|
|
23
|
-
type AirthingsConfigEntry = ConfigEntry[AirthingsDataUpdateCoordinator]
|
|
24
|
-
|
|
25
22
|
|
|
26
23
|
async def async_setup_entry(hass: HomeAssistant, entry: AirthingsConfigEntry) -> bool:
|
|
27
24
|
"""Set up Airthings from a config entry."""
|
|
@@ -31,7 +28,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AirthingsConfigEntry) ->
|
|
|
31
28
|
async_get_clientsession(hass),
|
|
32
29
|
)
|
|
33
30
|
|
|
34
|
-
coordinator = AirthingsDataUpdateCoordinator(hass, airthings)
|
|
31
|
+
coordinator = AirthingsDataUpdateCoordinator(hass, airthings, entry)
|
|
35
32
|
|
|
36
33
|
await coordinator.async_config_entry_first_refresh()
|
|
37
34
|
|
|
@@ -5,6 +5,7 @@ import logging
|
|
|
5
5
|
|
|
6
6
|
from airthings import Airthings, AirthingsDevice, AirthingsError
|
|
7
7
|
|
|
8
|
+
from homeassistant.config_entries import ConfigEntry
|
|
8
9
|
from homeassistant.core import HomeAssistant
|
|
9
10
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
|
10
11
|
|
|
@@ -13,15 +14,23 @@ from .const import DOMAIN
|
|
|
13
14
|
_LOGGER = logging.getLogger(__name__)
|
|
14
15
|
SCAN_INTERVAL = timedelta(minutes=6)
|
|
15
16
|
|
|
17
|
+
type AirthingsConfigEntry = ConfigEntry[AirthingsDataUpdateCoordinator]
|
|
18
|
+
|
|
16
19
|
|
|
17
20
|
class AirthingsDataUpdateCoordinator(DataUpdateCoordinator[dict[str, AirthingsDevice]]):
|
|
18
21
|
"""Coordinator for Airthings data updates."""
|
|
19
22
|
|
|
20
|
-
def __init__(
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
hass: HomeAssistant,
|
|
26
|
+
airthings: Airthings,
|
|
27
|
+
config_entry: AirthingsConfigEntry,
|
|
28
|
+
) -> None:
|
|
21
29
|
"""Initialize the coordinator."""
|
|
22
30
|
super().__init__(
|
|
23
31
|
hass,
|
|
24
32
|
_LOGGER,
|
|
33
|
+
config_entry=config_entry,
|
|
25
34
|
name=DOMAIN,
|
|
26
35
|
update_method=self._update_method,
|
|
27
36
|
update_interval=SCAN_INTERVAL,
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
"data_description_code": "La contrase\u00f1a de un solo uso para iniciar sesi\u00f3n en tu cuenta. Actualmente, solo se admiten tokens de aplicaciones OTP.",
|
|
5
5
|
"data_description_country": "El pa\u00eds donde est\u00e1 registrada tu cuenta de Amazon.",
|
|
6
6
|
"data_description_password": "La contrase\u00f1a de tu cuenta de Amazon.",
|
|
7
|
-
"data_description_username": "La direcci\u00f3n de correo electr\u00f3nico de tu cuenta de Amazon."
|
|
7
|
+
"data_description_username": "La direcci\u00f3n de correo electr\u00f3nico de tu cuenta de Amazon.",
|
|
8
|
+
"device_id_description": "El ID del dispositivo al que se enviar\u00e1 el comando."
|
|
8
9
|
},
|
|
9
10
|
"config": {
|
|
10
11
|
"abort": {
|
|
@@ -90,14 +91,203 @@
|
|
|
90
91
|
},
|
|
91
92
|
"cannot_retrieve_data_with_error": {
|
|
92
93
|
"message": "Error al recuperar datos: {error}"
|
|
94
|
+
},
|
|
95
|
+
"device_serial_number_missing": {
|
|
96
|
+
"message": "Falta el n\u00famero de serie del dispositivo: {device_id}"
|
|
97
|
+
},
|
|
98
|
+
"entry_not_loaded": {
|
|
99
|
+
"message": "Entrada no cargada: {entry}"
|
|
100
|
+
},
|
|
101
|
+
"invalid_device_id": {
|
|
102
|
+
"message": "ID de dispositivo no v\u00e1lido especificado: {device_id}"
|
|
103
|
+
},
|
|
104
|
+
"invalid_sound_value": {
|
|
105
|
+
"message": "Sonido no v\u00e1lido {sound} con variante {variant} especificada"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"selector": {
|
|
109
|
+
"sound": {
|
|
110
|
+
"options": {
|
|
111
|
+
"amzn_ui_sfx_gameshow_bridge": "Puente de programa de juegos",
|
|
112
|
+
"bell": "Campana",
|
|
113
|
+
"bikes": "Bicicletas",
|
|
114
|
+
"billiards": "Billar",
|
|
115
|
+
"board_games": "Juegos de mesa",
|
|
116
|
+
"body": "Cuerpo",
|
|
117
|
+
"boing": "Boing",
|
|
118
|
+
"books": "Libros",
|
|
119
|
+
"bow_wash": "Lavado de arco",
|
|
120
|
+
"box": "Caja",
|
|
121
|
+
"break_shatter_smash": "Romper, destrozar, aplastar",
|
|
122
|
+
"breaks": "Roturas",
|
|
123
|
+
"brooms_mops": "Escobas y fregonas",
|
|
124
|
+
"bullets": "Balas",
|
|
125
|
+
"buses": "Autobuses",
|
|
126
|
+
"buzz": "Zumbido",
|
|
127
|
+
"buzz_hums": "Zumbidos",
|
|
128
|
+
"buzzers": "Zumbadores",
|
|
129
|
+
"buzzers_pistols": "Pistolas zumbadoras",
|
|
130
|
+
"cables_metal": "Cables met\u00e1licos",
|
|
131
|
+
"camera": "C\u00e1mara",
|
|
132
|
+
"cannons": "Ca\u00f1ones",
|
|
133
|
+
"car_alarm": "Alarma de coche",
|
|
134
|
+
"car_alarms": "Alarmas de coche",
|
|
135
|
+
"car_cell_phones": "Tel\u00e9fonos m\u00f3viles para coche",
|
|
136
|
+
"carnivals_fairs": "Ferias de Carnaval",
|
|
137
|
+
"cars": "Coches",
|
|
138
|
+
"casino": "Casino",
|
|
139
|
+
"casinos": "Casinos",
|
|
140
|
+
"cellar": "Bodega",
|
|
141
|
+
"chimes": "Campanillas",
|
|
142
|
+
"chimes_bells": "Campanas",
|
|
143
|
+
"chorus": "Coro",
|
|
144
|
+
"christmas": "Navidad",
|
|
145
|
+
"church_bells": "Campanas de iglesia",
|
|
146
|
+
"clock": "Reloj",
|
|
147
|
+
"cloth": "Pa\u00f1o",
|
|
148
|
+
"concrete": "Hormig\u00f3n",
|
|
149
|
+
"construction": "Construcci\u00f3n",
|
|
150
|
+
"construction_factory": "F\u00e1brica de construcci\u00f3n",
|
|
151
|
+
"futuristic_ship": "Barco futurista",
|
|
152
|
+
"gameshow": "Espect\u00e1culo de juegos",
|
|
153
|
+
"gear": "Engranaje",
|
|
154
|
+
"ghosts_demons": "Fantasmas Demonios",
|
|
155
|
+
"giant_monster": "Monstruo gigante",
|
|
156
|
+
"glass": "Vaso",
|
|
157
|
+
"glasses_clink": "Tintineo de vasos",
|
|
158
|
+
"golf": "Golf",
|
|
159
|
+
"gorilla": "Gorila",
|
|
160
|
+
"grenade_lanucher": "Lanzagranadas",
|
|
161
|
+
"griffen": "Griffen",
|
|
162
|
+
"gyms_locker_rooms": "Vestuarios de gimnasios",
|
|
163
|
+
"handgun_loading": "Carga de pistola",
|
|
164
|
+
"handgun_shot": "Disparo de pistola",
|
|
165
|
+
"handle": "Manejar",
|
|
166
|
+
"hands": "Manos",
|
|
167
|
+
"heartbeats_ekg": "Electrocardiograma de latidos card\u00edacos",
|
|
168
|
+
"helicopter": "Helic\u00f3ptero",
|
|
169
|
+
"high_tech": "Alta tecnolog\u00eda",
|
|
170
|
+
"hit_punch_slap": "Golpe, pu\u00f1etazo, bofetada",
|
|
171
|
+
"hits": "Hits",
|
|
172
|
+
"horns": "Trompetas",
|
|
173
|
+
"horror": "Horror",
|
|
174
|
+
"hot_tub_filling_up": "Llenando el jacuzzi",
|
|
175
|
+
"human": "Humano",
|
|
176
|
+
"human_vocals": "Voces humanas",
|
|
177
|
+
"hygene": "Higiene",
|
|
178
|
+
"ice_skating": "Patinaje sobre hielo",
|
|
179
|
+
"ignitions": "Encendido",
|
|
180
|
+
"infantry": "Infanter\u00eda",
|
|
181
|
+
"lacrosse": "Lacrosse",
|
|
182
|
+
"lamps_lanterns": "L\u00e1mparas linternas",
|
|
183
|
+
"leather": "Piel",
|
|
184
|
+
"liquid_suction": "Aspiraci\u00f3n de l\u00edquidos",
|
|
185
|
+
"locker_doors": "Puertas de taquillas",
|
|
186
|
+
"machine_gun": "Ametralladora",
|
|
187
|
+
"magic_spells": "Hechizos m\u00e1gicos",
|
|
188
|
+
"medium_large_explosions": "Explosiones medianas y grandes",
|
|
189
|
+
"metal": "Metal",
|
|
190
|
+
"modern_rings": "Anillos modernos",
|
|
191
|
+
"money_coins": "Monedas",
|
|
192
|
+
"motorcycles": "Motocicletas",
|
|
193
|
+
"movement": "Movimiento",
|
|
194
|
+
"moves": "Movimientos",
|
|
195
|
+
"nature": "Naturaleza",
|
|
196
|
+
"oar_boat": "Bote de remos",
|
|
197
|
+
"pagers": "Buscapersonas",
|
|
198
|
+
"paintball": "Paintball",
|
|
199
|
+
"paper": "Papel",
|
|
200
|
+
"parachute": "Paraca\u00eddas",
|
|
201
|
+
"pay_phones": "Tel\u00e9fonos p\u00fablicos",
|
|
202
|
+
"phone_beeps": "Pitidos del tel\u00e9fono",
|
|
203
|
+
"pigmy_bats": "Murci\u00e9lagos pigmeos",
|
|
204
|
+
"pills": "Pastillas",
|
|
205
|
+
"pour_water": "Verter agua",
|
|
206
|
+
"power_up_down": "Encendido y apagado",
|
|
207
|
+
"printers": "Impresoras",
|
|
208
|
+
"prison": "Prisi\u00f3n",
|
|
209
|
+
"public_space": "Espacio p\u00fablico",
|
|
210
|
+
"racquetball": "Racquetball",
|
|
211
|
+
"radios_static": "Radios est\u00e1ticas",
|
|
212
|
+
"rain": "Lluvia",
|
|
213
|
+
"rc_airplane": "Avi\u00f3n RC",
|
|
214
|
+
"rc_car": "Coche RC",
|
|
215
|
+
"refrigerators_freezers": "Frigor\u00edficos congeladores",
|
|
216
|
+
"regular": "Regular",
|
|
217
|
+
"respirator": "Respirador",
|
|
218
|
+
"rifle": "Rifle",
|
|
219
|
+
"roller_coaster": "Monta\u00f1a rusa",
|
|
220
|
+
"rollerskates_rollerblades": "Patines en l\u00ednea RollerBlades",
|
|
221
|
+
"room_tones": "Tonos de habitaci\u00f3n",
|
|
222
|
+
"ropes_climbing": "Cuerdas de escalada",
|
|
223
|
+
"rotary_rings": "Anillos giratorios",
|
|
224
|
+
"rowboat_canoe": "Canoa de remos",
|
|
225
|
+
"rubber": "Goma",
|
|
226
|
+
"running": "Correr",
|
|
227
|
+
"sails": "Velas",
|
|
228
|
+
"sand_gravel": "Arena y grava",
|
|
229
|
+
"screen_doors": "Puertas mosquiteras",
|
|
230
|
+
"screens": "Pantallas",
|
|
231
|
+
"seats_stools": "Asientos taburetes",
|
|
232
|
+
"servos": "Servos",
|
|
233
|
+
"shoes_boots": "Zapatos botas",
|
|
234
|
+
"shotgun": "Escopeta",
|
|
235
|
+
"shower": "Ducha",
|
|
236
|
+
"sink_faucet": "Grifo de fregadero",
|
|
237
|
+
"sink_filling_water": "Agua de llenado del fregadero",
|
|
238
|
+
"sink_run_and_off": "Sink Run And Off",
|
|
239
|
+
"sink_water_splatter": "Salpicaduras de agua del fregadero",
|
|
240
|
+
"sirens": "Sirenas",
|
|
241
|
+
"tape_machine": "M\u00e1quina de cinta",
|
|
242
|
+
"televisions_shows": "Programas de televisi\u00f3n",
|
|
243
|
+
"tennis_pingpong": "Tenis Ping-Pong",
|
|
244
|
+
"textile": "Textil",
|
|
245
|
+
"throw": "Lanzar",
|
|
246
|
+
"thunder": "Trueno",
|
|
247
|
+
"ticks": "Ticks",
|
|
248
|
+
"timer": "Temporizador",
|
|
249
|
+
"toilet_flush": "Descarga de cisterna",
|
|
250
|
+
"tone": "Tono",
|
|
251
|
+
"tones_noises": "Tonos ruidos",
|
|
252
|
+
"toys": "Juguetes",
|
|
253
|
+
"tractors": "Tractores",
|
|
254
|
+
"traffic": "Tr\u00e1fico",
|
|
255
|
+
"train": "Tren",
|
|
256
|
+
"trucks_vans": "Camiones Furgonetas",
|
|
257
|
+
"turnstiles": "Torniquetes",
|
|
258
|
+
"typing": "Mecanograf\u00eda",
|
|
259
|
+
"umbrella": "Paraguas",
|
|
260
|
+
"underwater": "Bajo el agua",
|
|
261
|
+
"vampires": "Vampiros",
|
|
262
|
+
"various": "Varios",
|
|
263
|
+
"video_tunes": "Melod\u00edas de v\u00eddeo",
|
|
264
|
+
"volcano_earthquake": "Terremoto volc\u00e1nico",
|
|
265
|
+
"watches": "Relojes",
|
|
266
|
+
"water": "Agua",
|
|
267
|
+
"water_running": "Agua corriendo",
|
|
268
|
+
"werewolves": "Hombres lobo",
|
|
269
|
+
"winches_gears": "Engranajes",
|
|
270
|
+
"wind": "Viento",
|
|
271
|
+
"wood": "Madera",
|
|
272
|
+
"wood_boat": "Barco de madera",
|
|
273
|
+
"woosh": "Woosh",
|
|
274
|
+
"zap": "Zap",
|
|
275
|
+
"zippers": "Zippers"
|
|
276
|
+
}
|
|
93
277
|
}
|
|
94
278
|
},
|
|
95
279
|
"services": {
|
|
96
280
|
"send_sound": {
|
|
281
|
+
"description": "Env\u00eda un sonido a un dispositivo",
|
|
97
282
|
"fields": {
|
|
98
283
|
"device_id": {
|
|
284
|
+
"description": "El ID del dispositivo al que se enviar\u00e1 el comando.",
|
|
99
285
|
"name": "Dispositivo"
|
|
100
286
|
},
|
|
287
|
+
"sound": {
|
|
288
|
+
"description": "El archivo de sonido a reproducir.",
|
|
289
|
+
"name": "Archivo de sonido de Alexa Skill"
|
|
290
|
+
},
|
|
101
291
|
"sound_variant": {
|
|
102
292
|
"description": "La variante del sonido a reproducir.",
|
|
103
293
|
"name": "Variante de sonido"
|
|
@@ -109,6 +299,7 @@
|
|
|
109
299
|
"description": "Env\u00eda un comando de texto a un dispositivo",
|
|
110
300
|
"fields": {
|
|
111
301
|
"device_id": {
|
|
302
|
+
"description": "El ID del dispositivo al que se enviar\u00e1 el comando.",
|
|
112
303
|
"name": "Dispositivo"
|
|
113
304
|
},
|
|
114
305
|
"text_command": {
|