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
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "assistant",
4
- "version": "0.1.6",
4
+ "version": "1.0.2",
5
5
  "news": {
6
+ "1.0.2": {
7
+ "en": "Added the missing translations and the sizes for all screens to the settings. The tests run on Windows and macOS too\nThe ports the adapter really opens (UDP satellites, Wyoming, ESPHome media server) are reported to js-controller 8 as used resources; the satellite port in the settings is no longer listed as an occupied TCP port",
8
+ "de": "Fehlende Übersetzungen und Bildschirmgrößen zu den Einstellungen hinzugefügt. Die Tests laufen auf Windows und macOS\nDie Ports, die der Adapter wirklich öffnet (UDP-Satelliten, Wyoming, ESPhome Media Server), werden JS-Controller 8 als genutzte Ressourcen gemeldet; der SAT-Port in den Einstellungen",
9
+ "ru": "Добавлены недостающие переводы и размеры всех экранов в настройки. Тесты также работают в Windows и macOS\nПорты, которые действительно открывает адаптер (спутники UDP, Вайоминг, медиасервер eSpHome), сообщаются js-controller 8 как использованные ресурсы; спутниковый порт в настройках больше не указан как занятый TCP-порт",
10
+ "pt": "Adicionou as traduções ausentes e os tamanhos de todas as telas. Os testes também são em Windows e macOS\nAs portas que o adaptador realmente abre (satélites UDP, Wyoming, servidor de mídia ESPHome) são relatadas ao js-controller 8 como usadas; a porta de satélite não está mais listada",
11
+ "nl": "De ontbrekende vertalingen en de formaten voor alle schermen aan de instellingen toegevoegd. De tests worden ook uitgevoerd op Windows en MacOS\nDe poorten die de adapter echt opent (UDP-satellieten, Wyoming, ESPhome-mediaserver) worden aan js-controller 8 gerapporteerd als gebruikte bronnen; de satellietpoort wordt in de instellingen niet langer vermeld als een bezette TCP-poort",
12
+ "fr": "Ajout des traductions manquantes et de la taille de tous les écrans aux paramètres. Les tests se font aussi sur Windows et MacOS\nLes ports que l'adaptateur ouvre réellement (satellites UDP, Wyoming, serveur multimédia ESPhome) sont signalés à JS-Controller 8 comme étant utilisés ; dans les paramètres, le port n'est plus répertorié comme port TCP occupé",
13
+ "it": "Aggiunte le traduzioni mancanti e le misure per tutti gli schermi. I test sono anche su Windows e macOS\nLe porte effettivamente aperte dall'adattatore (satelliti UDP, Wyoming, ESPHome media server) sono segnalate a js-controller 8 come risorse usate; la porta satellite non è più elencata come porta TCP occupata",
14
+ "es": "Añadió las traducciones que faltaban y los tamaños de todas las pantallas a los ajustes. Las pruebas también son en Windows y macOS\nLos puertos que el adaptador realmente abre (satélites UDP, Wyoming, servidor multimedia ESPhome) aparecen en JS-Controller 8 como recursos utilizados; el puerto de satélite de la configuración ya no aparece como puerto TCP ocupado",
15
+ "pl": "Dodano brakujące tłumaczenia i rozmiary wszystkich ekranów do ustawień. Testy działają również w systemach Windows i macOS\nPorty, które adapter naprawdę otwiera (satelity UDP, Wyoming, serwer multimedialny ESPHome) są zgłaszane kontrolerowi js-8 jako zużyte zasoby; port satelitarny w ustawieniach nie jest już wymieniony jako zajęty port TCP",
16
+ "uk": "Додано відсутні переклади та розміри для всіх екранів до налаштувань. Тести також виконуються на Windows та macOS\nПорти, які адаптер дійсно відкриває (супутники UDP, Вайомінг, медіасервер ESPHome) повідомляються js-controller 8 як використані ресурси; супутниковий порт в налаштуваннях більше не вказаний як зайнятий порт TCP",
17
+ "zh-cn": "在设置中添加了所有屏幕的缺失翻译和大小。测试也在 Windows 和 macOS 上运行\n适配器真正打开的端口(UDP 卫星、怀俄明州、ESPhome 媒体服务器)作为已用资源报告给 js-controller 8;设置中的卫星端口不再被列为占用的 TCP 端口"
18
+ },
19
+ "1.0.1": {
20
+ "en": "Use first model if not set\nAllowed to run only with local LLM\nAdded routines: a phrase (\"good night\") runs a list of actions and answers once. Matched before the offline rule engine and before the LLM, so a macro you wrote down is never reinterpreted\nThe offline rule engine now answers questions about a kind of measurement without a device being named: \"how is the air in here\", \"how warm is it everywhere\", \"how bright is it\" are answered from every sensor of that kind, with a word for the air-quality number\nSpoken text is cached on disk, so repeated replies (\"Okay.\", \"Timer finished\") cost no cloud call and no latency. An answer over 400 characters is cut at the last sentence that fits, and `<speak>…</speak>` is now spoken as real SSML by Azure and Polly\nAdded an optional second speech engine per direction: if the configured provider fails (outage, expired key, empty quota), speech-to-text and text-to-speech fall back to another one — with Vosk/Piper behind a cloud provider the house keeps working without the internet\nAdded two optional settings for switch commands: confirm with a short beep instead of a spoken sentence, and verify the device's acknowledgement before reporting success\nAn ESPHome satellite's own measurements (temperature, presence, status texts) now appear as read-only states under `satellites.<id>.controls.*`\nAnnouncements can address a group of rooms or a person: name a set of satellites in the new \"Announcement targets\" table and use it anywhere a target is accepted (`notify`, `askUser`, a trigger's room, the per-satellite `tts` state). The LLM also got an `announce` tool, so \"tell Denis that dinner is ready\" reaches his speakers — the configured names are part of the tool description. A question asked to a group counts the first answer, and the text is synthesised once for the whole group\nThe assistant can now know who is at home: point the new \"Presence\" table at the states you already have (the residents adapter, a phone ping, your own flag) and name the person. It tells the LLM who is around, holds back announcements to an empty house on request (`notify` with `onlyWhenHome`), and exposes `presence.anyoneHome` / `presence.list` / `presence.lastArrival` — so greeting somebody on arrival is just a trigger on that state\nSystem notifications can now be spoken: write to `notify.text` / `notify.alert`, call `sendTo('assistant.0', 'notify', { text, severity })`, or pick the assistant in the ioBroker notification manager. The LLM turns the raw text into one natural sentence whose tone follows the severity (`info`/`notify`/`alert`, plus `direct` to speak it verbatim)\nAdded Do-Not-Disturb, enforced by the adapter for every transport: `dnd` globally and `satellites.<id>.dnd` per satellite. Announcements are suppressed while it is on; alerts and texts starting with `!` are still played, and answers to your own questions are never affected\nAdded proactive triggers (new \"Triggers\" tab): a trigger watches states or the clock and then announces something, writes a state, or asks you a question and acts on your answer (\"The fryer has been on for 5 hours. Shall I switch it off?\" — the LLM classifies the spoken reply against the configured response rules). Supports alternative conditions, `also`/`unless` refinements, a delay with `cancelWhen`, and a cooldown; each trigger has `triggers.items.<id>.{enabled,fire,lastFired,nextFireAt}` states plus a `triggers.enabled` master switch\nThe assistant can now ask a question and wait for the answer: `sendTo('assistant.0', 'askUser', { question, room })` speaks it on a satellite, re-opens the microphone without a wake word and returns what was said. While a question is open that answer is routed to the caller instead of being read as a new command\nAdded a fourth voice transport: ESPHome voice satellites (ThirdReality Voice & Music Assistant, Home Assistant Voice PE, linux-voice-assistant). The adapter dials the devices on TCP 6053, detects the end of speech itself and serves the spoken reply over a small HTTP media server",
21
+ "de": "1. Modell verwenden, falls nicht\nNur mit lokalem LLM lauffähig\nRoutinen hinzugefügt: Ein Satz („Gute Nacht“) zählt Aktionen und Antworten. Vor der Offline Rule Engine und vor dem LLM abgeglichen, ein Makro, das Sie notieren, wird nie neu interpretiert\nDie Offline-Regelmaschine beantwortet jetzt Fragen zu einer Art von Messung, ohne dass ein Gerät benannt wird: „Wie ist die Luft hier drin“, „wie warm ist es überall“, „wie hell ist es“ werden von jedem Sensor beantwortet, mit einem Wort für die Luftgütezahl\nText wird auf Festplatte gecacht, also oft („Okay. „, „Timer beendet“) kostete weder Cloud noch Latenz. Eine Antwort über 400 Zeichen wird am letzten Satz gekürzt und `<speak>...</speak>` wird nun von Azure und Polly als SSML gesprochen\nOptionale zweite Sprachengine pro Richtung hinzugefügt: Wenn der konfigurierte Anbieter ausfällt (Ausfall, abgelaufener Schlüssel, leeres Kontingent), fallen Sprache-zu-Text und Text-to-Speech auf einen anderen zurück — mit Vosk/Piper hinter einem Cloud-Anbieter läuft das Haus weiter ohne Internet\nZwei optionale Einstellungen für Schaltbefehle hinzugefügt: mit kurzem Piepton statt gesprochenem Satz bestätigen und vor Erfolgsmeldung die Gerätebestätigung prüfen\nDie Messungen (Temperatur, Präsenz, Statustexte) eines ESPHome-Satelliten sind jetzt schreibgeschützt. <id>. steuert. *`\nAnkündigungen können eine Gruppe von Räumen oder Personen ansprechen: Nennen Sie Satelliten in der neuen Tabelle mit Ankündigungszielen und verwenden Sie sie überall dort, wo ein Ziel erlaubt ist (`Notify`, AskUser`, Raum, TTS-Status pro Satellit). LLM hat auch ein Ankündigungstool, also „Sag Denis, dass das Essen fertig ist“ — die Namen sind Teil der Toolbeschreibung. Eine Frage an eine Gruppe zählt als erste Antwort und der Text wird einmal für die ganze Gruppe\nDer Assistent weiß jetzt, wer zu Hause ist: Zeigen Sie in der neuen Tabelle „Präsenz“ auf Ihre Länder (Anwohneradapter, Ping, Flagge) und benennen Sie die Person. Es teilt dem LLM mit, wer da ist, hält Ankündigungen vor leerem Haus auf Anfrage zurück (`Notify` mit `OnlyWhenHome`) und zeigt `Presence.AnyoneHome`/`presence.list`/`Presence.LastArrival` an — also jemanden bei Ankunft zu begrüßen ist nur ein Auslöser für diesen Zustand\nSystemmeldungen können jetzt gesprochen werden: schreiben Sie an `notify.text`/`notify.alert`, rufen Sie `sendTo ('assistant.0', 'notify', {text, severity}) `an oder wählen Sie den Assistenten im ioBroker. Das LLM macht aus dem Rohtext einen natürlichen Satz, dessen Ton dem Schweregrad folgt (`info`/`notify`/`alert`, plus `direct`, um es wörtlich zu sagen)\nDo-Not-Disturb hinzugefügt, per Adapter für jeden Transport: `dnd` global und `satelliten. <id>.dnd` pro Satellit. Solange es läuft, werden Meldungen und SMS ausgeblendet! `werden immer noch gespielt und Ihre Fragen bleiben davon unberührt\nProaktive Trigger hinzugefügt (neuer „Trigger“ -Tab): Ein Trigger beobachtet Zustände oder die Uhr und sagt etwas an, schreibt einen Status oder stellt Ihnen eine Frage und reagiert auf Ihre Antwort („Die Fritteuse läuft seit 5 Stunden. Soll ich es abstellen?“ — Das LLM stuft die mündliche Antwort nach den Regeln ein). Unterstützt alternative Bedingungen, `auch`/`es sei denn, Delay mit `CancelWhen` und Cooldown; jeder Trigger hat `triggers.items. <id>. {enabled, fire, lastFired, nextFireAt} `Status plus `triggers.enabled`-Master\nDer Assistent kann nun eine Frage stellen und auf die Antwort warten: `sendTo ('assistant.0', 'askUser', {question, room}) `spricht es über Satellit, öffnet das Mikro ohne Weckwort und gibt zurück, was gesagt wurde. Bei offener Frage wird die Antwort an den Anrufer weitergeleitet und nicht als neuer Befehl gelesen\nVierter Sprachtransport hinzugefügt: ESPHome-Sprachsatelliten (ThirdReality Voice & Music Assistant, Home Assistant Voice PE, Linux Voice Assistant). Der Adapter wählt die Geräte auf TCP 6053 an, erkennt das Ende der Rede und sendet es über einen kleinen HTTP-Medienserver",
22
+ "ru": "Используйте первую модель, если она не установлена\nРазрешено работать только с локальным LLM\nДобавлены процедуры: фраза («спокойной ночи») запускает список действий и ответов один раз. Сопоставлялось с алгоритмом правил в автономном режиме и до LLM, поэтому записанный вами макрос никогда не будет переосмыслен\nАвтономный механизм правил теперь отвечает на вопросы об измерениях без указания названия устройства: «как здесь воздух», «насколько тепло повсюду», «насколько ярко», «насколько ярко», «насколько оно», «насколько оно», «насколько оно», «насколько оно ярко», и каждый датчик такого типа отвечает словом, обозначающим показатель качества воздуха\nУстный текст кэшируется на диске, поэтому ответы повторяются («Хорошо. «, «Таймер завершен») не требуют облачных вызовов и задержек. Ответ длиной более 400 символов сокращается в последнем подходящем предложении, и Azure и Polly теперь говорят «<speak>...</speak>» как настоящий SSML\nДобавлен дополнительный речевой движок для каждого направления: если настроенный провайдер выходит из строя (сбой, истек срок действия ключа, пустая квота), преобразование речи в текст и текст в речь возвращается к другому провайдеру — Vosk/Piper стоит облачный провайдер, и дом продолжает работать без Интернета\nДобавлены две дополнительные настройки для команд переключения: подтверждение коротким звуковым сигналом вместо произнесенного предложения и проверка подтверждения устройства, прежде чем сообщить об успешном завершении\nСобственные измерения спутника ESPHome (температура, присутствие, тексты состояния) теперь отображаются в виде состояний, доступных только для чтения, в разделе «Спутники». <id>.элементы управления. *`\nОбъявления могут быть адресованы группе комнат или человеку: назовите набор спутников в новой таблице «Цели объявлений» и используйте их везде, где будет принята цель (`notify`, `AskUser`, комната триггера, состояние `tts` для каждого спутника). У LLM также есть инструмент «объявить», поэтому спикеры могут сказать Денису, что ужин готов — настроенные имена являются частью описания инструмента. На вопрос, заданный группе, засчитывается первый ответ, и текст синтезируется один раз для всей группы\nТеперь ассистент может знать, кто находится дома: в новой таблице «Присутствие» укажите штаты, которые у вас уже есть (адаптер жителей, телефонный звонок, ваш собственный флаг) и назовите имя человека. Оно сообщает магистру права о том, кто находится рядом, скрывает объявления в пустой дом по запросу («уведомлять» с помощью «OnlyWhenHome`) и раскрывает информацию «Presence.anyoneHome`/`presence.list`/`Presence.LastArrival`, поэтому приветствие кого-то по прибытии — это просто спусковой крючок в этом состоянии\nТеперь можно произносить системные уведомления: напишите в `notify.text`/`notify.alert`, вызовите `sendTo ('assistant.0', 'notify', {text, severity}) `или выберите помощника в диспетчере уведомлений IOBroker. LLM превращает необработанный текст в одно естественное предложение, тон которого соответствует степени серьезности (`info`/`notify`/`alert`, а также слово «прямо», чтобы произнести его дословно)\nДобавлен режим «Не беспокоить», применяемый адаптером для каждого транспорта: `dnd` в глобальном масштабе и `спутников. <id>.dnd` для каждого спутника. Анонсы запрещены, пока он включен; оповещения и текстовые сообщения начинаются с `! `все еще воспроизводятся, и ответы на ваши вопросы остаются неизменными\nДобавлены проактивные триггеры (новая вкладка «Триггеры»): триггер отслеживает состояние или часы, затем объявляет что-то, записывает состояние или задает вам вопрос и реагирует на ваш ответ («Фритюрница работает уже 5 часов). Должен ли я его выключить?» — LLM классифицирует устный ответ в соответствии с настроенными правилами ответа). Поддерживаются альтернативные условия: уточнения в режиме «также\"/ «если нет», задержка нажатия кнопки «CancelWhen» и время перезарядки; каждый триггер содержит «triggers.items». <id>. состояния {включено, срабатывает, LastFireed, NextFireAt} и главный переключатель «triggers.enabled»\nТеперь ассистент может задать вопрос и дождаться ответа: `sendTo ('assistant.0', 'askUser', {question, room}) `произносит его на спутнике, снова открывает микрофон без слов для пробуждения и возвращает сказанное. Пока вопрос открыт, ответ направляется вызывающему абоненту, а не читается как новая команда\nДобавлен четвертый голосовой транспорт: голосовые спутники ESPHome (голосовой и музыкальный помощник ThirdReality, голосовой помощник Home Assistant PE, голосовой помощник Linux). Адаптер набирает номер на устройства по протоколу TCP 6053, сам определяет окончание речи и передает устный ответ на небольшой медиасервер HTTP",
23
+ "pt": "Use o 1º modelo se não o definir\nSó pode ser executado com LLM local\nRotinas adicionadas: uma frase (“boa noite”) lista ações e respostas. Combinada antes do motor de regras offline e do LLM, uma macro anotada nunca é reinterpretada\nO mecanismo de regras offline agora responde a perguntas sobre um tipo de medição sem nome: “como está o ar aqui”, “quão quente está em todo lugar”, “quão brilhante é” são respondidos por cada sensor, com uma palavra para o número de qualidade do ar\nO texto falado é armazenado em cache e responde (“Ok. “, “Timer finished”) sem chamadas na nuvem ou latência. Uma resposta de 400 caracteres é cortada na última frase e `<speak>...</speak>` agora é falada como SSML real por Azure e Polly\nFoi adicionado um segundo mecanismo de fala opcional por direção: se o provedor configurado falhar (falha, chave expirada, cota vazia), a conversão de voz e de texto em fala retornam a outro. Com a Vosk/Piper como provedor de nuvem, a casa continua trabalhando sem internet\nForam adicionadas duas opções para comandos de switch: confirme com um bipe curto em vez de uma frase falada e confirme o dispositivo antes de relatar o sucesso\nAs medidas de um satélite ESPHome (temperatura, presença, texto de status) agora aparecem somente para leitura em `satélites. <id>.controles. *`\nOs anúncios podem se dirigir a um grupo de salas ou a uma pessoa: nomeie um conjunto de satélites na nova tabela “Alvos do anúncio” e use-o onde o alvo for aceito (`notify`, `askUser`, a sala de ativação, o estado `tts` por satélite). O LLM também tem uma ferramenta de “anunciar”: “Diga a Denis que o jantar está pronto” — os nomes configurados fazem parte da descrição. Uma pergunta a um grupo conta a primeira resposta e o texto é sintetizado uma vez para todo o grupo\nO assistente já sabe quem está em casa: aponte a nova tabela “Presença” para os estados que você já tem (adaptador, ping telefônico, bandeira) e nomeie a pessoa. Ele diz ao LLM quem está por perto, esconde anúncios em uma casa vazia a pedido (`notifique` com `OnlyWhenHome`) e expõe `presence.anyonehome`/`presence.lastarrival` — então cumprimentar alguém na chegada é apenas um gatilho para esse estado\nAgora, escreva para `notify.text`/`notify.alert`, chame `sendTo ('assistant.0', 'notify', {text, severity}) `ou escolha o assistente no gerenciador de notificações do IOBroker. O LLM transforma o texto bruto em uma frase natural cujo tom segue a severidade (`info`/`notify`/`alert`, mais `direct` na íntegra)\nFoi adicionado o Do-Not-Disturb, aplicado pelo adaptador a cada transporte: `dnd` global e `satélites. <id>.dnd` por satélite Os anúncios são suprimidos na tela; alertas e textos começando com `! `ainda são jogados e as respostas às suas perguntas nunca são afetadas\nAdição de gatilhos proativos (nova guia “Acionadores”): um gatilho observa os estados ou o relógio e anuncia algo, escreve um estado ou faz uma pergunta e age de acordo com a resposta (“A fritadeira está ligada há 5 horas. Devo desligá-lo?” — o LLM classifica a resposta falada em relação às regras configuradas). Suporta condições alternativas, além de refinamentos, delay com `cancelWhen` e cooldown; cada gatilho tem `triggers.items. <id>. estados {enabled, fire, lastFired, nextFireAt} `e um switch master `triggers.enabled`\nO assistente agora pode fazer uma pergunta e esperar a resposta: `sendTo ('assistant.0', 'askUser', {question, room}) `fala em um satélite, reabre o microfone sem despertar e retorna o que foi dito. Quando uma pergunta está aberta, ela é enviada ao chamador em vez de ser lida como um novo comando.\nAdicionou um quarto transporte de voz: satélites de voz ESPHome (ThirdReality Voice & Music Assistant, Home Assistant Voice PE, linux-voice-assistant). O adaptador liga para os dispositivos no TCP 6053, detecta o fim da fala e responde em um pequeno servidor HTTP.",
24
+ "nl": "Gebruik het eerste model als dat niet is ingesteld\nMag alleen worden gerund met lokale LLM\nRoutines toegevoegd: een zin („welterusten”) bevat één keer een lijst van acties en antwoorden. Komt overeen vóór de offline rule engine en vóór de LLM, dus een macro die u hebt opgeschreven, wordt nooit opnieuw geïnterpreteerd\nDe offline regelengine beantwoordt nu vragen over een soort meting zonder dat een apparaat een naam krijgt: „hoe is de lucht hier”, „hoe warm is het overal”, „hoe helder is het” worden beantwoord door elke sensor van dat type, met een woord voor het luchtkwaliteitsnummer\nGesproken tekst wordt in de cache opgeslagen, dus herhaalde antwoorden („OK. „, „De timer is klaar”) kost geen telefoongesprek via de cloud en geen vertraging. Een antwoord van meer dan 400 tekens is weggelaten in de laatste zin die past, en `<speak>...</speak>` wordt nu als echte SSML uitgesproken door Azure en Polly\nEen optionele tweede spraakengine per richting toegevoegd: als de geconfigureerde provider uitvalt (uitval, verlopen sleutel, leeg quotum), vallen spraak-naar-tekst en tekst-naar-spraak terug naar een andere — met Vosk/Piper achter een cloudprovider blijft het huis werken zonder internet\nTwee optionele instellingen toegevoegd voor schakelopdrachten: bevestig met een korte pieptoon in plaats van een gesproken zin, en controleer de bevestiging van het apparaat voordat u het succes meldt\nDe eigen metingen van een ESPHome-satelliet (temperatuur, aanwezigheid, status-teksten) worden nu weergegeven als alleen-lezen toestanden onder `satellieten. <id>.controles. *`\nAankondigingen kunnen gericht zijn op een groep kamers of op een persoon: noem een set satellieten in de nieuwe tabel „Aankondigingsdoelen” en gebruik die overal waar een doel wordt geaccepteerd (`notify`, `askUser`, een triggerkamer, de `tts` status per satelliet). De LLM heeft ook een „aankondigingstool”, dus „vertel Denis dat het eten klaar is” bereikt zijn sprekers — de geconfigureerde namen maken deel uit van de beschrijving van het gereedschap. Een vraag aan een groep telt als eerste antwoord, en de tekst wordt één keer samengevat voor de hele groep\nDe assistent kan nu weten wie er thuis is: richt de nieuwe tabel „Aanwezigheid” op de staten die u al hebt (de adapter van de bewoner, een ping van de telefoon, uw eigen vlag) en geef de persoon een naam. Het vertelt de LLM wie er in de buurt is, houdt aankondigingen naar een leeg huis op verzoek tegen (`verwittiging` met `OnlyWhenHome`), en stelt `Presence.anyoneHome`/`presence.lastArrival` bloot — iemand begroeten bij aankomst is dus slechts een trigger voor die toestand\nSysteemmeldingen kunnen nu worden uitgesproken: schrijf naar `notify.text`/`notify.alert`, bel `SendTo ('assistant.0', 'notify', {text, severity}) `, of kies de assistent in de Notificatiebeheerder van IOBroker. De LLM zet de onbewerkte tekst om in één natuurlijke zin waarvan de toon volgt op de ernst (`info`/`notify`/`alert`, plus `direct` om de tekst letterlijk uit te spreken)\nDo-Not-Disturb toegevoegd, versterkt door de adapter voor elk transport: `dnd` wereldwijd en `satellieten. <id>.dnd` per satelliet. Aankondigingen worden onderdrukt als de app is ingeschakeld; waarschuwingen en sms'jes die beginnen met `! `worden nog steeds gespeeld, en de antwoorden op uw eigen vragen worden nooit beïnvloed\nProactieve triggers toegevoegd (nieuw tabblad „Triggers”): een trigger houdt de status of de klok in de gaten en kondigt dan iets aan, schrijft een status in, of stelt u een vraag en handelt naar aanleiding van uw antwoord („De friteuse heeft 5 uur aan gestaan. Zal ik hem uitzetten?” — de LLM classificeert het gesproken antwoord op basis van de geconfigureerde responsregels). Ondersteunt alternatieve voorwaarden, `ook/`tenzij verfijningen, een vertraging met `CancelWhen` en een cooldown; elke trigger heeft `triggers.items. <id>. {enabled, fire, lastFired, NextFireAt} `staten plus een hoofdschakelaar met `triggers.enabled`\nDe assistent kan nu een vraag stellen en wachten op het antwoord: `SendTo ('assistant.0', 'askUser', {question, room}) `spreekt het uit op een satelliet, opent de microfoon opnieuw zonder een wake-word en geeft terug wat er is gezegd. Als een vraag open is, wordt dat antwoord doorgestuurd naar de beller in plaats van dat het als een nieuw commando wordt gelezen\nEen vierde spraaktransport toegevoegd: ESPhome-stemsatellieten (ThirdReality Voice & Music Assistant, Home Assistant Voice PE, linux-voice-assistant). De adapter kiest de apparaten op TCP 6053, detecteert zelf het einde van de spraak en stuurt het gesproken antwoord via een kleine HTTP-mediaserver",
25
+ "fr": "Utiliser le 1er modèle non réglé\nNe peut courir qu'avec un LLM local\nAjout de routines : une phrase (« bonne nuit ») fait la liste des actions et répond. Correspondant avant le moteur de règles hors ligne et le LLM, donc une macro que vous notez n'est jamais réinterprétée\nLe moteur de règles hors ligne répond désormais à des questions sur un type de mesure sans nom d'appareil : « Comment se trouve l'air ici », « Qu'est-ce qu'il fait chaud partout », « Quelle est la luminosité » avec un mot pour le numéro de qualité de l'air\nLe texte parlé est caché sur disque, donc réponses répétées (« OK. «, « Timer terminé »), sans appel ni latence. Une réponse de plus de 400 caractères est coupée à la dernière phrase, et Azure et Polly utilisent désormais «<speak>...</speak> »\nAjout d'un second moteur vocal optionnel par direction : si le fournisseur configuré tombe en panne (panne, clé expirée, quota vide), la synthèse vocale revient à un autre. Avec Vosk/Piper derrière un fournisseur cloud, la maison continue de fonctionner sans Internet\nAjout de deux paramètres facultatifs pour les commandes Switch : confirmer par un bip court au lieu d'une phrase prononcée, et vérifier l'accusé de réception\nLes mesures d'un satellite ESPhome (température, présence, textes d'état) sont désormais en lecture seule sous « satellites ». <id>.contrôles. *`\nLes annonces peuvent s'adresser à un groupe de pièces ou à une personne : nommez un ensemble de satellites dans le nouveau tableau « Cibles de l'annonce » et utilisez-le partout où une cible est acceptée (« notify », « AskUser », zone de déclenchement, état « tts » par satellite). Le LLM a également un outil d' « annonce », qui permet de dire à Denis que le dîner est prêt. Les noms configurés figurent dans la description de l'outil. Une question compte pour la première réponse, et le texte est synthétisé une fois pour tout le groupe\nL'assistante peut désormais savoir qui est chez vous : pointez dans le nouveau tableau « Présence » les états que vous avez déjà (l'adaptateur, le ping, votre drapeau) et nommez-le. Il indique au LLM qui est là, bloque les annonces relatives à une maison vide sur demande (« notifier » avec « OnlyWhenHome ») et expose « Presence.anyoneHome`/`presence.list`/`Presence.LastArrival` — donc saluer quelqu'un à son arrivée ne fait que déclencher cet état\nLes notifications système peuvent désormais être lues : écrivez sur `notify.text`/`notify.alert`, appelez `SendTo ('assistant.0', 'notify', {text, severity}) `ou choisissez l'assistant dans le gestionnaire de notifications IObroker. Le LLM transforme le texte brut en une phrase naturelle dont le ton suit la sévérité (`info`/`notify`/`alert`, plus « direct » pour le prononcer mot pour mot)\nAjout du mode Do-Not-Disturb, imposé par l'adaptateur pour tous les transports : « dnd » global et « satellites ». <id>.dnd` par satellite. Les annonces sont supprimées ; les alertes et les SMS commencent par `! `sont toujours joués et les réponses à vos questions ne sont jamais affectées\nAjout de déclencheurs proactifs (nouvel onglet « Déclencheurs ») : un déclencheur surveille les états ou l'horloge, puis annonce quelque chose, écrit un état ou pose une question et agit en fonction de votre réponse (« La friteuse est allumée depuis 5 heures. Dois-je l'éteindre ? » — le LLM classe la réponse orale selon les règles de réponse configurées). Supporte des conditions alternatives, « aussi`/unless », un délai avec « CancelWhen » et un temps de recharge ; chaque trigger a `triggers.items. <id>. {enabled, fire, LastFired, NextFireAt} `états et un switch principal `triggers.enabled`\nL'assistante peut maintenant poser une question et attendre la réponse : `SendTo ('assistant.0', 'AskUser', {question, room}) `parle par satellite, rouvre le micro sans aucun mot de réveil et renvoie ce qui a été dit. Lorsqu'une question est ouverte, la réponse est envoyée à l'appelant au lieu d'être lue\nAjout d'un quatrième moyen de transport vocal : les satellites vocaux ESPHome (ThirdReality Voice & Music Assistant, Home Assistant Voice PE, Linux-voice-assistant). L'adaptateur compose les appareils via le TCP 6053, détecte lui-même la fin du discours et diffuse la réponse via un petit serveur HTTP",
26
+ "it": "Usa 1 modello se no\nFunziona solo con LLM locale\nRoutine aggiunte: una frase («buonanotte») elenca azioni e risposte. Risponde al rule engine offline e al LLM, quindi una macro che ha annotato non viene mai reinterpretata\nIl motore di regole offline ora risponde a domande su un tipo di misurazione senza nome: «com'è l'aria qui dentro», «quanto è calda ovunque», «quanto è luminosa» ogni sensore di quel tipo, con una parola per il numero di qualità dell'aria\nIl testo è in cache, quindi risposte ripetute («Ok. «, «Timer finito») senza chiamate cloud e latenza. Una risposta di oltre 400 caratteri è ridotta all'ultima frase e `<speak>...</speak>` è ora parlato come vero SSML da Azure e Polly\nAggiunto un secondo motore vocale opzionale per direzione: se il provider configurato fallisce (interruzione, chiave scaduta, quota vuota), torna a un altro: con Vosk/Piper dietro un provider cloud la casa continua a funzionare senza internet\nAggiunte due impostazioni opzionali per i comandi: conferma con un breve bip anziché con una frase e verifica la conferma del dispositivo\nLe misure di un satellite ESPhome (temperatura, presenza, testi di stato) ora appaiono in sola lettura in «satelliti». <id>.comandi. *`\nGli annunci possono essere rivolti a un gruppo di stanze o a una persona: nomina un set di satelliti nella nuova tabella «Obiettivi degli annunci» e usali ovunque sia accettato (notify, AskUser). L'LLM ha anche uno strumento di «annuncio», quindi «dica a Denis che la cena è pronta» arriva ai relatori. Una domanda a un gruppo conta la prima risposta e il testo è sintetizzato una volta\nL'assistente ora può sapere chi è a casa: punta la nuova tabella «Presenza» sugli stati che ha già (scheda residenti, ping telefonico, bandiera) e nomina la persona. Indica all'LLM chi è nei paraggi, trattiene gli annunci di una casa vuota su richiesta (`notifica` con `OnlyWhenHome`) ed espone `presence.anyoneHome`/`presence.list`/`presence.lastArrival` — quindi salutare qualcuno all'arrivo è solo un innesco\nLe notifiche di sistema ora possono essere vocali: scrivi a notify.text`/`notify.alert`, chiama `sendTo ('assistant.0', 'notify', {text, severità}) `o scegli l'assistente nel gestore notifiche IOBroker. L'LLM trasforma il testo grezzo in una frase naturale il cui tono segue la severità (`info`/`notify`/`alert`, più «diretto» per dirlo alla lettera)\nAggiunto Do-Not-Disturb, applicato dall'adattatore per ogni trasporto: `dnd` globale e `satelliti. <id>.dnd` per satellite. Gli annunci vengono eliminati finché è attivo; avvisi e SMS che iniziano con `! `si gioca ancora e le risposte alle sue domande restano invariate\nAggiunti trigger proattivi (nuova scheda «Trigger»): un trigger controlla gli stati o l'orologio e poi annuncia qualcosa, scrive uno stato o le fa una domanda e agisce in base alla sua risposta («La friggitrice è accesa da 5 ore. Devo spegnerlo?» — l'LLM classifica la risposta orale in base alle regole configurate). Supporta condizioni alternative, raffinamenti «anche\"/\"a meno», un ritardo con `CancelWhen` e un cooldown; ogni trigger ha `triggers.items. <id>. {enabled, fire, lastFired, nextFireAt} `più un master switch `triggers.enabled`\nL'assistente può ora fare una domanda e attendere la risposta: `SendTo ('assistant.0', 'askUser', {question, room}) `la parla su un satellite, riapre il microfono e restituisce ciò che è stato detto. Quando una domanda è aperta, viene inviata al chiamante e non letta come nuovo comando\nAggiunto un quarto trasporto vocale: satelliti vocali ESPhome (ThirdReality Voice & Music Assistant, Home Assistant Voice PE, linux). L'adattatore chiama i dispositivi su TCP 6053, rileva da solo la fine del discorso e invia una risposta su un piccolo server HTTP",
27
+ "es": "Use el primer modelo si no\nSolo se puede ejecutar con un LLM local\nRutinas añadidas: una frase («buenas noches») lista de acciones y responde una vez. Coincidió antes del motor de reglas offline y antes del LLM, por lo que una macro que escribió nunca se reinterpreta\nEl motor de reglas offline ahora responde a las preguntas sobre un tipo de medición sin el nombre del dispositivo: «cómo está el aire aquí», «qué calor hace en todas partes», «qué brillo tiene» todos los sensores de ese tipo responden con una palabra para el número de calidad del aire\nEl texto hablado está en caché en el disco, así que repite («Vale. «, «Cronómetro acabado») sin llamadas a la nube ni latencia. <speak>Una respuesta de más de 400 caracteres está cortada en la última frase que cabe, y Azure y Polly hablan ahora como SSML real</speak>\nSe ha añadido un segundo motor de voz opcional por dirección: si el proveedor configurado falla (interrupción, clave caducada, cuota vacía), voz a texto y texto a voz recurre a otro: con Vosk/Piper detrás de un proveedor de nube, la casa sigue funcionando sin Internet\nSe han añadido dos ajustes opcionales para los comandos del conmutador: confirmar con un pitido corto en lugar de una frase pronunciada y comprobar el acuse de recibo del dispositivo antes de informar del éxito\nLas propias medidas de un satélite ESPhome (temperatura, presencia, textos de estado) aparecen ahora como estados de solo lectura en «satélites». <id>.controles *`\nLos anuncios pueden dirigirse a un grupo de habitaciones o a una persona: nombre un conjunto de satélites en la nueva tabla de «objetivos de anuncios» y utilícelo donde se acepte un objetivo (`notificar`, `preguntar`, sala de activación, estado `tts` por satélite). El LLM también tiene una herramienta de «anunciar» para que sus ponentes digan a Denis que la cena está lista. Los nombres configurados forman parte de la descripción. Una pregunta a un grupo cuenta la primera respuesta y el texto se sintetiza una vez para todo el grupo\nEl asistente ya sabe quién está en casa: señale la nueva tabla de «Presencia» a los estados que ya tiene (el adaptador de residencia, un ping telefónico, su bandera) y nombre a la persona. Le dice al LLM quién está cerca, retiene los anuncios de una casa vacía a petición (`notificar` con `OnlyWhenHome`) y expone `Presence.AnyoneHome`/`presence.list`/`Presence.LastArrival`, por lo que saludar a alguien al llegar es solo un detonante en ese estado\nLas notificaciones del sistema ahora pueden ser habladas: escriba a `notify.text`/`notify.alert`, llame a `sendTo ('assistant.0', 'notify', {text, severity}) `o elija el asistente del gestor de notificaciones de IOBroker. El LLM convierte el texto sin procesar en una oración natural cuyo tono sigue la gravedad (`info`/`notificar`/`alert`, más «directo» para decirlo textualmente)\nSe añadió el modo No molestar, impuesto por el adaptador para cada transporte: «dnd» global y «satélites». <id>.dnd` por satélite. Los anuncios se suprimen mientras está encendido; alertas y textos que comienzan por `! `siguen jugando y las respuestas a sus preguntas nunca se ven afectadas\nSe han añadido activadores proactivos (nueva pestaña «Activadores»): un disparador observa los estados o el reloj y anuncia algo, escribe un estado o le hace una pregunta y actúa en función de su respuesta («La freidora lleva 5 horas encendida. ¿Lo voy a apagar?» — el LLM clasifica la respuesta oral según las reglas de respuesta configuradas). Admite condiciones alternativas, «también» o «a menos que» se refinen, un retraso con «CancelWhen» y un tiempo de reutilización; cada disparador tiene «activadores. <id>. {enabled, fire, lastFired, nextFireAt} `estados más un conmutador maestro `triggers.enabled`\nEl asistente ahora puede hacer una pregunta y esperar la respuesta: `sendTo ('assistant.0', 'askUser', {question, room}) `lo pronuncia por satélite, vuelve a abrir el micrófono sin avisar y devuelve lo que ha dicho. Mientras hay una pregunta abierta, la respuesta se envía a la persona que llama y no se lee como un comando nuevo\nHa añadido un cuarto transporte de voz: satélites de voz ESPhome (Third Reality Voice & Music Assistant, Home Assistant Voice PE, Linux Voice Assistant). El adaptador marca los dispositivos en el TCP 6053, detecta el final de la voz y la envía a través de un pequeño servidor multimedia HTTP",
28
+ "pl": "Użyj pierwszego modelu, jeśli nie jest ustawiony\nDozwolone uruchamianie tylko z lokalnym LLM\nDodano procedury: fraza („dobranoc”) wyświetla listę działań i odpowiedzi raz. Dopasowane przed silnikiem reguł offline i przed LLM, więc zapisane makro nigdy nie jest reinterpretowane\nSilnik reguł offline odpowiada teraz na pytania dotyczące pewnego rodzaju pomiaru bez nazwy urządzenia: „jak jest tu powietrze”, „jak jest wszędzie ciepło”, „jak jasne jest” odpowiadają z każdego tego rodzaju czujnika, ze słowem oznaczającym numer jakości powietrza\nTekst mówiony jest buforowany na dysku, więc powtarzane odpowiedzi („OK. „, „Timer zakończony”) nie kosztuje połączenia w chmurze i brak opóźnień. Odpowiedź przekraczająca 400 znaków jest wycinana w ostatnim zdaniu, które pasuje, a „<speak>...</speak>” jest teraz wypowiadane jako prawdziwy SSML przez Azure i Polly\nDodano opcjonalny silnik drugiej mowy w zależności od kierunku: jeśli skonfigurowany dostawca ulegnie awarii (awaria, wygasły klucz, pusty limit), mowa na tekst i tekst na mowę wrócą do innego - z Vosk/Piper za dostawcą chmury dom nadal pracuje bez Internetu\nDodano dwa opcjonalne ustawienia poleceń przełączania: potwierdź krótkim sygnałem dźwiękowym zamiast wypowiedzianego zdania i sprawdź potwierdzenie urządzenia przed zgłoszeniem sukcesu\nWłasne pomiary satelity ESPhome (temperatura, obecność, teksty stanu) pojawiają się teraz jako stany tylko do odczytu w `satelitach. <id>.sterowanie. *`\nOgłoszenia mogą dotyczyć grupy pomieszczeń lub osoby: wymień zestaw satelitów w nowej tabeli „Cele ogłoszenia” i użyj go wszędzie tam, gdzie cel jest akceptowany („powiadomienie”, „Askuser”, pomieszczenie wyzwalacza, stan „tts” na satelitę). LLM dostał również narzędzie „ogłoszenia”, więc „powiedz Denisowi, że obiad jest gotowy” dociera do jego mówców - skonfigurowane nazwy są częścią opisu narzędzia. Pytanie zadane grupie liczy pierwszą odpowiedź, a tekst jest syntetyzowany raz dla całej grupy\nAsystent może teraz wiedzieć, kto jest w domu: skieruj nową tabelę „Obecność” na stany, które już masz (adapter mieszkańców, ping telefonu, własną flagę) i nazwij osobę. Mówi LLM, kto jest w pobliżu, wstrzymuje ogłoszenia do pustego domu na żądanie („powiadomić” z `OnlyWhenHome`) i ujawnia `Presence.AnyoneHome`/`Presence.List`/`Presence.LastarRival` - więc powitanie kogoś po przyjeździe jest tylko wyzwalaczem tego stanu\nPowiadomienia systemowe mogą być teraz wypowiadane: napisz do `notify.text`/`notify.alert`, zadzwoń do `sendTo ('assistant.0', 'notification', {text, severity}) `lub wybierz asystenta w menedżerze powiadomień ioBroker. LLM zamienia surowy tekst w jedno zdanie naturalne, którego ton jest zgodny z surowością (`info`/`notify`/`alert`, plus `bezpośredni`, aby wypowiedzieć to dosłownie)\nDodano Do-Not-Disturb, wymuszone przez adapter dla każdego transportu: `dnd` globalnie i `satelitów. <id>.dnd` na satelitę. Ogłoszenia są wyłączane, gdy są włączone; alerty i teksty zaczynające się od `! `nadal są odtwarzane, a odpowiedzi na własne pytania nigdy nie są dotknięte\nDodano proaktywne wyzwalacze (nowa zakładka „Wyzwalacze”): wyzwalacz obserwuje stany lub zegar, a następnie ogłasza coś, zapisuje stan lub zadaje pytanie i działa zgodnie z Twoją odpowiedzią („Frytkownica jest włączona przez 5 godzin. Mam to wyłączyć?” — LLM klasyfikuje odpowiedź mówioną do skonfigurowanych reguł odpowiedzi). Obsługuje alternatywne warunki, udoskonalenia `also`/`unless`, opóźnienie z `CancelWhen „i czas odnowienia; każdy wyzwalacz ma `triggers.items. <id>. Stan {enabled, fire, lastFired, nextFireAt} `plus przełącznik główny `triggers.enabled`\nAsystent może teraz zadać pytanie i czekać na odpowiedź: `sendTo ('assistant.0', 'askUser', {question, room}) 'wypowiada je na satelicie, ponownie otwiera mikrofon bez słowa budzącego i zwraca to, co zostało powiedziane. Podczas gdy pytanie jest otwarte, odpowiedź jest kierowana do dzwoniącego zamiast być odczytywana jako nowe polecenie\nDodano czwarty transport głosowy: satelity głosowe ESPhome (ThirdReality Voice & Music Assistant, Home Assistant Voice PE, Linux-Voice-Assistant). Adapter wybierze urządzenia w TCP 6053, sam wykrywa koniec mowy i obsługuje odpowiedź mówioną na małym serwerze multimedialnym HTTP",
29
+ "uk": "Використовуйте першу модель, якщо не встановлено\nДозволено працювати тільки з локальним LLM\nДодані процедури: фраза («на добраніч») запускає список дій і відповідей один раз. Відповідає перед механізмом правил офлайн та перед LLM, тому записаний вами макрос ніколи не переосмислюється\nОфлайн-механізм правил тепер відповідає на запитання щодо свого роду вимірювання без назви пристрою: «як повітря тут», «як тепло скрізь», «наскільки яскраво» відповідають кожен датчик такого роду зі словом для числа якості повітря\nРозмовний текст кешується на диску, тому повторюються відповіді («Гаразд. «, «Таймер закінчений») не коштує хмарного дзвінка та затримки. Відповідь понад 400 символів вирізана в останньому реченні, яке підходить, і `<speak>...</speak>` тепер називається справжнім SSML Azure та Polly\nДодано додатковий другий мовний механізм для кожного напрямку: якщо налаштований провайдер виходить з ладу (відключення, термін дії ключа закінчився, порожня квота), перехід мовлення до тексту та перетворення тексту в мову повертаються до іншого - з Vosk/Piper за хмарним провайдером, будинок продовжує працювати без Інтернету\nДодано два додаткові налаштування для команд перемикання: підтвердіть коротким звуковим сигналом замість вимовленого речення та перевірте підтвердження пристрою, перш ніж повідомити про успіх\nВласні вимірювання супутника ESPHome (температура, присутність, тексти статусу) тепер відображаються як стани лише для читання під `супутниками. <id>.елементи керування. *`\nОголошення можуть звертатися до групи кімнат або до людини: назвати набір супутників у новій таблиці «Цілі оголошення» і використовувати його в будь-якому місці, де приймається ціль (`notify`, `AskUser`, кімната тригера, стан `tts` для кожного супутника). LLM також отримав інструмент «анонсу», тому «повідомте Денису, що вечеря готова» доходить до його спікерів - налаштовані назви є частиною опису інструменту. Запитання, поставлене групі, враховує першу відповідь, і текст синтезується один раз для всієї групи\nТепер помічник може знати, хто вдома: наведіть нову таблицю «Присутність» на вже наявні у вас стани (адаптер мешканців, пінг телефону, власний прапор) та назвіть людину. Він повідомляє LLM, хто поруч, стримує оголошення до порожнього будинку за запитом (`повідомляти` з `onlyWhenHome`) і викриває `Presence.anyoneHome`/`presence.list`/`Presence.LastArrival` - тому вітання когось після прибуття є лише тригером цього стану\nСистемні сповіщення тепер можна вимовляти: пишіть на `notify.text`/`notify.alert`, викликайте `SendTo ('assistant.0', 'notice', {text, severity}) `або виберіть помічника в диспетчері сповіщень IObroker. LLM перетворює необроблений текст в одне природне речення, тон якого відповідає суворості (`info`/`notify`/`alert`, плюс `direct`, щоб висловити його дослівно)\nДодано Do-Not-Disturb, що застосовується адаптером для кожного транспорту: `dnd` глобально та `супутники. <id>.dnd` на супутник. Оголошення пригнічуються, поки він увімкнений; сповіщення та тексти починаються з `! `все ще відтворюються, і відповіді на ваші власні запитання ніколи не впливають\nДодані проактивні тригери (нова вкладка «Тригери»): тригер спостерігає за станами або годинником, а потім щось повідомляє, пише стан або задає вам запитання та діє відповідно до вашої відповіді («Фритюрниця увімкнена протягом 5 годин. Чи варто вимкнути його?» — LLM класифікує розмовну відповідь відповідно до налаштованих правил відповіді). Підтримує альтернативні умови, «також`/`unless` уточнення, затримку з `cancelWhen` та зарядку; кожен тригер має `triggers.items. <id>. Стани {enabled, fire, lastFired, nextFireAt} `плюс головний перемикач `triggers.enabled`\nТепер помічник може задати питання і чекати відповіді: `sendTo ('assistant.0', 'askUser', {query, room}) `розмовляє його на супутнику, знову відкриває мікрофон без пробудження і повертає сказане. Поки питання відкрите, відповідь направляється на абонента замість того, щоб читатися як нова команда\nДодано четвертий голосовий транспорт: голосові супутники ESPHome (голосовий та музичний помічник ThirdReality, домашній помічник голосовий PE, голосовий помічник Linux). Адаптер набирає пристрої на TCP 6053, сам виявляє кінець мови і подає розмовну відповідь через невеликий медіа-сервер HTTP",
30
+ "zh-cn": "如果未设置,则使用第一个模型\n仅允许使用本地 LLM 运行\n添加了例程:一个短语(“晚安”)会运行一次操作和答案列表。在离线规则引擎之前和 LLM 之前匹配,因此您写下的宏永远不会被重新解释\n离线规则引擎现在可以回答有关一种测量的问题,无需为设备命名:“这里的空气怎么样”、“到处都有多温暖”、“有多亮”,每个此类传感器都会回答,并用一个词来表示空气质量数字\n口头文字缓存在磁盘上,因此重复回复(“好吧。“,“计时器已完成”)无需花费云通话,也没有延迟。在最后一句话中删掉了超过 400 个字符的答案,Azure 和 Polly 现在将 “<speak>...</speak>” 说成了真正的 SSML\n为每个方向添加了可选的第二个语音引擎:如果配置的提供商出现故障(中断、密钥过期、配额为空),语音转文本和文字转语音将退回到另一个语音引擎——Vosk/Piper 在云提供商后面,则公司在没有互联网的情况下继续工作\n为交换机命令添加了两个可选设置:用短蜂鸣声而不是口头句子进行确认,并在报告成功之前验证设备的确认\n现在,ESPhome卫星自己的测量结果(温度、存在状态、状态文本)在 “卫星” 下显示为只读状态。<id>. 控件。*`\n公告可以针对一组房间或一个人:在新的 “公告目标” 表中命名一组卫星,并在接受目标的任何地方使用它(`notify`、`askUser`、触发器房间、每颗卫星的`ts`状态)。LLM 还有一个 “公告” 工具,所以 “告诉丹尼斯晚餐准备好了” 会传到他的演讲者手中——配置的名称是工具描述的一部分。向小组提出的问题算作第一个答案,整个小组的文本只合成一次\n助手现在可以知道谁在家:将新的 “Presence” 表对准你已经拥有的州(居民适配器、电话 ping、你自己的旗帜),然后给这个人起名字。它告诉 LLM 谁在附近,应要求不向空房子发布公告(使用 `onlyWhenHome` 进行`通知'),并公开 `presence.anyoneHome`/`presence.list`/`presence.lastarRival` — 所以在某人抵达时问候只是该状态的触发因素\n现在可以说出系统通知了:写信给 `notify.text`/`notify.alert`,致电 `sendTo('assistant.0','通知',{文本,严重性})`,或者在 ioBroker 通知管理器中选择助手。LLM 将原始文本变成一句自然的句子,其语气遵循严重程度(`info`/`notify`/`alert`,再加上逐字说出的 “直接”)\n添加了 “请勿打扰”,由适配器在每次传输时强制执行:全局 “dnd” 和 “卫星”。<id>每颗卫星 .dnd`。公告开启时会被抑制;警报和以 `! 开头的短信`仍在播放,你自己的问题的答案永远不会受到影响\n增加了主动触发器(新的 “触发器” 选项卡):触发器监视状态或时钟,然后宣布某件事、写下状态或问你一个问题并根据你的答案采取行动(“炸锅已经开启了 5 个小时。我应该把它关掉吗?”— LLM 根据配置的响应规则对语音回复进行分类)。支持替代条件、“还有”/“除非” 改进、“CancelWhen” 延迟和冷却时间;每个触发器都有 “triggers.items”。<id>。{enabled、fire、lastFireAt、nextFireAT} `状态加上`trigers.enabled`主开关\n助手现在可以提问并等待答案:`sendTo ('assistant.0', 'askUser', {question, room}) `在卫星上说话,在没有叫醒词的情况下重新打开麦克风并返回所说的内容。当问题处于打开状态时,该答案将发送给调用者,而不是作为新命令读取\n添加了第四种语音传输:espHome 语音卫星(ThirdReality 语音和音乐助手、家庭助理语音 PE、linux-voice-assistant)。适配器通过 TCP 6053 拨打设备,自行检测语音结束,并通过小型 HTTP 媒体服务器提供语音回复"
31
+ },
6
32
  "0.1.6": {
7
33
  "en": "The offline rule engine now understands combined commands: \"switch the light on and set the blind to 30 %\", and one verb for several devices (\"switch the light and the lamp on\")\nFixed: \"50 percent\" was not recognised as a level in English\nThe selected weather adapter is now fed to the LLM as context (current conditions plus today/tomorrow), so weather questions are answered without an extra tool round-trip\nThe local LLM receives the weather context too, so it no longer invents a forecast\nDocumented the weather source selection in the user documentation",
8
34
  "de": "Die Offline-Regel-Engine versteht nun kombinierte Befehle: \"Schalte das Licht ein und stelle die Jalousie auf 30 %\", sowie ein Verb für mehrere Geräte (Schalte das Licht und die Lampe ein).\nBehoben: „50 Prozent“ wurde im Englischen nicht als Niveau anerkannt.\nDer ausgewählte Wetteradapter wird nun als Kontext (aktuelle Bedingungen plus heutige/morgen) an das LLM übermittelt, sodass Wetterfragen ohne zusätzlichen Tool-Rundlauf beantwortet werden.\nDas lokale LLM erhält ebenfalls die Wetterkontextinformationen, sodass es keine Vorhersage mehr erstellt.\nDie Auswahl der Wetterdatenquelle wurde in der Benutzerdokumentation dokumentiert.",
@@ -80,7 +106,6 @@
80
106
  "anthropic"
81
107
  ],
82
108
  "platform": "Javascript/Node.js",
83
- "main": "build/main.js",
84
109
  "icon": "assistant.svg",
85
110
  "enabled": true,
86
111
  "extIcon": "https://raw.githubusercontent.com/ioBroker/ioBroker.assistant/main/admin/assistant.svg",
@@ -116,7 +141,12 @@
116
141
  "tar"
117
142
  ]
118
143
  },
119
- "messagebox": true
144
+ "messagebox": true,
145
+ "declareUsedResources": true,
146
+ "supportedMessages": {
147
+ "custom": true,
148
+ "notifications": true
149
+ }
120
150
  },
121
151
  "native": {
122
152
  "provider": "openai",
@@ -137,10 +167,18 @@
137
167
  "deviceAcl": {},
138
168
  "systemPrompt": "Du bist ein Sprach-Assistent für ioBroker. Deine Antworten werden vorgelesen: schreibe reinen Fließtext, KEIN Markdown, keine Sternchen, keine Aufzählungen, keine Emojis, und fasse dich kurz. Beantworte Fragen über Geräte, Räume und Sensoren ausschließlich mit den verfügbaren Tools. Rufe immer zuerst ein Tool auf, bevor du etwas über ioBroker sagst, und behaupte nie, dass etwas nicht existiert, ohne es per Tool geprüft zu haben. Erfinde keine Werte.",
139
169
  "useLocalNlu": true,
170
+ "routines": [],
171
+ "confirmWithTone": false,
172
+ "verifyWrites": false,
140
173
  "nluAliases": [],
141
174
  "useConversationContext": true,
142
175
  "useLongTermMemory": true,
176
+ "triggers": [],
177
+ "triggerRephrase": false,
178
+ "notifyRephrase": true,
143
179
  "weatherInstance": "",
180
+ "presence": [],
181
+ "announceTargets": [],
144
182
  "timerAnnounce": true,
145
183
  "alarmAnnounce": true,
146
184
  "timerSound": "sounds/timer.wav",
@@ -154,6 +192,11 @@
154
192
  "bind": "0.0.0.0",
155
193
  "wyomingEnabled": false,
156
194
  "wyomingPort": 10700,
195
+ "esphomeEnabled": false,
196
+ "esphomeDevices": [],
197
+ "esphomeMediaPort": 8099,
198
+ "esphomeMediaHost": "",
199
+ "esphomeSilenceMs": 900,
157
200
  "voiceLanguage": "",
158
201
  "voiceApiKey": "",
159
202
  "ttsVoice": "alloy",
@@ -161,6 +204,8 @@
161
204
  "ttsModel": "",
162
205
  "sttProvider": "openai",
163
206
  "ttsProvider": "openai",
207
+ "sttFallback": "",
208
+ "ttsFallback": "",
164
209
  "azureSpeechKey": "",
165
210
  "azureSpeechRegion": "",
166
211
  "azureVoice": "",
@@ -502,6 +547,199 @@
502
547
  },
503
548
  "native": {}
504
549
  },
550
+ {
551
+ "_id": "triggers",
552
+ "type": "channel",
553
+ "common": {
554
+ "name": "Proactive triggers"
555
+ },
556
+ "native": {}
557
+ },
558
+ {
559
+ "_id": "triggers.count",
560
+ "type": "state",
561
+ "common": {
562
+ "name": "Number of loaded triggers",
563
+ "type": "number",
564
+ "role": "value",
565
+ "read": true,
566
+ "write": false,
567
+ "def": 0
568
+ },
569
+ "native": {}
570
+ },
571
+ {
572
+ "_id": "triggers.list",
573
+ "type": "state",
574
+ "common": {
575
+ "name": "Triggers with their live status (JSON)",
576
+ "type": "string",
577
+ "role": "json",
578
+ "read": true,
579
+ "write": false,
580
+ "def": "[]"
581
+ },
582
+ "native": {}
583
+ },
584
+ {
585
+ "_id": "triggers.lastFired",
586
+ "type": "state",
587
+ "common": {
588
+ "name": "Trigger that fired last",
589
+ "type": "string",
590
+ "role": "text",
591
+ "read": true,
592
+ "write": false,
593
+ "def": ""
594
+ },
595
+ "native": {}
596
+ },
597
+ {
598
+ "_id": "triggers.enabled",
599
+ "type": "state",
600
+ "common": {
601
+ "name": "Master switch for all triggers",
602
+ "type": "boolean",
603
+ "role": "switch.enable",
604
+ "read": true,
605
+ "write": true,
606
+ "def": true
607
+ },
608
+ "native": {}
609
+ },
610
+ {
611
+ "_id": "presence",
612
+ "type": "channel",
613
+ "common": {
614
+ "name": "Who is at home"
615
+ },
616
+ "native": {}
617
+ },
618
+ {
619
+ "_id": "presence.anyoneHome",
620
+ "type": "state",
621
+ "common": {
622
+ "name": "Somebody is at home (pets do not count)",
623
+ "type": "boolean",
624
+ "role": "indicator",
625
+ "read": true,
626
+ "write": false,
627
+ "def": false
628
+ },
629
+ "native": {}
630
+ },
631
+ {
632
+ "_id": "presence.count",
633
+ "type": "state",
634
+ "common": {
635
+ "name": "How many people are at home",
636
+ "type": "number",
637
+ "role": "value",
638
+ "read": true,
639
+ "write": false,
640
+ "def": 0
641
+ },
642
+ "native": {}
643
+ },
644
+ {
645
+ "_id": "presence.list",
646
+ "type": "state",
647
+ "common": {
648
+ "name": "Presence per person (JSON)",
649
+ "type": "string",
650
+ "role": "json",
651
+ "read": true,
652
+ "write": false,
653
+ "def": "[]"
654
+ },
655
+ "native": {}
656
+ },
657
+ {
658
+ "_id": "presence.lastArrival",
659
+ "type": "state",
660
+ "common": {
661
+ "name": "Who came home last",
662
+ "type": "string",
663
+ "role": "text",
664
+ "read": true,
665
+ "write": false,
666
+ "def": ""
667
+ },
668
+ "native": {}
669
+ },
670
+ {
671
+ "_id": "presence.lastDeparture",
672
+ "type": "state",
673
+ "common": {
674
+ "name": "Who left last",
675
+ "type": "string",
676
+ "role": "text",
677
+ "read": true,
678
+ "write": false,
679
+ "def": ""
680
+ },
681
+ "native": {}
682
+ },
683
+ {
684
+ "_id": "notify",
685
+ "type": "channel",
686
+ "common": {
687
+ "name": "Spoken system notifications"
688
+ },
689
+ "native": {}
690
+ },
691
+ {
692
+ "_id": "notify.text",
693
+ "type": "state",
694
+ "common": {
695
+ "name": "Speak a system notification (normal priority)",
696
+ "type": "string",
697
+ "role": "text",
698
+ "read": true,
699
+ "write": true,
700
+ "def": ""
701
+ },
702
+ "native": {}
703
+ },
704
+ {
705
+ "_id": "notify.alert",
706
+ "type": "state",
707
+ "common": {
708
+ "name": "Speak an urgent notification (ignores Do-Not-Disturb)",
709
+ "type": "string",
710
+ "role": "text",
711
+ "read": true,
712
+ "write": true,
713
+ "def": ""
714
+ },
715
+ "native": {}
716
+ },
717
+ {
718
+ "_id": "notify.last",
719
+ "type": "state",
720
+ "common": {
721
+ "name": "Last notification as it was spoken",
722
+ "type": "string",
723
+ "role": "text",
724
+ "read": true,
725
+ "write": false,
726
+ "def": ""
727
+ },
728
+ "native": {}
729
+ },
730
+ {
731
+ "_id": "dnd",
732
+ "type": "state",
733
+ "common": {
734
+ "name": "Do-Not-Disturb: suppress announcements on all satellites (alerts still play)",
735
+ "type": "boolean",
736
+ "role": "switch.mode.silent",
737
+ "read": true,
738
+ "write": true,
739
+ "def": false
740
+ },
741
+ "native": {}
742
+ },
505
743
  {
506
744
  "_id": "ringing",
507
745
  "type": "state",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.assistant",
3
- "version": "0.1.6",
3
+ "version": "1.0.2",
4
4
  "description": "LLM assistant for ioBroker — ask about and control any state via an LLM with tool-calling",
5
5
  "author": "ioBroker",
6
6
  "license": "MIT",
@@ -14,26 +14,27 @@
14
14
  ],
15
15
  "main": "build/main.js",
16
16
  "engines": {
17
- "node": ">=22"
17
+ "node": ">=22.19.0"
18
18
  },
19
19
  "dependencies": {
20
- "@anthropic-ai/sdk": "^0.120.0",
21
- "@aws-sdk/client-polly": "^3.1118.0",
22
- "@aws-sdk/client-transcribe-streaming": "^3.1118.0",
20
+ "@2colors/esphome-native-api": "^1.3.6",
21
+ "@anthropic-ai/sdk": "^0.133.0",
22
+ "@aws-sdk/client-polly": "^3.1151.0",
23
+ "@aws-sdk/client-transcribe-streaming": "^3.1151.0",
23
24
  "@iobroker/adapter-core": "^3.4.3",
24
- "@iobroker/mcp-server": "^1.0.1",
25
- "microsoft-cognitiveservices-speech-sdk": "^1.51.0",
26
- "openai": "^7.5.0"
25
+ "@iobroker/mcp-server": "^1.1.3",
26
+ "microsoft-cognitiveservices-speech-sdk": "^1.52.0",
27
+ "openai": "^7.33.0"
27
28
  },
28
29
  "devDependencies": {
29
30
  "@alcalzone/release-script": "^5.2.1",
30
31
  "@alcalzone/release-script-plugin-iobroker": "^5.2.0",
31
32
  "@alcalzone/release-script-plugin-license": "^5.2.2",
32
- "@iobroker/build-tools": "^3.0.1",
33
+ "@iobroker/build-tools": "^3.0.3",
33
34
  "@iobroker/eslint-config": "^2.3.4",
34
- "@iobroker/testing": "^5.3.0",
35
- "@types/node": "^22.20.1",
36
- "typescript": "^6.0.3"
35
+ "@iobroker/testing": "^6.3.1",
36
+ "@types/node": "^22.20.5",
37
+ "typescript": "~6.0.3"
37
38
  },
38
39
  "scripts": {
39
40
  "test:integration": "tsc -p tsconfig.build.json && node --test \"test/integration/*.test.js\"",