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.": "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.",
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.": "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.",
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.": "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.": "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.",
3
6
  "API key": "API key",
7
+ "API password (usually empty)": "API password (usually empty)",
4
8
  "API-key credential": "API-key credential",
5
9
  "AWS Polly": "AWS Polly",
6
10
  "AWS Polly voice (optional)": "AWS Polly voice (optional)",
@@ -11,6 +15,9 @@
11
15
  "AWS secret access key": "AWS secret access key",
12
16
  "AWS speech": "AWS speech",
13
17
  "Access / permissions": "Access / permissions",
18
+ "Actions (JSON)": "Actions (JSON)",
19
+ "Address (IP or host name)": "Address (IP or host name)",
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.": "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.",
14
21
  "Alarm sound (mp3/wav, optional)": "Alarm sound (mp3/wav, optional)",
15
22
  "Allow changing objects and files (dangerous)": "Allow changing objects and files (dangerous)",
16
23
  "Allow controlling states": "Allow controlling states",
@@ -21,41 +28,60 @@
21
28
  "Allow writing states (control devices)": "Allow writing states (control devices)",
22
29
  "Allow writing to the log": "Allow writing to the log",
23
30
  "Also accept Wyoming clients (TCP)": "Also accept Wyoming clients (TCP)",
31
+ "Also drive ESPHome voice satellites": "Also drive ESPHome voice satellites",
24
32
  "Announce when a timer expires": "Announce when a timer expires",
25
33
  "Announce when an alarm goes off": "Announce when an alarm goes off",
34
+ "Announcement targets (groups and people)": "Announcement targets (groups and people)",
26
35
  "Answer simple commands locally (fast, offline)": "Answer simple commands locally (fast, offline)",
27
36
  "Anthropic (Claude)": "Anthropic (Claude)",
28
37
  "Any object (get_object/search_objects)": "Any object (get_object/search_objects)",
38
+ "Ask": "Ask",
29
39
  "Azure Speech": "Azure Speech",
30
40
  "Azure credential": "Azure credential",
31
41
  "Azure region": "Azure region",
32
42
  "Azure subscription key": "Azure subscription key",
33
43
  "Azure voice (optional)": "Azure voice (optional)",
34
44
  "Base URL (optional)": "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.": "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.",
35
46
  "Bind address": "Bind address",
36
47
  "Canonical term": "Canonical term",
37
48
  "Central credential store": "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).": "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).",
50
+ "Confirm switch commands with a beep": "Confirm switch commands with a beep",
51
+ "Cooldown (s)": "Cooldown (s)",
38
52
  "Credential mode": "Credential mode",
39
53
  "DeepSeek": "DeepSeek",
54
+ "Delay": "Delay",
40
55
  "Devices": "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.": "Direct URL of a GGUF model. Leave empty for the default (Qwen2.5-1.5B-Instruct). Small models recommended on Raspberry Pi / arm64.",
42
- "Downloads the engine and model (several hundred MB). Watch the instance log for progress.": "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.": "Downloads the engine and model (several hundred MB). Progress is shown below.",
58
+ "ESPHome satellites": "ESPHome satellites",
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 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.",
43
60
  "Empty = tts-1. Also: tts-1-hd, gpt-4o-mini-tts.": "Empty = tts-1. Also: tts-1-hd, gpt-4o-mini-tts.",
44
61
  "Empty = whisper-1. Also: gpt-4o-transcribe, gpt-4o-mini-transcribe.": "Empty = whisper-1. Also: gpt-4o-transcribe, gpt-4o-mini-transcribe.",
45
62
  "Enable voice (STT/TTS for satellites)": "Enable voice (STT/TTS for satellites)",
46
63
  "Enable voice server (satellites)": "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.": "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.",
65
+ "End of speech after (ms of silence)": "End of speech after (ms of silence)",
66
+ "Extra actions (JSON)": "Extra actions (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.": "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.",
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 voice devices can stream to this adapter over the Wyoming protocol.",
70
+ "Home value (empty = auto)": "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).": "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).",
72
+ "Id": "Id",
50
73
  "If off, the assistant can only read states, not set_state.": "If off, the assistant can only read states, not set_state.",
51
74
  "Install local model": "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.": "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.",
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.": "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.",
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.": "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)": "Kind (group/person)",
79
+ "Kind (person/guest/pet)": "Kind (person/guest/pet)",
55
80
  "LLM assistant": "LLM assistant",
56
81
  "Language (empty = all)": "Language (empty = all)",
57
82
  "Language for speech recognition and the spoken reply.": "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.": "Leave empty to reuse the main API key when the LLM provider is OpenAI; required otherwise.",
84
+ "Let the LLM reword trigger texts": "Let the LLM reword trigger texts",
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.": "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.",
60
86
  "Loaded from Azure (instance must run); empty = pick by language. e.g. de-DE-KatjaNeural.": "Loaded from Azure (instance must run); empty = pick by language. e.g. de-DE-KatjaNeural.",
61
87
  "Loaded from Polly (instance must run); empty = default per language. e.g. Vicki, Tatyana.": "Loaded from Polly (instance must run); empty = default per language. e.g. Vicki, Tatyana.",
@@ -65,10 +91,14 @@
65
91
  "Local speech (no cloud)": "Local speech (no cloud)",
66
92
  "Long-term memory (remember facts across sessions)": "Long-term memory (remember facts across sessions)",
67
93
  "Max tokens": "Max tokens",
94
+ "Media server address for the devices": "Media server address for the devices",
95
+ "Media server port": "Media server port",
68
96
  "Model": "Model",
69
97
  "Model name from alphacephei.com/vosk/models, e.g. vosk-model-small-de-0.15. Empty = small default per language.": "Model name from alphacephei.com/vosk/models, e.g. vosk-model-small-de-0.15. Empty = small default per language.",
70
98
  "No sound": "No sound",
99
+ "None": "None",
71
100
  "Object read access": "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.": "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.",
72
102
  "Only devices, rooms, functions": "Only devices, rooms, functions",
73
103
  "OpenAI": "OpenAI",
74
104
  "OpenAI (Whisper)": "OpenAI (Whisper)",
@@ -80,25 +110,39 @@
80
110
  "OpenAI-compatible (custom)": "OpenAI-compatible (custom)",
81
111
  "Opens a UDP port for streaming microphone satellites (Hannah-compatible / ESP). Not needed for ioBroker-native satellites.": "Opens a UDP port for streaming microphone satellites (Hannah-compatible / ESP). Not needed for ioBroker-native satellites.",
82
112
  "Override the endpoint, e.g. https://api.groq.com/openai/v1 for Groq. Leave empty for the provider default.": "Override the endpoint, e.g. https://api.groq.com/openai/v1 for Groq. Leave empty for the provider default.",
113
+ "Phrases (comma separated)": "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.": "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.",
84
115
  "Piper (local)": "Piper (local)",
85
116
  "Piper voice (optional)": "Piper voice (optional)",
86
117
  "Play": "Play",
118
+ "Port": "Port",
119
+ "Presence": "Presence",
120
+ "Proactive triggers": "Proactive triggers",
87
121
  "Provider": "Provider",
88
122
  "Remember the conversation (follow-up questions)": "Remember the conversation (follow-up questions)",
123
+ "Reply": "Reply",
124
+ "Response rules (JSON)": "Response rules (JSON)",
125
+ "Reword system notifications": "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.": "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.",
90
127
  "Ring duration (seconds)": "Ring duration (seconds)",
128
+ "Room": "Room",
129
+ "Routines": "Routines",
91
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Run the UDP voice server (ESP / Hannah satellites)",
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.": "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.",
93
132
  "Said or typed": "Said or typed",
94
133
  "Satellites": "Satellites",
134
+ "Satellites, rooms or devices (comma separated)": "Satellites, rooms or devices (comma separated)",
135
+ "Say": "Say",
95
136
  "Settings": "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.": "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.": "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": "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.": "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.",
141
+ "Speech-to-text fallback": "Speech-to-text fallback",
100
142
  "Speech-to-text provider": "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.": "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.",
101
144
  "Starts a UDP server for microphone satellites (Hannah-compatible protocol).": "Starts a UDP server for microphone satellites (Hannah-compatible protocol).",
145
+ "State id": "State id",
102
146
  "Store key in adapter": "Store key in adapter",
103
147
  "Store keys in adapter": "Store keys in adapter",
104
148
  "Synonym dictionary": "Synonym dictionary",
@@ -106,13 +150,20 @@
106
150
  "System prompt": "System prompt",
107
151
  "TTS voice": "TTS voice",
108
152
  "Test connection": "Test connection",
153
+ "Text-to-speech fallback": "Text-to-speech fallback",
109
154
  "Text-to-speech provider": "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.": "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. 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.",
110
157
  "Timer sound (mp3/wav, optional)": "Timer sound (mp3/wav, optional)",
158
+ "Triggers": "Triggers",
111
159
  "Try the built-in rule-based intent matching for turn on/off, dimming and status before calling the LLM.": "Try the built-in rule-based intent matching for turn on/off, dimming and status before calling the 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.": "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.",
113
161
  "UDP port": "UDP port",
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.": "Upload mp3/wav jingles below; the selected sound plays before the spoken announcement. Needs ffmpeg installed on the host and at least one satellite.",
115
163
  "Use a local LLM before the cloud (installed on demand)": "Use a local LLM before the cloud (installed on demand)",
164
+ "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "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.": "Used when the provider above fails. Piper keeps the assistant speaking without the internet.",
166
+ "Verify device feedback": "Verify device feedback",
116
167
  "Voice": "Voice",
117
168
  "Voice language": "Voice language",
118
169
  "Voice satellites": "Voice satellites",
@@ -120,11 +171,16 @@
120
171
  "Vosk (local)": "Vosk (local)",
121
172
  "Vosk model (optional)": "Vosk model (optional)",
122
173
  "Weather source": "Weather source",
174
+ "When (JSON)": "When (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.": "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.",
123
176
  "Wyoming TCP port": "Wyoming TCP port",
124
177
  "e.g. Vicki (de), Tatyana (ru), Joanna (en). Empty = default per language.": "e.g. Vicki (de), Tatyana (ru), Joanna (en). Empty = default per language.",
125
178
  "e.g. de-DE-KatjaNeural, ru-RU-SvetlanaNeural. Empty = pick by language.": "e.g. de-DE-KatjaNeural, ru-RU-SvetlanaNeural. Empty = pick by language.",
126
179
  "e.g. de_DE-thorsten-medium, ru_RU-irina-medium. Empty = default per language.": "e.g. de_DE-thorsten-medium, ru_RU-irina-medium. Empty = default per language.",
127
180
  "e.g. eu-central-1": "e.g. eu-central-1",
128
181
  "e.g. gpt-4o-mini, gpt-4o, claude-sonnet-4-6": "e.g. gpt-4o-mini, gpt-4o, claude-sonnet-4-6",
129
- "e.g. westeurope": "e.g. westeurope"
130
- }
182
+ "e.g. westeurope": "e.g. westeurope",
183
+ "None (local only)": "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.": "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.",
185
+ "Chat": "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.": "Un temporizador/alarma activado sigue sonando (repitiendo el sonido) durante este tiempo, o hasta que digas \"stop\"/\"halt\"/\"aufhören\"/\"cancel\" (o escribas el estado stopRing). 0 = reproducir el sonido una vez.",
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.": "Una frase que ejecuta una lista de acciones: \"Gute Nacht\" apaga cinco cosas y responde una sola vez. Frases: varias separadas por comas (se reconocen en cualquier parte de la oración; mayúsculas/minúsculas y diéresis no importan). Acciones en JSON, con el mismo formato que un disparador: [{\"setState\":{\"id\":\"hm-rpc.0.ABC.1.STATE\",\"value\":false}},{\"say\":\"Schlaf gut\",\"room\":\"Schlafzimmer\"}]. Respuesta: lo que contesta el asistente (déjalo vacío para no decir nada). Se comprueba antes del motor de reglas sin conexión y antes del LLM, así que una rutina nunca se reinterpreta.",
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.": "Un comando de conmutación exitoso se confirma con un tono breve en el satélite en lugar de una frase hablada - al instante, mientras que hablar cuesta una llamada de texto a voz. Las preguntas, los errores y los canales de texto no se ven afectados.",
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.": "Un disparador vigila estados o el reloj y luego habla, escribe un estado o te hace una pregunta y actúa según tu respuesta. Desactiva disparadores individuales en tiempo de ejecución con triggers.items.<id>.enabled, prueba uno con su botón fire y todos a la vez con triggers.enabled.",
3
6
  "API key": "clave API",
7
+ "API password (usually empty)": "Contraseña de API (normalmente vacía)",
4
8
  "API-key credential": "Credencial de clave API",
5
9
  "AWS Polly": "Polly de AWS",
6
10
  "AWS Polly voice (optional)": "Voz de AWS Polly (opcional)",
@@ -11,6 +15,9 @@
11
15
  "AWS secret access key": "clave de acceso secreta de AWS",
12
16
  "AWS speech": "Discurso de AWS",
13
17
  "Access / permissions": "Acceso / permisos",
18
+ "Actions (JSON)": "Acciones (JSON)",
19
+ "Address (IP or host name)": "Dirección (IP o nombre de host)",
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.": "Tras un comando de conmutación, esperar hasta 2 segundos a que el dispositivo confirme el nuevo valor (ack:true) e informar \"no respondió\" si nunca lo hace. Déjalo desactivado para dispositivos que nunca confirman (MQTT, scripts, 0_userdata) - de lo contrario, todos los comandos parecerían fallidos.",
14
21
  "Alarm sound (mp3/wav, optional)": "Sonido de alarma (mp3/wav, opcional)",
15
22
  "Allow changing objects and files (dangerous)": "Permitir la modificación de objetos y archivos (peligroso)",
16
23
  "Allow controlling states": "Permitir el control de los estados",
@@ -21,41 +28,60 @@
21
28
  "Allow writing states (control devices)": "Permitir la escritura de estados (dispositivos de control)",
22
29
  "Allow writing to the log": "Permitir la escritura en el registro",
23
30
  "Also accept Wyoming clients (TCP)": "También aceptamos clientes de Wyoming (TCP).",
31
+ "Also drive ESPHome voice satellites": "Controlar también satélites de voz ESPHome",
24
32
  "Announce when a timer expires": "Anunciar cuando expire un temporizador",
25
33
  "Announce when an alarm goes off": "Anunciar cuando suene una alarma",
34
+ "Announcement targets (groups and people)": "Destinos de anuncios (grupos y personas)",
26
35
  "Answer simple commands locally (fast, offline)": "Responde a comandos sencillos localmente (rápido, sin conexión).",
27
36
  "Anthropic (Claude)": "Antrópico (Claude)",
28
37
  "Any object (get_object/search_objects)": "Cualquier objeto (get_object/search_objects)",
38
+ "Ask": "Pregunta",
29
39
  "Azure Speech": "Discurso de Azure",
30
40
  "Azure credential": "Credencial de Azure",
31
41
  "Azure region": "Región de Azure",
32
42
  "Azure subscription key": "clave de suscripción de Azure",
33
43
  "Azure voice (optional)": "Voz de Azure (opcional)",
34
44
  "Base URL (optional)": "URL base (opcional)",
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.": "Antes de que un disparador hable, el modelo reformula su texto para que los anuncios repetidos no suenen enlatados. Cuesta una pequeña llamada al LLM por anuncio; si falla, se usa el texto original.",
35
46
  "Bind address": "Dirección de enlace",
36
47
  "Canonical term": "Término canónico",
37
48
  "Central credential store": "Almacén central de credenciales",
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).": "Condición en JSON: {\"state\":\"javascript.0.window\",\"value\":true} o {\"time\":\"23:00\",\"days\":[1,2,3,4,5]}; añade \"also\"/\"unless\" para condiciones adicionales o de bloqueo, o usa una lista para alternativas. Say = anuncio, Ask = pregunta (requiere reglas de respuesta, JSON: [{\"match\":\"agreement\",\"say\":\"Okay\",\"setState\":{\"id\":\"...\",\"value\":false}}]). Acciones adicionales en JSON: [{\"setState\":{\"id\":\"...\",\"value\":false}}]. El retardo espera antes de actuar (90s/30m/5h), el tiempo de espera es el intervalo mínimo entre dos activaciones en segundos (por defecto 3600).",
50
+ "Confirm switch commands with a beep": "Confirmar comandos de conmutación con un pitido",
51
+ "Cooldown (s)": "Tiempo de espera (s)",
38
52
  "Credential mode": "Modo de credenciales",
39
53
  "DeepSeek": "Búsqueda profunda",
54
+ "Delay": "Retardo",
40
55
  "Devices": "Dispositivos",
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 directa de un modelo GGUF. Déjelo en blanco para usar el valor predeterminado (Qwen2.5-1.5B-Instruct). Se recomiendan modelos pequeños para Raspberry Pi / arm64.",
42
- "Downloads the engine and model (several hundred MB). Watch the instance log for progress.": "Descarga el motor y el modelo (varios cientos de MB). Consulta el registro de la instancia para ver el progreso.",
57
+ "Downloads the engine and model (several hundred MB). Progress is shown below.": "Descarga el motor y el modelo (varios cientos de MB). El progreso se muestra abajo.",
58
+ "ESPHome satellites": "Satélites 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.": "Los satélites ESPHome no reciben la respuesta por su socket de API: la descargan como URL. Este es el puerto en el que escucha ese pequeño servidor HTTP.",
43
60
  "Empty = tts-1. Also: tts-1-hd, gpt-4o-mini-tts.": "Vacío = tts-1. También: tts-1-hd, gpt-4o-mini-tts.",
44
61
  "Empty = whisper-1. Also: gpt-4o-transcribe, gpt-4o-mini-transcribe.": "Vacío = whisper-1. También: gpt-4o-transcribe, gpt-4o-mini-transcribe.",
45
62
  "Enable voice (STT/TTS for satellites)": "Habilitar la voz (STT/TTS para satélites)",
46
63
  "Enable voice server (satellites)": "Habilitar servidor de voz (satélites)",
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.": "Permite el reconocimiento/síntesis de voz. Los satélites nativos de ioBroker se conectan a través del bus de mensajes; no se necesita ningún puerto. Active el servidor UDP que se indica a continuación solo para los satélites ESP/Hannah.",
65
+ "End of speech after (ms of silence)": "Fin del habla tras (ms de silencio)",
66
+ "Extra actions (JSON)": "Acciones adicionales (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.": "Dale un nombre a un conjunto de satélites para que un anuncio, una pregunta o un disparador pueda dirigirse a él: un grupo de habitaciones (\"Planta alta\") o los altavoces de una persona (\"Denis\", para que \"dile a Denis que la cena está lista\" llegue a ellos). Miembros: ids de satélites, nombres de habitaciones o de dispositivos, separados por comas. Tipo: vacío o group, o person. Un satélite o una habitación real con el mismo nombre siempre tiene prioridad, así que un grupo nunca puede dejar un altavoz inaccesible.",
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 Los dispositivos de voz pueden transmitir a este adaptador a través del protocolo Wyoming.",
70
+ "Home value (empty = auto)": "Valor \"en casa\" (vacío = automático)",
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).": "Host del que los satélites deben descargar el audio. Vacío = usar automáticamente la dirección de cada conexión; indícalo solo si los dispositivos alcanzan esta máquina por otra dirección (NAT, Docker, VLAN).",
72
+ "Id": "Id",
50
73
  "If off, the assistant can only read states, not set_state.": "Si está desactivado, el asistente solo puede leer estados, no establecer_estado.",
51
74
  "Install local model": "Instalar modelo local",
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.": "Interfaz en la que escucha el servidor de voz UDP. 0.0.0.0 = todas las interfaces; seleccione una IP de host específica para que los satélites de la LAN puedan alcanzarla.",
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.": "Interfaz en la que escucha el servidor de voz. 0.0.0.0 = todas las interfaces; seleccione una IP de host específica para que los satélites de la LAN puedan alcanzarla.",
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.": "Conserva los últimos turnos de cada fuente (chat, telegrama, satélite) durante unos minutos para que funcionen las respuestas como «y la cocina también». Solo en memoria.",
78
+ "Kind (group/person)": "Tipo (group/person)",
79
+ "Kind (person/guest/pet)": "Tipo (person/guest/pet)",
55
80
  "LLM assistant": "Asistente de LLM",
56
81
  "Language (empty = all)": "Idioma (vacío = todos)",
57
82
  "Language for speech recognition and the spoken reply.": "Lenguaje para el reconocimiento de voz y la respuesta hablada.",
58
83
  "Leave empty to reuse the main API key when the LLM provider is OpenAI; required otherwise.": "Déjelo en blanco para reutilizar la clave API principal cuando el proveedor LLM sea OpenAI; de lo contrario, es obligatorio.",
84
+ "Let the LLM reword trigger texts": "Dejar que el LLM reformule los textos de los disparadores",
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.": "Permite que el asistente recuerde de forma duradera los datos que le proporcionas (nombres, preferencias, ubicación de objetos) y los utilice en conversaciones posteriores. Almacenado en la memoria.* estados; el LLM obtiene herramientas de recordar/olvidar.",
60
86
  "Loaded from Azure (instance must run); empty = pick by language. e.g. de-DE-KatjaNeural.": "Cargado desde Azure (la instancia debe estar en ejecución); vacío = selección por idioma. Por ejemplo, de-DE-KatjaNeural.",
61
87
  "Loaded from Polly (instance must run); empty = default per language. e.g. Vicki, Tatyana.": "Cargado desde Polly (la instancia debe estar en ejecución); vacío = valor predeterminado por idioma. Por ejemplo: Vicki, Tatyana.",
@@ -65,10 +91,14 @@
65
91
  "Local speech (no cloud)": "Idioma local (sin nube)",
66
92
  "Long-term memory (remember facts across sessions)": "Memoria a largo plazo (recordar datos entre sesiones)",
67
93
  "Max tokens": "Fichas máximas",
94
+ "Media server address for the devices": "Dirección del servidor multimedia para los dispositivos",
95
+ "Media server port": "Puerto del servidor multimedia",
68
96
  "Model": "Modelo",
69
97
  "Model name from alphacephei.com/vosk/models, e.g. vosk-model-small-de-0.15. Empty = small default per language.": "Nombre del modelo de alphacephei.com/vosk/models, por ejemplo, vosk-model-small-de-0.15. Vacío = tamaño pequeño predeterminado por idioma.",
70
98
  "No sound": "No hay sonido",
99
+ "None": "Ninguno",
71
100
  "Object read access": "Acceso de lectura al objeto",
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.": "Una fila por dispositivo. Puerto vacío = 6053. La habitación es aquella en la que el asistente sitúa el satélite. Deja la contraseña vacía salvo que el dispositivo tenga realmente una contraseña de API — los valores de tabla se guardan sin cifrar.",
72
102
  "Only devices, rooms, functions": "Solo dispositivos, habitaciones, funciones",
73
103
  "OpenAI": "OpenAI",
74
104
  "OpenAI (Whisper)": "OpenAI (Whisper)",
@@ -80,25 +110,39 @@
80
110
  "OpenAI-compatible (custom)": "Compatible con OpenAI (personalizado)",
81
111
  "Opens a UDP port for streaming microphone satellites (Hannah-compatible / ESP). Not needed for ioBroker-native satellites.": "Abre un puerto UDP para la transmisión de audio a través de satélites de micrófono (compatible con Hannah / ESP). No es necesario para los satélites nativos de ioBroker.",
82
112
  "Override the endpoint, e.g. https://api.groq.com/openai/v1 for Groq. Leave empty for the provider default.": "Sobrescriba el punto final, por ejemplo, https://api.groq.com/openai/v1 para Groq. Déjelo vacío para usar el valor predeterminado del proveedor.",
113
+ "Phrases (comma separated)": "Frases (separadas por comas)",
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.": "Seleccione un adaptador meteorológico instalado para responder a las preguntas sobre el clima (OpenMeteo, Weather Underground y OpenWeatherMap son totalmente compatibles; otros se leerán lo mejor posible). Inicie ese adaptador una vez para que sus datos/ubicaciones aparezcan aquí.",
84
115
  "Piper (local)": "Piper (local)",
85
116
  "Piper voice (optional)": "Voz de Piper (opcional)",
86
117
  "Play": "Jugar",
118
+ "Port": "Puerto",
119
+ "Presence": "Presencia",
120
+ "Proactive triggers": "Disparadores proactivos",
87
121
  "Provider": "Proveedor",
88
122
  "Remember the conversation (follow-up questions)": "Recuerda la conversación (preguntas de seguimiento).",
123
+ "Reply": "Respuesta",
124
+ "Response rules (JSON)": "Reglas de respuesta (JSON)",
125
+ "Reword system notifications": "Reformular notificaciones del sistema",
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.": "Antes de la coincidencia local, transcriba las variantes habladas o escritas a los nombres de su dispositivo o sala; por ejemplo, \"TV\" a \"Fernseher\". Deje el campo de idioma vacío para aplicarlo a todos los idiomas. También se utiliza para los canales de texto.",
90
127
  "Ring duration (seconds)": "Duración del timbre (segundos)",
128
+ "Room": "Habitación",
129
+ "Routines": "Rutinas",
91
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Ejecutar el servidor de voz UDP (satélites 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.": "Ejecuta un pequeño modelo local (node-llama-cpp) para consultas generales; recurre al modelo LLM en la nube cuando necesita datos de dispositivos en tiempo real. Instálalo con el botón de abajo.",
93
132
  "Said or typed": "Dicho o escrito",
94
133
  "Satellites": "satélites",
134
+ "Satellites, rooms or devices (comma separated)": "Satélites, habitaciones o dispositivos (separados por comas)",
135
+ "Say": "Anuncio",
95
136
  "Settings": "Ajustes",
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.": "Se emitirá un anuncio en el satélite desde el cual se configuró un temporizador de cuenta regresiva (o en todos los satélites) cuando este finalice. Los temporizadores siempre se reflejan en los estados timers.* para los scripts y la visualización.",
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.": "Se emitirá un anuncio cuando suene una alarma a una hora fija. Las alarmas siempre se reflejan en los estados alarms.* para los scripts y la visualización.",
98
139
  "Speech credential mode": "Modo de credenciales de voz",
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.": "Las funciones de conversión de voz a texto y de texto a voz utilizan OpenAI. Déjelo en blanco para reutilizar la clave API principal cuando el proveedor sea OpenAI; es obligatorio cuando el proveedor de LLM sea Anthropic o personalizado.",
141
+ "Speech-to-text fallback": "Voz a texto de respaldo",
100
142
  "Speech-to-text provider": "Proveedor de conversión de voz a texto",
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.": "Las notificaciones del sistema habladas (notify.text / el gestor de notificaciones de ioBroker) primero las reformula el LLM en una sola frase natural - sus textos originales están pensados para un visor de registros. Cuesta una pequeña llamada al LLM por notificación; si falla, se pronuncia el texto original. Las urgentes (notify.alert) se anuncian incluso con No molestar activado.",
101
144
  "Starts a UDP server for microphone satellites (Hannah-compatible protocol).": "Inicia un servidor UDP para satélites de micrófono (protocolo compatible con Hannah).",
145
+ "State id": "Id del estado",
102
146
  "Store key in adapter": "Almacenar la clave en el adaptador",
103
147
  "Store keys in adapter": "Almacenar las claves en el adaptador",
104
148
  "Synonym dictionary": "Diccionario de sinónimos",
@@ -106,13 +150,20 @@
106
150
  "System prompt": "Mensaje del sistema",
107
151
  "TTS voice": "Voz TTS",
108
152
  "Test connection": "Probar la conexión",
153
+ "Text-to-speech fallback": "Texto a voz de respaldo",
109
154
  "Text-to-speech provider": "Proveedor de conversión de texto a voz",
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.": "Estos dispositivos transmiten hasta que el servidor los detiene, así que el adaptador decide cuándo has dejado de hablar. Súbelo si la respuesta te corta; bájalo si el asistente espera demasiado.",
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. Estos dispositivos escuchan en TCP 6053 y es el adaptador quien los llama, así que no se abre ningún puerto para el audio en sí, solo el servidor multimedia de abajo, del que descargan la respuesta hablada.",
110
157
  "Timer sound (mp3/wav, optional)": "Sonido del temporizador (mp3/wav, opcional)",
158
+ "Triggers": "Disparadores",
111
159
  "Try the built-in rule-based intent matching for turn on/off, dimming and status before calling the LLM.": "Pruebe la coincidencia de intenciones basada en reglas integrada para encender/apagar, atenuar y estado antes de llamar al 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.": "Se incluyen dos sonidos predeterminados (timer.wav, alarm.wav): seleccione uno a continuación o suba su propio archivo mp3/wav. El sonido seleccionado se reproduce antes del anuncio hablado. Requiere ffmpeg en el host y al menos un satélite.",
113
161
  "UDP port": "puerto 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.": "Sube tus jingles en formato MP3/WAV a continuación; el sonido seleccionado se reproducirá antes del anuncio hablado. Se requiere tener ffmpeg instalado en el host y al menos un satélite.",
115
163
  "Use a local LLM before the cloud (installed on demand)": "Utilice un LLM local antes de la nube (instalado bajo demanda).",
164
+ "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "Se usa cuando falla el proveedor de arriba (caída, clave caducada, cuota agotada). Un motor local mantiene el control por voz funcionando sin internet.",
165
+ "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "Se usa cuando falla el proveedor de arriba. Piper mantiene al asistente hablando sin internet.",
166
+ "Verify device feedback": "Verificar la respuesta del dispositivo",
116
167
  "Voice": "Voz",
117
168
  "Voice language": "Lenguaje de voz",
118
169
  "Voice satellites": "Satélites de voz",
@@ -120,11 +171,16 @@
120
171
  "Vosk (local)": "Vosk (local)",
121
172
  "Vosk model (optional)": "Modelo Vosk (opcional)",
122
173
  "Weather source": "Fuente meteorológica",
174
+ "When (JSON)": "Cuándo (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.": "Qué estados le indican al asistente quién está en casa - una fila por persona. Sirve cualquier estado: el adaptador residents, un ping del teléfono como ping.0.phone-denis.alive, un estado de cliente del router o un indicador propio. Tipo: vacío o person, guest, pet (una mascota nunca hace que la casa esté ocupada). Valor \"en casa\": déjalo vacío para las formas habituales (true, 1, \"home\", \"anwesend\"), o introduce el valor exacto que significa en casa. Se usa para decirle al LLM quién está, para retener anuncios cuando la casa está vacía (notify con onlyWhenHome) y como fuente de disparadores mediante presence.anyoneHome.",
123
176
  "Wyoming TCP port": "Puerto TCP de Wyoming",
124
177
  "e.g. Vicki (de), Tatyana (ru), Joanna (en). Empty = default per language.": "p.ej. Vicki (de), Tatyana (ru), Joanna (en). Vacío = valor predeterminado por idioma.",
125
178
  "e.g. de-DE-KatjaNeural, ru-RU-SvetlanaNeural. Empty = pick by language.": "p. ej. de-DE-KatjaNeural, ru-RU-SvetlanaNeural. Vacío = seleccionar por idioma.",
126
179
  "e.g. de_DE-thorsten-medium, ru_RU-irina-medium. Empty = default per language.": "p. ej. de_DE-thorsten-medium, ru_RU-irina-medium. Vacío = valor predeterminado por idioma.",
127
180
  "e.g. eu-central-1": "p. ej. eu-central-1",
128
181
  "e.g. gpt-4o-mini, gpt-4o, claude-sonnet-4-6": "p.ej. gpt-4o-mini, gpt-4o, claude-soneto-4-6",
129
- "e.g. westeurope": "p. ej. Europa occidental"
130
- }
182
+ "e.g. westeurope": "p. ej. Europa occidental",
183
+ "None (local only)": "Ninguno (solo local)",
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.": "Sin proveedor de LLM solo responden los niveles locales: los comandos basados en reglas, las rutinas, los temporizadores y alarmas, y el modelo local si está activado. Todo lo demás recibe una breve respuesta de «No puedo hacerlo».",
185
+ "Chat": "Chat"
186
+ }