iobroker.assistant 0.1.6 → 1.0.1
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.
- package/README.md +57 -4
- package/admin/custom/.vite/manifest.json +122 -77
- package/admin/custom/assets/Components-B9RaGibX.js +1 -0
- package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-CyY-cfOD.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-1XsLCK2M.js +1 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js +1217 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared-CY-9JaDr.js +2 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-O-DuGvHy.js +122 -0
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-B_v57Qfr.js +1 -0
- package/admin/custom/assets/dist-DiU1y0R9.js +1 -0
- package/admin/custom/assets/helpers-Dot7vgQQ.js +1 -0
- package/admin/custom/assets/hostInit-YwaHm9Ht.js +1 -0
- package/admin/custom/assets/iconLibraryData-B5fiyl1C.js +1 -0
- package/admin/custom/assets/index-P2Xu9kJm.js +1 -0
- package/admin/custom/assets/lib-mwVfdt2u.js +3 -0
- package/admin/custom/assets/{mf-entry-bootstrap-0-87f15505.js → mf-entry-bootstrap-0-0e37a5a4.js} +14 -2
- package/admin/custom/assets/pendingShares-Bs_RxVcM.js +2 -0
- package/admin/custom/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
- package/admin/custom/assets/utils-towTPKqG.js +4 -0
- package/admin/custom/assets/vite-preload-helper-BbbETgeG.js +1 -0
- package/admin/custom/customComponents.js +2 -2
- package/admin/custom/i18n/de.json +64 -57
- package/admin/custom/i18n/en.json +8 -1
- package/admin/custom/i18n/es.json +64 -57
- package/admin/custom/i18n/fr.json +64 -57
- package/admin/custom/i18n/it.json +64 -57
- package/admin/custom/i18n/nl.json +64 -57
- package/admin/custom/i18n/pl.json +64 -57
- package/admin/custom/i18n/pt.json +64 -57
- package/admin/custom/i18n/ru.json +64 -57
- package/admin/custom/i18n/uk.json +64 -57
- package/admin/custom/i18n/zh-cn.json +64 -57
- package/admin/custom/index.html +2 -2
- package/admin/custom/mf-manifest.json +1 -1
- package/admin/custom/mf-stats.json +1 -1
- package/admin/i18n/de.json +57 -2
- package/admin/i18n/en.json +57 -2
- package/admin/i18n/es.json +18 -2
- package/admin/i18n/fr.json +18 -2
- package/admin/i18n/it.json +18 -2
- package/admin/i18n/nl.json +18 -2
- package/admin/i18n/pl.json +18 -2
- package/admin/i18n/pt.json +18 -2
- package/admin/i18n/ru.json +18 -2
- package/admin/i18n/uk.json +18 -2
- package/admin/i18n/zh-cn.json +18 -2
- package/admin/jsonConfig.json +231 -5
- package/build/lib/ask.js +130 -0
- package/build/lib/ask.js.map +1 -0
- package/build/lib/llm.js +135 -13
- package/build/lib/llm.js.map +1 -1
- package/build/lib/nlu.js +74 -1
- package/build/lib/nlu.js.map +1 -1
- package/build/lib/notifications.js +112 -0
- package/build/lib/notifications.js.map +1 -0
- package/build/lib/presence.js +188 -0
- package/build/lib/presence.js.map +1 -0
- package/build/lib/routines.js +115 -0
- package/build/lib/routines.js.map +1 -0
- package/build/lib/targets.js +96 -0
- package/build/lib/targets.js.map +1 -0
- package/build/lib/triggers.js +632 -0
- package/build/lib/triggers.js.map +1 -0
- package/build/lib/voice/aws.js +9 -1
- package/build/lib/voice/aws.js.map +1 -1
- package/build/lib/voice/azure.js +9 -2
- package/build/lib/voice/azure.js.map +1 -1
- package/build/lib/voice/engines.js +82 -0
- package/build/lib/voice/engines.js.map +1 -1
- package/build/lib/voice/esphome.js +732 -0
- package/build/lib/voice/esphome.js.map +1 -0
- package/build/lib/voice/esphomeEntities.js +303 -0
- package/build/lib/voice/esphomeEntities.js.map +1 -0
- package/build/lib/voice/esphomeProto.js +181 -0
- package/build/lib/voice/esphomeProto.js.map +1 -0
- package/build/lib/voice/fallback.js +85 -0
- package/build/lib/voice/fallback.js.map +1 -0
- package/build/lib/voice/mediaServer.js +151 -0
- package/build/lib/voice/mediaServer.js.map +1 -0
- package/build/lib/voice/protocol.js.map +1 -1
- package/build/lib/voice/tone.js +32 -0
- package/build/lib/voice/tone.js.map +1 -0
- package/build/lib/voice/tts.js.map +1 -1
- package/build/lib/voice/ttsCache.js +274 -0
- package/build/lib/voice/ttsCache.js.map +1 -0
- package/build/lib/voice/vad.js +173 -0
- package/build/lib/voice/vad.js.map +1 -0
- package/build/lib/voice/voiceServer.js +13 -0
- package/build/lib/voice/voiceServer.js.map +1 -1
- package/build/main.js +1696 -67
- package/build/main.js.map +1 -1
- package/io-package.json +240 -2
- package/package.json +13 -12
- package/admin/custom/assets/Components-xWdtqvTH.js +0 -1
- package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-dybYZgsu.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__1__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BnSUsPHa.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__1__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-DlSVT49A.js +0 -1
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Cfsgderv.js +0 -1243
- package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-ByJf4zv_.js +0 -1494
- package/admin/custom/assets/hostInit-CZawMH9B.js +0 -1
- package/admin/custom/assets/index-JB7g1jgx.js +0 -1
- package/admin/custom/assets/lib-bB-LHRhZ.js +0 -3
- package/admin/custom/assets/rolldown-runtime-C0FnF6B9.js +0 -1
- package/admin/custom/assets/virtualExposes-brKKZvi0.js +0 -1
- package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAssistant__customComponents_js-CRhwj12f.js +0 -1
- package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomAssistant__customComponents_js-C5XHUc1J.js +0 -2
- package/admin/custom/assets/vite-preload-helper-B7qeedMF.js +0 -1
package/README.md
CHANGED
|
@@ -123,17 +123,50 @@ It runs the wake word (OpenWakeWord) on the device and streams to this adapter's
|
|
|
123
123
|
### Wyoming endpoint (experimental)
|
|
124
124
|
|
|
125
125
|
[Wyoming](https://github.com/rhasspy/wyoming) is the open voice protocol from the Home Assistant /
|
|
126
|
-
Rhasspy project (JSONL events over **TCP**), used by `wyoming-satellite
|
|
127
|
-
|
|
126
|
+
Rhasspy project (JSONL events over **TCP**), used by `wyoming-satellite` and other Rhasspy-style
|
|
127
|
+
services.
|
|
128
|
+
|
|
129
|
+
> ESPHome voice devices (including the **Home Assistant Voice PE**) do **not** speak Wyoming — they
|
|
130
|
+
> speak the ESPHome native API. Use the transport below for those.
|
|
128
131
|
|
|
129
132
|
Enable **Also accept Wyoming clients (TCP)** in the Voice tab (default port `10700`). The adapter then
|
|
130
133
|
exposes a Wyoming server that bridges to the same pipeline: `audio-start`/`audio-chunk`/`audio-stop` →
|
|
131
134
|
STT → answer → TTS streamed back as `audio-*` (plus a `transcript` event); `describe` → `info`;
|
|
132
135
|
`synthesize` → TTS.
|
|
133
136
|
|
|
134
|
-
> The protocol framing is unit-tested, but interop with real
|
|
137
|
+
> The protocol framing is unit-tested, but interop with a real `wyoming-satellite` is still
|
|
135
138
|
> **experimental** — please report what works. Uses the same STT/TTS providers as the UDP voice server.
|
|
136
139
|
|
|
140
|
+
### ESPHome voice satellites
|
|
141
|
+
|
|
142
|
+
Devices that run the **ESPHome voice assistant** — the [ThirdReality Voice & Music Assistant
|
|
143
|
+
(Dev Edition)](https://www.thirdreality.com/products/voice-music-assistant-dev-edition), the
|
|
144
|
+
**Home Assistant Voice PE**, or any box running
|
|
145
|
+
[linux-voice-assistant](https://github.com/OHF-Voice/linux-voice-assistant) — do not connect to a
|
|
146
|
+
server: they *are* one, waiting on **TCP 6053**. So here the adapter is the client and dials them,
|
|
147
|
+
the way Home Assistant would. Wake word, echo cancellation and playback stay on the device; the
|
|
148
|
+
adapter does speech recognition, the answer and speech synthesis.
|
|
149
|
+
|
|
150
|
+
Enable **Also drive ESPHome voice satellites** in the Voice tab and add one row per device
|
|
151
|
+
(address, optional port, room). Nothing needs to be installed or flashed on the device, and no
|
|
152
|
+
ESPHome tooling is involved — "ESPHome native API" is just the protocol name.
|
|
153
|
+
|
|
154
|
+
Two things are different from the other transports:
|
|
155
|
+
|
|
156
|
+
- **The adapter decides when you stopped talking.** These devices stream until the server stops them,
|
|
157
|
+
so end-of-speech detection runs here — tune it with **End of speech after (ms of silence)** if
|
|
158
|
+
replies cut you off or the assistant waits too long.
|
|
159
|
+
- **The spoken reply is fetched, not pushed.** The device plays a URL, so the adapter runs a small
|
|
160
|
+
HTTP server (**Media server port**, default `8099`) that serves the clip for a couple of minutes.
|
|
161
|
+
It must be reachable *from the device*; the address is derived from each device connection, and
|
|
162
|
+
only needs setting by hand behind NAT/Docker/VLAN.
|
|
163
|
+
|
|
164
|
+
Announcements (`tts.text`, `satellites.<id>.tts`, timers and alarms) reach these satellites too, and
|
|
165
|
+
each one shows up under `assistant.0.satellites.*` like any other.
|
|
166
|
+
|
|
167
|
+
> Developed against the ThirdReality speaker's firmware sources and covered by a loopback test
|
|
168
|
+
> against a fake device; feedback from real hardware is welcome.
|
|
169
|
+
|
|
137
170
|
## Roadmap
|
|
138
171
|
|
|
139
172
|
1. **Text assistant (done)** — LLM + tool-calling over ioBroker states.
|
|
@@ -141,13 +174,33 @@ STT → answer → TTS streamed back as `audio-*` (plus a `transcript` event); `
|
|
|
141
174
|
3. **TTS / STT engines** (Polly / Azure / OpenAI / AWS Transcribe) as adapter modules + config.
|
|
142
175
|
4. **Satellite endpoint** — UDP audio + MQTT control, so ESP/Pi satellites talk to the adapter directly.
|
|
143
176
|
5. **Wake word** — trained/managed via ioBroker, running on the device.
|
|
144
|
-
6. **Wyoming server endpoint** — accept
|
|
177
|
+
6. **Wyoming server endpoint** — accept `wyoming-satellite` and Rhasspy-style clients.
|
|
178
|
+
7. **ESPHome satellites (done)** — drive ThirdReality / HA Voice PE / linux-voice-assistant devices.
|
|
145
179
|
|
|
146
180
|
## Changelog
|
|
147
181
|
<!--
|
|
148
182
|
Placeholder for the next version (at the beginning of the line):
|
|
149
183
|
### **WORK IN PROGRESS**
|
|
150
184
|
-->
|
|
185
|
+
### 1.0.1 (2026-10-13)
|
|
186
|
+
* (@GermanBluefox) Use first model if not set
|
|
187
|
+
* (@GermanBluefox) Allowed to run only with local LLM
|
|
188
|
+
|
|
189
|
+
### 0.2.0 (2026-10-04)
|
|
190
|
+
* (@GermanBluefox) Added routines: a phrase ("good night") runs a list of actions and answers once. Matched before the offline rule engine and before the LLM, so a macro you wrote down is never reinterpreted
|
|
191
|
+
* (@GermanBluefox) The offline rule engine now answers questions about a kind of measurement without a device being named: "how is the air in here", "how warm is it everywhere", "how bright is it" are answered from every sensor of that kind, with a word for the air-quality number
|
|
192
|
+
* (@GermanBluefox) Spoken text is cached on disk, so repeated replies ("Okay.", "Timer finished") cost no cloud call and no latency. An answer over 400 characters is cut at the last sentence that fits, and `<speak>…</speak>` is now spoken as real SSML by Azure and Polly
|
|
193
|
+
* (@GermanBluefox) Added an optional second speech engine per direction: if the configured provider fails (outage, expired key, empty quota), speech-to-text and text-to-speech fall back to another one — with Vosk/Piper behind a cloud provider the house keeps working without the internet
|
|
194
|
+
* (@GermanBluefox) Added two optional settings for switch commands: confirm with a short beep instead of a spoken sentence, and verify the device's acknowledgement before reporting success
|
|
195
|
+
* (@GermanBluefox) An ESPHome satellite's own measurements (temperature, presence, status texts) now appear as read-only states under `satellites.<id>.controls.*`
|
|
196
|
+
* (@GermanBluefox) Announcements can address a group of rooms or a person: name a set of satellites in the new "Announcement targets" table and use it anywhere a target is accepted (`notify`, `askUser`, a trigger's room, the per-satellite `tts` state). The LLM also got an `announce` tool, so "tell Denis that dinner is ready" reaches his speakers — the configured names are part of the tool description. A question asked to a group counts the first answer, and the text is synthesised once for the whole group
|
|
197
|
+
* (@GermanBluefox) The assistant can now know who is at home: point the new "Presence" table at the states you already have (the residents adapter, a phone ping, your own flag) and name the person. It tells the LLM who is around, holds back announcements to an empty house on request (`notify` with `onlyWhenHome`), and exposes `presence.anyoneHome` / `presence.list` / `presence.lastArrival` — so greeting somebody on arrival is just a trigger on that state
|
|
198
|
+
* (@GermanBluefox) System notifications can now be spoken: write to `notify.text` / `notify.alert`, call `sendTo('assistant.0', 'notify', { text, severity })`, or pick the assistant in the ioBroker notification manager. The LLM turns the raw text into one natural sentence whose tone follows the severity (`info`/`notify`/`alert`, plus `direct` to speak it verbatim)
|
|
199
|
+
* (@GermanBluefox) Added Do-Not-Disturb, enforced by the adapter for every transport: `dnd` globally and `satellites.<id>.dnd` per satellite. Announcements are suppressed while it is on; alerts and texts starting with `!` are still played, and answers to your own questions are never affected
|
|
200
|
+
* (@GermanBluefox) Added proactive triggers (new "Triggers" tab): a trigger watches states or the clock and then announces something, writes a state, or asks you a question and acts on your answer ("The fryer has been on for 5 hours. Shall I switch it off?" — the LLM classifies the spoken reply against the configured response rules). Supports alternative conditions, `also`/`unless` refinements, a delay with `cancelWhen`, and a cooldown; each trigger has `triggers.items.<id>.{enabled,fire,lastFired,nextFireAt}` states plus a `triggers.enabled` master switch
|
|
201
|
+
* (@GermanBluefox) The assistant can now ask a question and wait for the answer: `sendTo('assistant.0', 'askUser', { question, room })` speaks it on a satellite, re-opens the microphone without a wake word and returns what was said. While a question is open that answer is routed to the caller instead of being read as a new command
|
|
202
|
+
* (@GermanBluefox) Added a fourth voice transport: ESPHome voice satellites (ThirdReality Voice & Music Assistant, Home Assistant Voice PE, linux-voice-assistant). The adapter dials the devices on TCP 6053, detects the end of speech itself and serves the spoken reply over a small HTTP media server
|
|
203
|
+
|
|
151
204
|
### 0.1.6 (2026-08-26)
|
|
152
205
|
* (@GermanBluefox) The offline rule engine now understands combined commands: "switch the light on and set the blind to 30 %", and one verb for several devices ("switch the light and the lamp on")
|
|
153
206
|
* (@GermanBluefox) Fixed: "50 percent" was not recognised as a level in English
|
|
@@ -1,102 +1,107 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"file": "assets/
|
|
4
|
-
"name": "
|
|
2
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js": {
|
|
3
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js",
|
|
4
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js",
|
|
5
5
|
"imports": [
|
|
6
|
-
"_rolldown-runtime-
|
|
6
|
+
"_rolldown-runtime-Dd_uD5pT.js"
|
|
7
7
|
]
|
|
8
8
|
},
|
|
9
|
-
"
|
|
10
|
-
"file": "assets/
|
|
11
|
-
"name": "
|
|
9
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-1XsLCK2M.js": {
|
|
10
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-1XsLCK2M.js",
|
|
11
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js",
|
|
12
12
|
"imports": [
|
|
13
|
-
"_rolldown-runtime-
|
|
14
|
-
"
|
|
13
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
14
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js"
|
|
15
15
|
]
|
|
16
16
|
},
|
|
17
|
-
"
|
|
18
|
-
"file": "assets/
|
|
19
|
-
"name": "
|
|
17
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js": {
|
|
18
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js",
|
|
19
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js",
|
|
20
20
|
"imports": [
|
|
21
|
-
"_rolldown-runtime-
|
|
22
|
-
"
|
|
23
|
-
"
|
|
21
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
22
|
+
"_vite-preload-helper-BbbETgeG.js",
|
|
23
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js",
|
|
24
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-1XsLCK2M.js"
|
|
25
|
+
],
|
|
26
|
+
"dynamicImports": [
|
|
27
|
+
"virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js",
|
|
28
|
+
"node_modules/@iobroker/gui-components/build/Components/IconLibrary/iconLibraryData.js"
|
|
24
29
|
]
|
|
25
30
|
},
|
|
26
|
-
"
|
|
27
|
-
"file": "assets/
|
|
28
|
-
"name": "
|
|
31
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared-CY-9JaDr.js": {
|
|
32
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared-CY-9JaDr.js",
|
|
33
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared",
|
|
29
34
|
"imports": [
|
|
30
|
-
"_rolldown-runtime-
|
|
31
|
-
"_vite-preload-helper-
|
|
32
|
-
"
|
|
33
|
-
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Cfsgderv.js"
|
|
35
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
36
|
+
"_vite-preload-helper-BbbETgeG.js",
|
|
37
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js"
|
|
34
38
|
],
|
|
35
39
|
"dynamicImports": [
|
|
36
|
-
"
|
|
40
|
+
"virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js"
|
|
37
41
|
]
|
|
38
42
|
},
|
|
39
|
-
"
|
|
40
|
-
"file": "assets/
|
|
41
|
-
"name": "
|
|
43
|
+
"_dist-DiU1y0R9.js": {
|
|
44
|
+
"file": "assets/dist-DiU1y0R9.js",
|
|
45
|
+
"name": "dist",
|
|
46
|
+
"imports": [
|
|
47
|
+
"_utils-towTPKqG.js"
|
|
48
|
+
]
|
|
42
49
|
},
|
|
43
|
-
"
|
|
44
|
-
"file": "assets/
|
|
45
|
-
"name": "
|
|
50
|
+
"_helpers-Dot7vgQQ.js": {
|
|
51
|
+
"file": "assets/helpers-Dot7vgQQ.js",
|
|
52
|
+
"name": "helpers",
|
|
46
53
|
"imports": [
|
|
47
|
-
"
|
|
48
|
-
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-ByJf4zv_.js"
|
|
49
|
-
],
|
|
50
|
-
"dynamicImports": [
|
|
51
|
-
"virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomAssistant__mf_owner__1",
|
|
52
|
-
"virtual:mf-exposes:__mfe_internal__ConfigCustomAssistant__customComponents_js"
|
|
54
|
+
"_utils-towTPKqG.js"
|
|
53
55
|
]
|
|
54
56
|
},
|
|
55
|
-
"
|
|
56
|
-
"file": "assets/
|
|
57
|
-
"name": "
|
|
57
|
+
"_rolldown-runtime-Dd_uD5pT.js": {
|
|
58
|
+
"file": "assets/rolldown-runtime-Dd_uD5pT.js",
|
|
59
|
+
"name": "rolldown-runtime"
|
|
60
|
+
},
|
|
61
|
+
"_utils-towTPKqG.js": {
|
|
62
|
+
"file": "assets/utils-towTPKqG.js",
|
|
63
|
+
"name": "utils",
|
|
58
64
|
"imports": [
|
|
59
|
-
"_vite-preload-helper-
|
|
60
|
-
],
|
|
61
|
-
"dynamicImports": [
|
|
62
|
-
"src/Components.tsx"
|
|
65
|
+
"_vite-preload-helper-BbbETgeG.js"
|
|
63
66
|
]
|
|
64
67
|
},
|
|
65
|
-
"_vite-preload-helper-
|
|
66
|
-
"file": "assets/vite-preload-helper-
|
|
68
|
+
"_vite-preload-helper-BbbETgeG.js": {
|
|
69
|
+
"file": "assets/vite-preload-helper-BbbETgeG.js",
|
|
67
70
|
"name": "vite-preload-helper"
|
|
68
71
|
},
|
|
69
72
|
"index.html": {
|
|
70
|
-
"file": "assets/index-
|
|
73
|
+
"file": "assets/index-P2Xu9kJm.js",
|
|
71
74
|
"name": "index",
|
|
72
75
|
"src": "index.html",
|
|
73
|
-
"isEntry": true
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
"isEntry": true
|
|
77
|
+
},
|
|
78
|
+
"node_modules/@iobroker/gui-components/build/Components/IconLibrary/iconLibraryData.js": {
|
|
79
|
+
"file": "assets/iconLibraryData-B5fiyl1C.js",
|
|
80
|
+
"name": "iconLibraryData",
|
|
81
|
+
"src": "node_modules/@iobroker/gui-components/build/Components/IconLibrary/iconLibraryData.js",
|
|
82
|
+
"isDynamicEntry": true
|
|
78
83
|
},
|
|
79
84
|
"node_modules/react-qr-code/lib/index.mjs": {
|
|
80
|
-
"file": "assets/lib-
|
|
85
|
+
"file": "assets/lib-mwVfdt2u.js",
|
|
81
86
|
"name": "lib",
|
|
82
87
|
"src": "node_modules/react-qr-code/lib/index.mjs",
|
|
83
88
|
"isDynamicEntry": true,
|
|
84
89
|
"imports": [
|
|
85
|
-
"_rolldown-runtime-
|
|
86
|
-
"
|
|
87
|
-
"
|
|
90
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
91
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js",
|
|
92
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js"
|
|
88
93
|
]
|
|
89
94
|
},
|
|
90
95
|
"src/Components.tsx": {
|
|
91
|
-
"file": "assets/Components-
|
|
96
|
+
"file": "assets/Components-B9RaGibX.js",
|
|
92
97
|
"name": "Components",
|
|
93
98
|
"src": "src/Components.tsx",
|
|
94
99
|
"isEntry": true,
|
|
95
100
|
"imports": [
|
|
96
|
-
"_rolldown-runtime-
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
101
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
102
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js",
|
|
103
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js",
|
|
104
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared-CY-9JaDr.js"
|
|
100
105
|
]
|
|
101
106
|
},
|
|
102
107
|
"virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomAssistant__customComponents_js": {
|
|
@@ -104,43 +109,83 @@
|
|
|
104
109
|
"name": "remoteEntry",
|
|
105
110
|
"src": "virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomAssistant__customComponents_js",
|
|
106
111
|
"imports": [
|
|
107
|
-
"
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
"
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
"imports": [
|
|
115
|
-
"_virtual_mf-exposes___mfe_internal__ConfigCustomAssistant__customComponents_js-C5XHUc1J.js"
|
|
112
|
+
"_vite-preload-helper-BbbETgeG.js",
|
|
113
|
+
"_dist-DiU1y0R9.js",
|
|
114
|
+
"_helpers-Dot7vgQQ.js"
|
|
115
|
+
],
|
|
116
|
+
"dynamicImports": [
|
|
117
|
+
"src/Components.tsx",
|
|
118
|
+
"virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomAssistant__mf_owner__1"
|
|
116
119
|
]
|
|
117
120
|
},
|
|
118
121
|
"virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomAssistant__mf_owner__1": {
|
|
119
|
-
"file": "assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-
|
|
122
|
+
"file": "assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-CyY-cfOD.js",
|
|
120
123
|
"name": "_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1",
|
|
121
124
|
"src": "virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomAssistant__mf_owner__1",
|
|
122
125
|
"isDynamicEntry": true,
|
|
123
126
|
"imports": [
|
|
124
|
-
"_vite-preload-helper-
|
|
125
|
-
"
|
|
127
|
+
"_vite-preload-helper-BbbETgeG.js",
|
|
128
|
+
"_dist-DiU1y0R9.js"
|
|
129
|
+
],
|
|
130
|
+
"dynamicImports": [
|
|
131
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js",
|
|
132
|
+
"virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js",
|
|
133
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js",
|
|
134
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-1XsLCK2M.js",
|
|
135
|
+
"virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
"virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js": {
|
|
139
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-O-DuGvHy.js",
|
|
140
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__",
|
|
141
|
+
"src": "virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__.js",
|
|
142
|
+
"isDynamicEntry": true,
|
|
143
|
+
"imports": [
|
|
144
|
+
"_rolldown-runtime-Dd_uD5pT.js",
|
|
145
|
+
"_vite-preload-helper-BbbETgeG.js",
|
|
146
|
+
"_dist-DiU1y0R9.js",
|
|
147
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js",
|
|
148
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js"
|
|
126
149
|
],
|
|
127
150
|
"dynamicImports": [
|
|
128
|
-
"
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
151
|
+
"node_modules/react-qr-code/lib/index.mjs"
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
"virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js": {
|
|
155
|
+
"file": "assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-B_v57Qfr.js",
|
|
156
|
+
"name": "_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__",
|
|
157
|
+
"src": "virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__.js",
|
|
158
|
+
"isDynamicEntry": true,
|
|
159
|
+
"imports": [
|
|
160
|
+
"_rolldown-runtime-Dd_uD5pT.js"
|
|
132
161
|
]
|
|
133
162
|
},
|
|
134
163
|
"virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__1__H_A_I__hostAutoInit__H_A_I__.js": {
|
|
135
|
-
"file": "assets/hostInit-
|
|
164
|
+
"file": "assets/hostInit-YwaHm9Ht.js",
|
|
136
165
|
"name": "hostInit",
|
|
137
166
|
"src": "virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__1__H_A_I__hostAutoInit__H_A_I__.js",
|
|
138
167
|
"imports": [
|
|
139
|
-
"_vite-preload-helper-
|
|
168
|
+
"_vite-preload-helper-BbbETgeG.js",
|
|
169
|
+
"_helpers-Dot7vgQQ.js"
|
|
140
170
|
],
|
|
141
171
|
"dynamicImports": [
|
|
142
172
|
"virtual:mf-REMOTE_ENTRY_ID:__mfe_internal__ConfigCustomAssistant__customComponents_js",
|
|
143
173
|
"virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomAssistant__mf_owner__1"
|
|
144
174
|
]
|
|
175
|
+
},
|
|
176
|
+
"virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__1__P_S__pendingShares__P_S__.js": {
|
|
177
|
+
"file": "assets/pendingShares-Bs_RxVcM.js",
|
|
178
|
+
"name": "pendingShares",
|
|
179
|
+
"src": "virtual:mf:__mfe_internal__ConfigCustomAssistant__mf_owner__1__P_S__pendingShares__P_S__.js",
|
|
180
|
+
"imports": [
|
|
181
|
+
"_vite-preload-helper-BbbETgeG.js"
|
|
182
|
+
],
|
|
183
|
+
"dynamicImports": [
|
|
184
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js",
|
|
185
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js",
|
|
186
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-1XsLCK2M.js",
|
|
187
|
+
"__virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared-CY-9JaDr.js",
|
|
188
|
+
"virtual:mf-localSharedImportMap:__mfe_internal__ConfigCustomAssistant__mf_owner__1"
|
|
189
|
+
]
|
|
145
190
|
}
|
|
146
191
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{v as t}from"./_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-CzBMxGFr.js";import{An as n,At as r,Bt as i,Ft as a,Gn as o,Hn as s,I as c,Jr as l,Jt as u,Kn as ee,Kt as d,Nn as te,O as f,Pn as p,Pt as ne,R as re,Tn as m,Tt as ie,W as ae,Wt as h,Xt as g,Yt as oe,Zt as _,_n as se,_t as ce,bn as le,cn as v,d as ue,dn as y,en as b,f as de,fn as x,gn as fe,hn as pe,in as S,k as me,kr as C,on as w,p as T,qr as E,qt as D,rn as O,un as k,wn as he,yn as ge,zn as _e}from"./_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js";import{t as A}from"./_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared-CY-9JaDr.js";var j=e({custom_assistant_Announcement:()=>M,custom_assistant_Close:()=>N,custom_assistant_Host:()=>P,custom_assistant_Satellite:()=>F,custom_assistant_Satellites:()=>I,custom_assistant_Speak:()=>L,custom_assistant_Status:()=>R,custom_assistant_auto:()=>z,custom_assistant_device:()=>B,custom_assistant_filter:()=>V,custom_assistant_hint:()=>H,custom_assistant_llm_downloading:()=>ve,custom_assistant_llm_error:()=>ye,custom_assistant_llm_idle:()=>be,custom_assistant_llm_installing:()=>xe,custom_assistant_llm_loading:()=>Se,custom_assistant_llm_ready:()=>Ce,custom_assistant_offline:()=>we,custom_assistant_online:()=>Te,custom_assistant_read:()=>Ee,custom_assistant_room:()=>De,custom_assistant_sat_idle:()=>Oe,custom_assistant_sat_listening:()=>ke,custom_assistant_sat_offline:()=>Ae,custom_assistant_sat_processing:()=>je,custom_assistant_sat_speaking:()=>Me,custom_assistant_type:()=>`Typ`,custom_assistant_wake_word_hint:()=>Ne,custom_assistant_write:()=>Pe,default:()=>Fe}),M=`Ansage`,N=`Schließen`,P=`Host`,F=`Satellit`,I=`Satelliten`,L=`Sprechen`,R=`Status`,z=`automatisch`,B=`Gerät`,V=`Filter`,H=`Deaktivieren Sie die Leseberechtigung, um ein Gerät vor dem Assistenten auszublenden, oder die Schreibberechtigung, um es schreibgeschützt zu halten (z. B. bei Sperren). Geräte sind standardmäßig vollständig zugelassen.`,ve=`Modell wird geladen …`,ye=`Fehler`,be=`inaktiv`,xe=`Engine wird installiert …`,Se=`lädt …`,Ce=`bereit`,we=`offline`,Te=`online`,Ee=`Lesen`,De=`Zimmer`,Oe=`inaktiv`,ke=`hört zu`,Ae=`offline`,je=`verarbeitet`,Me=`spricht`,Ne=`Das Wake-Word läuft auf dem Gerät. Mit der Maus über ein Wort siehst du die trainierten Sprachen — die meisten können nur Englisch.`,Pe=`Schreiben`,Fe={"custom_assistant_%s of %s active":`%s von %s aktiv`,custom_assistant_Announcement:M,"custom_assistant_Clear chat":`Chat leeren`,custom_assistant_Close:N,"custom_assistant_Device cache cleared.":`Gerätecache geleert.`,"custom_assistant_Device settings":`Geräte-Einstellungen`,"custom_assistant_Hide disabled":`Deaktivierte ausblenden`,custom_assistant_Host:P,"custom_assistant_Last seen":`Zuletzt gesehen`,"custom_assistant_Listening…":`Höre zu …`,"custom_assistant_Local model":`Lokales Modell`,"custom_assistant_Name language: %s":`Namens-Sprache: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Es wurden keine Geräte erkannt. Weisen Sie Räumen und Funktionen in ioBroker Zustände zu.`,"custom_assistant_No messages yet. Type a question below.":`Noch keine Nachrichten. Geben Sie unten eine Frage ein.`,"custom_assistant_No satellites registered yet.":`Noch keine Satelliten registriert.`,"custom_assistant_Per-device permissions":`Gerätespezifische Berechtigungen`,"custom_assistant_Play answer (backend TTS)":`Antwort abspielen (Backend-TTS)`,"custom_assistant_Read answers aloud":`Antworten vorlesen`,"custom_assistant_Refresh device cache":`Gerätecache aktualisieren`,custom_assistant_Satellite:F,custom_assistant_Satellites:I,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Speichern Sie die Konfiguration (die Instanz startet neu), bevor Sie chatten.`,"custom_assistant_Send announcement":`Ansage senden`,"custom_assistant_Settings for %s":`Einstellungen für %s`,custom_assistant_Speak:L,"custom_assistant_Speak on all satellites":`Auf allen Satelliten ansagen`,"custom_assistant_Start the assistant instance to chat.":`Starten Sie die Assistenteninstanz, um zu chatten.`,"custom_assistant_Start the assistant instance to load the device list.":`Starten Sie die Assistenteninstanz, um die Geräteliste zu laden.`,custom_assistant_Status:R,"custom_assistant_Stop listening":`Zuhören beenden`,"custom_assistant_Stop reading answers aloud":`Vorlesen beenden`,"custom_assistant_Test chat":`Test-Chat`,"custom_assistant_Thinking…":`Denkt nach …`,"custom_assistant_This satellite exposes no settings.":`Dieser Satellit bietet keine Einstellungen.`,"custom_assistant_Translate all missing (%s)":`Alle fehlenden übersetzen (%s)`,"custom_assistant_Translate name into %s":`Namen nach %s übersetzen`,"custom_assistant_Type a message…":`Nachricht eingeben …`,"custom_assistant_Wake words":`Wake-Words`,custom_assistant_auto:z,"custom_assistant_change it on the Voice tab":`im Voice-Tab umschalten`,custom_assistant_device:B,custom_assistant_filter:V,custom_assistant_hint:H,custom_assistant_llm_downloading:ve,custom_assistant_llm_error:ye,custom_assistant_llm_idle:be,custom_assistant_llm_installing:xe,custom_assistant_llm_loading:Se,"custom_assistant_llm_not installed":`nicht installiert`,custom_assistant_llm_ready:Ce,"custom_assistant_no name in %s (showing %s)":`Kein Name in "%s" — angezeigt: "%s"`,custom_assistant_offline:we,custom_assistant_online:Te,custom_assistant_read:Ee,custom_assistant_room:De,custom_assistant_sat_idle:Oe,custom_assistant_sat_listening:ke,custom_assistant_sat_offline:Ae,custom_assistant_sat_processing:je,custom_assistant_sat_speaking:Me,custom_assistant_type:`Typ`,custom_assistant_wake_word_hint:Ne,custom_assistant_write:Pe},U=e({custom_assistant_Announcement:()=>Ie,custom_assistant_Close:()=>Le,custom_assistant_Host:()=>Re,custom_assistant_Satellite:()=>ze,custom_assistant_Satellites:()=>Be,custom_assistant_Speak:()=>Ve,custom_assistant_Status:()=>He,custom_assistant_auto:()=>Ue,custom_assistant_device:()=>We,custom_assistant_filter:()=>Ge,custom_assistant_hint:()=>Ke,custom_assistant_llm_downloading:()=>qe,custom_assistant_llm_error:()=>Je,custom_assistant_llm_idle:()=>Ye,custom_assistant_llm_installing:()=>Xe,custom_assistant_llm_loading:()=>Ze,custom_assistant_llm_ready:()=>Qe,custom_assistant_offline:()=>$e,custom_assistant_online:()=>et,custom_assistant_read:()=>tt,custom_assistant_room:()=>nt,custom_assistant_sat_idle:()=>rt,custom_assistant_sat_listening:()=>it,custom_assistant_sat_offline:()=>at,custom_assistant_sat_processing:()=>ot,custom_assistant_sat_speaking:()=>st,custom_assistant_type:()=>ct,custom_assistant_wake_word_hint:()=>lt,custom_assistant_write:()=>ut,default:()=>dt}),Ie=`Announcement`,Le=`Close`,Re=`Host`,ze=`Satellite`,Be=`Satellites`,Ve=`Speak`,He=`Status`,Ue=`auto`,We=`Device`,Ge=`Filter`,Ke=`Uncheck read to hide a device from the assistant, or uncheck write to keep it read-only (e.g. locks). Devices default to fully allowed.`,qe=`downloading model…`,Je=`error`,Ye=`idle`,Xe=`installing engine…`,Ze=`loading…`,Qe=`ready`,$e=`offline`,et=`online`,tt=`Read`,nt=`Room`,rt=`idle`,it=`listening`,at=`offline`,ot=`processing`,st=`speaking`,ct=`Type`,lt=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,ut=`Write`,dt={"custom_assistant_%s of %s active":`%s of %s active`,custom_assistant_Announcement:Ie,"custom_assistant_Clear chat":`Clear chat`,custom_assistant_Close:Le,"custom_assistant_Device cache cleared.":`Device cache cleared.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Hide disabled":`Hide disabled`,custom_assistant_Host:Re,"custom_assistant_Last seen":`Last seen`,"custom_assistant_Listening…":`Listening…`,"custom_assistant_Local model":`Local model`,"custom_assistant_Name language: %s":`Name language: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`No devices detected. Assign states to rooms and functions in ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`No messages yet. Type a question below.`,"custom_assistant_No satellites registered yet.":`No satellites registered yet.`,"custom_assistant_Per-device permissions":`Per-device permissions`,"custom_assistant_Play answer (backend TTS)":`Play answer (backend TTS)`,"custom_assistant_Read answers aloud":`Read answers aloud`,"custom_assistant_Refresh device cache":`Refresh device cache`,custom_assistant_Satellite:ze,custom_assistant_Satellites:Be,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Save the configuration (the instance will restart) before chatting.`,"custom_assistant_Send announcement":`Send announcement`,"custom_assistant_Settings for %s":`Settings for %s`,custom_assistant_Speak:Ve,"custom_assistant_Speak on all satellites":`Speak on all satellites`,"custom_assistant_Start the assistant instance to chat.":`Start the assistant instance to chat.`,"custom_assistant_Start the assistant instance to load the device list.":`Start the assistant instance to load the device list.`,custom_assistant_Status:He,"custom_assistant_Stop listening":`Stop listening`,"custom_assistant_Stop reading answers aloud":`Stop reading answers aloud`,"custom_assistant_Test chat":`Test chat`,"custom_assistant_Thinking…":`Thinking…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,"custom_assistant_Translate all missing (%s)":`Translate all missing (%s)`,"custom_assistant_Translate name into %s":`Translate name into %s`,"custom_assistant_Type a message…":`Type a message…`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:Ue,"custom_assistant_change it on the Voice tab":`change it on the Voice tab`,custom_assistant_device:We,custom_assistant_filter:Ge,custom_assistant_hint:Ke,custom_assistant_llm_downloading:qe,custom_assistant_llm_error:Je,custom_assistant_llm_idle:Ye,custom_assistant_llm_installing:Xe,custom_assistant_llm_loading:Ze,"custom_assistant_llm_not installed":`not installed`,custom_assistant_llm_ready:Qe,"custom_assistant_no name in %s (showing %s)":`No name in "%s" — showing "%s"`,custom_assistant_offline:$e,custom_assistant_online:et,custom_assistant_read:tt,custom_assistant_room:nt,custom_assistant_sat_idle:rt,custom_assistant_sat_listening:it,custom_assistant_sat_offline:at,custom_assistant_sat_processing:ot,custom_assistant_sat_speaking:st,custom_assistant_type:ct,custom_assistant_wake_word_hint:lt,custom_assistant_write:ut},W=e({custom_assistant_Announcement:()=>ft,custom_assistant_Close:()=>pt,custom_assistant_Host:()=>mt,custom_assistant_Satellite:()=>ht,custom_assistant_Satellites:()=>gt,custom_assistant_Speak:()=>_t,custom_assistant_Status:()=>vt,custom_assistant_auto:()=>yt,custom_assistant_device:()=>bt,custom_assistant_filter:()=>xt,custom_assistant_hint:()=>St,custom_assistant_llm_downloading:()=>Ct,custom_assistant_llm_error:()=>wt,custom_assistant_llm_idle:()=>Tt,custom_assistant_llm_installing:()=>Et,custom_assistant_llm_loading:()=>Dt,custom_assistant_llm_ready:()=>Ot,custom_assistant_offline:()=>kt,custom_assistant_online:()=>At,custom_assistant_read:()=>jt,custom_assistant_room:()=>Mt,custom_assistant_sat_idle:()=>Nt,custom_assistant_sat_listening:()=>Pt,custom_assistant_sat_offline:()=>Ft,custom_assistant_sat_processing:()=>It,custom_assistant_sat_speaking:()=>Lt,custom_assistant_type:()=>Rt,custom_assistant_wake_word_hint:()=>zt,custom_assistant_write:()=>Bt,default:()=>Vt}),ft=`Anuncio`,pt=`Close`,mt=`Anfitrión`,ht=`Satélite`,gt=`satélites`,_t=`Hablar`,vt=`Estado`,yt=`auto`,bt=`Dispositivo`,xt=`Filtrar`,St=`Desactive la opción de lectura para ocultar un dispositivo al asistente, o desactive la opción de escritura para mantenerlo en modo de solo lectura (por ejemplo, candados). Los dispositivos vienen configurados por defecto con acceso completo.`,Ct=`Descargando modelo…`,wt=`error`,Tt=`inactivo`,Et=`instalando el motor…`,Dt=`cargando…`,Ot=`listo`,kt=`desconectado`,At=`en línea`,jt=`Leer`,Mt=`Habitación`,Nt=`inactivo`,Pt=`escuchando`,Ft=`desconectado`,It=`tratamiento`,Lt=`discurso`,Rt=`Tipo`,zt=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,Bt=`Escribir`,Vt={"custom_assistant_%s of %s active":`%s of %s active`,custom_assistant_Announcement:ft,"custom_assistant_Clear chat":`Chat claro`,custom_assistant_Close:pt,"custom_assistant_Device cache cleared.":`Se ha borrado la caché del dispositivo.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Hide disabled":`Ocultar deshabilitado`,custom_assistant_Host:mt,"custom_assistant_Last seen":`Última vez visto`,"custom_assistant_Listening…":`Escuchando…`,"custom_assistant_Local model":`Modelo local`,"custom_assistant_Name language: %s":`Idioma del nombre: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`No se detectaron dispositivos. Asigne estados a las salas y funciones en ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Aún no hay mensajes. Escribe tu pregunta a continuación.`,"custom_assistant_No satellites registered yet.":`Aún no se han registrado satélites.`,"custom_assistant_Per-device permissions":`Permisos por dispositivo`,"custom_assistant_Play answer (backend TTS)":`Reproducir respuesta (TTS de backend)`,"custom_assistant_Read answers aloud":`Lee las respuestas en voz alta.`,"custom_assistant_Refresh device cache":`Actualizar la caché del dispositivo`,custom_assistant_Satellite:ht,custom_assistant_Satellites:gt,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Guarda la configuración (la instancia se reiniciará) antes de chatear.`,"custom_assistant_Send announcement":`Enviar anuncio`,"custom_assistant_Settings for %s":`Settings for %s`,custom_assistant_Speak:_t,"custom_assistant_Speak on all satellites":`Hablar por todos los satélites`,"custom_assistant_Start the assistant instance to chat.":`Inicia la instancia del asistente para chatear.`,"custom_assistant_Start the assistant instance to load the device list.":`Inicie la instancia del asistente para cargar la lista de dispositivos.`,custom_assistant_Status:vt,"custom_assistant_Stop listening":`Deja de escuchar`,"custom_assistant_Stop reading answers aloud":`Deja de leer las respuestas en voz alta.`,"custom_assistant_Test chat":`Chat de prueba`,"custom_assistant_Thinking…":`Pensamiento…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,"custom_assistant_Translate all missing (%s)":`Traducir todos los (%s) faltantes`,"custom_assistant_Translate name into %s":`Traducir nombre a %s`,"custom_assistant_Type a message…":`Escribe un mensaje…`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:yt,"custom_assistant_change it on the Voice tab":`Cámbialo en la pestaña Voz.`,custom_assistant_device:bt,custom_assistant_filter:xt,custom_assistant_hint:St,custom_assistant_llm_downloading:Ct,custom_assistant_llm_error:wt,custom_assistant_llm_idle:Tt,custom_assistant_llm_installing:Et,custom_assistant_llm_loading:Dt,"custom_assistant_llm_not installed":`no instalado`,custom_assistant_llm_ready:Ot,"custom_assistant_no name in %s (showing %s)":`No se encontró ningún nombre en "%s" — se muestra "%s"`,custom_assistant_offline:kt,custom_assistant_online:At,custom_assistant_read:jt,custom_assistant_room:Mt,custom_assistant_sat_idle:Nt,custom_assistant_sat_listening:Pt,custom_assistant_sat_offline:Ft,custom_assistant_sat_processing:It,custom_assistant_sat_speaking:Lt,custom_assistant_type:Rt,custom_assistant_wake_word_hint:zt,custom_assistant_write:Bt},G=e({custom_assistant_Announcement:()=>Ht,custom_assistant_Close:()=>Ut,custom_assistant_Host:()=>Wt,custom_assistant_Satellite:()=>Gt,custom_assistant_Satellites:()=>Kt,custom_assistant_Speak:()=>qt,custom_assistant_Status:()=>Jt,custom_assistant_auto:()=>Yt,custom_assistant_device:()=>Xt,custom_assistant_filter:()=>Zt,custom_assistant_hint:()=>Qt,custom_assistant_llm_downloading:()=>$t,custom_assistant_llm_error:()=>en,custom_assistant_llm_idle:()=>tn,custom_assistant_llm_installing:()=>nn,custom_assistant_llm_loading:()=>rn,custom_assistant_llm_ready:()=>an,custom_assistant_offline:()=>on,custom_assistant_online:()=>sn,custom_assistant_read:()=>cn,custom_assistant_room:()=>ln,custom_assistant_sat_idle:()=>un,custom_assistant_sat_listening:()=>dn,custom_assistant_sat_offline:()=>fn,custom_assistant_sat_processing:()=>pn,custom_assistant_sat_speaking:()=>mn,custom_assistant_type:()=>hn,custom_assistant_wake_word_hint:()=>gn,custom_assistant_write:()=>_n,default:()=>vn}),Ht=`Annonce`,Ut=`Close`,Wt=`Hôte`,Gt=`Satellite`,Kt=`Satellites`,qt=`Parler`,Jt=`Statut`,Yt=`auto`,Xt=`Appareil`,Zt=`Filtre`,Qt=`Décochez l'option «\xA0Lecture\xA0» pour masquer un périphérique à l'assistant, ou décochez l'option «\xA0Écriture\xA0» pour le rendre accessible en lecture seule (par exemple, les verrous). Par défaut, tous les périphériques sont autorisés.`,$t=`téléchargement du modèle…`,en=`erreur`,tn=`inactif`,nn=`installation du moteur…`,rn=`chargement…`,an=`prêt`,on=`hors ligne`,sn=`en ligne`,cn=`Lire`,ln=`Chambre`,un=`inactif`,dn=`écoute`,fn=`hors ligne`,pn=`traitement`,mn=`Parlant`,hn=`Taper`,gn=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,_n=`Écrire`,vn={"custom_assistant_%s of %s active":`%s of %s active`,custom_assistant_Announcement:Ht,"custom_assistant_Clear chat":`Discussion claire`,custom_assistant_Close:Ut,"custom_assistant_Device cache cleared.":`Cache du périphérique effacé.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Hide disabled":`Masquer les fonctions désactivées`,custom_assistant_Host:Wt,"custom_assistant_Last seen":`Dernière observation`,"custom_assistant_Listening…":`Écoute…`,"custom_assistant_Local model":`Modèle local`,"custom_assistant_Name language: %s":`Langue du nom\xA0: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Aucun appareil détecté. Attribuez des états aux salles et aux fonctions dans ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Aucun message pour l'instant. Posez votre question ci-dessous.`,"custom_assistant_No satellites registered yet.":`Aucun satellite enregistré pour le moment.`,"custom_assistant_Per-device permissions":`Autorisations par appareil`,"custom_assistant_Play answer (backend TTS)":`Réponse de lecture (TTS backend)`,"custom_assistant_Read answers aloud":`Lisez les réponses à voix haute`,"custom_assistant_Refresh device cache":`Actualiser le cache de l'appareil`,custom_assistant_Satellite:Gt,custom_assistant_Satellites:Kt,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Enregistrez la configuration (l'instance redémarrera) avant de discuter.`,"custom_assistant_Send announcement":`Envoyer l'annonce`,"custom_assistant_Settings for %s":`Settings for %s`,custom_assistant_Speak:qt,"custom_assistant_Speak on all satellites":`Parlez sur tous les satellites`,"custom_assistant_Start the assistant instance to chat.":`Démarrez l'instance de l'assistant pour discuter.`,"custom_assistant_Start the assistant instance to load the device list.":`Démarrez l'instance de l'assistant pour charger la liste des périphériques.`,custom_assistant_Status:Jt,"custom_assistant_Stop listening":`Arrêtez d'écouter`,"custom_assistant_Stop reading answers aloud":`Arrêtez de lire les réponses à voix haute`,"custom_assistant_Test chat":`Chat de test`,"custom_assistant_Thinking…":`Pensée…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,"custom_assistant_Translate all missing (%s)":`Traduire tout ce qui est manquant (%s)`,"custom_assistant_Translate name into %s":`Traduire le nom en %s`,"custom_assistant_Type a message…":`Saisissez un message…`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:Yt,"custom_assistant_change it on the Voice tab":`modifiez-le dans l'onglet Voix`,custom_assistant_device:Xt,custom_assistant_filter:Zt,custom_assistant_hint:Qt,custom_assistant_llm_downloading:$t,custom_assistant_llm_error:en,custom_assistant_llm_idle:tn,custom_assistant_llm_installing:nn,custom_assistant_llm_loading:rn,"custom_assistant_llm_not installed":`non installé`,custom_assistant_llm_ready:an,"custom_assistant_no name in %s (showing %s)":`Aucun nom dans « %s » — affichage de « %s »`,custom_assistant_offline:on,custom_assistant_online:sn,custom_assistant_read:cn,custom_assistant_room:ln,custom_assistant_sat_idle:un,custom_assistant_sat_listening:dn,custom_assistant_sat_offline:fn,custom_assistant_sat_processing:pn,custom_assistant_sat_speaking:mn,custom_assistant_type:hn,custom_assistant_wake_word_hint:gn,custom_assistant_write:_n},K=e({custom_assistant_Announcement:()=>yn,custom_assistant_Close:()=>bn,custom_assistant_Host:()=>xn,custom_assistant_Satellite:()=>Sn,custom_assistant_Satellites:()=>Cn,custom_assistant_Speak:()=>wn,custom_assistant_Status:()=>Tn,custom_assistant_auto:()=>En,custom_assistant_device:()=>Dn,custom_assistant_filter:()=>On,custom_assistant_hint:()=>kn,custom_assistant_llm_downloading:()=>An,custom_assistant_llm_error:()=>jn,custom_assistant_llm_idle:()=>Mn,custom_assistant_llm_installing:()=>Nn,custom_assistant_llm_loading:()=>Pn,custom_assistant_llm_ready:()=>Fn,custom_assistant_offline:()=>In,custom_assistant_online:()=>Ln,custom_assistant_read:()=>Rn,custom_assistant_room:()=>zn,custom_assistant_sat_idle:()=>Bn,custom_assistant_sat_listening:()=>Vn,custom_assistant_sat_offline:()=>Hn,custom_assistant_sat_processing:()=>Un,custom_assistant_sat_speaking:()=>Wn,custom_assistant_type:()=>Gn,custom_assistant_wake_word_hint:()=>Kn,custom_assistant_write:()=>qn,default:()=>Jn}),yn=`Annuncio`,bn=`Close`,xn=`Ospite`,Sn=`Satellitare`,Cn=`Satelliti`,wn=`Parlare`,Tn=`Stato`,En=`auto`,Dn=`Dispositivo`,On=`Filtro`,kn=`Deseleziona "Lettura" per nascondere un dispositivo all'assistente, oppure deseleziona "Scrittura" per mantenerlo in sola lettura (ad esempio, per bloccare le serrature). Per impostazione predefinita, i dispositivi sono completamente accessibili.`,An=`modello di download…`,jn=`errore`,Mn=`oziare`,Nn=`installazione del motore…`,Pn=`caricamento…`,Fn=`pronto`,In=`offline`,Ln=`online`,Rn=`Leggere`,zn=`Camera`,Bn=`oziare`,Vn=`ascolto`,Hn=`offline`,Un=`elaborazione`,Wn=`A proposito di`,Gn=`Tipo`,Kn=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,qn=`Scrivere`,Jn={"custom_assistant_%s of %s active":`%s of %s active`,custom_assistant_Announcement:yn,"custom_assistant_Clear chat":`Chat chiara`,custom_assistant_Close:bn,"custom_assistant_Device cache cleared.":`Cache del dispositivo svuotata.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Hide disabled":`Nascondi disabilitato`,custom_assistant_Host:xn,"custom_assistant_Last seen":`Ultimo avvistamento`,"custom_assistant_Listening…":`Ascolto…`,"custom_assistant_Local model":`Modello locale`,"custom_assistant_Name language: %s":`Lingua del nome: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Nessun dispositivo rilevato. Assegna stati a stanze e funzioni in ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Nessun messaggio ancora. Scrivi una domanda qui sotto.`,"custom_assistant_No satellites registered yet.":`Nessun satellite ancora registrato.`,"custom_assistant_Per-device permissions":`Autorizzazioni per dispositivo`,"custom_assistant_Play answer (backend TTS)":`Riproduci la risposta (TST di backend)`,"custom_assistant_Read answers aloud":`Leggi le risposte ad alta voce`,"custom_assistant_Refresh device cache":`Aggiorna la cache del dispositivo`,custom_assistant_Satellite:Sn,custom_assistant_Satellites:Cn,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Salva la configurazione (l'istanza si riavvierà) prima di iniziare la chat.`,"custom_assistant_Send announcement":`Invia annuncio`,"custom_assistant_Settings for %s":`Settings for %s`,custom_assistant_Speak:wn,"custom_assistant_Speak on all satellites":`Comunicare su tutti i satelliti`,"custom_assistant_Start the assistant instance to chat.":`Avvia l'assistente per chattare.`,"custom_assistant_Start the assistant instance to load the device list.":`Avvia l'istanza dell'assistente per caricare l'elenco dei dispositivi.`,custom_assistant_Status:Tn,"custom_assistant_Stop listening":`Smetti di ascoltare`,"custom_assistant_Stop reading answers aloud":`Smetti di leggere le risposte ad alta voce`,"custom_assistant_Test chat":`Chat di prova`,"custom_assistant_Thinking…":`Pensiero…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,"custom_assistant_Translate all missing (%s)":`Traduci tutto ciò che manca (%s)`,"custom_assistant_Translate name into %s":`Traduci il nome in %s`,"custom_assistant_Type a message…":`Digita un messaggio…`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:En,"custom_assistant_change it on the Voice tab":`modificalo nella scheda Voce`,custom_assistant_device:Dn,custom_assistant_filter:On,custom_assistant_hint:kn,custom_assistant_llm_downloading:An,custom_assistant_llm_error:jn,custom_assistant_llm_idle:Mn,custom_assistant_llm_installing:Nn,custom_assistant_llm_loading:Pn,"custom_assistant_llm_not installed":`non installato`,custom_assistant_llm_ready:Fn,"custom_assistant_no name in %s (showing %s)":`Nessun nome in "%s" — visualizzazione di "%s"`,custom_assistant_offline:In,custom_assistant_online:Ln,custom_assistant_read:Rn,custom_assistant_room:zn,custom_assistant_sat_idle:Bn,custom_assistant_sat_listening:Vn,custom_assistant_sat_offline:Hn,custom_assistant_sat_processing:Un,custom_assistant_sat_speaking:Wn,custom_assistant_type:Gn,custom_assistant_wake_word_hint:Kn,custom_assistant_write:qn},q=e({custom_assistant_Announcement:()=>Yn,custom_assistant_Close:()=>Xn,custom_assistant_Host:()=>Zn,custom_assistant_Satellite:()=>Qn,custom_assistant_Satellites:()=>$n,custom_assistant_Speak:()=>er,custom_assistant_Status:()=>tr,custom_assistant_auto:()=>nr,custom_assistant_device:()=>rr,custom_assistant_filter:()=>ir,custom_assistant_hint:()=>ar,custom_assistant_llm_downloading:()=>or,custom_assistant_llm_error:()=>sr,custom_assistant_llm_idle:()=>cr,custom_assistant_llm_installing:()=>lr,custom_assistant_llm_loading:()=>ur,custom_assistant_llm_ready:()=>dr,custom_assistant_offline:()=>fr,custom_assistant_online:()=>pr,custom_assistant_read:()=>mr,custom_assistant_room:()=>hr,custom_assistant_sat_idle:()=>gr,custom_assistant_sat_listening:()=>_r,custom_assistant_sat_offline:()=>vr,custom_assistant_sat_processing:()=>yr,custom_assistant_sat_speaking:()=>br,custom_assistant_type:()=>xr,custom_assistant_wake_word_hint:()=>Sr,custom_assistant_write:()=>Cr,default:()=>wr}),Yn=`Aankondiging`,Xn=`Close`,Zn=`Gastheer`,Qn=`Satelliet`,$n=`Satellieten`,er=`Spreken`,tr=`Status`,nr=`auto`,rr=`Apparaat`,ir=`Filter`,ar=`Schakel de optie 'Lezen' uit om een apparaat voor de assistent te verbergen, of schakel de optie 'Schrijven' uit om het apparaat alleen-lezen te houden (bijv. sloten). Apparaten zijn standaard volledig toegestaan.`,or=`Model downloaden…`,sr=`fout`,cr=`inactief`,lr=`motor installeren…`,ur=`laden…`,dr=`klaar`,fr=`offline`,pr=`online`,mr=`Lezen`,hr=`Kamer`,gr=`inactief`,_r=`luisteren`,vr=`offline`,yr=`verwerking`,br=`spreken`,xr=`Type`,Sr=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,Cr=`Schrijven`,wr={"custom_assistant_%s of %s active":`%s of %s active`,custom_assistant_Announcement:Yn,"custom_assistant_Clear chat":`Duidelijke chat`,custom_assistant_Close:Xn,"custom_assistant_Device cache cleared.":`Apparaatcache gewist.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Hide disabled":`Verberg uitgeschakeld`,custom_assistant_Host:Zn,"custom_assistant_Last seen":`Laatst gezien`,"custom_assistant_Listening…":`Luisteren…`,"custom_assistant_Local model":`Lokaal model`,"custom_assistant_Name language: %s":`Naamtaal: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Geen apparaten gedetecteerd. Wijs statussen toe aan kamers en functies in ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Nog geen berichten. Typ hieronder een vraag.`,"custom_assistant_No satellites registered yet.":`Er zijn nog geen satellieten geregistreerd.`,"custom_assistant_Per-device permissions":`Machtigingen per apparaat`,"custom_assistant_Play answer (backend TTS)":`Speel antwoord (backend TTS)`,"custom_assistant_Read answers aloud":`Lees de antwoorden hardop voor.`,"custom_assistant_Refresh device cache":`Vernieuw de apparaatcache.`,custom_assistant_Satellite:Qn,custom_assistant_Satellites:$n,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Sla de configuratie op (het apparaat zal opnieuw opstarten) voordat je gaat chatten.`,"custom_assistant_Send announcement":`Aankondiging verzenden`,"custom_assistant_Settings for %s":`Settings for %s`,custom_assistant_Speak:er,"custom_assistant_Speak on all satellites":`Communiceer via alle satellieten`,"custom_assistant_Start the assistant instance to chat.":`Start de assistent-instantie om te chatten.`,"custom_assistant_Start the assistant instance to load the device list.":`Start de assistent-instantie om de lijst met apparaten te laden.`,custom_assistant_Status:tr,"custom_assistant_Stop listening":`Stop met luisteren`,"custom_assistant_Stop reading answers aloud":`Stop met het hardop voorlezen van antwoorden.`,"custom_assistant_Test chat":`Testchat`,"custom_assistant_Thinking…":`Aan het nadenken…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,"custom_assistant_Translate all missing (%s)":`Vertaal alle ontbrekende (%) tekens`,"custom_assistant_Translate name into %s":`Vertaal de naam naar %s`,"custom_assistant_Type a message…":`Typ een bericht…`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:nr,"custom_assistant_change it on the Voice tab":`Wijzig dit op het tabblad 'Stem'.`,custom_assistant_device:rr,custom_assistant_filter:ir,custom_assistant_hint:ar,custom_assistant_llm_downloading:or,custom_assistant_llm_error:sr,custom_assistant_llm_idle:cr,custom_assistant_llm_installing:lr,custom_assistant_llm_loading:ur,"custom_assistant_llm_not installed":`niet geïnstalleerd`,custom_assistant_llm_ready:dr,"custom_assistant_no name in %s (showing %s)":`Geen naam in "%s" — "%s" wordt weergegeven`,custom_assistant_offline:fr,custom_assistant_online:pr,custom_assistant_read:mr,custom_assistant_room:hr,custom_assistant_sat_idle:gr,custom_assistant_sat_listening:_r,custom_assistant_sat_offline:vr,custom_assistant_sat_processing:yr,custom_assistant_sat_speaking:br,custom_assistant_type:xr,custom_assistant_wake_word_hint:Sr,custom_assistant_write:Cr},J=e({custom_assistant_Announcement:()=>Tr,custom_assistant_Close:()=>Er,custom_assistant_Host:()=>Dr,custom_assistant_Satellite:()=>Or,custom_assistant_Satellites:()=>kr,custom_assistant_Speak:()=>Ar,custom_assistant_Status:()=>jr,custom_assistant_auto:()=>Mr,custom_assistant_device:()=>Nr,custom_assistant_filter:()=>Pr,custom_assistant_hint:()=>Fr,custom_assistant_llm_downloading:()=>Ir,custom_assistant_llm_error:()=>Lr,custom_assistant_llm_idle:()=>Rr,custom_assistant_llm_installing:()=>zr,custom_assistant_llm_loading:()=>Br,custom_assistant_llm_ready:()=>Vr,custom_assistant_offline:()=>Hr,custom_assistant_online:()=>Ur,custom_assistant_read:()=>Wr,custom_assistant_room:()=>Gr,custom_assistant_sat_idle:()=>Kr,custom_assistant_sat_listening:()=>qr,custom_assistant_sat_offline:()=>Jr,custom_assistant_sat_processing:()=>Yr,custom_assistant_sat_speaking:()=>Xr,custom_assistant_type:()=>`Typ`,custom_assistant_wake_word_hint:()=>Zr,custom_assistant_write:()=>Qr,default:()=>$r}),Tr=`Ogłoszenie`,Er=`Close`,Dr=`Gospodarz`,Or=`Satelita`,kr=`Satelity`,Ar=`Mówić`,jr=`Status`,Mr=`automatyczny`,Nr=`Urządzenie`,Pr=`Filtr`,Fr=`Odznacz opcję „Odczyt”, aby ukryć urządzenie przed asystentem, lub odznacz opcję „Zapis”, aby zachować je tylko do odczytu (np. blokady). Domyślnie urządzenia mają pełne uprawnienia.`,Ir=`pobieranie modelu…`,Lr=`błąd`,Rr=`bezczynny`,zr=`instalowanie silnika…`,Br=`załadunek…`,Vr=`gotowy`,Hr=`nieaktywny`,Ur=`w sieci`,Wr=`Czytać`,Gr=`Pokój`,Kr=`bezczynny`,qr=`słuchający`,Jr=`nieaktywny`,Yr=`przetwarzanie`,Xr=`mówiąc`,Zr=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,Qr=`Pisać`,$r={"custom_assistant_%s of %s active":`%s of %s active`,custom_assistant_Announcement:Tr,"custom_assistant_Clear chat":`Wyczyść czat`,custom_assistant_Close:Er,"custom_assistant_Device cache cleared.":`Pamięć podręczna urządzenia została wyczyszczona.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Hide disabled":`Ukryj wyłączone`,custom_assistant_Host:Dr,"custom_assistant_Last seen":`Ostatnio widziany`,"custom_assistant_Listening…":`Słuchający…`,"custom_assistant_Local model":`Model lokalny`,"custom_assistant_Name language: %s":`Język nazwy: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Nie wykryto urządzeń. Przypisz stany do pomieszczeń i funkcji w ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Brak wiadomości. Wpisz pytanie poniżej.`,"custom_assistant_No satellites registered yet.":`Nie zarejestrowano jeszcze żadnych satelitów.`,"custom_assistant_Per-device permissions":`Uprawnienia na urządzenie`,"custom_assistant_Play answer (backend TTS)":`Odtwórz odpowiedź (TTS w tle)`,"custom_assistant_Read answers aloud":`Przeczytaj odpowiedzi na głos`,"custom_assistant_Refresh device cache":`Odśwież pamięć podręczną urządzenia`,custom_assistant_Satellite:Or,custom_assistant_Satellites:kr,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Przed rozpoczęciem czatu zapisz konfigurację (instancja zostanie uruchomiona ponownie).`,"custom_assistant_Send announcement":`Wyślij ogłoszenie`,"custom_assistant_Settings for %s":`Settings for %s`,custom_assistant_Speak:Ar,"custom_assistant_Speak on all satellites":`Mów na wszystkich satelitach`,"custom_assistant_Start the assistant instance to chat.":`Uruchom asystenta, aby rozpocząć rozmowę.`,"custom_assistant_Start the assistant instance to load the device list.":`Uruchom instancję asystenta, aby załadować listę urządzeń.`,custom_assistant_Status:jr,"custom_assistant_Stop listening":`Przestań słuchać`,"custom_assistant_Stop reading answers aloud":`Przestań czytać odpowiedzi na głos`,"custom_assistant_Test chat":`Czat testowy`,"custom_assistant_Thinking…":`Myślący…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,"custom_assistant_Translate all missing (%s)":`Przetłumacz wszystkie brakujące (%s)`,"custom_assistant_Translate name into %s":`Przetłumacz nazwę na %s`,"custom_assistant_Type a message…":`Wpisz wiadomość…`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:Mr,"custom_assistant_change it on the Voice tab":`zmień to na karcie Głos`,custom_assistant_device:Nr,custom_assistant_filter:Pr,custom_assistant_hint:Fr,custom_assistant_llm_downloading:Ir,custom_assistant_llm_error:Lr,custom_assistant_llm_idle:Rr,custom_assistant_llm_installing:zr,custom_assistant_llm_loading:Br,"custom_assistant_llm_not installed":`nie zainstalowano`,custom_assistant_llm_ready:Vr,"custom_assistant_no name in %s (showing %s)":`Brak nazwy w "%s" — wyświetlanie "%s"`,custom_assistant_offline:Hr,custom_assistant_online:Ur,custom_assistant_read:Wr,custom_assistant_room:Gr,custom_assistant_sat_idle:Kr,custom_assistant_sat_listening:qr,custom_assistant_sat_offline:Jr,custom_assistant_sat_processing:Yr,custom_assistant_sat_speaking:Xr,custom_assistant_type:`Typ`,custom_assistant_wake_word_hint:Zr,custom_assistant_write:Qr},Y=e({custom_assistant_Announcement:()=>ei,custom_assistant_Close:()=>ti,custom_assistant_Host:()=>ni,custom_assistant_Satellite:()=>ri,custom_assistant_Satellites:()=>ii,custom_assistant_Speak:()=>ai,custom_assistant_Status:()=>oi,custom_assistant_auto:()=>si,custom_assistant_device:()=>ci,custom_assistant_filter:()=>li,custom_assistant_hint:()=>ui,custom_assistant_llm_downloading:()=>di,custom_assistant_llm_error:()=>fi,custom_assistant_llm_idle:()=>pi,custom_assistant_llm_installing:()=>mi,custom_assistant_llm_loading:()=>hi,custom_assistant_llm_ready:()=>gi,custom_assistant_offline:()=>_i,custom_assistant_online:()=>vi,custom_assistant_read:()=>`Ler`,custom_assistant_room:()=>yi,custom_assistant_sat_idle:()=>bi,custom_assistant_sat_listening:()=>xi,custom_assistant_sat_offline:()=>Si,custom_assistant_sat_processing:()=>Ci,custom_assistant_sat_speaking:()=>wi,custom_assistant_type:()=>Ti,custom_assistant_wake_word_hint:()=>Ei,custom_assistant_write:()=>Di,default:()=>Oi}),ei=`Anúncio`,ti=`Close`,ni=`Hospedar`,ri=`Satélite`,ii=`Satélites`,ai=`Falar`,oi=`Status`,si=`auto`,ci=`Dispositivo`,li=`Filtro`,ui=`Desmarque a opção "Ler" para ocultar um dispositivo do assistente ou desmarque a opção "Gravar" para mantê-lo somente leitura (por exemplo, fechaduras). Os dispositivos são configurados por padrão para permitir totalmente o acesso.`,di=`baixando modelo…`,fi=`erro`,pi=`parado`,mi=`Instalando o motor…`,hi=`carregando…`,gi=`preparar`,_i=`offline`,vi=`on-line`,yi=`Sala`,bi=`parado`,xi=`audição`,Si=`offline`,Ci=`processamento`,wi=`Falando`,Ti=`Tipo`,Ei=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,Di=`Escrever`,Oi={"custom_assistant_%s of %s active":`%s of %s active`,custom_assistant_Announcement:ei,"custom_assistant_Clear chat":`Chat limpo`,custom_assistant_Close:ti,"custom_assistant_Device cache cleared.":`Cache do dispositivo limpo.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Hide disabled":`Ocultar desativado`,custom_assistant_Host:ni,"custom_assistant_Last seen":`Última vez visto`,"custom_assistant_Listening…":`Audição…`,"custom_assistant_Local model":`Modelo local`,"custom_assistant_Name language: %s":`Idioma do nome: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Nenhum dispositivo detectado. Atribua estados a salas e funções no ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Ainda não há mensagens. Digite sua pergunta abaixo.`,"custom_assistant_No satellites registered yet.":`Nenhum satélite registrado ainda.`,"custom_assistant_Per-device permissions":`Permissões por dispositivo`,"custom_assistant_Play answer (backend TTS)":`Reproduzir resposta (TTS em segundo plano)`,"custom_assistant_Read answers aloud":`Leia as respostas em voz alta.`,"custom_assistant_Refresh device cache":`Atualizar cache do dispositivo`,custom_assistant_Satellite:ri,custom_assistant_Satellites:ii,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Salve a configuração (a instância será reiniciada) antes de iniciar o chat.`,"custom_assistant_Send announcement":`Enviar anúncio`,"custom_assistant_Settings for %s":`Settings for %s`,custom_assistant_Speak:ai,"custom_assistant_Speak on all satellites":`Fale em todos os satélites`,"custom_assistant_Start the assistant instance to chat.":`Inicie a instância do assistente para conversar.`,"custom_assistant_Start the assistant instance to load the device list.":`Inicie a instância do assistente para carregar a lista de dispositivos.`,custom_assistant_Status:oi,"custom_assistant_Stop listening":`Pare de ouvir`,"custom_assistant_Stop reading answers aloud":`Pare de ler as respostas em voz alta.`,"custom_assistant_Test chat":`Chat de teste`,"custom_assistant_Thinking…":`Pensamento…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,"custom_assistant_Translate all missing (%s)":`Traduzir todos os (%s) ausentes`,"custom_assistant_Translate name into %s":`Traduzir nome para %s`,"custom_assistant_Type a message…":`Digite uma mensagem…`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:si,"custom_assistant_change it on the Voice tab":`Altere isso na guia Voz.`,custom_assistant_device:ci,custom_assistant_filter:li,custom_assistant_hint:ui,custom_assistant_llm_downloading:di,custom_assistant_llm_error:fi,custom_assistant_llm_idle:pi,custom_assistant_llm_installing:mi,custom_assistant_llm_loading:hi,"custom_assistant_llm_not installed":`não instalado`,custom_assistant_llm_ready:gi,"custom_assistant_no name in %s (showing %s)":`Nenhum nome em "%s" — exibindo "%s"`,custom_assistant_offline:_i,custom_assistant_online:vi,custom_assistant_read:`Ler`,custom_assistant_room:yi,custom_assistant_sat_idle:bi,custom_assistant_sat_listening:xi,custom_assistant_sat_offline:Si,custom_assistant_sat_processing:Ci,custom_assistant_sat_speaking:wi,custom_assistant_type:Ti,custom_assistant_wake_word_hint:Ei,custom_assistant_write:Di},X=e({custom_assistant_Announcement:()=>ki,custom_assistant_Close:()=>Ai,custom_assistant_Host:()=>ji,custom_assistant_Satellite:()=>Mi,custom_assistant_Satellites:()=>Ni,custom_assistant_Speak:()=>Pi,custom_assistant_Status:()=>Fi,custom_assistant_auto:()=>Ii,custom_assistant_device:()=>Li,custom_assistant_filter:()=>Ri,custom_assistant_hint:()=>zi,custom_assistant_llm_downloading:()=>Bi,custom_assistant_llm_error:()=>Vi,custom_assistant_llm_idle:()=>Hi,custom_assistant_llm_installing:()=>Ui,custom_assistant_llm_loading:()=>Wi,custom_assistant_llm_ready:()=>Gi,custom_assistant_offline:()=>Ki,custom_assistant_online:()=>qi,custom_assistant_read:()=>Ji,custom_assistant_room:()=>Yi,custom_assistant_sat_idle:()=>Xi,custom_assistant_sat_listening:()=>Zi,custom_assistant_sat_offline:()=>Qi,custom_assistant_sat_processing:()=>$i,custom_assistant_sat_speaking:()=>ea,custom_assistant_type:()=>ta,custom_assistant_wake_word_hint:()=>na,custom_assistant_write:()=>ra,default:()=>ia}),ki=`Объявление`,Ai=`Закрыть`,ji=`Хозяин`,Mi=`Спутник`,Ni=`Спутники`,Pi=`Говорить`,Fi=`Статус`,Ii=`авто`,Li=`Устройство`,Ri=`Фильтр`,zi=`Снимите флажок «Чтение», чтобы скрыть устройство от голосового помощника, или снимите флажок «Запись», чтобы оставить его только для чтения (например, блокировка). По умолчанию устройствам разрешен полный доступ.`,Bi=`Загрузка модели…`,Vi=`ошибка`,Hi=`праздный`,Ui=`установка двигателя…`,Wi=`Загрузка…`,Gi=`готовый`,Ki=`офлайн`,qi=`онлайн`,Ji=`Читать`,Yi=`Комната`,Xi=`праздный`,Zi=`слушание`,Qi=`офлайн`,$i=`обработка`,ea=`Говорящий`,ta=`Тип`,na=`Слово активации работает на устройстве. Наведите курсор на слово, чтобы увидеть языки — большинство только английский.`,ra=`Писать`,ia={"custom_assistant_%s of %s active":`активно %s из %s`,custom_assistant_Announcement:ki,"custom_assistant_Clear chat":`Четкий чат`,custom_assistant_Close:Ai,"custom_assistant_Device cache cleared.":`Кэш устройства очищен.`,"custom_assistant_Device settings":`Настройки устройства`,"custom_assistant_Hide disabled":`Скрыть отключено`,custom_assistant_Host:ji,"custom_assistant_Last seen":`Последний раз видели`,"custom_assistant_Listening…":`Слушаю…`,"custom_assistant_Local model":`Локальная модель`,"custom_assistant_Name language: %s":`Название языка: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Устройства не обнаружены. Назначьте состояния комнатам и функциям в ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Сообщений пока нет. Задайте вопрос ниже.`,"custom_assistant_No satellites registered yet.":`Спутники пока не зарегистрированы.`,"custom_assistant_Per-device permissions":`Разрешения для каждого устройства`,"custom_assistant_Play answer (backend TTS)":`Воспроизвести ответ (синтезатор речи на стороне сервера)`,"custom_assistant_Read answers aloud":`Прочитайте ответы вслух.`,"custom_assistant_Refresh device cache":`Обновить кэш устройства`,custom_assistant_Satellite:Mi,custom_assistant_Satellites:Ni,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Сохраните конфигурацию (при этом экземпляр перезапустится) перед началом чата.`,"custom_assistant_Send announcement":`Отправить объявление`,"custom_assistant_Settings for %s":`Настройки для %s`,custom_assistant_Speak:Pi,"custom_assistant_Speak on all satellites":`Выступить на всех спутниках`,"custom_assistant_Start the assistant instance to chat.":`Запустите экземпляр ассистента для начала чата.`,"custom_assistant_Start the assistant instance to load the device list.":`Запустите экземпляр помощника, чтобы загрузить список устройств.`,custom_assistant_Status:Fi,"custom_assistant_Stop listening":`Прекратите слушать`,"custom_assistant_Stop reading answers aloud":`Прекратите зачитывать ответы вслух.`,"custom_assistant_Test chat":`Тестовый чат`,"custom_assistant_Thinking…":`Размышления…`,"custom_assistant_This satellite exposes no settings.":`Этот сателлит не предоставляет настроек.`,"custom_assistant_Translate all missing (%s)":`Переведите все отсутствующие (%s)`,"custom_assistant_Translate name into %s":`Переведите имя в %s`,"custom_assistant_Type a message…":`Введите сообщение…`,"custom_assistant_Wake words":`Слова активации`,custom_assistant_auto:Ii,"custom_assistant_change it on the Voice tab":`Измените это на вкладке «Голос».`,custom_assistant_device:Li,custom_assistant_filter:Ri,custom_assistant_hint:zi,custom_assistant_llm_downloading:Bi,custom_assistant_llm_error:Vi,custom_assistant_llm_idle:Hi,custom_assistant_llm_installing:Ui,custom_assistant_llm_loading:Wi,"custom_assistant_llm_not installed":`не установлен`,custom_assistant_llm_ready:Gi,"custom_assistant_no name in %s (showing %s)":`Имя отсутствует в "%s" — отображается "%s"`,custom_assistant_offline:Ki,custom_assistant_online:qi,custom_assistant_read:Ji,custom_assistant_room:Yi,custom_assistant_sat_idle:Xi,custom_assistant_sat_listening:Zi,custom_assistant_sat_offline:Qi,custom_assistant_sat_processing:$i,custom_assistant_sat_speaking:ea,custom_assistant_type:ta,custom_assistant_wake_word_hint:na,custom_assistant_write:ra},Z=e({custom_assistant_Announcement:()=>aa,custom_assistant_Close:()=>oa,custom_assistant_Host:()=>sa,custom_assistant_Satellite:()=>ca,custom_assistant_Satellites:()=>la,custom_assistant_Speak:()=>ua,custom_assistant_Status:()=>da,custom_assistant_auto:()=>fa,custom_assistant_device:()=>pa,custom_assistant_filter:()=>ma,custom_assistant_hint:()=>ha,custom_assistant_llm_downloading:()=>ga,custom_assistant_llm_error:()=>_a,custom_assistant_llm_idle:()=>va,custom_assistant_llm_installing:()=>ya,custom_assistant_llm_loading:()=>ba,custom_assistant_llm_ready:()=>xa,custom_assistant_offline:()=>Sa,custom_assistant_online:()=>Ca,custom_assistant_read:()=>wa,custom_assistant_room:()=>Ta,custom_assistant_sat_idle:()=>Ea,custom_assistant_sat_listening:()=>Da,custom_assistant_sat_offline:()=>Oa,custom_assistant_sat_processing:()=>ka,custom_assistant_sat_speaking:()=>Aa,custom_assistant_type:()=>ja,custom_assistant_wake_word_hint:()=>Ma,custom_assistant_write:()=>Na,default:()=>Pa}),aa=`Оголошення`,oa=`Close`,sa=`Хост`,ca=`Супутник`,la=`Супутники`,ua=`Говоріть`,da=`Статус`,fa=`авто`,pa=`Пристрій`,ma=`Фільтр`,ha=`Зніміть позначку «Читання», щоб приховати пристрій від помічника, або «Запис», щоб залишити його в режимі лише для читання (наприклад, блокування). За замовчуванням пристрої повністю дозволені.`,ga=`завантаження моделі…`,_a=`помилка`,va=`бездіяльність`,ya=`встановлення двигуна…`,ba=`завантаження…`,xa=`готовий`,Sa=`офлайн`,Ca=`онлайн`,wa=`Читати`,Ta=`Кімната`,Ea=`бездіяльність`,Da=`прослуховування`,Oa=`офлайн`,ka=`обробка`,Aa=`розмова`,ja=`Тип`,Ma=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,Na=`Написати`,Pa={"custom_assistant_%s of %s active":`%s of %s active`,custom_assistant_Announcement:aa,"custom_assistant_Clear chat":`Очистити чат`,custom_assistant_Close:oa,"custom_assistant_Device cache cleared.":`Кеш пристрою очищено.`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Hide disabled":`Приховати вимкнено`,custom_assistant_Host:sa,"custom_assistant_Last seen":`Бачили востаннє`,"custom_assistant_Listening…":`Слухання…`,"custom_assistant_Local model":`Локальна модель`,"custom_assistant_Name language: %s":`Мова назви: %s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`Пристроїв не виявлено. Призначте стани кімнатам та функціям в ioBroker.`,"custom_assistant_No messages yet. Type a question below.":`Поки що немає повідомлень. Введіть запитання нижче.`,"custom_assistant_No satellites registered yet.":`Поки що не зареєстровано жодного супутника.`,"custom_assistant_Per-device permissions":`Дозволи для кожного пристрою`,"custom_assistant_Play answer (backend TTS)":`Відтворити відповідь (бекенд TTS)`,"custom_assistant_Read answers aloud":`Прочитайте відповіді вголос`,"custom_assistant_Refresh device cache":`Оновити кеш пристрою`,custom_assistant_Satellite:ca,custom_assistant_Satellites:la,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`Збережіть конфігурацію (екземпляр перезавантажиться) перед спілкуванням у чаті.`,"custom_assistant_Send announcement":`Надіслати оголошення`,"custom_assistant_Settings for %s":`Settings for %s`,custom_assistant_Speak:ua,"custom_assistant_Speak on all satellites":`Розмовляйте на всіх супутниках`,"custom_assistant_Start the assistant instance to chat.":`Запустіть екземпляр помічника для спілкування в чаті.`,"custom_assistant_Start the assistant instance to load the device list.":`Запустіть екземпляр помічника, щоб завантажити список пристроїв.`,custom_assistant_Status:da,"custom_assistant_Stop listening":`Перестань слухати`,"custom_assistant_Stop reading answers aloud":`Перестаньте читати відповіді вголос`,"custom_assistant_Test chat":`Тестовий чат`,"custom_assistant_Thinking…":`Мислення…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,"custom_assistant_Translate all missing (%s)":`Перекласти все, що відсутні (%s)`,"custom_assistant_Translate name into %s":`Перекладіть назву мовою %s`,"custom_assistant_Type a message…":`Введіть повідомлення…`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:fa,"custom_assistant_change it on the Voice tab":`змінити це на вкладці «Голос»`,custom_assistant_device:pa,custom_assistant_filter:ma,custom_assistant_hint:ha,custom_assistant_llm_downloading:ga,custom_assistant_llm_error:_a,custom_assistant_llm_idle:va,custom_assistant_llm_installing:ya,custom_assistant_llm_loading:ba,"custom_assistant_llm_not installed":`не встановлено`,custom_assistant_llm_ready:xa,"custom_assistant_no name in %s (showing %s)":`Немає імені в "%s" — відображається "%s"`,custom_assistant_offline:Sa,custom_assistant_online:Ca,custom_assistant_read:wa,custom_assistant_room:Ta,custom_assistant_sat_idle:Ea,custom_assistant_sat_listening:Da,custom_assistant_sat_offline:Oa,custom_assistant_sat_processing:ka,custom_assistant_sat_speaking:Aa,custom_assistant_type:ja,custom_assistant_wake_word_hint:Ma,custom_assistant_write:Na},Q=e({custom_assistant_Announcement:()=>$,custom_assistant_Close:()=>Fa,custom_assistant_Host:()=>Ia,custom_assistant_Satellite:()=>La,custom_assistant_Satellites:()=>Ra,custom_assistant_Speak:()=>za,custom_assistant_Status:()=>Ba,custom_assistant_auto:()=>Va,custom_assistant_device:()=>Ha,custom_assistant_filter:()=>Ua,custom_assistant_hint:()=>Wa,custom_assistant_llm_downloading:()=>Ga,custom_assistant_llm_error:()=>Ka,custom_assistant_llm_idle:()=>qa,custom_assistant_llm_installing:()=>Ja,custom_assistant_llm_loading:()=>Ya,custom_assistant_llm_ready:()=>Xa,custom_assistant_offline:()=>Za,custom_assistant_online:()=>Qa,custom_assistant_read:()=>`读`,custom_assistant_room:()=>$a,custom_assistant_sat_idle:()=>eo,custom_assistant_sat_listening:()=>to,custom_assistant_sat_offline:()=>no,custom_assistant_sat_processing:()=>ro,custom_assistant_sat_speaking:()=>io,custom_assistant_type:()=>ao,custom_assistant_wake_word_hint:()=>oo,custom_assistant_write:()=>`写`,default:()=>so}),$=`公告`,Fa=`Close`,Ia=`主持人`,La=`卫星`,Ra=`卫星`,za=`说话`,Ba=`地位`,Va=`汽车`,Ha=`设备`,Ua=`筛选`,Wa=`取消勾选“读取”选项可将设备对语音助手隐藏,取消勾选“写入”选项可将其设置为只读(例如,锁定设备)。设备默认设置为完全允许访问。`,Ga=`正在下载模型…`,Ka=`错误`,qa=`闲置的`,Ja=`安装发动机…`,Ya=`加载中…`,Xa=`准备好`,Za=`离线`,Qa=`在线的`,$a=`房间`,eo=`闲置的`,to=`聆听`,no=`离线`,ro=`加工`,io=`请讲`,ao=`类型`,oo=`The wake word runs on the device. Hover a word to see which languages it was trained on — most are English only.`,so={"custom_assistant_%s of %s active":`%s of %s active`,custom_assistant_Announcement:$,"custom_assistant_Clear chat":`清晰聊天`,custom_assistant_Close:Fa,"custom_assistant_Device cache cleared.":`设备缓存已清除。`,"custom_assistant_Device settings":`Device settings`,"custom_assistant_Hide disabled":`隐藏已禁用`,custom_assistant_Host:Ia,"custom_assistant_Last seen":`最后一次出现`,"custom_assistant_Listening…":`正在听……`,"custom_assistant_Local model":`本地模型`,"custom_assistant_Name language: %s":`名称语言:%s`,"custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.":`未检测到设备。请在ioBroker中为房间和功能分配状态。`,"custom_assistant_No messages yet. Type a question below.":`暂无消息。请在下方输入问题。`,"custom_assistant_No satellites registered yet.":`目前尚未注册任何卫星。`,"custom_assistant_Per-device permissions":`每个设备的权限`,"custom_assistant_Play answer (backend TTS)":`播放答案(后端 TTS)`,"custom_assistant_Read answers aloud":`大声朗读答案`,"custom_assistant_Refresh device cache":`刷新设备缓存`,custom_assistant_Satellite:La,custom_assistant_Satellites:Ra,"custom_assistant_Save the configuration (the instance will restart) before chatting.":`聊天前请保存配置(实例将重启)。`,"custom_assistant_Send announcement":`发送公告`,"custom_assistant_Settings for %s":`Settings for %s`,custom_assistant_Speak:za,"custom_assistant_Speak on all satellites":`在所有卫星上通话`,"custom_assistant_Start the assistant instance to chat.":`启动助手实例进行聊天。`,"custom_assistant_Start the assistant instance to load the device list.":`启动助手实例以加载设备列表。`,custom_assistant_Status:Ba,"custom_assistant_Stop listening":`别听了`,"custom_assistant_Stop reading answers aloud":`停止大声朗读答案`,"custom_assistant_Test chat":`测试聊天`,"custom_assistant_Thinking…":`思维…`,"custom_assistant_This satellite exposes no settings.":`This satellite exposes no settings.`,"custom_assistant_Translate all missing (%s)":`翻译所有缺失值(%s)`,"custom_assistant_Translate name into %s":`将名称翻译成 %s`,"custom_assistant_Type a message…":`输入消息…`,"custom_assistant_Wake words":`Wake words`,custom_assistant_auto:Va,"custom_assistant_change it on the Voice tab":`在“语音”选项卡上更改。`,custom_assistant_device:Ha,custom_assistant_filter:Ua,custom_assistant_hint:Wa,custom_assistant_llm_downloading:Ga,custom_assistant_llm_error:Ka,custom_assistant_llm_idle:qa,custom_assistant_llm_installing:Ja,custom_assistant_llm_loading:Ya,"custom_assistant_llm_not installed":`未安装`,custom_assistant_llm_ready:Xa,"custom_assistant_no name in %s (showing %s)":`“%s”中没有名称——显示“%s”`,custom_assistant_offline:Za,custom_assistant_online:Qa,custom_assistant_read:`读`,custom_assistant_room:$a,custom_assistant_sat_idle:eo,custom_assistant_sat_listening:to,custom_assistant_sat_offline:no,custom_assistant_sat_processing:ro,custom_assistant_sat_speaking:io,custom_assistant_type:ao,custom_assistant_wake_word_hint:oo,custom_assistant_write:`写`};de();var co={},lo=Object.assign({"./i18n/de.json":j,"./i18n/en.json":U,"./i18n/es.json":W,"./i18n/fr.json":G,"./i18n/it.json":K,"./i18n/nl.json":q,"./i18n/pl.json":J,"./i18n/pt.json":Y,"./i18n/ru.json":X,"./i18n/uk.json":Z,"./i18n/zh-cn.json":Q});for(let[e,t]of Object.entries(lo)){var uo;let n=((uo=e.split(`/`).pop())==null?void 0:uo.replace(`.json`,``))||`en`;co[n]=t.default}T.extendTranslations(co);var fo=new Set([`temperature`,`humidity`,`illuminance`,`motion`,`door`,`window`,`windowTilt`,`fireAlarm`,`floodAlarm`,`camera`,`weatherCurrent`,`weatherForecast`,`warning`,`location`,`info`,`chart`,`image`,`instance`]);function po(e){return e===`lock`?{read:!0,write:!1}:{read:!0,write:!0}}var mo=[{value:`en`,label:`English`},{value:`de`,label:`Deutsch`},{value:`ru`,label:`Русский`},{value:`pt`,label:`Português`},{value:`nl`,label:`Nederlands`},{value:`fr`,label:`Français`},{value:`it`,label:`Italiano`},{value:`es`,label:`Español`},{value:`pl`,label:`Polski`},{value:`uk`,label:`Українська`},{value:`zh-cn`,label:`简体中文`}],ho=class extends A{constructor(e){super(e),C(this,`aliveSubId`,``),C(this,`onAliveChange`,(e,t)=>{let n=!!(t!=null&&t.val);n!==this.state.alive&&this.setState({alive:n,loading:n},()=>{n&&this.loadDevices()})}),this.state={...this.state,devices:[],loading:!0,alive:!1,filter:``,edits:{},savingKey:``,translatingKeys:{},rowStatus:{},hideDisabled:!1}}rowColor(e){switch(this.state.rowStatus[e]){case`dirty`:return`rgba(128,128,128,0.20)`;case`saving`:return`rgba(244,67,54,0.20)`;case`saved`:return`rgba(76,175,80,0.28)`;default:return}}setRowStatus(e,t){this.setState(n=>{let r={...n.rowStatus};return t?r[e]=t:delete r[e],{rowStatus:r}})}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}get editLang(){return String(this.props.data.voiceLanguage||``)||T.getLanguage()}componentDidUpdate(e){String(e.data.voiceLanguage||``)!==String(this.props.data.voiceLanguage||``)&&Object.keys(this.state.edits).length&&this.setState({edits:{}})}async componentDidMount(){super.componentDidMount(),this.aliveSubId=`system.adapter.${this.instanceId}.alive`;let e=!1;try{let t=await this.props.oContext.socket.getState(this.aliveSubId);e=!!(t!=null&&t.val)}catch{e=!1}this.setState({alive:e},()=>void this.loadDevices()),this.props.oContext.socket.subscribeState(this.aliveSubId,this.onAliveChange)}componentWillUnmount(){var e;this.aliveSubId&&this.props.oContext.socket.unsubscribeState(this.aliveSubId,this.onAliveChange),(e=super.componentWillUnmount)==null||e.call(this)}async loadDevices(e=4){if(!this.state.alive){this.setState({loading:!1});return}let t=[];try{let e=await this.props.oContext.socket.sendTo(this.instanceId,`getDevices`,{language:T.getLanguage()});t=(Array.isArray(e)?e:[]).filter(e=>e.type!==`button`)}catch{t=[]}!t.length&&e>0?setTimeout(()=>{this.state.alive&&this.loadDevices(e-1)},1200):this.setState({devices:t,edits:{},loading:!1})}nameFor(e){let t=this.editLang,n=e.smartName;if(typeof n==`string`&&n)return{value:n,exact:!0,from:``};if(n&&typeof n==`object`){if(n[t])return{value:n[t],exact:!0,from:t};let e=n.en?`en`:Object.keys(n)[0];if(e&&n[e])return{value:n[e],exact:!1,from:e}}return{value:e.autoName||e.name||``,exact:!1,from:`auto`}}fieldValue(e){return this.state.edits[e.key]??this.nameFor(e).value}onNameChange(e,t){let n=this.state.devices.find(t=>t.key===e),r=n?this.nameFor(n).value:``;this.setState(n=>{let i={...n.rowStatus};return t===r?i[e]===`dirty`&&delete i[e]:i[e]=`dirty`,{edits:{...n.edits,[e]:t},rowStatus:i}})}flashSaved(e){this.setRowStatus(e,`saved`),setTimeout(()=>{this.state.rowStatus[e]===`saved`&&this.setRowStatus(e,null)},2e3)}applyLocalName(e,t,n){this.setState(r=>({devices:r.devices.map(r=>{if(r.key!==e)return r;let i=r.smartName&&typeof r.smartName==`object`?{...r.smartName}:typeof r.smartName==`string`&&r.smartName?{en:r.smartName}:{};return n?i[t]=n:delete i[t],{...r,smartName:i}}),edits:(()=>{let t={...r.edits};return delete t[e],t})()}))}async saveName(e){let t=this.state.edits[e.key];if(t===void 0||t===this.nameFor(e).value)return;let n=this.editLang;this.setState({savingKey:e.key}),this.setRowStatus(e.key,`saving`);try{await this.props.oContext.socket.sendTo(this.instanceId,`setDeviceName`,{stateId:e.key,name:t,language:n}),this.applyLocalName(e.key,n,t.trim()),this.flashSaved(e.key)}catch{this.setRowStatus(e.key,`dirty`)}this.setState({savingKey:``})}async translateName(e){let t=this.nameFor(e).value,n=e.key;if(!t||this.state.translatingKeys[n])return;let r=this.editLang;this.setState(e=>({translatingKeys:{...e.translatingKeys,[n]:!0}})),this.setRowStatus(n,`saving`);try{var i;let e=await this.props.oContext.socket.sendTo(this.instanceId,`translateName`,{text:t,targetLang:r}),a=e==null||(i=e.translation)==null?void 0:i.trim();a?(await this.props.oContext.socket.sendTo(this.instanceId,`setDeviceName`,{stateId:n,name:a,language:r}),this.applyLocalName(n,r,a),this.flashSaved(n)):this.setRowStatus(n,null)}catch{this.setRowStatus(n,null)}this.setState(e=>{let t={...e.translatingKeys};return delete t[n],{translatingKeys:t}})}async translateAllMissing(){let e=this.state.devices.filter(e=>!this.nameFor(e).exact&&!this.state.translatingKeys[e.key]);await Promise.all(e.map(e=>this.translateName(e)))}getAcl(e){var t;return((t=this.props.data.deviceAcl)==null?void 0:t[e.key])||po(e.type)}setAcl(e,t){let n=JSON.parse(JSON.stringify(this.props.data));n.deviceAcl=n.deviceAcl||{};let r=po(e.type),i={...n.deviceAcl[e.key]||r,...t};i.read===r.read&&i.write===r.write?delete n.deviceAcl[e.key]:n.deviceAcl[e.key]=i,this.props.onChange(n)}renderItem(){var e;if(this.state.loading)return E(p,{});if(!this.state.alive)return E(S,{sx:{p:2},color:`warning.main`,children:T.t(`custom_assistant_Start the assistant instance to load the device list.`)});if(!this.state.devices.length)return E(S,{sx:{p:2},children:T.t(`custom_assistant_No devices detected. Assign states to rooms and functions in ioBroker.`)});let t=this.state.filter.trim().toLowerCase(),r=t?this.state.devices.filter(e=>`${e.name} ${e.type} ${e.room}`.toLowerCase().includes(t)):this.state.devices;this.state.hideDisabled&&(r=r.filter(e=>this.getAcl(e).read));let a=this.props.oContext.themeType===`dark`;return l(w,{sx:{width:`100%`},children:[E(S,{variant:`h6`,sx:{mt:1},children:T.t(`custom_assistant_Per-device permissions`)}),E(S,{variant:`body2`,sx:{mb:1},color:`text.secondary`,children:T.t(`custom_assistant_hint`)}),l(w,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:1,flexWrap:`wrap`},children:[E(y,{size:`small`,color:`primary`,variant:`outlined`,label:T.t(`custom_assistant_Name language: %s`,((e=mo.find(e=>e.value===this.editLang))==null?void 0:e.label)||this.editLang)}),E(S,{variant:`caption`,color:`text.secondary`,children:T.t(`custom_assistant_change it on the Voice tab`)}),(()=>{let e=this.state.devices.filter(e=>!this.nameFor(e).exact).length,t=Object.keys(this.state.translatingKeys).length>0;return E(v,{size:`small`,variant:`outlined`,startIcon:t?E(x,{size:14}):E(i,{}),disabled:!e||t,onClick:()=>void this.translateAllMissing(),children:T.t(`custom_assistant_Translate all missing (%s)`,e)})})(),E(w,{sx:{flex:1}}),E(m,{control:E(h,{size:`small`,checked:this.state.hideDisabled,onChange:e=>this.setState({hideDisabled:e.target.checked})}),label:T.t(`custom_assistant_Hide disabled`)}),E(b,{variant:`standard`,size:`small`,label:`Filter`,value:this.state.filter,onChange:e=>this.setState({filter:e.target.value}),sx:{width:320}})]}),E(oe,{component:s,sx:{width:`100%`},children:l(d,{size:`small`,children:[E(g,{children:l(_,{sx:{background:a?`#333`:`#DDD`},children:[E(u,{children:T.t(`custom_assistant_device`)}),E(u,{children:T.t(`custom_assistant_type`)}),E(u,{children:T.t(`custom_assistant_room`)}),E(u,{align:`center`,children:T.t(`custom_assistant_read`)}),E(u,{align:`center`,children:T.t(`custom_assistant_write`)})]})}),E(D,{children:r.map(e=>{let t=this.getAcl(e),r=e.writableStateIds.length>0&&!fo.has(e.type),a=!t.read;return l(_,{sx:{background:this.rowColor(e.key),opacity:a?.5:1,transition:`background-color 0.4s`},children:[l(u,{children:[(()=>{let t=this.nameFor(e),r=!!this.state.translatingKeys[e.key],a=this.state.savingKey===e.key||r;return l(w,{sx:{display:`flex`,alignItems:`flex-start`,gap:.5},children:[E(b,{variant:`standard`,size:`small`,fullWidth:!0,value:this.fieldValue(e),disabled:a,error:!t.exact&&!this.state.edits[e.key],helperText:!t.exact&&!this.state.edits[e.key]?T.t(`custom_assistant_no name in %s (showing %s)`,this.editLang,t.from===`auto`?T.t(`custom_assistant_auto`):t.from):` `,onChange:t=>this.onNameChange(e.key,t.target.value),onBlur:()=>void this.saveName(e),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},slotProps:{input:{endAdornment:this.state.savingKey===e.key?E(x,{size:14}):null}}}),E(O,{title:T.t(`custom_assistant_Translate name into %s`,this.editLang),children:E(`span`,{children:E(n,{size:`small`,disabled:a,onClick:()=>void this.translateName(e),children:r?E(x,{size:16}):E(i,{fontSize:`small`})})})})]})})(),e.stateIds.length?E(S,{variant:`caption`,component:`div`,sx:{wordBreak:`break-all`,fontStyle:`italic`,opacity:.7,fontSize:`smaller`},children:e.stateIds.join(`, `)}):null]}),E(u,{children:l(w,{sx:{display:`flex`,alignItems:`center`,gap:.75},children:[E(ue,{type:e.type,style:{width:20,height:20}}),E(`span`,{children:T.t(`type-${e.type}`)})]})}),E(u,{children:e.room&&e.room!==`No room`?e.room:`-`}),E(u,{align:`center`,children:E(k,{checked:t.read,onChange:()=>this.setAcl(e,{read:!t.read})})}),E(u,{align:`center`,children:E(k,{checked:t.write&&r,disabled:!r,onChange:()=>this.setAcl(e,{write:!t.write})})})]},e.key)})})]})})]})}},go={},_o=Object.assign({"./i18n/de.json":j,"./i18n/en.json":U,"./i18n/es.json":W,"./i18n/fr.json":G,"./i18n/it.json":K,"./i18n/nl.json":q,"./i18n/pl.json":J,"./i18n/pt.json":Y,"./i18n/ru.json":X,"./i18n/uk.json":Z,"./i18n/zh-cn.json":Q});for(let[e,t]of Object.entries(_o)){var vo;let n=((vo=e.split(`/`).pop())==null?void 0:vo.replace(`.json`,``))||`en`;go[n]=t.default}T.extendTranslations(go);var yo=class extends A{constructor(e){super(e),C(this,`scrollRef`,t.createRef()),C(this,`aliveSubId`,``),C(this,`recognition`,null),C(this,`onAliveChange`,(e,t)=>{let n=!!(t!=null&&t.val);this.setState({alive:n}),n&&this.checkTtsAvailable()}),C(this,`onKeyDown`,e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),this.send())}),this.state={...this.state,messages:[],input:``,sending:!1,alive:!1,listening:!1,speak:!1,ttsPlayingTs:0,ttsAvailable:!1}}async checkTtsAvailable(){try{let e=await this.props.oContext.socket.sendTo(this.instanceId,`ttsAvailable`,{});this.setState({ttsAvailable:!!(e!=null&&e.available)})}catch{this.setState({ttsAvailable:!1})}}get speechSupported(){let e=window;return(!!e.SpeechRecognition||!!e.webkitSpeechRecognition)&&window.isSecureContext}get ttsSupported(){return typeof window<`u`&&`speechSynthesis`in window}speechLang(){return{de:`de-DE`,en:`en-US`,ru:`ru-RU`,pt:`pt-PT`,nl:`nl-NL`,fr:`fr-FR`,it:`it-IT`,es:`es-ES`,pl:`pl-PL`,uk:`uk-UA`,"zh-cn":`zh-CN`}[T.getLanguage()]||`en-US`}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}async componentDidMount(){super.componentDidMount(),this.aliveSubId=`system.adapter.${this.instanceId}.alive`;let e=!1;try{let t=await this.props.oContext.socket.getState(this.aliveSubId);e=!!(t!=null&&t.val)}catch{e=!1}this.setState({alive:e}),e&&this.checkTtsAvailable(),this.props.oContext.socket.subscribeState(this.aliveSubId,this.onAliveChange)}componentWillUnmount(){var e;this.aliveSubId&&this.props.oContext.socket.unsubscribeState(this.aliveSubId,this.onAliveChange);try{var t;(t=this.recognition)==null||t.stop()}catch{}this.ttsSupported&&window.speechSynthesis.cancel(),(e=super.componentWillUnmount)==null||e.call(this)}toggleListening(){if(this.state.listening){var e;(e=this.recognition)==null||e.stop();return}let t=window,n=t.SpeechRecognition||t.webkitSpeechRecognition;if(!n)return;let r=new n;r.lang=this.speechLang(),r.interimResults=!1,r.continuous=!1,r.onresult=e=>{var t;let n=((t=e.results)==null||(t=t[0])==null||(t=t[0])==null?void 0:t.transcript)||``;n&&this.setState({input:n},()=>void this.send())},r.onerror=()=>this.setState({listening:!1}),r.onend=()=>this.setState({listening:!1}),this.recognition=r,this.setState({listening:!0});try{r.start()}catch{this.setState({listening:!1})}}speak(e){if(!this.ttsSupported||!e)return;window.speechSynthesis.cancel();let t=new SpeechSynthesisUtterance(e);t.lang=this.speechLang(),window.speechSynthesis.speak(t)}async playViaBackend(e,t){if(this.ready&&t){this.setState({ttsPlayingTs:e});try{let e=await this.props.oContext.socket.sendTo(this.instanceId,`tts`,{text:t});if(e!=null&&e.audio){let t=new Audio(`data:${e.mime||`audio/wav`};base64,${e.audio}`);t.onended=()=>this.setState({ttsPlayingTs:0}),t.onerror=()=>this.setState({ttsPlayingTs:0}),await t.play()}else this.setState({ttsPlayingTs:0})}catch{this.setState({ttsPlayingTs:0})}}}scrollToBottom(){setTimeout(()=>{let e=this.scrollRef.current;e&&(e.scrollTop=e.scrollHeight)},0)}get ready(){return this.state.alive&&!this.props.changed}async send(){let e=this.state.input.trim();if(!e||this.state.sending||!this.ready)return;let t={role:`user`,text:e,ts:Date.now()};this.setState(e=>({messages:[...e.messages,t],input:``,sending:!0})),this.scrollToBottom();let n;try{let t=await this.props.oContext.socket.sendTo(this.instanceId,`ask`,{text:e});n=(t==null?void 0:t.error)===void 0?{role:`assistant`,text:(t==null?void 0:t.answer)??``,ts:Date.now()}:{role:`error`,text:t.error,ts:Date.now()}}catch(e){n={role:`error`,text:e.message,ts:Date.now()}}this.setState(e=>({messages:[...e.messages,n],sending:!1})),this.scrollToBottom(),this.state.speak&&n.role===`assistant`&&this.speak(n.text)}async refreshCache(){if(this.ready)try{await this.props.oContext.socket.sendTo(this.instanceId,`clearCache`,{}),this.setState(e=>({messages:[...e.messages,{role:`info`,text:T.t(`custom_assistant_Device cache cleared.`),ts:Date.now()}]})),this.scrollToBottom()}catch{}}renderMessage(e,t){let r=this.props.oContext.themeType===`dark`;if(e.role===`info`)return E(S,{variant:`caption`,component:`div`,sx:{textAlign:`center`,opacity:.6,my:1,fontStyle:`italic`},children:e.text},t);let i=e.role===`user`,a=e.role===`error`,o;o=i?r?`#1e88e5`:`#2196f3`:a?r?`#5d1f1f`:`#f8d7da`:r?`#3a3a3a`:`#eceff1`;let c=i?`#fff`:a?r?`#ffb4b4`:`#842029`:r?`#eee`:`#111`,u=new Date(e.ts).toLocaleTimeString();return E(w,{sx:{display:`flex`,justifyContent:i?`flex-end`:`flex-start`,mb:1},children:l(s,{elevation:1,sx:{px:1.5,py:1,maxWidth:`75%`,background:o,color:c,borderRadius:2,whiteSpace:`pre-wrap`,wordBreak:`break-word`},children:[E(S,{variant:`body2`,component:`div`,children:e.text}),l(w,{sx:{display:`flex`,alignItems:`center`,justifyContent:`flex-end`,gap:.5},children:[e.role===`assistant`&&this.state.ttsAvailable?E(O,{title:T.t(`custom_assistant_Play answer (backend TTS)`),children:E(`span`,{children:E(n,{size:`small`,disabled:!this.ready||this.state.ttsPlayingTs===e.ts,onClick:()=>void this.playViaBackend(e.ts,e.text),sx:{p:.25,color:`inherit`,opacity:.7},children:this.state.ttsPlayingTs===e.ts?E(x,{size:12}):E(ie,{sx:{fontSize:`0.9rem`}})})})}):null,E(S,{variant:`caption`,component:`div`,sx:{opacity:.6,fontSize:`0.65rem`},children:u})]})]})},t)}renderItem(){let e=this.props.oContext.themeType===`dark`,{alive:t,messages:i,sending:a,input:o,listening:s,speak:c}=this.state,u=this.ready;return l(w,{sx:{width:`100%`,display:`flex`,flexDirection:`column`,height:`calc(100vh - 300px)`},children:[l(w,{sx:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,mb:1},children:[E(S,{variant:`h6`,children:T.t(`custom_assistant_Test chat`)}),l(w,{children:[this.ttsSupported?E(O,{title:T.t(c?`custom_assistant_Stop reading answers aloud`:`custom_assistant_Read answers aloud`),children:E(n,{size:`small`,color:c?`primary`:`default`,onClick:()=>{c&&window.speechSynthesis.cancel(),this.setState({speak:!c})},children:E(c?me:f,{})})}):null,E(O,{title:T.t(`custom_assistant_Refresh device cache`),children:E(`span`,{children:E(n,{size:`small`,disabled:!u,onClick:()=>void this.refreshCache(),children:E(r,{})})})}),E(O,{title:T.t(`custom_assistant_Clear chat`),children:E(`span`,{children:E(n,{size:`small`,disabled:!i.length,onClick:()=>this.setState({messages:[]}),children:E(ae,{})})})})]})]}),u?null:E(S,{sx:{p:2},color:`warning.main`,children:t?T.t(`custom_assistant_Save the configuration (the instance will restart) before chatting.`):T.t(`custom_assistant_Start the assistant instance to chat.`)}),l(w,{ref:this.scrollRef,sx:{flex:1,overflowY:`auto`,p:1,border:`1px solid ${e?`#444`:`#ccc`}`,borderRadius:1,background:e?`#1e1e1e`:`#fafafa`,mb:1},children:[i.length?i.map((e,t)=>this.renderMessage(e,t)):E(S,{sx:{p:2,textAlign:`center`,opacity:.6},variant:`body2`,children:T.t(`custom_assistant_No messages yet. Type a question below.`)}),a?l(w,{sx:{display:`flex`,alignItems:`center`,gap:1,p:1,opacity:.7},children:[E(x,{size:16}),E(S,{variant:`body2`,children:T.t(`custom_assistant_Thinking…`)})]}):null]}),l(w,{sx:{display:`flex`,alignItems:`flex-end`,gap:1},children:[this.speechSupported?E(O,{title:T.t(s?`custom_assistant_Stop listening`:`custom_assistant_Speak`),children:E(`span`,{children:E(n,{color:s?`error`:`primary`,disabled:!u||a,onClick:()=>this.toggleListening(),children:E(ce,{})})})}):null,E(b,{fullWidth:!0,multiline:!0,maxRows:4,size:`small`,variant:`outlined`,placeholder:T.t(s?`custom_assistant_Listening…`:`custom_assistant_Type a message…`),value:o,disabled:!u||a,onChange:e=>this.setState({input:e.target.value}),onKeyDown:this.onKeyDown}),E(n,{color:`primary`,disabled:!u||a||!o.trim(),onClick:()=>void this.send(),children:E(ne,{})})]})]})}},bo={},xo=Object.assign({"./i18n/de.json":j,"./i18n/en.json":U,"./i18n/es.json":W,"./i18n/fr.json":G,"./i18n/it.json":K,"./i18n/nl.json":q,"./i18n/pl.json":J,"./i18n/pt.json":Y,"./i18n/ru.json":X,"./i18n/uk.json":Z,"./i18n/zh-cn.json":Q});for(let[e,t]of Object.entries(xo)){var So;let n=((So=e.split(`/`).pop())==null?void 0:So.replace(`.json`,``))||`en`;bo[n]=t.default}T.extendTranslations(bo);var Co={ready:`success`,error:`error`,installing:`info`,downloading:`info`,loading:`info`},wo=class extends A{constructor(e){super(e),C(this,`statusId`,``),C(this,`progressId`,``),C(this,`onStatus`,(e,t)=>{this.setState({status:(t==null?void 0:t.val)||`idle`})}),C(this,`onProgress`,(e,t)=>{this.setState({progress:Number(t==null?void 0:t.val)||0})}),this.state={...this.state,status:`idle`,progress:0}}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}async componentDidMount(){super.componentDidMount(),this.statusId=`${this.instanceId}.localLlm.status`,this.progressId=`${this.instanceId}.localLlm.progress`;let e=this.props.oContext.socket;try{let t=await e.getState(this.statusId),n=await e.getState(this.progressId);this.setState({status:(t==null?void 0:t.val)||`idle`,progress:Number(n==null?void 0:n.val)||0})}catch{}e.subscribeState(this.statusId,this.onStatus),e.subscribeState(this.progressId,this.onProgress)}componentWillUnmount(){var e;let t=this.props.oContext.socket;this.statusId&&(t.unsubscribeState(this.statusId,this.onStatus),t.unsubscribeState(this.progressId,this.onProgress)),(e=super.componentWillUnmount)==null||e.call(this)}renderItem(){let{status:e,progress:t}=this.state,n=e===`installing`||e===`downloading`||e===`loading`,r=e===`downloading`;return l(w,{sx:{width:`100%`,mt:.5,mb:1},children:[l(w,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:.5},children:[l(S,{variant:`body2`,children:[T.t(`custom_assistant_Local model`),`:`]}),E(y,{size:`small`,color:Co[e]||`default`,variant:`outlined`,label:T.t(`custom_assistant_llm_${e}`)}),r?l(S,{variant:`body2`,children:[Math.round(t),`%`]}):null]}),n?E(p,{variant:r?`determinate`:`indeterminate`,value:r?t:void 0}):null]})}};function To(e){return e.common.write===!1}function Eo(e){var n,r;let{values:i,objects:a,loading:s,onWrite:c}=e,u=t.useMemo(()=>{try{let e=i.availableWakeWords;return e?JSON.parse(String(e)):null}catch{return null}},[i.availableWakeWords]),d=String(i.wakeWords??``).split(`,`).map(e=>e.trim()).filter(Boolean),f=e=>{let t=d.includes(e)?d.filter(t=>t!==e):[...d,e];c(`wakeWords`,t.join(`,`))},p=(u==null?void 0:u.max)||0,ne=p>0&&d.length>=p,re=Object.keys(a).sort(),m=new Map;for(let e of re){let t=e.replace(/^controls\./,``),n=t.indexOf(`.`),r=n<0?t:t.slice(0,n);m.set(r,[...m.get(r)||[],e])}function ie(e){let t=a[e],n=t.common,r=n.name&&typeof n.name==`string`?n.name:e,s=i[e];if(n.role===`button`)return E(v,{size:`small`,variant:`outlined`,onClick:()=>c(e,!0),children:r},e);if(To(t))return l(w,{children:[E(S,{variant:`caption`,sx:{opacity:.7},children:r}),E(S,{variant:`body2`,children:s==null?`—`:String(s)})]},e);if(n.type===`boolean`)return l(w,{sx:{display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[E(S,{variant:`body2`,children:r}),E(h,{size:`small`,checked:!!s,onChange:t=>c(e,t.target.checked)})]},e);if(n.states){let t=Array.isArray(n.states)?Object.fromEntries(n.states.map(e=>[e,e])):n.states;return l(he,{size:`small`,fullWidth:!0,children:[E(te,{children:r}),E(o,{label:r,value:s==null?``:String(s),onChange:t=>c(e,t.target.value),children:Object.entries(t).map(([e,t])=>E(_e,{value:e,children:t},e))})]},e)}if(n.type===`number`&&n.min!==void 0&&n.max!==void 0){let t=Number(s??n.min);return l(w,{children:[l(S,{variant:`body2`,children:[r,l(S,{component:`span`,variant:`caption`,sx:{ml:1,opacity:.7},children:[t,n.unit||``,` (`,n.min,`…`,n.max,`)`]})]}),E(ee,{size:`small`,value:Number.isFinite(t)?t:n.min,min:n.min,max:n.max,step:n.step||1,onChangeCommitted:(t,n)=>c(e,Array.isArray(n)?n[0]:n),valueLabelDisplay:`auto`})]},e)}return E(b,{size:`small`,fullWidth:!0,label:r,defaultValue:s==null?``:String(s),onBlur:t=>c(e,t.target.value),onKeyDown:t=>{t.key===`Enter`&&c(e,t.target.value)}},e)}return l(pe,{open:!0,onClose:e.onClose,maxWidth:`sm`,fullWidth:!0,children:[l(ge,{children:[T.t(`custom_assistant_Settings for %s`,e.satId),e.room?E(S,{variant:`caption`,sx:{ml:1,opacity:.7},children:e.room}):null]}),E(se,{dividers:!0,children:s?E(w,{sx:{display:`flex`,justifyContent:`center`,p:3},children:E(x,{size:28})}):l(w,{sx:{display:`flex`,flexDirection:`column`,gap:2},children:[u!=null&&(n=u.words)!=null&&n.length?l(w,{children:[l(S,{variant:`subtitle2`,children:[T.t(`custom_assistant_Wake words`),E(S,{component:`span`,variant:`caption`,sx:{ml:1,opacity:.7},children:T.t(`custom_assistant_%s of %s active`,d.length,p)})]}),E(w,{sx:{display:`flex`,flexWrap:`wrap`,gap:.5,mt:1},children:u.words.map(e=>{let t=d.includes(e.id);return E(O,{title:e.languages.join(`, `),children:E(y,{size:`small`,label:e.phrase||e.id,color:t?`primary`:`default`,variant:t?`filled`:`outlined`,disabled:!t&&ne,onClick:()=>f(e.id),sx:{border:`1px solid`,borderColor:t?`primary.main`:`text.secondary`,bgcolor:t?void 0:`action.hover`,fontWeight:t?600:400}})},e.id)})}),E(S,{variant:`caption`,sx:{display:`block`,mt:.5,opacity:.7},children:T.t(`custom_assistant_wake_word_hint`)})]}):null,u!=null&&(r=u.words)!=null&&r.length&&m.size?E(le,{}):null,[...m.entries()].map(([e,t])=>l(w,{sx:{display:`flex`,flexDirection:`column`,gap:1},children:[t.length>1?E(S,{variant:`subtitle2`,sx:{opacity:.8},children:e}):null,t.map(ie)]},e)),!m.size&&!u?E(S,{variant:`body2`,sx:{opacity:.7},children:T.t(`custom_assistant_This satellite exposes no settings.`)}):null]})}),E(fe,{children:E(v,{onClick:e.onClose,children:T.t(`custom_assistant_Close`)})})]})}var Do={},Oo=Object.assign({"./i18n/de.json":j,"./i18n/en.json":U,"./i18n/es.json":W,"./i18n/fr.json":G,"./i18n/it.json":K,"./i18n/nl.json":q,"./i18n/pl.json":J,"./i18n/pt.json":Y,"./i18n/ru.json":X,"./i18n/uk.json":Z,"./i18n/zh-cn.json":Q});for(let[e,t]of Object.entries(Oo)){var ko;let n=((ko=e.split(`/`).pop())==null?void 0:ko.replace(`.json`,``))||`en`;Do[n]=t.default}T.extendTranslations(Do);var Ao={idle:`default`,listening:`info`,processing:`warning`,speaking:`success`,offline:`error`},jo=`__all__`,Mo={DeviceAclComponent:ho,ChatComponent:yo,LocalLlmProgress:wo,SatellitesComponent:class extends A{constructor(e){super(e),C(this,`pattern`,``),C(this,`onState`,(e,t)=>{this.setState(n=>{let r={...n.sats},i=this.parse(e);i&&r[i.satId]&&(r[i.satId]={...r[i.satId]}),this.applyToMap(r,e,t);let a={...n.vals};return this.applyToVals(a,e,t),{sats:r,vals:a}})}),this.state={...this.state,sats:{},speak:{},vals:{},settingsFor:null,settingsObjects:{},settingsLoading:!1}}get instanceId(){let e=this.props.oContext;return`${e.adapterName}.${e.instance}`}async componentDidMount(){super.componentDidMount(),this.pattern=`${this.instanceId}.satellites.*`;try{let e=await this.props.oContext.socket.getForeignStates(this.pattern),t={},n={};for(let[r,i]of Object.entries(e||{}))this.applyToMap(t,r,i),this.applyToVals(n,r,i);this.setState({sats:t,vals:n})}catch{}this.props.oContext.socket.subscribeState(this.pattern,this.onState)}componentWillUnmount(){var e;this.pattern&&this.props.oContext.socket.unsubscribeState(this.pattern,this.onState),(e=super.componentWillUnmount)==null||e.call(this)}parse(e){let t=`${this.instanceId}.satellites.`;if(!e.startsWith(t))return null;let n=e.slice(t.length),r=n.indexOf(`.`);return r<0?null:{satId:n.slice(0,r),prop:n.slice(r+1)}}applyToMap(e,t,n){let r=this.parse(t);if(!r)return;let i=e[r.satId]||{status:`idle`,room:``,host:``,alive:!1,lastSeen:0};r.prop===`status`?i.status=String((n==null?void 0:n.val)??`idle`):r.prop===`room`?i.room=String((n==null?void 0:n.val)??``):r.prop===`host`?i.host=String((n==null?void 0:n.val)??``):r.prop===`alive`?i.alive=!!(n!=null&&n.val):r.prop===`lastSeen`&&(i.lastSeen=Number(n==null?void 0:n.val)||0),e[r.satId]=i}applyToVals(e,t,n){let r=this.parse(t);r&&(e[r.satId]={...e[r.satId]||{},[r.prop]:(n==null?void 0:n.val)??null})}async openSettings(e){this.setState({settingsFor:e,settingsObjects:{},settingsLoading:!0});let t=`${this.instanceId}.satellites.${e}.`;try{let e=await this.props.oContext.socket.getForeignObjects(`${t}controls.*`,`state`),n={};for(let[r,i]of Object.entries(e||{}))i!=null&&i.common&&(n[r.slice(t.length)]=i);this.setState({settingsObjects:n,settingsLoading:!1})}catch{this.setState({settingsLoading:!1})}}writeSetting(e,t,n){this.props.oContext.socket.setState(`${this.instanceId}.satellites.${e}.${t}`,{val:n,ack:!1}).catch(()=>{})}announce(e){let t=(this.state.speak[e]||``).trim();if(!t)return;let n=e===jo?`${this.instanceId}.tts.text`:`${this.instanceId}.satellites.${e}.tts`;this.props.oContext.socket.setState(n,{val:t,ack:!1}).catch(()=>{}),this.setState(t=>({speak:{...t.speak,[e]:``}}))}ago(e){if(!e)return`—`;let t=Math.max(0,Math.round((Date.now()-e)/1e3));return t<60?`${t} s`:t<3600?`${Math.round(t/60)} min`:t<86400?`${Math.round(t/3600)} h`:`${Math.round(t/86400)} d`}renderComposer(e,t){let r=this.state.speak[e]||``;return l(w,{sx:{display:`flex`,alignItems:`center`,gap:.5},children:[E(b,{size:`small`,variant:`outlined`,placeholder:t,value:r,onChange:t=>this.setState(n=>({speak:{...n.speak,[e]:t.target.value}})),onKeyDown:t=>{t.key===`Enter`&&(t.preventDefault(),this.announce(e))},sx:{minWidth:180}}),E(O,{title:T.t(`custom_assistant_Send announcement`),children:E(`span`,{children:E(n,{size:`small`,color:`primary`,disabled:!r.trim(),onClick:()=>this.announce(e),children:E(c,{})})})})]})}renderItem(){var e;let t=Object.keys(this.state.sats).sort();return l(w,{sx:{width:`100%`},children:[l(w,{sx:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,mb:1},children:[E(S,{variant:`h6`,children:T.t(`custom_assistant_Satellites`)}),t.length?this.renderComposer(jo,T.t(`custom_assistant_Speak on all satellites`)):null]}),t.length?l(d,{size:`small`,sx:{"& td, & th":{px:1}},children:[E(g,{children:l(_,{children:[E(u,{}),E(u,{children:T.t(`custom_assistant_Satellite`)}),E(u,{children:T.t(`custom_assistant_room`)}),E(u,{children:T.t(`custom_assistant_Host`)}),E(u,{children:T.t(`custom_assistant_Status`)}),E(u,{children:T.t(`custom_assistant_Last seen`)}),E(u,{children:T.t(`custom_assistant_Announcement`)}),E(u,{})]})}),E(D,{children:t.map(e=>{let t=this.state.sats[e];return l(_,{children:[E(u,{sx:{width:24},children:E(O,{title:t.alive?T.t(`custom_assistant_online`):T.t(`custom_assistant_offline`),children:E(re,{sx:{fontSize:`0.8rem`,color:t.alive?`success.main`:`error.main`}})})}),E(u,{children:e}),E(u,{children:t.room||`—`}),E(u,{children:t.host||`—`}),E(u,{children:E(y,{size:`small`,variant:`outlined`,color:Ao[t.status]||`default`,label:T.t(`custom_assistant_sat_${t.status}`)})}),E(u,{children:E(O,{title:t.lastSeen?new Date(t.lastSeen).toLocaleString():``,children:E(`span`,{children:this.ago(t.lastSeen)})})}),E(u,{children:this.renderComposer(e,T.t(`custom_assistant_Type a message…`))}),E(u,{sx:{width:40},children:E(O,{title:T.t(`custom_assistant_Device settings`),children:E(`span`,{children:E(n,{size:`small`,disabled:!t.alive,onClick:()=>void this.openSettings(e),children:E(a,{})})})})})]},e)})})]}):E(S,{sx:{p:2,opacity:.7},variant:`body2`,children:T.t(`custom_assistant_No satellites registered yet.`)}),this.state.settingsFor?E(Eo,{instanceId:this.instanceId,satId:this.state.settingsFor,room:((e=this.state.sats[this.state.settingsFor])==null?void 0:e.room)||``,values:this.state.vals[this.state.settingsFor]||{},objects:this.state.settingsObjects,loading:this.state.settingsLoading,onWrite:(e,t)=>this.writeSetting(this.state.settingsFor,e,t),onClose:()=>this.setState({settingsFor:null,settingsObjects:{}})}):null]})}}};export{Mo as default};
|