iobroker.assistant 1.0.1 → 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 (42) hide show
  1. package/README.md +4 -0
  2. package/admin/custom/.vite/manifest.json +18 -18
  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_iobroker_mf_1_gui_mf_2_components__loadShare__.js-rncPQw0c.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-CMv8bcyA.js} +1 -1
  6. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared-CY-9JaDr.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__loadShare__shared-3mzaJWDF.js} +1 -1
  7. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-O-DuGvHy.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__198531368674860__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-DS8oaQQt.js} +3 -3
  8. package/admin/custom/assets/{hostInit-YwaHm9Ht.js → hostInit-MshDicd1.js} +1 -1
  9. package/admin/custom/assets/{lib-mwVfdt2u.js → lib-DjwHKtRi.js} +1 -1
  10. package/admin/custom/assets/{mf-entry-bootstrap-0-0e37a5a4.js → mf-entry-bootstrap-0-7c1ddf47.js} +2 -2
  11. package/admin/custom/assets/{pendingShares-Bs_RxVcM.js → pendingShares-CaJDCKLB.js} +1 -1
  12. package/admin/custom/customComponents.js +2 -2
  13. package/admin/custom/i18n/es.json +1 -1
  14. package/admin/custom/i18n/fr.json +1 -1
  15. package/admin/custom/i18n/it.json +1 -1
  16. package/admin/custom/i18n/nl.json +1 -1
  17. package/admin/custom/i18n/pl.json +1 -1
  18. package/admin/custom/i18n/pt.json +1 -1
  19. package/admin/custom/i18n/ru.json +1 -1
  20. package/admin/custom/i18n/uk.json +1 -1
  21. package/admin/custom/i18n/zh-cn.json +1 -1
  22. package/admin/custom/index.html +2 -2
  23. package/admin/custom/mf-manifest.json +1 -1
  24. package/admin/custom/mf-stats.json +1 -1
  25. package/admin/i18n/de.json +3 -2
  26. package/admin/i18n/en.json +3 -2
  27. package/admin/i18n/es.json +42 -2
  28. package/admin/i18n/fr.json +42 -2
  29. package/admin/i18n/it.json +42 -2
  30. package/admin/i18n/nl.json +42 -2
  31. package/admin/i18n/pl.json +42 -2
  32. package/admin/i18n/pt.json +42 -2
  33. package/admin/i18n/ru.json +42 -2
  34. package/admin/i18n/uk.json +42 -2
  35. package/admin/i18n/zh-cn.json +42 -2
  36. package/admin/jsonConfig.json +371 -83
  37. package/build/main.js +25 -0
  38. package/build/main.js.map +1 -1
  39. package/io-package.json +26 -26
  40. package/package.json +5 -5
  41. package/admin/custom/assets/Components-B9RaGibX.js +0 -1
  42. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-CyY-cfOD.js +0 -1
@@ -1,5 +1,8 @@
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密钥",
4
7
  "API password (usually empty)": "API 密码(通常为空)",
5
8
  "API-key credential": "API密钥凭证",
@@ -12,7 +15,9 @@
12
15
  "AWS secret access key": "AWS 秘密访问密钥",
13
16
  "AWS speech": "AWS语音",
14
17
  "Access / permissions": "访问权限",
18
+ "Actions (JSON)": "动作(JSON)",
15
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)请保持关闭——否则每条命令看起来都会失败。",
16
21
  "Alarm sound (mp3/wav, optional)": "闹铃声(mp3/wav格式,可选)",
17
22
  "Allow changing objects and files (dangerous)": "允许更改对象和文件(危险)",
18
23
  "Allow controlling states": "允许控制状态",
@@ -26,23 +31,30 @@
26
31
  "Also drive ESPHome voice satellites": "同时驱动 ESPHome 语音卫星",
27
32
  "Announce when a timer expires": "计时器到期时发出提示",
28
33
  "Announce when an alarm goes off": "警报响起时发出通知",
34
+ "Announcement targets (groups and people)": "播报目标(组和人员)",
29
35
  "Answer simple commands locally (fast, offline)": "本地(快速、离线)响应简单命令",
30
36
  "Anthropic (Claude)": "人格(克劳德)",
31
37
  "Any object (get_object/search_objects)": "任何对象(get_object/search_objects)",
38
+ "Ask": "提问",
32
39
  "Azure Speech": "Azure Speech",
33
40
  "Azure credential": "Azure 凭据",
34
41
  "Azure region": "Azure 区域",
35
42
  "Azure subscription key": "Azure 订阅密钥",
36
43
  "Azure voice (optional)": "Azure语音(可选)",
37
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 调用;如果失败则使用原始文本。",
38
46
  "Bind address": "绑定地址",
39
47
  "Canonical term": "规范术语",
40
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)": "冷却时间(秒)",
41
52
  "Credential mode": "凭证模式",
42
53
  "DeepSeek": "深潜",
54
+ "Delay": "延迟",
43
55
  "Devices": "设备",
44
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 上使用小型模型。",
45
- "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)。进度显示在下方。",
46
58
  "ESPHome satellites": "ESPHome 卫星",
47
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 服务器监听的端口。",
48
60
  "Empty = tts-1. Also: tts-1-hd, gpt-4o-mini-tts.": "空 = tts-1。另见:tts-1-hd、gpt-4o-mini-tts。",
@@ -51,18 +63,25 @@
51
63
  "Enable voice server (satellites)": "启用语音服务器(卫星)",
52
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 服务器。",
53
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。同名的真实卫星设备或房间始终优先,因此组永远不会导致扬声器无法访问。",
54
68
  "Google Gemini": "Google Gemini",
55
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)": "“在家”值(留空 = 自动)",
56
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",
57
73
  "If off, the assistant can only read states, not set_state.": "如果关闭,助手只能读取状态,不能设置状态。",
58
74
  "Install local model": "安装本地模型",
59
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地址,以便局域网上的卫星节点可以访问它。",
60
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 地址,以便局域网上的卫星节点可以访问它。",
61
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)",
62
80
  "LLM assistant": "法学硕士助理",
63
81
  "Language (empty = all)": "语言(空 = 所有)",
64
82
  "Language for speech recognition and the spoken reply.": "用于语音识别和语音回复的语言。",
65
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 改写触发器文本",
66
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 具备记忆/遗忘功能。",
67
86
  "Loaded from Azure (instance must run); empty = pick by language. e.g. de-DE-KatjaNeural.": "从 Azure 加载(实例必须运行);空 = 按语言选择。例如 de-DE-KatjaNeural。",
68
87
  "Loaded from Polly (instance must run); empty = default per language. e.g. Vicki, Tatyana.": "从 Polly 加载(实例必须运行);空 = 每种语言的默认值。例如:Vicki、Tatyana。",
@@ -77,6 +96,7 @@
77
96
  "Model": "模型",
78
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。空 = 每个语言的默认小型模型。",
79
98
  "No sound": "无声",
99
+ "None": "无",
80
100
  "Object read access": "对象读取访问",
81
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 密码,否则请留空——表格中的值以明文保存。",
82
102
  "Only devices, rooms, functions": "仅限设备、房间、功能",
@@ -90,27 +110,39 @@
90
110
  "OpenAI-compatible (custom)": "兼容 OpenAI(自定义)",
91
111
  "Opens a UDP port for streaming microphone satellites (Hannah-compatible / ESP). Not needed for ioBroker-native satellites.": "为流媒体麦克风卫星(兼容 Hannah / ESP)打开一个 UDP 端口。ioBroker 原生卫星不需要此端口。",
92
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)": "短语(逗号分隔)",
93
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 的数据均可完全读取;其他适配器则尽力读取)。启动该适配器一次,使其数据/位置信息显示在此处。",
94
115
  "Piper (local)": "Piper(本地)",
95
116
  "Piper voice (optional)": "风笛声(可选)",
96
117
  "Play": "玩",
97
118
  "Port": "端口",
119
+ "Presence": "在家状态",
120
+ "Proactive triggers": "主动触发器",
98
121
  "Provider": "提供者",
99
122
  "Remember the conversation (follow-up questions)": "记住对话内容(后续问题)",
123
+ "Reply": "回复",
124
+ "Response rules (JSON)": "回答规则(JSON)",
125
+ "Reword system notifications": "改写系统通知",
100
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”。将语言留空则应用所有语言。此设置也适用于文本频道。",
101
127
  "Ring duration (seconds)": "铃声持续时间(秒)",
102
128
  "Room": "房间",
129
+ "Routines": "例程",
103
130
  "Run the UDP voice server (ESP / Hannah satellites)": "运行UDP语音服务器(ESP/Hannah卫星)",
104
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。点击下方按钮即可安装。",
105
132
  "Said or typed": "口头或书面",
106
133
  "Satellites": "卫星",
134
+ "Satellites, rooms or devices (comma separated)": "卫星设备、房间或设备(逗号分隔)",
135
+ "Say": "播报",
107
136
  "Settings": "设置",
108
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.* 状态中。",
109
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.* 状态中,以便用于脚本和可视化。",
110
139
  "Speech credential mode": "语音凭证模式",
111
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": "语音转文字备用方案",
112
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)即使在勿扰模式开启时也会播报。",
113
144
  "Starts a UDP server for microphone satellites (Hannah-compatible protocol).": "启动麦克风卫星的 UDP 服务器(兼容 Hannah 协议)。",
145
+ "State id": "状态 ID",
114
146
  "Store key in adapter": "适配器中存储密钥",
115
147
  "Store keys in adapter": "适配器中存储密钥",
116
148
  "Synonym dictionary": "同义词词典",
@@ -118,15 +150,20 @@
118
150
  "System prompt": "系统提示",
119
151
  "TTS voice": "TTS语音",
120
152
  "Test connection": "测试连接",
153
+ "Text-to-speech fallback": "文字转语音备用方案",
121
154
  "Text-to-speech provider": "文本转语音服务提供商",
122
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.": "这些设备会一直传输,直到服务器让它们停止,因此由适配器判断你何时说完。若回复打断你就调大,若助手等待过久就调小。",
123
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 上监听,由适配器主动连接它们,因此音频本身不会占用端口——只有下面的媒体服务器,设备会从那里获取语音回复。",
124
157
  "Timer sound (mp3/wav, optional)": "定时器声音(mp3/wav格式,可选)",
158
+ "Triggers": "触发器",
125
159
  "Try the built-in rule-based intent matching for turn on/off, dimming and status before calling the LLM.": "在调用 LLM 之前,请尝试使用内置的基于规则的意图匹配来打开/关闭、调暗和状态。",
126
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,并且至少需要一个卫星设备。",
127
161
  "UDP port": "UDP端口",
128
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,并且至少需要一台卫星设备。",
129
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": "验证设备反馈",
130
167
  "Voice": "嗓音",
131
168
  "Voice language": "语音语言",
132
169
  "Voice satellites": "语音卫星",
@@ -134,6 +171,8 @@
134
171
  "Vosk (local)": "Vosk(本地)",
135
172
  "Vosk model (optional)": "Vosk 型号(可选)",
136
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 作为触发源。",
137
176
  "Wyoming TCP port": "怀俄明州 TCP 端口",
138
177
  "e.g. Vicki (de), Tatyana (ru), Joanna (en). Empty = default per language.": "例如Vicki(德)、Tatyana(俄)、Joanna(英)。空=每种语言的默认值。",
139
178
  "e.g. de-DE-KatjaNeural, ru-RU-SvetlanaNeural. Empty = pick by language.": "例如 de-DE-KatjaNeural、ru-RU-SvetlanaNeural。空 = 按语言选择。",
@@ -142,5 +181,6 @@
142
181
  "e.g. gpt-4o-mini, gpt-4o, claude-sonnet-4-6": "例如gpt-4o-mini、gpt-4o、克劳德十四行诗-4-6",
143
182
  "e.g. westeurope": "例如:西欧",
144
183
  "None (local only)": "无(仅本地)",
145
- "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 提供商时,只有本地层级会作答:基于规则的命令、例程、定时器和闹钟,以及已启用的本地模型。其他请求只会得到一句简短的“我做不到”。"
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": "聊天"
146
186
  }