iobroker.assistant 0.1.6 → 1.0.2

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.
Files changed (108) hide show
  1. package/README.md +61 -4
  2. package/admin/custom/.vite/manifest.json +122 -77
  3. package/admin/custom/assets/Components-7BDDNrGP.js +1 -0
  4. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-DcAGnE2z.js +1 -0
  5. 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
  6. 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
  7. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-CMv8bcyA.js +1217 -0
  8. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared-3mzaJWDF.js +2 -0
  9. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-DS8oaQQt.js +122 -0
  10. 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
  11. package/admin/custom/assets/dist-DiU1y0R9.js +1 -0
  12. package/admin/custom/assets/helpers-Dot7vgQQ.js +1 -0
  13. package/admin/custom/assets/hostInit-MshDicd1.js +1 -0
  14. package/admin/custom/assets/iconLibraryData-B5fiyl1C.js +1 -0
  15. package/admin/custom/assets/index-P2Xu9kJm.js +1 -0
  16. package/admin/custom/assets/lib-DjwHKtRi.js +3 -0
  17. package/admin/custom/assets/{mf-entry-bootstrap-0-87f15505.js → mf-entry-bootstrap-0-7c1ddf47.js} +14 -2
  18. package/admin/custom/assets/pendingShares-CaJDCKLB.js +2 -0
  19. package/admin/custom/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
  20. package/admin/custom/assets/utils-towTPKqG.js +4 -0
  21. package/admin/custom/assets/vite-preload-helper-BbbETgeG.js +1 -0
  22. package/admin/custom/customComponents.js +2 -2
  23. package/admin/custom/i18n/de.json +64 -57
  24. package/admin/custom/i18n/en.json +8 -1
  25. package/admin/custom/i18n/es.json +64 -57
  26. package/admin/custom/i18n/fr.json +64 -57
  27. package/admin/custom/i18n/it.json +64 -57
  28. package/admin/custom/i18n/nl.json +64 -57
  29. package/admin/custom/i18n/pl.json +64 -57
  30. package/admin/custom/i18n/pt.json +64 -57
  31. package/admin/custom/i18n/ru.json +64 -57
  32. package/admin/custom/i18n/uk.json +64 -57
  33. package/admin/custom/i18n/zh-cn.json +64 -57
  34. package/admin/custom/index.html +2 -2
  35. package/admin/custom/mf-manifest.json +1 -1
  36. package/admin/custom/mf-stats.json +1 -1
  37. package/admin/i18n/de.json +59 -3
  38. package/admin/i18n/en.json +59 -3
  39. package/admin/i18n/es.json +59 -3
  40. package/admin/i18n/fr.json +59 -3
  41. package/admin/i18n/it.json +59 -3
  42. package/admin/i18n/nl.json +59 -3
  43. package/admin/i18n/pl.json +59 -3
  44. package/admin/i18n/pt.json +59 -3
  45. package/admin/i18n/ru.json +59 -3
  46. package/admin/i18n/uk.json +59 -3
  47. package/admin/i18n/zh-cn.json +59 -3
  48. package/admin/jsonConfig.json +589 -75
  49. package/build/lib/ask.js +130 -0
  50. package/build/lib/ask.js.map +1 -0
  51. package/build/lib/llm.js +135 -13
  52. package/build/lib/llm.js.map +1 -1
  53. package/build/lib/nlu.js +74 -1
  54. package/build/lib/nlu.js.map +1 -1
  55. package/build/lib/notifications.js +112 -0
  56. package/build/lib/notifications.js.map +1 -0
  57. package/build/lib/presence.js +188 -0
  58. package/build/lib/presence.js.map +1 -0
  59. package/build/lib/routines.js +115 -0
  60. package/build/lib/routines.js.map +1 -0
  61. package/build/lib/targets.js +96 -0
  62. package/build/lib/targets.js.map +1 -0
  63. package/build/lib/triggers.js +632 -0
  64. package/build/lib/triggers.js.map +1 -0
  65. package/build/lib/voice/aws.js +9 -1
  66. package/build/lib/voice/aws.js.map +1 -1
  67. package/build/lib/voice/azure.js +9 -2
  68. package/build/lib/voice/azure.js.map +1 -1
  69. package/build/lib/voice/engines.js +82 -0
  70. package/build/lib/voice/engines.js.map +1 -1
  71. package/build/lib/voice/esphome.js +732 -0
  72. package/build/lib/voice/esphome.js.map +1 -0
  73. package/build/lib/voice/esphomeEntities.js +303 -0
  74. package/build/lib/voice/esphomeEntities.js.map +1 -0
  75. package/build/lib/voice/esphomeProto.js +181 -0
  76. package/build/lib/voice/esphomeProto.js.map +1 -0
  77. package/build/lib/voice/fallback.js +85 -0
  78. package/build/lib/voice/fallback.js.map +1 -0
  79. package/build/lib/voice/mediaServer.js +151 -0
  80. package/build/lib/voice/mediaServer.js.map +1 -0
  81. package/build/lib/voice/protocol.js.map +1 -1
  82. package/build/lib/voice/tone.js +32 -0
  83. package/build/lib/voice/tone.js.map +1 -0
  84. package/build/lib/voice/tts.js.map +1 -1
  85. package/build/lib/voice/ttsCache.js +274 -0
  86. package/build/lib/voice/ttsCache.js.map +1 -0
  87. package/build/lib/voice/vad.js +173 -0
  88. package/build/lib/voice/vad.js.map +1 -0
  89. package/build/lib/voice/voiceServer.js +13 -0
  90. package/build/lib/voice/voiceServer.js.map +1 -1
  91. package/build/main.js +1721 -67
  92. package/build/main.js.map +1 -1
  93. package/io-package.json +241 -3
  94. package/package.json +13 -12
  95. package/admin/custom/assets/Components-xWdtqvTH.js +0 -1
  96. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-dybYZgsu.js +0 -1
  97. 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
  98. 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
  99. 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
  100. 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
  101. package/admin/custom/assets/hostInit-CZawMH9B.js +0 -1
  102. package/admin/custom/assets/index-JB7g1jgx.js +0 -1
  103. package/admin/custom/assets/lib-bB-LHRhZ.js +0 -3
  104. package/admin/custom/assets/rolldown-runtime-C0FnF6B9.js +0 -1
  105. package/admin/custom/assets/virtualExposes-brKKZvi0.js +0 -1
  106. package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomAssistant__customComponents_js-CRhwj12f.js +0 -1
  107. package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomAssistant__customComponents_js-C5XHUc1J.js +0 -2
  108. package/admin/custom/assets/vite-preload-helper-B7qeedMF.js +0 -1
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "A fired timer/alarm keeps ringing (looping the sound) for up to this long, or until you say 'stop'/'halt'/'aufhören'/'cancel' (or write the stopRinging state). 0 = play the sound once.": "Увімкнений таймер/будильник дзвонить (зациклюється) протягом певного часу, або доки ви не скажете «стоп»/«зупинити»/«почути»/«скасувати» (або не запишете стан stopRinging). 0 = відтворити звук один раз.",
3
+ "A phrase that runs a list of actions: \"Gute Nacht\" switches off five things and answers once. Phrases: several separated by commas (matched anywhere in the sentence, upper/lower case and umlauts do not matter). Actions as JSON, same shape as a trigger: [{\"setState\":{\"id\":\"hm-rpc.0.ABC.1.STATE\",\"value\":false}},{\"say\":\"Schlaf gut\",\"room\":\"Schlafzimmer\"}]. Reply: what the assistant answers (leave empty to stay silent). Matched before the offline rule engine and before the LLM, so a routine is never reinterpreted.": "Фраза, яка запускає список дій: \"Gute Nacht\" вимикає п'ять пристроїв і відповідає один раз. Фрази: кілька через кому (розпізнаються будь-де в реченні, регістр і умлаути не мають значення). Дії у форматі JSON, як у тригера: [{\"setState\":{\"id\":\"hm-rpc.0.ABC.1.STATE\",\"value\":false}},{\"say\":\"Schlaf gut\",\"room\":\"Schlafzimmer\"}]. Відповідь: що каже асистент (залиште порожнім, щоб нічого не казати). Перевіряється до офлайн-рушія правил і до LLM, тому рутина ніколи не буде витлумачена інакше.",
4
+ "A successful switch command is confirmed by a short tone on the satellite instead of a spoken sentence - instant, where speaking costs a text-to-speech call. Questions, errors and the text channels are unaffected.": "Успішна команда перемикання підтверджується коротким сигналом на сателіті замість вимовленої фрази — миттєво, тоді як мовлення потребує виклику синтезу мовлення. Запитань, помилок і текстових каналів це не стосується.",
5
+ "A trigger watches states or the clock and then speaks, writes a state, or asks you a question and acts on your answer. Switch single triggers off at runtime with triggers.items.<id>.enabled, test one with its fire button, and all of them with triggers.enabled.": "Тригер стежить за станами або часом, а потім говорить, записує стан або ставить вам запитання й діє відповідно до вашої відповіді. Окремі тригери можна вимкнути під час роботи через triggers.items.<id>.enabled, перевірити кнопкою fire, а всі разом — через triggers.enabled.",
3
6
  "API key": "Ключ API",
7
+ "API password (usually empty)": "Пароль API (зазвичай порожній)",
4
8
  "API-key credential": "Облікові дані API-ключа",
5
9
  "AWS Polly": "AWS Поллі",
6
10
  "AWS Polly voice (optional)": "Голос AWS Polly (необов'язково)",
@@ -11,6 +15,9 @@
11
15
  "AWS secret access key": "Секретний ключ доступу AWS",
12
16
  "AWS speech": "Промова AWS",
13
17
  "Access / permissions": "Доступ / дозволи",
18
+ "Actions (JSON)": "Дії (JSON)",
19
+ "Address (IP or host name)": "Адреса (IP або імʼя хоста)",
20
+ "After a switch command, wait up to 2 seconds for the device to acknowledge the new value (ack:true) and report \"did not respond\" if it never does. Leave this off for devices that never acknowledge (MQTT, scripts, 0_userdata) - every command would look failed.": "Після команди перемикання чекати до 2 секунд, доки пристрій підтвердить нове значення (ack:true), і повідомляти «не відповідає», якщо підтвердження немає. Не вмикайте для пристроїв, які ніколи не підтверджують (MQTT, скрипти, 0_userdata) — інакше кожна команда виглядатиме невдалою.",
14
21
  "Alarm sound (mp3/wav, optional)": "Звук будильника (mp3/wav, необов'язково)",
15
22
  "Allow changing objects and files (dangerous)": "Дозволити зміну об'єктів та файлів (небезпечно)",
16
23
  "Allow controlling states": "Дозволити керування станами",
@@ -21,41 +28,60 @@
21
28
  "Allow writing states (control devices)": "Дозволити стани запису (пристрої керування)",
22
29
  "Allow writing to the log": "Дозволити запис до журналу",
23
30
  "Also accept Wyoming clients (TCP)": "Також приймаємо клієнтів з Вайомінгу (TCP)",
31
+ "Also drive ESPHome voice satellites": "Також керувати голосовими сателітами ESPHome",
24
32
  "Announce when a timer expires": "Оголосити про закінчення часу таймера",
25
33
  "Announce when an alarm goes off": "Оголосити, коли спрацює будильник",
34
+ "Announcement targets (groups and people)": "Цілі оголошень (групи та люди)",
26
35
  "Answer simple commands locally (fast, offline)": "Відповідайте на прості команди локально (швидко, офлайн)",
27
36
  "Anthropic (Claude)": "Антропний (Клод)",
28
37
  "Any object (get_object/search_objects)": "Будь-який об'єкт (get_object/search_objects)",
38
+ "Ask": "Запитання",
29
39
  "Azure Speech": "Лазурна мова",
30
40
  "Azure credential": "Облікові дані Azure",
31
41
  "Azure region": "Лазурний регіон",
32
42
  "Azure subscription key": "Ключ підписки Azure",
33
43
  "Azure voice (optional)": "Голос Azure (необов'язково)",
34
44
  "Base URL (optional)": "Базова URL-адреса (необов'язково)",
45
+ "Before a trigger speaks, the model rewords its text so repeated announcements do not sound canned. Costs one small LLM call per announcement; the original text is used if it fails.": "Перш ніж тригер заговорить, модель перефразовує його текст, щоб повторювані оголошення не звучали шаблонно. Коштує одного невеликого виклику LLM на оголошення; у разі помилки використовується оригінальний текст.",
35
46
  "Bind address": "Прив’язана адреса",
36
47
  "Canonical term": "Канонічний термін",
37
48
  "Central credential store": "Центральне сховище посвідчень",
49
+ "Condition as JSON: {\"state\":\"javascript.0.window\",\"value\":true} or {\"time\":\"23:00\",\"days\":[1,2,3,4,5]}; add \"also\"/\"unless\" for extra or blocking conditions, or use a list for alternatives. Say = announcement, Ask = question (needs response rules, JSON: [{\"match\":\"agreement\",\"say\":\"Okay\",\"setState\":{\"id\":\"...\",\"value\":false}}]). Extra actions as JSON: [{\"setState\":{\"id\":\"...\",\"value\":false}}]. Delay waits before acting (90s/30m/5h), cooldown is the minimum gap between two firings in seconds (default 3600).": "Умова в JSON: {\"state\":\"javascript.0.window\",\"value\":true} або {\"time\":\"23:00\",\"days\":[1,2,3,4,5]}; додайте \"also\"/\"unless\" для додаткових або блокувальних умов або використайте список для альтернатив. Say = оголошення, Ask = запитання (потрібні правила відповіді, JSON: [{\"match\":\"agreement\",\"say\":\"Okay\",\"setState\":{\"id\":\"...\",\"value\":false}}]). Додаткові дії в JSON: [{\"setState\":{\"id\":\"...\",\"value\":false}}]. Затримка — очікування перед виконанням (90s/30m/5h), пауза повтору — мінімальний інтервал між двома спрацюваннями в секундах (типово 3600).",
50
+ "Confirm switch commands with a beep": "Підтверджувати команди перемикання сигналом",
51
+ "Cooldown (s)": "Пауза повтору (с)",
38
52
  "Credential mode": "Режим облікових даних",
39
53
  "DeepSeek": "Глибокий пошук",
54
+ "Delay": "Затримка",
40
55
  "Devices": "Пристрої",
41
56
  "Direct URL of a GGUF model. Leave empty for the default (Qwen2.5-1.5B-Instruct). Small models recommended on Raspberry Pi / arm64.": "Пряма URL-адреса моделі GGUF. Залиште поле порожнім для значення за замовчуванням (Qwen2.5-1.5B-Instruct). Рекомендовані невеликі моделі на Raspberry Pi / arm64.",
42
- "Downloads the engine and model (several hundred MB). Watch the instance log for progress.": "Завантажує рушій та модель (кілька сотень МБ). Слідкуйте за прогресом у журналі екземпляра.",
57
+ "Downloads the engine and model (several hundred MB). Progress is shown below.": "Завантажує рушій і модель (кілька сотень МБ). Перебіг завантаження показано нижче.",
58
+ "ESPHome satellites": "Сателіти ESPHome",
59
+ "ESPHome satellites do not get the reply over their API socket — they fetch it as a URL. This is the port that small HTTP server listens on.": "Сателіти ESPHome отримують відповідь не через свій сокет API — вони забирають її за URL. Це порт, на якому слухає цей невеликий HTTP-сервер.",
43
60
  "Empty = tts-1. Also: tts-1-hd, gpt-4o-mini-tts.": "Порожнє = tts-1. Також: tts-1-hd, gpt-4o-mini-tts.",
44
61
  "Empty = whisper-1. Also: gpt-4o-transcribe, gpt-4o-mini-transcribe.": "Порожнє = шепіт-1. Також: gpt-4o-trancribe, gpt-4o-mini-trancribe.",
45
62
  "Enable voice (STT/TTS for satellites)": "Увімкнути голосовий зв'язок (STT/TTS для супутників)",
46
63
  "Enable voice server (satellites)": "Увімкнути голосовий сервер (супутники)",
47
64
  "Enables speech recognition/synthesis. ioBroker-native satellites reach it over the message bus — no port needed. Turn on the UDP server below only for ESP / Hannah satellites.": "Дозволяє розпізнавання/синтез мовлення. Супутники, сумісні з ioBroker, досягають його через шину повідомлень — порт не потрібен. Увімкніть UDP-сервер нижче лише для супутників ESP / Hannah.",
65
+ "End of speech after (ms of silence)": "Кінець мовлення після (мс тиші)",
66
+ "Extra actions (JSON)": "Додаткові дії (JSON)",
67
+ "Give a set of satellites a name, so an announcement, a question or a trigger can address it: a group of rooms (\"Upstairs\") or the speakers that belong to one person (\"Denis\", so \"tell Denis dinner is ready\" reaches them). Members: satellite ids, room names or device names, separated by commas. Kind: empty or group, or person. A real satellite or room of the same name always wins, so a group can never make a speaker unreachable.": "Дайте набору сателітів назву, щоб до нього могли звертатися оголошення, запитання або тригер: група кімнат («Нагорі») або динаміки, що належать одній людині («Denis», щоб «скажи Denis, що вечеря готова» дійшло до них). Учасники: id сателітів, назви кімнат або пристроїв через кому. Тип: порожньо або group, або person. Справжній сателіт або кімната з такою самою назвою завжди має пріоритет, тож група ніколи не зробить динамік недоступним.",
48
68
  "Google Gemini": "Google Близнюки",
49
69
  "Home Assistant Voice PE / wyoming-satellite / ESPHome voice devices can stream to this adapter over the Wyoming protocol.": "Голосові пристрої Home Assistant Voice PE / wyoming-satellite / ESPHome можуть транслювати дані на цей адаптер через протокол Wyoming.",
70
+ "Home value (empty = auto)": "Значення «вдома» (порожньо = авто)",
71
+ "Host the satellites should fetch the audio from. Empty = use the address of each device connection automatically; set it only if the devices reach this machine under a different address (NAT, Docker, VLAN).": "Хост, з якого сателіти мають забирати звук. Порожньо = автоматично адреса відповідного зʼєднання з пристроєм; задавайте, лише якщо пристрої досягають цієї машини за іншою адресою (NAT, Docker, VLAN).",
72
+ "Id": "ID",
50
73
  "If off, the assistant can only read states, not set_state.": "Якщо вимкнено, помічник може лише зчитувати стани, а не set_state.",
51
74
  "Install local model": "Встановити локальну модель",
52
75
  "Interface the UDP voice server listens on. 0.0.0.0 = all interfaces; pick a specific host IP so satellites on the LAN can reach it.": "Інтерфейс, на якому прослуховує голосовий сервер UDP. 0.0.0.0 = усі інтерфейси; виберіть певну IP-адресу хоста, щоб супутники локальної мережі могли до нього дістатися.",
53
76
  "Interface the voice server listens on. 0.0.0.0 = all interfaces; pick a specific host IP so satellites on the LAN can reach it.": "Інтерфейс, на якому прослуховує голосовий сервер. 0.0.0.0 = усі інтерфейси; виберіть певну IP-адресу хоста, щоб супутники локальної мережі могли до нього дістатися.",
54
77
  "Keep the last few turns per source (chat, telegram, satellite) for a few minutes so follow-ups like 'and the kitchen too' work. In-memory only.": "Останні кілька ходів для кожного джерела (чат, телеграм, супутник) слід приділяти по кілька хвилин, щоб подальші запитання на кшталт «і кухня теж» спрацювали. Тільки по пам'яті.",
78
+ "Kind (group/person)": "Тип (group/person)",
79
+ "Kind (person/guest/pet)": "Тип (person/guest/pet)",
55
80
  "LLM assistant": "Асистент магістра права",
56
81
  "Language (empty = all)": "Мова (порожньо = все)",
57
82
  "Language for speech recognition and the spoken reply.": "Мова для розпізнавання мовлення та усної відповіді.",
58
83
  "Leave empty to reuse the main API key when the LLM provider is OpenAI; required otherwise.": "Залиште поле порожнім, щоб повторно використовувати основний ключ API, коли постачальник LLM є OpenAI; в іншому випадку обов'язкове поле.",
84
+ "Let the LLM reword trigger texts": "Перефразовувати тексти тригерів за допомогою LLM",
59
85
  "Lets the assistant durably remember facts you tell it (names, preferences, where things are) and use them in later conversations. Stored in the memory.* states; the LLM gets remember/forget tools.": "Дозволяє помічнику надовго запам'ятовувати факти, які ви йому розповідаєте (імена, вподобання, де знаходяться речі), та використовувати їх у подальших розмовах. Зберігається в пам'яті.* стани; LLM отримує інструменти запам'ятовування/забуття.",
60
86
  "Loaded from Azure (instance must run); empty = pick by language. e.g. de-DE-KatjaNeural.": "Завантажено з Azure (екземпляр має бути запущений); порожнє = вибір за мовою. Наприклад, de-DE-KatjaNeural.",
61
87
  "Loaded from Polly (instance must run); empty = default per language. e.g. Vicki, Tatyana.": "Завантажено з Polly (екземпляр має бути запущений); порожнє = значення за замовчуванням для кожної мови. Наприклад, Вікі, Тетяна.",
@@ -65,10 +91,14 @@
65
91
  "Local speech (no cloud)": "Місцева мова (без хмари)",
66
92
  "Long-term memory (remember facts across sessions)": "Довготривала пам'ять (запам'ятовування фактів протягом усіх сесій)",
67
93
  "Max tokens": "Максимум токенів",
94
+ "Media server address for the devices": "Адреса медіасервера для пристроїв",
95
+ "Media server port": "Порт медіасервера",
68
96
  "Model": "Модель",
69
97
  "Model name from alphacephei.com/vosk/models, e.g. vosk-model-small-de-0.15. Empty = small default per language.": "Назва моделі з alphacephei.com/vosk/models, наприклад, vosk-model-small-de-0.15. Порожнє значення = мале значення за замовчуванням для кожної мови.",
70
98
  "No sound": "Без звуку",
99
+ "None": "Немає",
71
100
  "Object read access": "Доступ для читання об'єкта",
101
+ "One row per device. Port empty = 6053. The room is what the assistant treats the satellite as being in. Leave the password empty unless the device really has an API password set — table values are stored unencrypted.": "Один рядок на пристрій. Порожній порт = 6053. Кімната — та, в якій асистент розміщує сателіт. Пароль заповнюйте, лише якщо на пристрої справді задано пароль API — значення таблиці зберігаються без шифрування.",
72
102
  "Only devices, rooms, functions": "Тільки пристрої, кімнати, функції",
73
103
  "OpenAI": "OpenAI",
74
104
  "OpenAI (Whisper)": "OpenAI (Whisper)",
@@ -80,25 +110,39 @@
80
110
  "OpenAI-compatible (custom)": "Сумісний з OpenAI (на замовлення)",
81
111
  "Opens a UDP port for streaming microphone satellites (Hannah-compatible / ESP). Not needed for ioBroker-native satellites.": "Відкриває UDP-порт для потокової передачі мікрофонних супутників (сумісних з Hannah / ESP). Не потрібен для супутників, нативних для ioBroker.",
82
112
  "Override the endpoint, e.g. https://api.groq.com/openai/v1 for Groq. Leave empty for the provider default.": "Перевизначте кінцеву точку, наприклад, https://api.groq.com/openai/v1 для Groq. Залиште порожнім для провайдера за замовчуванням.",
113
+ "Phrases (comma separated)": "Фрази (через кому)",
83
114
  "Pick an installed weather adapter to answer weather questions from (Open-Meteo, Weather Underground, OpenWeatherMap are fully understood; others are read best-effort). Start that adapter once so its data/locations appear here.": "Виберіть встановлений погодний адаптер, щоб відповідати на запитання про погоду (Open-Meteo, Weather Underground, OpenWeatherMap повністю зрозумілі; інші читаються максимально швидко). Запустіть цей адаптер один раз, щоб його дані/розташування відображалися тут.",
84
115
  "Piper (local)": "Пайпер (місцевий)",
85
116
  "Piper voice (optional)": "Голос волинщика (необов'язково)",
86
117
  "Play": "Грати",
118
+ "Port": "Порт",
119
+ "Presence": "Присутність",
120
+ "Proactive triggers": "Проактивні тригери",
87
121
  "Provider": "Постачальник",
88
122
  "Remember the conversation (follow-up questions)": "Згадайте розмову (додаткові питання)",
123
+ "Reply": "Відповідь",
124
+ "Response rules (JSON)": "Правила відповіді (JSON)",
125
+ "Reword system notifications": "Перефразовувати системні сповіщення",
89
126
  "Rewrite spoken or typed variants to your device/room names before local matching, e.g. \"TV\" to \"Fernseher\". Leave the language empty to apply to all languages. Also used for the text channels.": "Перепишіть усні або друковані варіанти назв пристроїв/кімнат перед локальним зіставленням, наприклад, «TV» на «Fernseher». Залиште поле мови порожнім, щоб застосувати його до всіх мов. Також використовується для текстових каналів.",
90
127
  "Ring duration (seconds)": "Тривалість дзвінка (секунди)",
128
+ "Room": "Кімната",
129
+ "Routines": "Рутини",
91
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Запуск голосового сервера UDP (супутники ESP / Hannah)",
92
131
  "Runs a small local model (node-llama-cpp) for general questions; escalates to the cloud LLM when it needs live device data. Install it with the button below.": "Запускає невелику локальну модель (node-llama-cpp) для загальних питань; переходить до хмарного LLM, коли потрібні дані з пристрою в реальному часі. Встановіть її за допомогою кнопки нижче.",
93
132
  "Said or typed": "Сказав або надрукував",
94
133
  "Satellites": "Супутники",
134
+ "Satellites, rooms or devices (comma separated)": "Сателіти, кімнати або пристрої (через кому)",
135
+ "Say": "Оголошення",
95
136
  "Settings": "Налаштування",
96
137
  "Speak an announcement on the satellite a countdown timer was set from (or on all satellites) when it runs out. Timers are always mirrored into the timers.* states for scripts and visualization.": "Промовте оголошення на супутнику, з якого було встановлено таймер зворотного відліку (або на всіх супутниках), коли він закінчиться. Таймери завжди відображаються в станах таймерів.* для скриптів та візуалізації.",
97
138
  "Speak an announcement when an alarm at a fixed clock time fires. Alarms are always mirrored into the alarms.* states for scripts and visualization.": "Озвучувати оголошення, коли спрацьовує будильник у фіксований час. Будильники завжди відображаються в станах будильників.* для сценаріїв та візуалізації.",
98
139
  "Speech credential mode": "Режим мовних даних",
99
140
  "Speech-to-text and text-to-speech use OpenAI. Leave empty to reuse the main API key when the provider is OpenAI; required when the LLM provider is Anthropic or custom.": "Перетворення мовлення на текст та тексту в мовлення використовують OpenAI. Залиште поле порожнім, щоб повторно використовувати основний ключ API, коли постачальником є OpenAI; обов'язково, коли постачальником LLM є Anthropic або custom.",
141
+ "Speech-to-text fallback": "Резервне розпізнавання мовлення",
100
142
  "Speech-to-text provider": "Постачальник перетворення мовлення на текст",
143
+ "Spoken system notifications (notify.text / the ioBroker notification manager) are reworded by the LLM into one natural sentence first - their raw texts are written for a log viewer. Costs one small LLM call per notification; the original text is spoken if it fails. Urgent ones (notify.alert) are announced even when Do-Not-Disturb is on.": "Озвучувані системні сповіщення (notify.text / менеджер сповіщень ioBroker) спочатку перефразовуються LLM в одне природне речення — їхні сирі тексти написані для перегляду журналу. Коштує одного невеликого виклику LLM на сповіщення; у разі помилки озвучується оригінальний текст. Термінові (notify.alert) оголошуються навіть в увімкненому режимі «Не турбувати».",
101
144
  "Starts a UDP server for microphone satellites (Hannah-compatible protocol).": "Запускає UDP-сервер для мікрофонних супутників (протокол, сумісний з Hannah).",
145
+ "State id": "ID стану",
102
146
  "Store key in adapter": "Зберігайте ключ в адаптері",
103
147
  "Store keys in adapter": "Зберігайте ключі в адаптері",
104
148
  "Synonym dictionary": "Словник синонімів",
@@ -106,13 +150,20 @@
106
150
  "System prompt": "Системний запит",
107
151
  "TTS voice": "Голос для синтезу мовлення",
108
152
  "Test connection": "Тестове з'єднання",
153
+ "Text-to-speech fallback": "Резервний синтез мовлення",
109
154
  "Text-to-speech provider": "Постачальник перетворення тексту в мовлення",
155
+ "These devices stream until the server stops them, so the adapter decides when you stopped talking. Raise it if replies cut you off, lower it if the assistant waits too long.": "Ці пристрої передають потік, доки сервер їх не зупинить, тож момент завершення мовлення визначає адаптер. Збільште, якщо відповідь перебиває вас; зменште, якщо асистент чекає задовго.",
156
+ "ThirdReality Voice & Music Assistant, Home Assistant Voice PE, linux-voice-assistant. These devices listen on TCP 6053 and the adapter dials them, so no port is opened for the audio itself — only the media server below, which they fetch the spoken reply from.": "ThirdReality Voice & Music Assistant, Home Assistant Voice PE, linux-voice-assistant. Ці пристрої слухають на TCP 6053, і адаптер підключається до них сам — тож для самого звуку порт не відкривається, лише медіасервер нижче, з якого вони забирають озвучену відповідь.",
110
157
  "Timer sound (mp3/wav, optional)": "Звук таймера (mp3/wav, необов'язково)",
158
+ "Triggers": "Тригери",
111
159
  "Try the built-in rule-based intent matching for turn on/off, dimming and status before calling the LLM.": "Спробуйте вбудовану функцію зіставлення намірів на основі правил для ввімкнення/вимкнення, затемнення та стану, перш ніж викликати LLM.",
112
160
  "Two default sounds (timer.wav, alarm.wav) are preinstalled — pick one below or upload your own mp3/wav. The selected sound plays before the spoken announcement. Needs ffmpeg on the host and at least one satellite.": "Попередньо встановлено два звуки за замовчуванням (timer.wav, alarm.wav) — виберіть один із наведених нижче або завантажте власний mp3/wav. Вибраний звук відтворюється перед голосовим оголошенням. Потрібен ffmpeg на хості та принаймні один супутник.",
113
161
  "UDP port": "UDP-порт",
114
162
  "Upload mp3/wav jingles below; the selected sound plays before the spoken announcement. Needs ffmpeg installed on the host and at least one satellite.": "Завантажте mp3/wav мелодії нижче; вибраний звук відтворюється перед голосовим оголошенням. Потрібно встановити ffmpeg на хості та принаймні одному супутнику.",
115
163
  "Use a local LLM before the cloud (installed on demand)": "Використовуйте локальний LLM перед хмарою (встановлюється на вимогу)",
164
+ "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "Використовується, якщо вказаний вище провайдер не працює (збій, прострочений ключ, вичерпана квота). Локальний рушій зберігає голосове керування без інтернету.",
165
+ "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "Використовується, якщо вказаний вище провайдер не працює. Piper дає асистентові змогу говорити без інтернету.",
166
+ "Verify device feedback": "Перевіряти відповідь пристрою",
116
167
  "Voice": "Голос",
117
168
  "Voice language": "Мова голосового зв'язку",
118
169
  "Voice satellites": "Голосові супутники",
@@ -120,11 +171,16 @@
120
171
  "Vosk (local)": "Воск (місцевий)",
121
172
  "Vosk model (optional)": "Модель Vosk (опціонально)",
122
173
  "Weather source": "Джерело погоди",
174
+ "When (JSON)": "Коли (JSON)",
175
+ "Which states tell the assistant who is at home - one row per person. Any state works: the residents adapter, a phone ping like ping.0.phone-denis.alive, a router client state or your own flag. Kind: empty or person, guest, pet (a pet never makes the house occupied). Home value: leave empty for the usual forms (true, 1, \"home\", \"anwesend\"), or enter the exact value that means at home. Used to tell the LLM who is around, to hold back announcements to an empty house (notify with onlyWhenHome) and as a trigger source via presence.anyoneHome.": "Які стани повідомляють асистентові, хто вдома, — один рядок на людину. Підходить будь-який стан: адаптер residents, пінг телефона, наприклад ping.0.phone-denis.alive, стан клієнта роутера або власний прапорець. Тип: порожньо або person, guest, pet (домашня тварина ніколи не робить дім зайнятим). Значення «вдома»: залиште порожнім для звичайних форм (true, 1, \"home\", \"anwesend\") або введіть точне значення, що означає «вдома». Використовується, щоб повідомити LLM, хто поруч, щоб не робити оголошень у порожньому домі (notify з onlyWhenHome) і як джерело для тригерів через presence.anyoneHome.",
123
176
  "Wyoming TCP port": "TCP-порт Вайомінгу",
124
177
  "e.g. Vicki (de), Tatyana (ru), Joanna (en). Empty = default per language.": "напр. Вікі (de), Тетяна (ru), Джоанна (en). Порожньо = за замовчуванням для кожної мови.",
125
178
  "e.g. de-DE-KatjaNeural, ru-RU-SvetlanaNeural. Empty = pick by language.": "наприклад, de-DE-KatjaNeural, ru-RU-SvetlanaNeural. Порожнє = вибір за мовою.",
126
179
  "e.g. de_DE-thorsten-medium, ru_RU-irina-medium. Empty = default per language.": "наприклад, de_DE-thorsten-medium, ru_RU-irina-medium. Порожнє = значення за замовчуванням для кожної мови.",
127
180
  "e.g. eu-central-1": "наприклад, eu-central-1",
128
181
  "e.g. gpt-4o-mini, gpt-4o, claude-sonnet-4-6": "напр. gpt-4o-mini, gpt-4o, claude-sonnet-4-6",
129
- "e.g. westeurope": "наприклад, Західна Європа"
130
- }
182
+ "e.g. westeurope": "наприклад, Західна Європа",
183
+ "None (local only)": "Немає (лише локально)",
184
+ "Without an LLM provider only the local tiers answer: the rule-based commands, routines, timers and alarms, and the local model if enabled. Anything else gets a short \"I can't do that\" reply.": "Без LLM-провайдера відповідають лише локальні рівні: команди на основі правил, рутини, таймери й будильники, а також локальна модель, якщо її ввімкнено. На все інше буде коротка відповідь «Цього я не вмію».",
185
+ "Chat": "Чат"
186
+ }
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "A fired timer/alarm keeps ringing (looping the sound) for up to this long, or until you say 'stop'/'halt'/'aufhören'/'cancel' (or write the stopRinging state). 0 = play the sound once.": "触发的定时器/警报会持续响铃(循环播放声音),最长可达设定时间,或直到您说“停止”、“暂停”、“取消”(或写入 stopRinging 状态)。0 = 播放一次声音。",
3
+ "A phrase that runs a list of actions: \"Gute Nacht\" switches off five things and answers once. Phrases: several separated by commas (matched anywhere in the sentence, upper/lower case and umlauts do not matter). Actions as JSON, same shape as a trigger: [{\"setState\":{\"id\":\"hm-rpc.0.ABC.1.STATE\",\"value\":false}},{\"say\":\"Schlaf gut\",\"room\":\"Schlafzimmer\"}]. Reply: what the assistant answers (leave empty to stay silent). Matched before the offline rule engine and before the LLM, so a routine is never reinterpreted.": "一个执行一系列动作的短语:\"Gute Nacht\" 关闭五个设备并只回答一次。短语:多个短语用逗号分隔(在句子任意位置匹配,不区分大小写和变音符号)。动作为 JSON,格式与触发器相同:[{\"setState\":{\"id\":\"hm-rpc.0.ABC.1.STATE\",\"value\":false}},{\"say\":\"Schlaf gut\",\"room\":\"Schlafzimmer\"}]。回复:助手的回答(留空则不出声)。在离线规则引擎和 LLM 之前匹配,因此例程永远不会被重新解读。",
4
+ "A successful switch command is confirmed by a short tone on the satellite instead of a spoken sentence - instant, where speaking costs a text-to-speech call. Questions, errors and the text channels are unaffected.": "成功的开关命令会在卫星设备上以短促提示音确认,而不是说出一句话——即时完成,而语音播报需要一次文字转语音调用。问题、错误和文本通道不受影响。",
5
+ "A trigger watches states or the clock and then speaks, writes a state, or asks you a question and acts on your answer. Switch single triggers off at runtime with triggers.items.<id>.enabled, test one with its fire button, and all of them with triggers.enabled.": "触发器监视状态或时钟,然后播报、写入状态,或向你提问并根据你的回答执行操作。运行时可通过 triggers.items.<id>.enabled 关闭单个触发器,用其 fire 按钮测试单个触发器,通过 triggers.enabled 控制全部触发器。",
3
6
  "API key": "API密钥",
7
+ "API password (usually empty)": "API 密码(通常为空)",
4
8
  "API-key credential": "API密钥凭证",
5
9
  "AWS Polly": "AWS Polly",
6
10
  "AWS Polly voice (optional)": "AWS Polly语音(可选)",
@@ -11,6 +15,9 @@
11
15
  "AWS secret access key": "AWS 秘密访问密钥",
12
16
  "AWS speech": "AWS语音",
13
17
  "Access / permissions": "访问权限",
18
+ "Actions (JSON)": "动作(JSON)",
19
+ "Address (IP or host name)": "地址(IP 或主机名)",
20
+ "After a switch command, wait up to 2 seconds for the device to acknowledge the new value (ack:true) and report \"did not respond\" if it never does. Leave this off for devices that never acknowledge (MQTT, scripts, 0_userdata) - every command would look failed.": "开关命令后,最多等待 2 秒让设备确认新值(ack:true),如果始终未确认则报告“未响应”。对于从不确认的设备(MQTT、脚本、0_userdata)请保持关闭——否则每条命令看起来都会失败。",
14
21
  "Alarm sound (mp3/wav, optional)": "闹铃声(mp3/wav格式,可选)",
15
22
  "Allow changing objects and files (dangerous)": "允许更改对象和文件(危险)",
16
23
  "Allow controlling states": "允许控制状态",
@@ -21,41 +28,60 @@
21
28
  "Allow writing states (control devices)": "允许写入状态(控制设备)",
22
29
  "Allow writing to the log": "允许写入日志",
23
30
  "Also accept Wyoming clients (TCP)": "也接受怀俄明州客户(TCP)",
31
+ "Also drive ESPHome voice satellites": "同时驱动 ESPHome 语音卫星",
24
32
  "Announce when a timer expires": "计时器到期时发出提示",
25
33
  "Announce when an alarm goes off": "警报响起时发出通知",
34
+ "Announcement targets (groups and people)": "播报目标(组和人员)",
26
35
  "Answer simple commands locally (fast, offline)": "本地(快速、离线)响应简单命令",
27
36
  "Anthropic (Claude)": "人格(克劳德)",
28
37
  "Any object (get_object/search_objects)": "任何对象(get_object/search_objects)",
38
+ "Ask": "提问",
29
39
  "Azure Speech": "Azure Speech",
30
40
  "Azure credential": "Azure 凭据",
31
41
  "Azure region": "Azure 区域",
32
42
  "Azure subscription key": "Azure 订阅密钥",
33
43
  "Azure voice (optional)": "Azure语音(可选)",
34
44
  "Base URL (optional)": "基本网址(可选)",
45
+ "Before a trigger speaks, the model rewords its text so repeated announcements do not sound canned. Costs one small LLM call per announcement; the original text is used if it fails.": "在触发器播报前,模型会改写其文本,使重复的播报听起来不那么死板。每次播报消耗一次小型 LLM 调用;如果失败则使用原始文本。",
35
46
  "Bind address": "绑定地址",
36
47
  "Canonical term": "规范术语",
37
48
  "Central credential store": "中央凭证存储",
49
+ "Condition as JSON: {\"state\":\"javascript.0.window\",\"value\":true} or {\"time\":\"23:00\",\"days\":[1,2,3,4,5]}; add \"also\"/\"unless\" for extra or blocking conditions, or use a list for alternatives. Say = announcement, Ask = question (needs response rules, JSON: [{\"match\":\"agreement\",\"say\":\"Okay\",\"setState\":{\"id\":\"...\",\"value\":false}}]). Extra actions as JSON: [{\"setState\":{\"id\":\"...\",\"value\":false}}]. Delay waits before acting (90s/30m/5h), cooldown is the minimum gap between two firings in seconds (default 3600).": "JSON 格式的条件:{\"state\":\"javascript.0.window\",\"value\":true} 或 {\"time\":\"23:00\",\"days\":[1,2,3,4,5]};添加 \"also\"/\"unless\" 作为附加或阻止条件,或使用列表表示备选条件。Say = 播报,Ask = 提问(需要回答规则,JSON:[{\"match\":\"agreement\",\"say\":\"Okay\",\"setState\":{\"id\":\"...\",\"value\":false}}])。JSON 格式的附加动作:[{\"setState\":{\"id\":\"...\",\"value\":false}}]。延迟表示执行前的等待时间(90s/30m/5h),冷却时间是两次触发之间的最小间隔,单位为秒(默认 3600)。",
50
+ "Confirm switch commands with a beep": "用提示音确认开关命令",
51
+ "Cooldown (s)": "冷却时间(秒)",
38
52
  "Credential mode": "凭证模式",
39
53
  "DeepSeek": "深潜",
54
+ "Delay": "延迟",
40
55
  "Devices": "设备",
41
56
  "Direct URL of a GGUF model. Leave empty for the default (Qwen2.5-1.5B-Instruct). Small models recommended on Raspberry Pi / arm64.": "GGUF 模型的直接 URL。留空则使用默认值 (Qwen2.5-1.5B-Instruct)。建议在 Raspberry Pi / arm64 上使用小型模型。",
42
- "Downloads the engine and model (several hundred MB). Watch the instance log for progress.": "下载引擎和模型(几百MB)。请查看实例日志以了解进度。",
57
+ "Downloads the engine and model (several hundred MB). Progress is shown below.": "下载引擎和模型(数百 MB)。进度显示在下方。",
58
+ "ESPHome satellites": "ESPHome 卫星",
59
+ "ESPHome satellites do not get the reply over their API socket — they fetch it as a URL. This is the port that small HTTP server listens on.": "ESPHome 卫星不会通过其 API 套接字接收回复,而是按 URL 获取。这里就是那个小型 HTTP 服务器监听的端口。",
43
60
  "Empty = tts-1. Also: tts-1-hd, gpt-4o-mini-tts.": "空 = tts-1。另见:tts-1-hd、gpt-4o-mini-tts。",
44
61
  "Empty = whisper-1. Also: gpt-4o-transcribe, gpt-4o-mini-transcribe.": "空 = whisper-1。另见:gpt-4o-transcribe、gpt-4o-mini-transcribe。",
45
62
  "Enable voice (STT/TTS for satellites)": "启用语音功能(卫星语音转语音/文本转语音)",
46
63
  "Enable voice server (satellites)": "启用语音服务器(卫星)",
47
64
  "Enables speech recognition/synthesis. ioBroker-native satellites reach it over the message bus — no port needed. Turn on the UDP server below only for ESP / Hannah satellites.": "启用语音识别/合成功能。ioBroker 原生卫星通过消息总线与其通信,无需端口。仅当 ESP/Hannah 卫星连接时,才需要启用下方的 UDP 服务器。",
65
+ "End of speech after (ms of silence)": "静音多久后视为说完(毫秒)",
66
+ "Extra actions (JSON)": "附加动作(JSON)",
67
+ "Give a set of satellites a name, so an announcement, a question or a trigger can address it: a group of rooms (\"Upstairs\") or the speakers that belong to one person (\"Denis\", so \"tell Denis dinner is ready\" reaches them). Members: satellite ids, room names or device names, separated by commas. Kind: empty or group, or person. A real satellite or room of the same name always wins, so a group can never make a speaker unreachable.": "为一组卫星设备命名,以便播报、提问或触发器可以指定它:一组房间(\"楼上\")或属于某个人的扬声器(\"Denis\",这样“告诉 Denis 晚饭好了”就能送达)。成员:卫星设备 id、房间名或设备名,用逗号分隔。类型:留空或 group,或 person。同名的真实卫星设备或房间始终优先,因此组永远不会导致扬声器无法访问。",
48
68
  "Google Gemini": "Google Gemini",
49
69
  "Home Assistant Voice PE / wyoming-satellite / ESPHome voice devices can stream to this adapter over the Wyoming protocol.": "Home Assistant Voice PE / wyoming-satellite / ESPHome 语音设备可以通过 Wyoming 协议向此适配器传输数据。",
70
+ "Home value (empty = auto)": "“在家”值(留空 = 自动)",
71
+ "Host the satellites should fetch the audio from. Empty = use the address of each device connection automatically; set it only if the devices reach this machine under a different address (NAT, Docker, VLAN).": "卫星应从哪个主机获取音频。留空 = 自动使用每个设备连接的地址;仅当设备通过其他地址访问本机时才需设置(NAT、Docker、VLAN)。",
72
+ "Id": "ID",
50
73
  "If off, the assistant can only read states, not set_state.": "如果关闭,助手只能读取状态,不能设置状态。",
51
74
  "Install local model": "安装本地模型",
52
75
  "Interface the UDP voice server listens on. 0.0.0.0 = all interfaces; pick a specific host IP so satellites on the LAN can reach it.": "UDP语音服务器监听的接口。0.0.0.0 代表所有接口;选择一个特定的主机IP地址,以便局域网上的卫星节点可以访问它。",
53
76
  "Interface the voice server listens on. 0.0.0.0 = all interfaces; pick a specific host IP so satellites on the LAN can reach it.": "语音服务器监听的接口。0.0.0.0 代表所有接口;请选择一个特定的主机 IP 地址,以便局域网上的卫星节点可以访问它。",
54
77
  "Keep the last few turns per source (chat, telegram, satellite) for a few minutes so follow-ups like 'and the kitchen too' work. In-memory only.": "将每个信息源(聊天记录、电报、卫星)的最后几轮对话保留几分钟,以便后续对话(例如“还有厨房”)能够正常显示。仅存储在内存中。",
78
+ "Kind (group/person)": "类型(group/person)",
79
+ "Kind (person/guest/pet)": "类型(person/guest/pet)",
55
80
  "LLM assistant": "法学硕士助理",
56
81
  "Language (empty = all)": "语言(空 = 所有)",
57
82
  "Language for speech recognition and the spoken reply.": "用于语音识别和语音回复的语言。",
58
83
  "Leave empty to reuse the main API key when the LLM provider is OpenAI; required otherwise.": "如果 LLM 提供商是 OpenAI,则留空以重用主 API 密钥;否则为必填项。",
84
+ "Let the LLM reword trigger texts": "让 LLM 改写触发器文本",
59
85
  "Lets the assistant durably remember facts you tell it (names, preferences, where things are) and use them in later conversations. Stored in the memory.* states; the LLM gets remember/forget tools.": "让助手持久记住你告诉它的信息(姓名、偏好、物品位置),并在以后的对话中使用。这些信息存储在内存状态中;LLM 具备记忆/遗忘功能。",
60
86
  "Loaded from Azure (instance must run); empty = pick by language. e.g. de-DE-KatjaNeural.": "从 Azure 加载(实例必须运行);空 = 按语言选择。例如 de-DE-KatjaNeural。",
61
87
  "Loaded from Polly (instance must run); empty = default per language. e.g. Vicki, Tatyana.": "从 Polly 加载(实例必须运行);空 = 每种语言的默认值。例如:Vicki、Tatyana。",
@@ -65,10 +91,14 @@
65
91
  "Local speech (no cloud)": "本地语音(无云)",
66
92
  "Long-term memory (remember facts across sessions)": "长期记忆(在不同阶段记住事实)",
67
93
  "Max tokens": "最大代币数",
94
+ "Media server address for the devices": "供设备使用的媒体服务器地址",
95
+ "Media server port": "媒体服务器端口",
68
96
  "Model": "模型",
69
97
  "Model name from alphacephei.com/vosk/models, e.g. vosk-model-small-de-0.15. Empty = small default per language.": "模型名称来自 alphacephei.com/vosk/models,例如 vosk-model-small-de-0.15。空 = 每个语言的默认小型模型。",
70
98
  "No sound": "无声",
99
+ "None": "无",
71
100
  "Object read access": "对象读取访问",
101
+ "One row per device. Port empty = 6053. The room is what the assistant treats the satellite as being in. Leave the password empty unless the device really has an API password set — table values are stored unencrypted.": "每台设备一行。端口留空 = 6053。房间即助手认定该卫星所在的位置。除非设备确实设置了 API 密码,否则请留空——表格中的值以明文保存。",
72
102
  "Only devices, rooms, functions": "仅限设备、房间、功能",
73
103
  "OpenAI": "OpenAI",
74
104
  "OpenAI (Whisper)": "OpenAI(Whisper)",
@@ -80,25 +110,39 @@
80
110
  "OpenAI-compatible (custom)": "兼容 OpenAI(自定义)",
81
111
  "Opens a UDP port for streaming microphone satellites (Hannah-compatible / ESP). Not needed for ioBroker-native satellites.": "为流媒体麦克风卫星(兼容 Hannah / ESP)打开一个 UDP 端口。ioBroker 原生卫星不需要此端口。",
82
112
  "Override the endpoint, e.g. https://api.groq.com/openai/v1 for Groq. Leave empty for the provider default.": "覆盖端点,例如 Groq 的端点为 https://api.groq.com/openai/v1。留空则使用提供商的默认值。",
113
+ "Phrases (comma separated)": "短语(逗号分隔)",
83
114
  "Pick an installed weather adapter to answer weather questions from (Open-Meteo, Weather Underground, OpenWeatherMap are fully understood; others are read best-effort). Start that adapter once so its data/locations appear here.": "选择一个已安装的天气适配器来回答天气问题(Open-Meteo、Weather Underground 和 OpenWeatherMap 的数据均可完全读取;其他适配器则尽力读取)。启动该适配器一次,使其数据/位置信息显示在此处。",
84
115
  "Piper (local)": "Piper(本地)",
85
116
  "Piper voice (optional)": "风笛声(可选)",
86
117
  "Play": "玩",
118
+ "Port": "端口",
119
+ "Presence": "在家状态",
120
+ "Proactive triggers": "主动触发器",
87
121
  "Provider": "提供者",
88
122
  "Remember the conversation (follow-up questions)": "记住对话内容(后续问题)",
123
+ "Reply": "回复",
124
+ "Response rules (JSON)": "回答规则(JSON)",
125
+ "Reword system notifications": "改写系统通知",
89
126
  "Rewrite spoken or typed variants to your device/room names before local matching, e.g. \"TV\" to \"Fernseher\". Leave the language empty to apply to all languages. Also used for the text channels.": "在进行本地匹配之前,请将口语或文本形式的名称重写为您的设备/房间名称,例如将“TV”重写为“Fernseher”。将语言留空则应用所有语言。此设置也适用于文本频道。",
90
127
  "Ring duration (seconds)": "铃声持续时间(秒)",
128
+ "Room": "房间",
129
+ "Routines": "例程",
91
130
  "Run the UDP voice server (ESP / Hannah satellites)": "运行UDP语音服务器(ESP/Hannah卫星)",
92
131
  "Runs a small local model (node-llama-cpp) for general questions; escalates to the cloud LLM when it needs live device data. Install it with the button below.": "用于处理一般性问题的本地小型模型(node-llama-cpp);当需要实时设备数据时,会升级到云端LLM。点击下方按钮即可安装。",
93
132
  "Said or typed": "口头或书面",
94
133
  "Satellites": "卫星",
134
+ "Satellites, rooms or devices (comma separated)": "卫星设备、房间或设备(逗号分隔)",
135
+ "Say": "播报",
95
136
  "Settings": "设置",
96
137
  "Speak an announcement on the satellite a countdown timer was set from (or on all satellites) when it runs out. Timers are always mirrored into the timers.* states for scripts and visualization.": "倒计时结束时,在设置倒计时的卫星(或所有卫星)上发布公告。倒计时始终会同步到脚本和可视化的 timers.* 状态中。",
97
138
  "Speak an announcement when an alarm at a fixed clock time fires. Alarms are always mirrored into the alarms.* states for scripts and visualization.": "当固定时间触发警报时,播放公告。警报状态始终会同步到 alarms.* 状态中,以便用于脚本和可视化。",
98
139
  "Speech credential mode": "语音凭证模式",
99
140
  "Speech-to-text and text-to-speech use OpenAI. Leave empty to reuse the main API key when the provider is OpenAI; required when the LLM provider is Anthropic or custom.": "语音转文本和文本转语音功能使用 OpenAI。如果提供程序为 OpenAI,则留空以重用主 API 密钥;如果 LLM 提供程序为 Anthropic 或自定义,则此项为必填项。",
141
+ "Speech-to-text fallback": "语音转文字备用方案",
100
142
  "Speech-to-text provider": "语音转文本提供商",
143
+ "Spoken system notifications (notify.text / the ioBroker notification manager) are reworded by the LLM into one natural sentence first - their raw texts are written for a log viewer. Costs one small LLM call per notification; the original text is spoken if it fails. Urgent ones (notify.alert) are announced even when Do-Not-Disturb is on.": "播报的系统通知(notify.text / ioBroker 通知管理器)会先由 LLM 改写为一句自然的话——其原始文本是为日志查看器编写的。每条通知消耗一次小型 LLM 调用;如果失败则播报原始文本。紧急通知(notify.alert)即使在勿扰模式开启时也会播报。",
101
144
  "Starts a UDP server for microphone satellites (Hannah-compatible protocol).": "启动麦克风卫星的 UDP 服务器(兼容 Hannah 协议)。",
145
+ "State id": "状态 ID",
102
146
  "Store key in adapter": "适配器中存储密钥",
103
147
  "Store keys in adapter": "适配器中存储密钥",
104
148
  "Synonym dictionary": "同义词词典",
@@ -106,13 +150,20 @@
106
150
  "System prompt": "系统提示",
107
151
  "TTS voice": "TTS语音",
108
152
  "Test connection": "测试连接",
153
+ "Text-to-speech fallback": "文字转语音备用方案",
109
154
  "Text-to-speech provider": "文本转语音服务提供商",
155
+ "These devices stream until the server stops them, so the adapter decides when you stopped talking. Raise it if replies cut you off, lower it if the assistant waits too long.": "这些设备会一直传输,直到服务器让它们停止,因此由适配器判断你何时说完。若回复打断你就调大,若助手等待过久就调小。",
156
+ "ThirdReality Voice & Music Assistant, Home Assistant Voice PE, linux-voice-assistant. These devices listen on TCP 6053 and the adapter dials them, so no port is opened for the audio itself — only the media server below, which they fetch the spoken reply from.": "ThirdReality Voice & Music Assistant、Home Assistant Voice PE、linux-voice-assistant。这些设备在 TCP 6053 上监听,由适配器主动连接它们,因此音频本身不会占用端口——只有下面的媒体服务器,设备会从那里获取语音回复。",
110
157
  "Timer sound (mp3/wav, optional)": "定时器声音(mp3/wav格式,可选)",
158
+ "Triggers": "触发器",
111
159
  "Try the built-in rule-based intent matching for turn on/off, dimming and status before calling the LLM.": "在调用 LLM 之前,请尝试使用内置的基于规则的意图匹配来打开/关闭、调暗和状态。",
112
160
  "Two default sounds (timer.wav, alarm.wav) are preinstalled — pick one below or upload your own mp3/wav. The selected sound plays before the spoken announcement. Needs ffmpeg on the host and at least one satellite.": "系统预装了两个默认声音(timer.wav 和 alarm.wav),您可以从下方选择一个,或者上传您自己的 mp3/wav 文件。所选声音会在语音提示之前播放。主机上需要安装 ffmpeg,并且至少需要一个卫星设备。",
113
161
  "UDP port": "UDP端口",
114
162
  "Upload mp3/wav jingles below; the selected sound plays before the spoken announcement. Needs ffmpeg installed on the host and at least one satellite.": "请在下方上传mp3/wav格式的铃声;所选铃声会在语音播报前播放。主机上需要安装ffmpeg,并且至少需要一台卫星设备。",
115
163
  "Use a local LLM before the cloud (installed on demand)": "在云端之前使用本地LLM(按需安装)",
164
+ "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "当上方的服务商不可用时使用(故障、密钥过期、额度用尽)。本地引擎可在没有互联网时保持语音功能可用。",
165
+ "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "当上方的服务商不可用时使用。Piper 可让助手在没有互联网时继续说话。",
166
+ "Verify device feedback": "验证设备反馈",
116
167
  "Voice": "嗓音",
117
168
  "Voice language": "语音语言",
118
169
  "Voice satellites": "语音卫星",
@@ -120,11 +171,16 @@
120
171
  "Vosk (local)": "Vosk(本地)",
121
172
  "Vosk model (optional)": "Vosk 型号(可选)",
122
173
  "Weather source": "天气来源",
174
+ "When (JSON)": "何时(JSON)",
175
+ "Which states tell the assistant who is at home - one row per person. Any state works: the residents adapter, a phone ping like ping.0.phone-denis.alive, a router client state or your own flag. Kind: empty or person, guest, pet (a pet never makes the house occupied). Home value: leave empty for the usual forms (true, 1, \"home\", \"anwesend\"), or enter the exact value that means at home. Used to tell the LLM who is around, to hold back announcements to an empty house (notify with onlyWhenHome) and as a trigger source via presence.anyoneHome.": "哪些状态告诉助手谁在家——每人一行。任何状态都可以:residents 适配器、手机 ping(如 ping.0.phone-denis.alive)、路由器客户端状态或你自己的标志。类型:留空或 person、guest、pet(宠物永远不会使房子被视为有人)。“在家”值:留空以使用常见形式 (true, 1, \"home\", \"anwesend\"),或输入表示在家的确切值。用于告诉 LLM 谁在附近、在家中无人时暂缓播报(notify 配合 onlyWhenHome),以及通过 presence.anyoneHome 作为触发源。",
123
176
  "Wyoming TCP port": "怀俄明州 TCP 端口",
124
177
  "e.g. Vicki (de), Tatyana (ru), Joanna (en). Empty = default per language.": "例如Vicki(德)、Tatyana(俄)、Joanna(英)。空=每种语言的默认值。",
125
178
  "e.g. de-DE-KatjaNeural, ru-RU-SvetlanaNeural. Empty = pick by language.": "例如 de-DE-KatjaNeural、ru-RU-SvetlanaNeural。空 = 按语言选择。",
126
179
  "e.g. de_DE-thorsten-medium, ru_RU-irina-medium. Empty = default per language.": "例如 de_DE-thorsten-medium、ru_RU-irina-medium。空值 = 每种语言的默认值。",
127
180
  "e.g. eu-central-1": "例如:eu-central-1",
128
181
  "e.g. gpt-4o-mini, gpt-4o, claude-sonnet-4-6": "例如gpt-4o-mini、gpt-4o、克劳德十四行诗-4-6",
129
- "e.g. westeurope": "例如:西欧"
130
- }
182
+ "e.g. westeurope": "例如:西欧",
183
+ "None (local only)": "无(仅本地)",
184
+ "Without an LLM provider only the local tiers answer: the rule-based commands, routines, timers and alarms, and the local model if enabled. Anything else gets a short \"I can't do that\" reply.": "没有 LLM 提供商时,只有本地层级会作答:基于规则的命令、例程、定时器和闹钟,以及已启用的本地模型。其他请求只会得到一句简短的“我做不到”。",
185
+ "Chat": "聊天"
186
+ }