iobroker.assistant 1.0.3 → 1.2.0

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 (73) hide show
  1. package/README.md +65 -0
  2. package/admin/custom/.vite/manifest.json +62 -62
  3. package/admin/custom/assets/Components-BSewCBfS.js +2 -0
  4. package/admin/custom/assets/{_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-A4gakomR.js → _virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomAssistant__mf_owner__1-C5NPM0Of.js} +1 -1
  5. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__201375093093590__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-CwqmfMvn.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-IaosaymG.js} +1 -1
  6. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__201375093093590__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BMuLYe6f.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-Cdyjt5KT.js} +39 -39
  7. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__201375093093590__loadShare__shared-BxjZmnpc.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare__shared-Dsw5zWS8.js} +1 -1
  8. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-SgSagTOv.js +122 -0
  9. package/admin/custom/assets/{hostInit-4roC4hEj.js → hostInit-jJe8bIfV.js} +1 -1
  10. package/admin/custom/assets/{lib-CchzgTUs.js → lib-CL8mXvI6.js} +1 -1
  11. package/admin/custom/assets/{mf-entry-bootstrap-0-4806bbe4.js → mf-entry-bootstrap-0-ab227aa6.js} +2 -2
  12. package/admin/custom/assets/{pendingShares-DLlv8yFY.js → pendingShares-wrGtfliQ.js} +1 -1
  13. package/admin/custom/customComponents.js +2 -2
  14. package/admin/custom/i18n/de.json +40 -0
  15. package/admin/custom/i18n/en.json +40 -0
  16. package/admin/custom/i18n/es.json +40 -0
  17. package/admin/custom/i18n/fr.json +40 -0
  18. package/admin/custom/i18n/it.json +40 -0
  19. package/admin/custom/i18n/nl.json +40 -0
  20. package/admin/custom/i18n/pl.json +40 -0
  21. package/admin/custom/i18n/pt.json +40 -0
  22. package/admin/custom/i18n/ru.json +40 -0
  23. package/admin/custom/i18n/uk.json +40 -0
  24. package/admin/custom/i18n/zh-cn.json +40 -0
  25. package/admin/custom/index.html +2 -2
  26. package/admin/custom/mf-manifest.json +1 -1
  27. package/admin/custom/mf-stats.json +1 -1
  28. package/admin/i18n/de.json +13 -3
  29. package/admin/i18n/en.json +13 -3
  30. package/admin/i18n/es.json +13 -3
  31. package/admin/i18n/fr.json +13 -3
  32. package/admin/i18n/it.json +13 -3
  33. package/admin/i18n/nl.json +13 -3
  34. package/admin/i18n/pl.json +13 -3
  35. package/admin/i18n/pt.json +13 -3
  36. package/admin/i18n/ru.json +13 -3
  37. package/admin/i18n/uk.json +13 -3
  38. package/admin/i18n/zh-cn.json +13 -3
  39. package/admin/jsonConfig.json +61 -2
  40. package/build/lib/journal.js +298 -2
  41. package/build/lib/journal.js.map +1 -1
  42. package/build/lib/llm.js +105 -4
  43. package/build/lib/llm.js.map +1 -1
  44. package/build/lib/localLlm.js +47 -10
  45. package/build/lib/localLlm.js.map +1 -1
  46. package/build/lib/nlu.js +124 -5
  47. package/build/lib/nlu.js.map +1 -1
  48. package/build/lib/tools.js +3 -0
  49. package/build/lib/tools.js.map +1 -1
  50. package/build/lib/voice/esphome.js +81 -7
  51. package/build/lib/voice/esphome.js.map +1 -1
  52. package/build/lib/voice/esphomeProto.js.map +1 -1
  53. package/build/lib/voice/mediaServer.js +29 -1
  54. package/build/lib/voice/mediaServer.js.map +1 -1
  55. package/build/lib/voice/protocol.js.map +1 -1
  56. package/build/lib/voice/voiceServer.js +81 -7
  57. package/build/lib/voice/voiceServer.js.map +1 -1
  58. package/build/lib/voice/wakeWords.js +284 -0
  59. package/build/lib/voice/wakeWords.js.map +1 -0
  60. package/build/lib/voice/wyoming.js +12 -4
  61. package/build/lib/voice/wyoming.js.map +1 -1
  62. package/build/lib/weather.js +160 -0
  63. package/build/lib/weather.js.map +1 -1
  64. package/build/lib/youtube.js +625 -0
  65. package/build/lib/youtube.js.map +1 -0
  66. package/build/main.js +1152 -76
  67. package/build/main.js.map +1 -1
  68. package/io-package.json +30 -14
  69. package/package.json +6 -6
  70. package/admin/custom/assets/Components-C6qcpaRC.js +0 -1
  71. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__201375093093590__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-TM4l0OYm.js +0 -122
  72. /package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__201375093093590__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BkH7fzDw.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BkH7fzDw.js} +0 -0
  73. /package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__201375093093590__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-M61rjtmp.js → _virtual_mf___mfe_internal__ConfigCustomAssistant__mf_owner__163539842885036__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-M61rjtmp.js} +0 -0
@@ -128,7 +128,7 @@
128
128
  "Room": "Habitación",
129
129
  "Routines": "Rutinas",
130
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Ejecutar el servidor de voz UDP (satélites ESP/Hannah)",
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.",
131
+ "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.": "Ejecuta un pequeño modelo local (node-llama-cpp) para preguntas generales. Con un proveedor en la nube solo responde cuando la nube falla, salvo que «Preguntar primero al modelo local» esté activado. Instálelo con el botón de abajo.",
132
132
  "Said or typed": "Dicho o escrito",
133
133
  "Satellites": "satélites",
134
134
  "Satellites, rooms or devices (comma separated)": "Satélites, habitaciones o dispositivos (separados por comas)",
@@ -160,7 +160,11 @@
160
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.",
161
161
  "UDP port": "puerto UDP",
162
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.",
163
- "Use a local LLM before the cloud (installed on demand)": "Utilice un LLM local antes de la nube (instalado bajo demanda).",
163
+ "Use a local LLM (installed on demand)": "Usar un LLM local (instalado bajo demanda)",
164
+ "Ask the local model first": "Preguntar primero al modelo local",
165
+ "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.": "Cada pregunta que las reglas no entienden va al modelo local antes que a la nube. Ahorra llamadas a la nube, pero en una Raspberry Pi añade 10–25 segundos a esas preguntas.",
166
+ "Local model timeout (s)": "Tiempo límite del modelo local (s)",
167
+ "After this time the local model is stopped and the question goes on to the cloud.": "Pasado este tiempo, el modelo local se detiene y la pregunta pasa a la nube.",
164
168
  "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
169
  "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
170
  "Verify device feedback": "Verificar la respuesta del dispositivo",
@@ -184,5 +188,11 @@
184
188
  "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
189
  "Chat": "Chat",
186
190
  "Chat history (hours)": "Chat history (hours)",
187
- "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing."
191
+ "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.",
192
+ "YouTube players": "Reproductores de YouTube",
193
+ "Player": "Reproductor",
194
+ "TV power (optional)": "Encendido del TV (opcional)",
195
+ "Start delay (s)": "Retardo de inicio (s)",
196
+ "Name": "Nombre",
197
+ "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".": "Televisores y dispositivos del adaptador youtube-remote en los que el asistente puede reproducir, p. ej. \"reproduce el canal Sailing OceanAir\". La primera fila es la predeterminada si no se nombra ningún reproductor; una petición de un satélite en la sala de una fila va a esa fila. Reproductor: la instancia de youtube-remote; encuentra sola su televisor vinculado, también tras volver a vincularlo; con varios televisores en una instancia, elija uno. Encendido: estado opcional que enciende el televisor (p. ej. samsungtv.0.<tv>.control.power): si está apagado, primero se enciende y el vídeo empieza tras el retardo. Nunca se pulsa un botón de encendido (conmutador), porque apagaría un televisor encendido. Requiere \"Permitir escribir estados\"."
188
198
  }
@@ -128,7 +128,7 @@
128
128
  "Room": "Pièce",
129
129
  "Routines": "Routines",
130
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Lancer le serveur vocal UDP (satellites ESP / Hannah)",
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.": "Exécute un petit modèle local (node-llama-cpp) pour les requêtes générales ; bascule vers le modèle LLM cloud lorsqu'il a besoin de données en direct de l'appareil. Installez-le avec le bouton ci-dessous.",
131
+ "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.": "Exécute un petit modèle local (node-llama-cpp) pour les questions générales. Avec un fournisseur cloud, il ne répond qu’en cas de panne du cloud, sauf si « Interroger d’abord le modèle local » est activé. Installez-le avec le bouton ci-dessous.",
132
132
  "Said or typed": "dit ou tapé",
133
133
  "Satellites": "Satellites",
134
134
  "Satellites, rooms or devices (comma separated)": "Satellites, pièces ou appareils (séparés par des virgules)",
@@ -160,7 +160,11 @@
160
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.": "Deux sons par défaut (timer.wav, alarm.wav) sont préinstallés ; choisissez-en un ci-dessous ou téléchargez votre propre fichier mp3/wav. Le son sélectionné sera diffusé avant l’annonce vocale. Nécessite ffmpeg sur l’hôte et au moins un satellite.",
161
161
  "UDP port": "port UDP",
162
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.": "Téléversez vos jingles MP3/WAV ci-dessous ; le son sélectionné sera diffusé avant l’annonce vocale. ffmpeg doit être installé sur le serveur hôte et au moins un satellite est requis.",
163
- "Use a local LLM before the cloud (installed on demand)": "Utilisez un LLM local avant le cloud (installé à la demande)",
163
+ "Use a local LLM (installed on demand)": "Utiliser un LLM local (installé à la demande)",
164
+ "Ask the local model first": "Interroger d’abord le modèle local",
165
+ "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.": "Chaque question que les règles ne comprennent pas va au modèle local avant le cloud. Économise des appels au cloud, mais ajoute 10 à 25 secondes à ces questions sur un Raspberry Pi.",
166
+ "Local model timeout (s)": "Délai du modèle local (s)",
167
+ "After this time the local model is stopped and the question goes on to the cloud.": "Passé ce délai, le modèle local est arrêté et la question est transmise au cloud.",
164
168
  "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "Utilisé lorsque le fournisseur ci-dessus échoue (panne, clé expirée, quota épuisé). Un moteur local permet à la commande vocale de fonctionner sans Internet.",
165
169
  "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "Utilisé lorsque le fournisseur ci-dessus échoue. Piper permet à l'assistant de continuer à parler sans Internet.",
166
170
  "Verify device feedback": "Vérifier le retour de l'appareil",
@@ -184,5 +188,11 @@
184
188
  "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.": "Sans fournisseur LLM, seuls les niveaux locaux répondent : les commandes à base de règles, les routines, les minuteurs et alarmes, ainsi que le modèle local s'il est activé. Tout le reste reçoit une courte réponse « Je ne peux pas faire ça ».",
185
189
  "Chat": "Chat",
186
190
  "Chat history (hours)": "Chat history (hours)",
187
- "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing."
191
+ "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.",
192
+ "YouTube players": "Lecteurs YouTube",
193
+ "Player": "Lecteur",
194
+ "TV power (optional)": "Alimentation TV (optionnel)",
195
+ "Start delay (s)": "Délai de démarrage (s)",
196
+ "Name": "Nom",
197
+ "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".": "Téléviseurs et appareils de l’adaptateur youtube-remote sur lesquels l’assistant peut lire, p. ex. « joue la chaîne Sailing OceanAir ». La première ligne est utilisée par défaut si aucun lecteur n’est nommé ; une demande d’un satellite dans la pièce d’une ligne va à cette ligne. Lecteur : l’instance youtube-remote - elle trouve elle-même son téléviseur associé, même après une nouvelle association ; avec plusieurs téléviseurs dans une instance, choisissez-en un. Alimentation : état optionnel qui allume le téléviseur (p. ex. samsungtv.0.<tv>.control.power) - s’il est éteint, il est d’abord allumé et la vidéo démarre après le délai. Un bouton d’alimentation (bascule) n’est jamais pressé, car il éteindrait un téléviseur allumé. Nécessite « Autoriser l’écriture des états »."
188
198
  }
@@ -128,7 +128,7 @@
128
128
  "Room": "Stanza",
129
129
  "Routines": "Routine",
130
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Avviare il server vocale UDP (satelliti ESP/Hannah)",
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.": "Esegue un piccolo modello locale (node-llama-cpp) per domande generiche; passa al modello LLM cloud quando necessita di dati in tempo reale dal dispositivo. Installalo tramite il pulsante qui sotto.",
131
+ "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.": "Esegue un piccolo modello locale (node-llama-cpp) per le domande generali. Con un provider cloud risponde solo quando il cloud non funziona, a meno che «Chiedi prima al modello locale» sia attivo. Installalo con il pulsante qui sotto.",
132
132
  "Said or typed": "Detto o digitato",
133
133
  "Satellites": "Satelliti",
134
134
  "Satellites, rooms or devices (comma separated)": "Satelliti, stanze o dispositivi (separati da virgole)",
@@ -160,7 +160,11 @@
160
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.": "Sono preinstallati due suoni predefiniti (timer.wav, alarm.wav): scegline uno qui sotto oppure carica il tuo file mp3/wav. Il suono selezionato verrà riprodotto prima dell'annuncio vocale. Richiede ffmpeg sul computer host e su almeno un satellite.",
161
161
  "UDP port": "porta UDP",
162
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.": "Carica i jingle in formato mp3/wav qui sotto; il suono selezionato verrà riprodotto prima dell'annuncio vocale. È necessario che ffmpeg sia installato sul computer host e su almeno un satellite.",
163
- "Use a local LLM before the cloud (installed on demand)": "Utilizzare un LLM locale prima del cloud (installato su richiesta).",
163
+ "Use a local LLM (installed on demand)": "Usa un LLM locale (installato su richiesta)",
164
+ "Ask the local model first": "Chiedi prima al modello locale",
165
+ "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.": "Ogni domanda che le regole non capiscono va al modello locale prima che al cloud. Risparmia chiamate al cloud, ma su un Raspberry Pi aggiunge 10–25 secondi a queste domande.",
166
+ "Local model timeout (s)": "Timeout del modello locale (s)",
167
+ "After this time the local model is stopped and the question goes on to the cloud.": "Trascorso questo tempo il modello locale viene interrotto e la domanda passa al cloud.",
164
168
  "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "Usato quando il provider sopra non funziona (interruzione, chiave scaduta, credito esaurito). Un motore locale mantiene attivo il controllo vocale senza internet.",
165
169
  "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "Usato quando il provider sopra non funziona. Piper fa parlare l'assistente anche senza internet.",
166
170
  "Verify device feedback": "Verifica il riscontro del dispositivo",
@@ -184,5 +188,11 @@
184
188
  "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.": "Senza un provider LLM rispondono solo i livelli locali: i comandi basati su regole, le routine, i timer e le sveglie e il modello locale, se attivato. Tutto il resto riceve una breve risposta «Non posso farlo».",
185
189
  "Chat": "Chat",
186
190
  "Chat history (hours)": "Chat history (hours)",
187
- "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing."
191
+ "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.",
192
+ "YouTube players": "Lettori YouTube",
193
+ "Player": "Lettore",
194
+ "TV power (optional)": "Accensione TV (opzionale)",
195
+ "Start delay (s)": "Ritardo di avvio (s)",
196
+ "Name": "Nome",
197
+ "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".": "Televisori e dispositivi dell’adattatore youtube-remote su cui l’assistente può riprodurre, ad es. \"riproduci il canale Sailing OceanAir\". La prima riga è quella predefinita se non viene nominato alcun lettore; una richiesta da un satellite nella stanza di una riga va a quella riga. Lettore: l’istanza youtube-remote - trova da sola il televisore associato, anche dopo una nuova associazione; con più televisori in un’istanza sceglierne uno. Accensione: stato opzionale che accende il televisore (ad es. samsungtv.0.<tv>.control.power) - se è spento, viene prima acceso e il video parte dopo il ritardo. Un pulsante di accensione (interruttore) non viene mai premuto, perché spegnerebbe un televisore acceso. Richiede \"Consenti scrittura degli stati\"."
188
198
  }
@@ -128,7 +128,7 @@
128
128
  "Room": "Ruimte",
129
129
  "Routines": "Routines",
130
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Start de UDP-spraakserver (ESP/Hannah-satellieten).",
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.": "Voert een klein lokaal model (node-llama-cpp) uit voor algemene vragen; schakelt over naar het cloudgebaseerde LLM-model wanneer live apparaatgegevens nodig zijn. Installeer het via de onderstaande knop.",
131
+ "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.": "Draait een klein lokaal model (node-llama-cpp) voor algemene vragen. Met een cloudprovider antwoordt het alleen als de cloud uitvalt, tenzij \"Eerst het lokale model vragen\" aan staat. Installeer het met de knop hieronder.",
132
132
  "Said or typed": "Gezegd of getypt",
133
133
  "Satellites": "Satellieten",
134
134
  "Satellites, rooms or devices (comma separated)": "Satellieten, kamers of apparaten (gescheiden door komma's)",
@@ -160,7 +160,11 @@
160
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.": "Er zijn twee standaardgeluiden (timer.wav, alarm.wav) vooraf geïnstalleerd. Kies er hieronder een of upload uw eigen mp3/wav-bestand. Het geselecteerde geluid wordt afgespeeld vóór de gesproken aankondiging. FFmpeg is vereist op de host en op ten minste één satelliet.",
161
161
  "UDP port": "UDP-poort",
162
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 hieronder mp3/wav-jingles; het geselecteerde geluid wordt afgespeeld vóór de gesproken aankondiging. FFmpeg moet geïnstalleerd zijn op de host en op ten minste één satelliet.",
163
- "Use a local LLM before the cloud (installed on demand)": "Gebruik een lokale LLM vóór de cloud (installatie op aanvraag).",
163
+ "Use a local LLM (installed on demand)": "Een lokaal LLM gebruiken (op aanvraag geïnstalleerd)",
164
+ "Ask the local model first": "Eerst het lokale model vragen",
165
+ "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.": "Elke vraag die de regels niet begrijpen gaat eerst naar het lokale model en dan naar de cloud. Bespaart cloudaanroepen, maar kost op een Raspberry Pi 10–25 seconden extra per zo’n vraag.",
166
+ "Local model timeout (s)": "Time-out lokaal model (s)",
167
+ "After this time the local model is stopped and the question goes on to the cloud.": "Na deze tijd wordt het lokale model gestopt en gaat de vraag door naar de cloud.",
164
168
  "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "Wordt gebruikt als de bovenstaande provider faalt (storing, verlopen sleutel, tegoed op). Een lokale engine houdt spraakbediening werkend zonder internet.",
165
169
  "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "Wordt gebruikt als de bovenstaande provider faalt. Met Piper blijft de assistent spreken zonder internet.",
166
170
  "Verify device feedback": "Terugmelding van apparaat controleren",
@@ -184,5 +188,11 @@
184
188
  "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.": "Zonder LLM-provider antwoorden alleen de lokale niveaus: de op regels gebaseerde opdrachten, routines, timers en wekkers, en het lokale model indien ingeschakeld. Al het andere krijgt een kort \"Dat kan ik niet\"-antwoord.",
185
189
  "Chat": "Chat",
186
190
  "Chat history (hours)": "Chat history (hours)",
187
- "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing."
191
+ "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.",
192
+ "YouTube players": "YouTube-spelers",
193
+ "Player": "Speler",
194
+ "TV power (optional)": "Tv aanzetten (optioneel)",
195
+ "Start delay (s)": "Startvertraging (s)",
196
+ "Name": "Naam",
197
+ "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".": "Tv’s en apparaten van de youtube-remote-adapter waarop de assistent mag afspelen, bijv. \"speel het kanaal Sailing OceanAir af\". De eerste rij is de standaard als er geen speler genoemd wordt; een verzoek van een satelliet in de ruimte van een rij gaat naar die rij. Speler: de youtube-remote-instantie - die vindt zelf de gekoppelde tv, ook na opnieuw koppelen; met meerdere tv’s in één instantie kies je er één. Aan/uit: optionele state die de tv aanzet (bijv. samsungtv.0.<tv>.control.power) - staat die uit, dan wordt de tv eerst aangezet en start de video na de startvertraging. Een aan/uit-knop (toggle) wordt nooit ingedrukt, omdat die een draaiende tv uit zou zetten. Vereist \"Schrijven van states toestaan\"."
188
198
  }
@@ -128,7 +128,7 @@
128
128
  "Room": "Pokój",
129
129
  "Routines": "Rutyny",
130
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Uruchom serwer głosowy UDP (satelity ESP/Hannah)",
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.": "Uruchamia mały model lokalny (node-llama-cpp) w przypadku pytań ogólnych; eskaluje do chmurowego LLM, gdy potrzebuje danych z urządzenia na żywo. Zainstaluj go, klikając poniższy przycisk.",
131
+ "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.": "Uruchamia mały lokalny model (node-llama-cpp) do ogólnych pytań. Przy dostawcy chmurowym odpowiada tylko, gdy chmura zawiedzie, chyba że włączono „Najpierw pytaj model lokalny”. Zainstaluj go przyciskiem poniżej.",
132
132
  "Said or typed": "Powiedziałeś lub napisałeś",
133
133
  "Satellites": "Satelity",
134
134
  "Satellites, rooms or devices (comma separated)": "Satelity, pomieszczenia lub urządzenia (oddzielone przecinkami)",
@@ -160,7 +160,11 @@
160
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.": "Dwa domyślne dźwięki (timer.wav, alarm.wav) są preinstalowane — wybierz jeden z poniższych lub prześlij własny plik mp3/wav. Wybrany dźwięk odtwarza się przed komunikatem głosowym. Wymagany jest ffmpeg na hoście i co najmniej jeden satelita.",
161
161
  "UDP port": "Port UDP",
162
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.": "Prześlij poniżej dżingle w formacie mp3/wav; wybrany dźwięk będzie odtwarzany przed komunikatem głosowym. Wymagany jest zainstalowany ffmpeg na hoście i co najmniej jednym satelicie.",
163
- "Use a local LLM before the cloud (installed on demand)": "Użyj lokalnego LLM przed chmurą (instalowanego na żądanie)",
163
+ "Use a local LLM (installed on demand)": "Użyj lokalnego LLM (instalowanego na żądanie)",
164
+ "Ask the local model first": "Najpierw pytaj model lokalny",
165
+ "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.": "Każde pytanie, którego nie rozumieją reguły, trafia do modelu lokalnego przed chmurą. Oszczędza wywołania chmury, ale na Raspberry Pi wydłuża takie pytania o 10–25 sekund.",
166
+ "Local model timeout (s)": "Limit czasu modelu lokalnego (s)",
167
+ "After this time the local model is stopped and the question goes on to the cloud.": "Po tym czasie model lokalny jest zatrzymywany, a pytanie trafia do chmury.",
164
168
  "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "Używane, gdy powyższy dostawca zawiedzie (awaria, wygasły klucz, wyczerpany limit). Lokalny silnik utrzymuje sterowanie głosowe bez internetu.",
165
169
  "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "Używane, gdy powyższy dostawca zawiedzie. Piper pozwala asystentowi mówić bez internetu.",
166
170
  "Verify device feedback": "Sprawdzaj potwierdzenie z urządzenia",
@@ -184,5 +188,11 @@
184
188
  "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.": "Bez dostawcy LLM odpowiadają tylko poziomy lokalne: polecenia oparte na regułach, rutyny, minutniki i budziki oraz model lokalny, jeśli jest włączony. Na wszystko inne pada krótka odpowiedź „Nie potrafię tego”.",
185
189
  "Chat": "Czat",
186
190
  "Chat history (hours)": "Chat history (hours)",
187
- "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing."
191
+ "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.",
192
+ "YouTube players": "Odtwarzacze YouTube",
193
+ "Player": "Odtwarzacz",
194
+ "TV power (optional)": "Zasilanie TV (opcjonalnie)",
195
+ "Start delay (s)": "Opóźnienie startu (s)",
196
+ "Name": "Nazwa",
197
+ "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".": "Telewizory i urządzenia adaptera youtube-remote, na których asystent może odtwarzać, np. „odtwórz kanał Sailing OceanAir”. Pierwszy wiersz jest domyślny, gdy nie podano odtwarzacza; żądanie z satelity w pomieszczeniu wiersza trafia do tego wiersza. Odtwarzacz: instancja youtube-remote - sama znajduje sparowany telewizor, także po ponownym sparowaniu; przy kilku telewizorach w jednej instancji wybierz jeden z nich. Zasilanie: opcjonalny stan włączający telewizor (np. samsungtv.0.<tv>.control.power) - jeśli jest wyłączony, najpierw zostanie włączony, a wideo ruszy po opóźnieniu. Przycisk zasilania (przełącznik) nigdy nie jest naciskany, bo wyłączyłby działający telewizor. Wymaga „Zezwalaj na zapis stanów”."
188
198
  }
@@ -128,7 +128,7 @@
128
128
  "Room": "Divisão",
129
129
  "Routines": "Rotinas",
130
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Execute o servidor de voz UDP (ESP / satélites Hannah)",
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.": "Executa um pequeno modelo local (node-llama-cpp) para perguntas gerais; recorre ao LLM na nuvem quando precisa de dados de dispositivos em tempo real. Instale-o com o botão abaixo.",
131
+ "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.": "Executa um pequeno modelo local (node-llama-cpp) para perguntas gerais. Com um provedor de nuvem, só responde quando a nuvem falha, a menos que \"Perguntar primeiro ao modelo local\" esteja ativo. Instale-o com o botão abaixo.",
132
132
  "Said or typed": "Dito ou digitado",
133
133
  "Satellites": "Satélites",
134
134
  "Satellites, rooms or devices (comma separated)": "Satélites, cômodos ou dispositivos (separados por vírgulas)",
@@ -160,7 +160,11 @@
160
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.": "Dois sons padrão (timer.wav, alarm.wav) estão pré-instalados — escolha um abaixo ou carregue seu próprio arquivo mp3/wav. O som selecionado é reproduzido antes do anúncio falado. Requer o ffmpeg instalado no host e em pelo menos um satélite.",
161
161
  "UDP port": "porta UDP",
162
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.": "Faça o upload de jingles em MP3/WAV abaixo; o som selecionado será reproduzido antes do anúncio falado. É necessário ter o ffmpeg instalado no servidor e em pelo menos um satélite.",
163
- "Use a local LLM before the cloud (installed on demand)": "Utilize um LLM local antes da nuvem (instalado sob demanda).",
163
+ "Use a local LLM (installed on demand)": "Usar um LLM local (instalado sob demanda)",
164
+ "Ask the local model first": "Perguntar primeiro ao modelo local",
165
+ "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.": "Cada pergunta que as regras não entendem vai ao modelo local antes da nuvem. Poupa chamadas à nuvem, mas num Raspberry Pi acrescenta 10–25 segundos a essas perguntas.",
166
+ "Local model timeout (s)": "Tempo limite do modelo local (s)",
167
+ "After this time the local model is stopped and the question goes on to the cloud.": "Após este tempo o modelo local é interrompido e a pergunta segue para a nuvem.",
164
168
  "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "Usado quando o provedor acima falha (interrupção, chave expirada, cota esgotada). Um motor local mantém o controle por voz funcionando sem internet.",
165
169
  "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "Usado quando o provedor acima falha. O Piper mantém o assistente falando sem internet.",
166
170
  "Verify device feedback": "Verificar a resposta do dispositivo",
@@ -184,5 +188,11 @@
184
188
  "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.": "Sem fornecedor de LLM, apenas os níveis locais respondem: os comandos baseados em regras, as rotinas, os temporizadores e alarmes e o modelo local, se ativado. Tudo o resto recebe uma breve resposta «Não consigo fazer isso».",
185
189
  "Chat": "Chat",
186
190
  "Chat history (hours)": "Chat history (hours)",
187
- "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing."
191
+ "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.",
192
+ "YouTube players": "Leitores do YouTube",
193
+ "Player": "Leitor",
194
+ "TV power (optional)": "Ligar TV (opcional)",
195
+ "Start delay (s)": "Atraso de início (s)",
196
+ "Name": "Nome",
197
+ "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".": "Televisores e dispositivos do adaptador youtube-remote em que o assistente pode reproduzir, p. ex. \"reproduz o canal Sailing OceanAir\". A primeira linha é a padrão quando nenhum leitor é nomeado; um pedido de um satélite na divisão de uma linha vai para essa linha. Leitor: a instância youtube-remote - encontra sozinha o televisor emparelhado, também depois de voltar a emparelhar; com vários televisores numa instância, escolha um. Ligar: estado opcional que liga o televisor (p. ex. samsungtv.0.<tv>.control.power) - se estiver desligado, é ligado primeiro e o vídeo começa após o atraso. Um botão de ligar (alternador) nunca é premido, porque desligaria um televisor ligado. Requer \"Permitir escrever estados\"."
188
198
  }
@@ -128,7 +128,7 @@
128
128
  "Room": "Комната",
129
129
  "Routines": "Рутины",
130
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Запустите UDP-сервер голосовой связи (спутники ESP/Hannah).",
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. Установите ее с помощью кнопки ниже.",
131
+ "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.": "Запускает небольшую локальную модель (node-llama-cpp) для общих вопросов. При наличии облачного провайдера она отвечает только при сбое облака, если не включено «Сначала спрашивать локальную модель». Установка кнопкой ниже.",
132
132
  "Said or typed": "Сказано или напечатано",
133
133
  "Satellites": "Спутники",
134
134
  "Satellites, rooms or devices (comma separated)": "Сателлиты, комнаты или устройства (через запятую)",
@@ -160,7 +160,11 @@
160
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 на хосте и как минимум один сателлит.",
161
161
  "UDP port": "UDP-порт",
162
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 на хост-системе и иметь как минимум один спутник.",
163
- "Use a local LLM before the cloud (installed on demand)": "Используйте локальный LLM перед облаком (устанавливается по запросу).",
163
+ "Use a local LLM (installed on demand)": "Использовать локальную LLM (устанавливается по запросу)",
164
+ "Ask the local model first": "Сначала спрашивать локальную модель",
165
+ "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.": "Каждый вопрос, который не поняли правила, сначала идёт к локальной модели, потом в облако. Экономит облачные запросы, но на Raspberry Pi добавляет к таким вопросам 10–25 секунд.",
166
+ "Local model timeout (s)": "Тайм-аут локальной модели (с)",
167
+ "After this time the local model is stopped and the question goes on to the cloud.": "По истечении этого времени локальная модель останавливается, и вопрос передаётся в облако.",
164
168
  "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "Используется, если указанный выше провайдер не работает (сбой, истёкший ключ, исчерпанная квота). Локальный движок сохраняет голосовое управление без интернета.",
165
169
  "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "Используется, если указанный выше провайдер не работает. Piper позволяет ассистенту говорить без интернета.",
166
170
  "Verify device feedback": "Проверять ответ устройства",
@@ -184,5 +188,11 @@
184
188
  "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
189
  "Chat": "Чат",
186
190
  "Chat history (hours)": "История чата (часы)",
187
- "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "Как долго вкладка «Чат» показывает прошлые запросы из всех источников (сателлиты, Telegram, скрипты) с wake word, уровнем обработки, инструментами и ID состояний. 0 = ничего не записывать."
191
+ "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "Как долго вкладка «Чат» показывает прошлые запросы из всех источников (сателлиты, Telegram, скрипты) с wake word, уровнем обработки, инструментами и ID состояний. 0 = ничего не записывать.",
192
+ "YouTube players": "Плееры YouTube",
193
+ "Player": "Плеер",
194
+ "TV power (optional)": "Питание ТВ (необязательно)",
195
+ "Start delay (s)": "Задержка старта (с)",
196
+ "Name": "Имя",
197
+ "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".": "Телевизоры и устройства адаптера youtube-remote, на которых ассистент может воспроизводить, например «включи канал Sailing OceanAir». Первая строка используется по умолчанию, если плеер не назван; запрос от спутника в комнате строки идёт на эту строку. Плеер: экземпляр youtube-remote — он сам находит связанный телевизор, в том числе после повторной привязки; если в экземпляре несколько телевизоров, выберите один из них. Питание: необязательное состояние, включающее телевизор (например samsungtv.0.<tv>.control.power) — если телевизор выключен, он сначала включается, а видео стартует после задержки. Кнопка питания (переключатель) никогда не нажимается, потому что выключила бы работающий телевизор. Требуется «Разрешить запись состояний»."
188
198
  }
@@ -128,7 +128,7 @@
128
128
  "Room": "Кімната",
129
129
  "Routines": "Рутини",
130
130
  "Run the UDP voice server (ESP / Hannah satellites)": "Запуск голосового сервера UDP (супутники ESP / Hannah)",
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, коли потрібні дані з пристрою в реальному часі. Встановіть її за допомогою кнопки нижче.",
131
+ "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.": "Запускає невелику локальну модель (node-llama-cpp) для загальних запитань. З хмарним провайдером вона відповідає лише у разі збою хмари, якщо не ввімкнено «Спочатку питати локальну модель». Встановлення кнопкою нижче.",
132
132
  "Said or typed": "Сказав або надрукував",
133
133
  "Satellites": "Супутники",
134
134
  "Satellites, rooms or devices (comma separated)": "Сателіти, кімнати або пристрої (через кому)",
@@ -160,7 +160,11 @@
160
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 на хості та принаймні один супутник.",
161
161
  "UDP port": "UDP-порт",
162
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 на хості та принаймні одному супутнику.",
163
- "Use a local LLM before the cloud (installed on demand)": "Використовуйте локальний LLM перед хмарою (встановлюється на вимогу)",
163
+ "Use a local LLM (installed on demand)": "Використовувати локальну LLM (встановлюється на вимогу)",
164
+ "Ask the local model first": "Спочатку питати локальну модель",
165
+ "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.": "Кожне запитання, яке не зрозуміли правила, спочатку йде до локальної моделі, потім у хмару. Заощаджує хмарні запити, але на Raspberry Pi додає до таких запитань 10–25 секунд.",
166
+ "Local model timeout (s)": "Тайм-аут локальної моделі (с)",
167
+ "After this time the local model is stopped and the question goes on to the cloud.": "Після цього часу локальна модель зупиняється, і запитання передається в хмару.",
164
168
  "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "Використовується, якщо вказаний вище провайдер не працює (збій, прострочений ключ, вичерпана квота). Локальний рушій зберігає голосове керування без інтернету.",
165
169
  "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "Використовується, якщо вказаний вище провайдер не працює. Piper дає асистентові змогу говорити без інтернету.",
166
170
  "Verify device feedback": "Перевіряти відповідь пристрою",
@@ -184,5 +188,11 @@
184
188
  "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
189
  "Chat": "Чат",
186
190
  "Chat history (hours)": "Chat history (hours)",
187
- "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing."
191
+ "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.",
192
+ "YouTube players": "Плеєри YouTube",
193
+ "Player": "Плеєр",
194
+ "TV power (optional)": "Живлення ТВ (необов’язково)",
195
+ "Start delay (s)": "Затримка старту (с)",
196
+ "Name": "Ім’я",
197
+ "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".": "Телевізори та пристрої адаптера youtube-remote, на яких асистент може відтворювати, наприклад «увімкни канал Sailing OceanAir». Перший рядок використовується за замовчуванням, якщо плеєр не названо; запит від супутника в кімнаті рядка йде на цей рядок. Плеєр: екземпляр youtube-remote — він сам знаходить пов’язаний телевізор, зокрема після повторного прив’язування; якщо в екземплярі кілька телевізорів, виберіть один із них. Живлення: необов’язковий стан, що вмикає телевізор (наприклад samsungtv.0.<tv>.control.power) — якщо телевізор вимкнено, його спочатку вмикають, а відео стартує після затримки. Кнопку живлення (перемикач) ніколи не натискають, бо вона вимкнула б працюючий телевізор. Потрібно «Дозволити запис станів»."
188
198
  }
@@ -128,7 +128,7 @@
128
128
  "Room": "房间",
129
129
  "Routines": "例程",
130
130
  "Run the UDP voice server (ESP / Hannah satellites)": "运行UDP语音服务器(ESP/Hannah卫星)",
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。点击下方按钮即可安装。",
131
+ "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.": "运行一个小型本地模型(node-llama-cpp)回答一般问题。配置了云服务商时,只有在云端失败时才由它回答,除非启用了“先询问本地模型”。请用下方按钮安装。",
132
132
  "Said or typed": "口头或书面",
133
133
  "Satellites": "卫星",
134
134
  "Satellites, rooms or devices (comma separated)": "卫星设备、房间或设备(逗号分隔)",
@@ -160,7 +160,11 @@
160
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,并且至少需要一个卫星设备。",
161
161
  "UDP port": "UDP端口",
162
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,并且至少需要一台卫星设备。",
163
- "Use a local LLM before the cloud (installed on demand)": "在云端之前使用本地LLM(按需安装)",
163
+ "Use a local LLM (installed on demand)": "使用本地 LLM(按需安装)",
164
+ "Ask the local model first": "先询问本地模型",
165
+ "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.": "规则无法理解的每个问题都会先交给本地模型,再交给云端。可节省云端调用,但在树莓派上每个此类问题会多花 10–25 秒。",
166
+ "Local model timeout (s)": "本地模型超时(秒)",
167
+ "After this time the local model is stopped and the question goes on to the cloud.": "超过此时间后本地模型将被停止,问题转交给云端。",
164
168
  "Used when the provider above fails (outage, expired key, empty quota). A local engine keeps voice working without the internet.": "当上方的服务商不可用时使用(故障、密钥过期、额度用尽)。本地引擎可在没有互联网时保持语音功能可用。",
165
169
  "Used when the provider above fails. Piper keeps the assistant speaking without the internet.": "当上方的服务商不可用时使用。Piper 可让助手在没有互联网时继续说话。",
166
170
  "Verify device feedback": "验证设备反馈",
@@ -184,5 +188,11 @@
184
188
  "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
189
  "Chat": "聊天",
186
190
  "Chat history (hours)": "Chat history (hours)",
187
- "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing."
191
+ "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.": "How long the Chat tab shows past requests from all sources (satellites, Telegram, scripts) with wake word, answering tier, tools and state ids. 0 = record nothing.",
192
+ "YouTube players": "YouTube 播放器",
193
+ "Player": "播放器",
194
+ "TV power (optional)": "电视电源(可选)",
195
+ "Start delay (s)": "启动延迟(秒)",
196
+ "Name": "名称",
197
+ "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".": "助手可以在其上播放的 youtube-remote 适配器的电视和设备,例如“播放频道 Sailing OceanAir”。未指定播放器时使用第一行;来自某行所在房间卫星的请求发送到该行。播放器:youtube-remote 实例——它会自行找到已配对的电视,重新配对后也一样;一个实例中有多台电视时,选择其中一台。电源:可选的开启电视的状态(例如 samsungtv.0.<tv>.control.power)——如果电视关闭,会先开机,视频在启动延迟后开始。电源按钮(切换键)永远不会被按下,因为它会关闭正在运行的电视。需要“允许写入状态”。"
188
198
  }
@@ -260,6 +260,38 @@
260
260
  { "type": "text", "attr": "homeValue", "title": "Home value (empty = auto)", "width": "15%" }
261
261
  ]
262
262
  },
263
+ "youtubePlayers": {
264
+ "newLine": true,
265
+ "type": "table",
266
+ "label": "YouTube players",
267
+ "help": "TVs and devices of the youtube-remote adapter the assistant may play on, e.g. \"play the channel Sailing OceanAir\". The first row is the default when no player is named; a request from a satellite in the room of a row goes to that row. Player: the youtube-remote instance - it finds its paired TV itself, also after the TV was paired again; with several TVs in one instance pick one of them. Power: optional state that switches the TV on (e.g. samsungtv.0.<tv>.control.power) - if it is off, the TV is switched on first and the video starts after the start delay. A power button (toggle) is never pressed, because it would switch a running TV off. Needs \"Allow writing states\".",
268
+ "xs": 12,
269
+ "sm": 12,
270
+ "md": 12,
271
+ "lg": 12,
272
+ "xl": 12,
273
+ "items": [
274
+ { "type": "text", "attr": "name", "title": "Name", "width": "20%" },
275
+ {
276
+ "type": "selectSendTo",
277
+ "attr": "id",
278
+ "title": "Player",
279
+ "command": "getYouTubeInstances",
280
+ "width": "30%"
281
+ },
282
+ { "type": "objectId", "attr": "power", "title": "TV power (optional)", "width": "30%" },
283
+ { "type": "text", "attr": "room", "title": "Room", "width": "12%" },
284
+ {
285
+ "type": "number",
286
+ "attr": "delay",
287
+ "title": "Start delay (s)",
288
+ "width": "8%",
289
+ "min": 0,
290
+ "max": 120,
291
+ "default": 8
292
+ }
293
+ ]
294
+ },
263
295
  "timerAnnounce": {
264
296
  "newLine": true,
265
297
  "type": "checkbox",
@@ -382,8 +414,8 @@
382
414
  "useLocalLlm": {
383
415
  "newLine": true,
384
416
  "type": "checkbox",
385
- "label": "Use a local LLM before the cloud (installed on demand)",
386
- "help": "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.",
417
+ "label": "Use a local LLM (installed on demand)",
418
+ "help": "Runs a small local model (node-llama-cpp) for general questions. With a cloud provider it only answers when the cloud fails, unless \"Ask the local model first\" is on. Install it with the button below.",
387
419
  "default": false,
388
420
  "xs": 12,
389
421
  "sm": 12,
@@ -402,6 +434,33 @@
402
434
  "lg": 6,
403
435
  "xl": 6
404
436
  },
437
+ "localLlmFirst": {
438
+ "newLine": true,
439
+ "type": "checkbox",
440
+ "label": "Ask the local model first",
441
+ "help": "Every question the rules do not understand goes to the local model before the cloud. Saves cloud calls, but on a Raspberry Pi it adds 10–25 seconds to such questions.",
442
+ "default": false,
443
+ "hidden": "!data.useLocalLlm || data.provider === 'none'",
444
+ "xs": 12,
445
+ "sm": 12,
446
+ "md": 6,
447
+ "lg": 6,
448
+ "xl": 6
449
+ },
450
+ "localLlmTimeoutSec": {
451
+ "type": "number",
452
+ "label": "Local model timeout (s)",
453
+ "help": "After this time the local model is stopped and the question goes on to the cloud.",
454
+ "min": 1,
455
+ "max": 300,
456
+ "default": 15,
457
+ "hidden": "!data.useLocalLlm",
458
+ "xs": 12,
459
+ "sm": 6,
460
+ "md": 3,
461
+ "lg": 3,
462
+ "xl": 3
463
+ },
405
464
  "_installLocalLlm": {
406
465
  "newLine": true,
407
466
  "type": "sendTo",