iobroker.alias-workbench 0.9.8 → 0.9.9

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.
package/io-package.json CHANGED
@@ -1,33 +1,46 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "alias-workbench",
4
- "version": "0.9.8",
4
+ "version": "0.9.9",
5
5
  "news": {
6
+ "0.9.9": {
7
+ "en": "* The build source moved from `src/` to `src-admin/`. ioBroker reserves that name for frontend sources that are bundled into `admin/` and never reach the user, and the adapter checker skips such directories when it looks for missing dependencies. `@iobroker/type-detector` therefore stays in `devDependencies`, which is where it belongs: esbuild bakes it into `admin/detector.js` at build time and nothing loads it at runtime. Users receive the finished 71 KB file, not the 548 KB package (W5042)\n* The settings page now takes its translations from `admin/i18n/` — the dictionary ioBroker reads itself (`\"i18n\": true`) and that Weblate can work with. The eleven languages it already carried moved there unchanged; not a word was retranslated. The tab keeps its own dictionary, now at `admin/sprachen/`: 588 keys in German and English, with an unknown language falling back to English. Two dictionaries, two jobs — the name `i18n` is the one the adapter checker inspects, and it expects all eleven languages there (W5603, W5614, W5015)\n* The changelog entries for 0.9.7 and 0.9.8 are now complete in all eleven languages. Nine of them carried only a short summary — the English text for 0.9.7 ran to 3,000 characters with five headings and 22 items, the Russian one to 480 without any structure. A test now checks every entry for length, headings and item count against the English original (W1145)\n* Two developer-side additions, invisible in the adapter itself: `.vscode/settings.json` wires up the JSON schemas, so mistakes in `io-package.json` or `jsonConfig.json` show up while typing instead of in the adapter checker (S4036). And the GitHub Actions updates no longer run `monthly` — that would ask on the first of every month, at the same moment as everyone else; a cron schedule spreads the load while keeping the monthly rhythm (S8906)\n* The data type now follows the role. A pattern slot prescribes not only the role but also the type, and both sit in the same type-detector record — so picking a role sets the matching type as well. Where a slot allows several types nothing is set, and where it prescribes none any choice stays right. If the type does not fit the slot after all, the workbench says so instead of staying quiet: in the row (\"expects number\"), as a warning underneath, and in the pattern field, which now gives the reason — \"✕ CONSUMPTION: type mixed instead of number\" — rather than a bare \"does not fit\". Before, a state with the right role and the wrong type dropped out of the pattern silently, and the whole device was recognised as something lesser Where a role matches several slots that differ in type — the blind's travel direction sits on DIRECTION as a boolean and on DIRECTION_ENUM as a number — the workbench picks the slot whose type fits, and both forms count as right.\n* Saving a template no longer loses the write targets. Every actuator that keeps its own state writes to the same point it reads - a blind, a dimmer and a thermostat all use 1.LEVEL for both. Saving dropped the write path in exactly that case, and the resulting alias showed the position but could no longer be moved. Rows that only write, like the blind's STOP, disappeared altogether. With Tasmota it never showed, because there tele.STATE is read and cmnd.POWER is written. The device type in the template sheet was affected by a second slip: three patterns are named differently from their type (blinds/blind, mediaPlayer/media, levelSlider/slider), so a blind always claimed to have no type at all",
8
+ "de": "* Die Bauvorlage liegt jetzt in `src-admin/` statt in `src/`. Diesen Namen hat ioBroker für Frontend-Quellen vorgesehen, die nach `admin/` gebacken werden und beim Nutzer nie ankommen; der Adapterprüfer überspringt solche Ordner bei der Suche nach fehlenden Abhängigkeiten. `@iobroker/type-detector` bleibt deshalb in `devDependencies`, und dort gehört er hin: esbuild backt ihn beim Bauen in `admin/detector.js` ein, zur Laufzeit lädt ihn niemand. Ausgeliefert werden die fertigen 71 KB, nicht das 548-KB-Paket (W5042)\n* Die Einstellungsseite nimmt ihre Übersetzungen jetzt aus `admin/i18n/` — dem Wörterbuch, das ioBroker selbst liest (`\"i18n\": true`) und mit dem Weblate arbeiten kann. Die elf Sprachen, die sie ohnehin schon trug, sind unverändert dorthin umgezogen; kein Wort wurde neu übersetzt. Der Reiter behält sein eigenes Wörterbuch, jetzt unter `admin/sprachen/`: 588 Schlüssel auf Deutsch und Englisch, eine unbekannte Sprache fällt auf Englisch zurück. Zwei Wörterbücher, zwei Aufgaben — den Namen `i18n` sieht sich der Adapterprüfer an und erwartet dort alle elf Sprachen (W5603, W5614, W5015)\n* Die Changelog-Einträge zu 0.9.7 und 0.9.8 stehen jetzt vollständig in allen elf Sprachen. Neun davon trugen nur eine Kurzfassung — der englische Text zu 0.9.7 hat 3.000 Zeichen mit fünf Überschriften und 22 Punkten, der russische hatte 480 ohne jede Gliederung. Ein Test hält jeden Eintrag nun nach Länge, Überschriften und Punktzahl gegen das englische Original (W1145)\n* Zwei Zutaten für die Entwicklung, im Adapter selbst unsichtbar: `.vscode/settings.json` hängt die JSON-Schemata ein, sodass Fehler in `io-package.json` oder `jsonConfig.json` schon beim Tippen auffallen statt erst im Adapterprüfer (S4036). Und die Aktualisierung der GitHub Actions läuft nicht mehr `monthly` — das fragt am Monatsersten an, im selben Moment wie alle anderen; ein cron-Takt verteilt die Last und behält den monatlichen Rhythmus (S8906)\n* Der Datentyp folgt jetzt der Rolle. Ein Musterplatz gibt nicht nur die Rolle vor, sondern auch den Typ, und beides steht im selben Datensatz des type-detector — wer eine Rolle wählt, bekommt den passenden Typ also gleich mit. Wo ein Platz mehrere Typen zulässt, wird nichts gesetzt; wo er keinen vorgibt, bleibt jede Wahl richtig. Passt der Typ trotzdem nicht zum Platz, sagt es die Werkbank, statt zu schweigen: in der Zeile („erwartet number“), als Warnung darunter, und im Musterfeld, das jetzt den Grund nennt — „✕ CONSUMPTION: Typ mixed statt number“ — statt eines blanken „passt nicht“. Vorher fiel ein Punkt mit richtiger Rolle und falschem Typ lautlos aus dem Muster, und das ganze Gerät wurde als etwas Geringeres erkannt Trifft eine Rolle mehrere Plätze, die sich im Typ unterscheiden — die Fahrtrichtung des Rollladens sitzt als Wahrheitswert auf DIRECTION und als Zahl auf DIRECTION_ENUM —, wählt die Werkbank den Platz, dessen Typ passt, und beide Formen gelten als richtig.\n* Beim Speichern einer Vorlage gehen die Schreibziele nicht mehr verloren. Jeder Aktor, der seinen eigenen Zustand führt, schreibt auf denselben Punkt, den er liest — Rollladen, Dimmer und Thermostat benutzen dafür alle 1.LEVEL. Genau in diesem Fall warf das Speichern den Schreibweg weg, und der daraus gebaute Alias zeigte die Stellung an, liess sich aber nicht mehr verstellen. Zeilen, die nur schreiben — der STOP des Rollladens — fielen ganz heraus. Bei Tasmota fiel es nie auf, weil dort tele.STATE gelesen und cmnd.POWER geschrieben wird. Der Gerätetyp im Vorlagenblatt litt an einem zweiten Versehen: Drei Muster heissen anders als ihr Typ (blinds/blind, mediaPlayer/media, levelSlider/slider), und ein Rollladen behauptete deshalb, gar keinen Typ zu haben",
9
+ "ru": "* Исходники сборки перенесены из `src/` в `src-admin/`. ioBroker закрепил это имя за исходниками интерфейса, которые собираются в `admin/` и никогда не попадают к пользователю, а проверка адаптеров пропускает такие каталоги при поиске отсутствующих зависимостей. Поэтому `@iobroker/type-detector` остаётся в `devDependencies` — именно там ему и место: esbuild встраивает его в `admin/detector.js` при сборке, во время работы его никто не загружает. Пользователь получает готовый файл в 71 КБ, а не пакет в 548 КБ (W5042)\n* Страница настроек берёт переводы из `admin/i18n/` — словаря, который ioBroker читает сам (`\"i18n\": true`) и с которым умеет работать Weblate. Одиннадцать языков, которые она и так несла в себе, переехали туда без изменений: ни одно слово не переводилось заново. У вкладки остаётся свой словарь, теперь в `admin/sprachen/`: 588 ключей на немецком и английском, неизвестный язык откатывается к английскому. Два словаря — две задачи: имя `i18n` проверяет контролёр адаптеров и ждёт там все одиннадцать языков (W5603, W5614, W5015)\n* Записи списка изменений для 0.9.7 и 0.9.8 теперь полны на всех одиннадцати языках. У девяти из них была лишь краткая выжимка: английский текст к 0.9.7 занимает 3 000 знаков с пятью заголовками и 22 пунктами, русский — 480 знаков вовсе без структуры. Новый тест сверяет каждую запись с английским оригиналом по длине, заголовкам и числу пунктов (W1145)\n* Две мелочи для разработки, в самом адаптере невидимые: `.vscode/settings.json` подключает JSON-схемы, так что ошибки в `io-package.json` или `jsonConfig.json` видны уже при наборе, а не только в проверке адаптеров (S4036). А обновление GitHub Actions больше не идёт по `monthly` — это запрос первого числа месяца, одновременно со всеми остальными; расписание cron распределяет нагрузку и сохраняет месячный ритм (S8906)\n* Тип данных теперь следует за ролью. Место в шаблоне задаёт не только роль, но и тип, и оба хранятся в одной записи type-detector — выбирая роль, вы сразу получаете нужный тип. Там, где место допускает несколько типов, не ставится ничего; там, где не задаёт ни одного, любой выбор остаётся верным. Если тип всё же не подходит месту, верстак об этом говорит, а не молчит: в строке («ожидается number»), предупреждением под ней и в поле шаблона, которое теперь называет причину — «✕ CONSUMPTION: тип mixed вместо number» — вместо голого «не подходит». Раньше точка с верной ролью и неверным типом беззвучно выпадала из шаблона, и всё устройство распознавалось как нечто меньшее Если роль попадает на несколько мест, различающихся типом, — направление движения рольставни лежит на DIRECTION как логическое значение и на DIRECTION_ENUM как число, — верстак выбирает то место, чей тип подходит, и обе формы считаются верными.\n* При сохранении шаблона больше не теряются цели записи. Любой исполнитель, ведущий собственное состояние, пишет в ту же точку, которую читает: рольставня, диммер и термостат используют для этого один и тот же 1.LEVEL. Именно в этом случае сохранение выбрасывало путь записи, и построенный алиас показывал положение, но больше не поддавался управлению. Строки, которые только пишут, — STOP рольставни — выпадали целиком. На Tasmota это не проявлялось, так как там читается tele.STATE, а пишется cmnd.POWER. Тип устройства в листе шаблона страдал от второй оплошности: три шаблона называются иначе, чем их тип (blinds/blind, mediaPlayer/media, levelSlider/slider), и рольставня поэтому заявляла, что типа у неё нет вовсе",
10
+ "pt": "* A fonte de compilação passou de `src/` para `src-admin/`. O ioBroker reserva esse nome para fontes de interface que são empacotadas em `admin/` e nunca chegam ao utilizador, e o verificador de adaptadores ignora esses diretórios ao procurar dependências em falta. Por isso `@iobroker/type-detector` permanece em `devDependencies`, que é o seu lugar: o esbuild integra-o em `admin/detector.js` durante a compilação e nada o carrega em tempo de execução. O utilizador recebe o ficheiro pronto de 71 KB, não o pacote de 548 KB (W5042)\n* A página de definições passa a obter as traduções de `admin/i18n/` — o dicionário que o ioBroker lê por si (`\"i18n\": true`) e com o qual o Weblate consegue trabalhar. Os onze idiomas que já continha mudaram-se para lá sem alterações; nem uma palavra foi traduzida de novo. O separador mantém o seu próprio dicionário, agora em `admin/sprachen/`: 588 chaves em alemão e inglês, e um idioma desconhecido recai no inglês. Dois dicionários, duas funções — o nome `i18n` é o que o verificador de adaptadores inspeciona, e aí espera os onze idiomas (W5603, W5614, W5015)\n* As entradas do changelog para 0.9.7 e 0.9.8 estão agora completas nos onze idiomas. Nove delas traziam apenas um resumo curto — o texto inglês da 0.9.7 tem 3000 caracteres com cinco títulos e 22 pontos, o russo tinha 480 sem estrutura nenhuma. Um teste confronta agora cada entrada com o original inglês quanto a comprimento, títulos e número de pontos (W1145)\n* Dois acrescentos do lado do desenvolvimento, invisíveis no próprio adaptador: o `.vscode/settings.json` liga os esquemas JSON, para que erros em `io-package.json` ou `jsonConfig.json` saltem à vista ao escrever e não só no verificador de adaptadores (S4036). E a atualização das GitHub Actions já não corre `monthly` — isso pergunta no primeiro dia do mês, ao mesmo tempo que toda a gente; um horário cron distribui a carga e mantém o ritmo mensal (S8906)\n* O tipo de dados passa a seguir a função. Um lugar do padrão prescreve não só a função mas também o tipo, e ambos estão no mesmo registo do type-detector — ao escolher uma função recebe já o tipo correspondente. Onde um lugar admite vários tipos não se define nada; onde não prescreve nenhum, qualquer escolha continua certa. Se mesmo assim o tipo não servir ao lugar, a bancada di-lo em vez de se calar: na linha («espera number»), como aviso por baixo, e no campo do padrão, que agora indica o motivo — «✕ CONSUMPTION: tipo mixed em vez de number» — em lugar de um simples «não serve». Antes, um ponto com a função certa e o tipo errado caía do padrão em silêncio e o aparelho inteiro era reconhecido como algo menor Quando uma função acerta em vários lugares que diferem no tipo — o sentido de marcha do estore assenta em DIRECTION como booleano e em DIRECTION_ENUM como número —, a bancada escolhe o lugar cujo tipo serve, e ambas as formas valem como certas.\n* Ao guardar um modelo, os destinos de escrita já não se perdem. Todo o atuador que mantém o seu próprio estado escreve no mesmo ponto que lê — estore, dimmer e termóstato usam todos 1.LEVEL para isso. Era exatamente nesse caso que a gravação deitava fora o caminho de escrita, e o alias daí resultante mostrava a posição mas já não se deixava mover. As linhas que só escrevem — o STOP do estore — caíam por completo. Com o Tasmota nunca se notou, porque aí se lê tele.STATE e se escreve cmnd.POWER. O tipo de aparelho na folha do modelo sofria de um segundo lapso: três padrões têm nome diferente do seu tipo (blinds/blind, mediaPlayer/media, levelSlider/slider), pelo que um estore afirmava não ter tipo nenhum",
11
+ "nl": "* De bronbestanden voor de build staan nu in `src-admin/` in plaats van `src/`. ioBroker reserveert die naam voor frontend-bronnen die naar `admin/` worden gebundeld en de gebruiker nooit bereiken; de adaptercontrole slaat zulke mappen over bij het zoeken naar ontbrekende afhankelijkheden. `@iobroker/type-detector` blijft daarom in `devDependencies`, waar hij thuishoort: esbuild bakt hem tijdens de build in `admin/detector.js` en niets laadt hem tijdens runtime. Gebruikers krijgen het kant-en-klare bestand van 71 KB, niet het pakket van 548 KB (W5042)\n* De instellingenpagina haalt haar vertalingen nu uit `admin/i18n/` — het woordenboek dat ioBroker zelf leest (`\"i18n\": true`) en waarmee Weblate overweg kan. De elf talen die zij al bij zich droeg zijn daar ongewijzigd naartoe verhuisd; geen woord is opnieuw vertaald. Het tabblad houdt zijn eigen woordenboek, nu in `admin/sprachen/`: 588 sleutels in het Duits en Engels, een onbekende taal valt terug op Engels. Twee woordenboeken, twee taken — de naam `i18n` bekijkt de adaptercontrole, en daar verwacht zij alle elf talen (W5603, W5614, W5015)\n* De changelog-vermeldingen voor 0.9.7 en 0.9.8 zijn nu volledig in alle elf talen. Negen ervan droegen slechts een korte samenvatting — de Engelse tekst bij 0.9.7 telt 3.000 tekens met vijf kopjes en 22 punten, de Russische had er 480 zonder enige structuur. Een test houdt elke vermelding nu naar lengte, kopjes en aantal punten tegen het Engelse origineel (W1145)\n* Twee toevoegingen voor het ontwikkelen, in de adapter zelf onzichtbaar: `.vscode/settings.json` koppelt de JSON-schema's, zodat fouten in `io-package.json` of `jsonConfig.json` al tijdens het typen opvallen in plaats van pas in de adaptercontrole (S4036). En het bijwerken van de GitHub Actions loopt niet meer `monthly` — dat vraagt op de eerste van de maand, op hetzelfde moment als alle anderen; een cron-schema spreidt de last en houdt het maandelijkse ritme (S8906)\n* Het gegevenstype volgt nu de rol. Een patroonplaats schrijft niet alleen de rol voor maar ook het type, en beide staan in dezelfde record van de type-detector — wie een rol kiest, krijgt het passende type er meteen bij. Waar een plaats meerdere types toelaat wordt niets gezet; waar zij er geen voorschrijft blijft elke keuze goed. Past het type toch niet bij de plaats, dan zegt de werkbank het in plaats van te zwijgen: in de regel («verwacht number»), als waarschuwing eronder, en in het patroonveld, dat nu de reden noemt — «✕ CONSUMPTION: type mixed in plaats van number» — in plaats van een kaal «past niet». Voorheen viel een punt met de juiste rol en het verkeerde type geruisloos uit het patroon, en het hele apparaat werd als iets minders herkend Treft een rol meerdere plaatsen die in type verschillen — de rijrichting van het rolluik zit als booleaan op DIRECTION en als getal op DIRECTION_ENUM — dan kiest de werkbank de plaats waarvan het type past, en beide vormen gelden als juist.\n* Bij het opslaan van een sjabloon gaan de schrijfdoelen niet meer verloren. Elke actor die zijn eigen toestand bijhoudt, schrijft naar hetzelfde punt dat hij leest — rolluik, dimmer en thermostaat gebruiken daarvoor alle 1.LEVEL. Juist in dat geval gooide het opslaan het schrijfpad weg, en het daaruit gebouwde alias toonde de stand maar liet zich niet meer verzetten. Regels die alleen schrijven — de STOP van het rolluik — vielen helemaal weg. Bij Tasmota viel het nooit op, omdat daar tele.STATE wordt gelezen en cmnd.POWER geschreven. Het apparaattype in het sjabloonblad leed aan een tweede vergissing: drie patronen heten anders dan hun type (blinds/blind, mediaPlayer/media, levelSlider/slider), en een rolluik beweerde daardoor helemaal geen type te hebben",
12
+ "fr": "* Les sources de compilation passent de `src/` à `src-admin/`. ioBroker réserve ce nom aux sources d'interface qui sont intégrées dans `admin/` et n'arrivent jamais chez l'utilisateur, et le vérificateur d'adaptateurs ignore ces répertoires lorsqu'il cherche des dépendances manquantes. `@iobroker/type-detector` reste donc dans `devDependencies`, où il a sa place : esbuild l'intègre dans `admin/detector.js` lors de la compilation et rien ne le charge à l'exécution. L'utilisateur reçoit le fichier fini de 71 Ko, pas le paquet de 548 Ko (W5042)\n* La page de réglages tire désormais ses traductions de `admin/i18n/` — le dictionnaire que ioBroker lit lui-même (`\"i18n\": true`) et avec lequel Weblate sait travailler. Les onze langues qu'elle portait déjà y ont déménagé sans changement ; pas un mot n'a été retraduit. L'onglet garde son propre dictionnaire, maintenant dans `admin/sprachen/` : 588 clés en allemand et en anglais, une langue inconnue retombant sur l'anglais. Deux dictionnaires, deux rôles — c'est le nom `i18n` qu'examine le vérificateur d'adaptateurs, et il y attend les onze langues (W5603, W5614, W5015)\n* Les entrées du changelog pour 0.9.7 et 0.9.8 sont désormais complètes dans les onze langues. Neuf d'entre elles ne portaient qu'un résumé — le texte anglais de la 0.9.7 fait 3 000 caractères avec cinq intertitres et 22 points, le russe en comptait 480 sans aucune structure. Un test confronte maintenant chaque entrée à l'original anglais pour la longueur, les intertitres et le nombre de points (W1145)\n* Deux ajouts côté développement, invisibles dans l'adaptateur : `.vscode/settings.json` raccorde les schémas JSON, si bien que les erreurs dans `io-package.json` ou `jsonConfig.json` sautent aux yeux dès la frappe et non seulement chez le vérificateur d'adaptateurs (S4036). Et la mise à jour des GitHub Actions ne tourne plus en `monthly` — cela interroge le premier du mois, au même instant que tout le monde ; un calendrier cron répartit la charge tout en gardant le rythme mensuel (S8906)\n* Le type de données suit désormais le rôle. Une place du motif prescrit non seulement le rôle mais aussi le type, et les deux figurent dans le même enregistrement du type-detector : choisir un rôle installe donc le type correspondant. Là où une place admet plusieurs types, rien n'est posé ; là où elle n'en prescrit aucun, tout choix reste juste. Si le type ne convient malgré tout pas à la place, l'établi le dit au lieu de se taire : dans la ligne (« attend number »), en avertissement dessous, et dans le champ du motif, qui indique maintenant la raison — « ✕ CONSUMPTION : type mixed au lieu de number » — plutôt qu'un simple « ne convient pas ». Auparavant, un point au bon rôle et au mauvais type sortait du motif sans bruit, et l'appareil entier était reconnu comme quelque chose de moindre Lorsqu'un rôle touche plusieurs places qui diffèrent par le type — le sens de marche du volet occupe DIRECTION en booléen et DIRECTION_ENUM en nombre —, l'établi choisit la place dont le type convient, et les deux formes sont tenues pour justes.\n* L'enregistrement d'un modèle ne perd plus les cibles d'écriture. Tout actionneur qui tient son propre état écrit sur le même point qu'il lit : volet, variateur et thermostat utilisent tous 1.LEVEL pour cela. C'est précisément dans ce cas que l'enregistrement jetait le chemin d'écriture, et l'alias obtenu affichait la position sans plus pouvoir être déplacé. Les lignes qui n'écrivent que — le STOP du volet — disparaissaient entièrement. Avec Tasmota cela ne s'est jamais vu, car on y lit tele.STATE et on écrit cmnd.POWER. Le type d'appareil dans la fiche du modèle souffrait d'une seconde méprise : trois motifs portent un nom différent de leur type (blinds/blind, mediaPlayer/media, levelSlider/slider), et un volet prétendait donc n'avoir aucun type",
13
+ "it": "* I sorgenti di build sono passati da `src/` a `src-admin/`. ioBroker riserva questo nome ai sorgenti dell'interfaccia che vengono impacchettati in `admin/` e non raggiungono mai l'utente, e il controllo degli adapter salta queste cartelle quando cerca dipendenze mancanti. `@iobroker/type-detector` resta quindi in `devDependencies`, che è il suo posto: esbuild lo integra in `admin/detector.js` durante la build e nulla lo carica in esecuzione. L'utente riceve il file finito da 71 KB, non il pacchetto da 548 KB (W5042)\n* La pagina delle impostazioni prende ora le traduzioni da `admin/i18n/` — il dizionario che ioBroker legge da sé (`\"i18n\": true`) e con cui Weblate sa lavorare. Le undici lingue che già conteneva vi sono traslocate immutate: non una parola è stata ritradotta. La scheda mantiene il proprio dizionario, ora in `admin/sprachen/`: 588 chiavi in tedesco e inglese, e una lingua sconosciuta ripiega sull'inglese. Due dizionari, due compiti — è il nome `i18n` che il controllo degli adapter esamina, e lì si aspetta tutte e undici le lingue (W5603, W5614, W5015)\n* Le voci del changelog per 0.9.7 e 0.9.8 sono ora complete in tutte e undici le lingue. Nove di esse portavano solo una sintesi — il testo inglese della 0.9.7 conta 3.000 caratteri con cinque titoli e 22 punti, quello russo ne aveva 480 senza alcuna struttura. Un test confronta ora ogni voce con l'originale inglese per lunghezza, titoli e numero di punti (W1145)\n* Due aggiunte lato sviluppo, invisibili nell'adapter stesso: `.vscode/settings.json` aggancia gli schemi JSON, così gli errori in `io-package.json` o `jsonConfig.json` saltano fuori già mentre si scrive e non solo nel controllo degli adapter (S4036). E l'aggiornamento delle GitHub Actions non gira più su `monthly`: quello interroga il primo del mese, nello stesso momento di tutti gli altri; una pianificazione cron distribuisce il carico e mantiene il ritmo mensile (S8906)\n* Il tipo di dato ora segue il ruolo. Un posto del modello prescrive non solo il ruolo ma anche il tipo, ed entrambi stanno nello stesso record del type-detector: scegliendo un ruolo si ottiene subito il tipo corrispondente. Dove un posto ammette più tipi non viene impostato nulla; dove non ne prescrive alcuno, ogni scelta resta giusta. Se il tipo comunque non si adatta al posto, il banco di lavoro lo dice invece di tacere: nella riga («si attende number»), come avviso sotto di essa, e nel campo del modello, che ora indica il motivo — «✕ CONSUMPTION: tipo mixed anziché number» — anziché un secco «non si adatta». Prima un punto con il ruolo giusto e il tipo sbagliato usciva dal modello in silenzio, e l'intero dispositivo veniva riconosciuto come qualcosa di minore Quando un ruolo colpisce più posti che differiscono per tipo — il senso di marcia della tapparella sta su DIRECTION come booleano e su DIRECTION_ENUM come numero —, il banco di lavoro sceglie il posto il cui tipo si adatta, ed entrambe le forme valgono come giuste.\n* Salvando un modello non si perdono più le destinazioni di scrittura. Ogni attuatore che tiene il proprio stato scrive sullo stesso punto che legge: tapparella, dimmer e termostato usano tutti 1.LEVEL. Proprio in questo caso il salvataggio buttava via il percorso di scrittura, e l'alias che ne nasceva mostrava la posizione ma non si lasciava più muovere. Le righe che solo scrivono — lo STOP della tapparella — sparivano del tutto. Con Tasmota non si è mai notato, perché lì si legge tele.STATE e si scrive cmnd.POWER. Il tipo di dispositivo nella scheda del modello soffriva di una seconda svista: tre modelli hanno un nome diverso dal loro tipo (blinds/blind, mediaPlayer/media, levelSlider/slider), e una tapparella sosteneva quindi di non avere alcun tipo",
14
+ "es": "* Las fuentes de compilación pasan de `src/` a `src-admin/`. ioBroker reserva ese nombre para las fuentes de la interfaz que se empaquetan en `admin/` y nunca llegan al usuario, y el verificador de adaptadores omite esos directorios al buscar dependencias que falten. Por eso `@iobroker/type-detector` permanece en `devDependencies`, que es su sitio: esbuild lo integra en `admin/detector.js` durante la compilación y nada lo carga en tiempo de ejecución. El usuario recibe el archivo terminado de 71 KB, no el paquete de 548 KB (W5042)\n* La página de ajustes toma ahora sus traducciones de `admin/i18n/`: el diccionario que ioBroker lee por sí mismo (`\"i18n\": true`) y con el que Weblate puede trabajar. Los once idiomas que ya llevaba se han mudado allí sin cambios; no se ha vuelto a traducir ni una palabra. La pestaña conserva su propio diccionario, ahora en `admin/sprachen/`: 588 claves en alemán e inglés, y un idioma desconocido recae en el inglés. Dos diccionarios, dos cometidos: el nombre `i18n` es el que examina el verificador de adaptadores, y allí espera los once idiomas (W5603, W5614, W5015)\n* Las entradas del changelog para 0.9.7 y 0.9.8 están ahora completas en los once idiomas. Nueve de ellas llevaban solo un resumen: el texto inglés de la 0.9.7 tiene 3.000 caracteres con cinco encabezados y 22 puntos, el ruso tenía 480 sin estructura alguna. Una prueba contrasta ahora cada entrada con el original inglés en longitud, encabezados y número de puntos (W1145)\n* Dos añadidos del lado del desarrollo, invisibles en el propio adaptador: `.vscode/settings.json` engancha los esquemas JSON, de modo que los fallos en `io-package.json` o `jsonConfig.json` se ven ya al escribir y no solo en el verificador de adaptadores (S4036). Y la actualización de las GitHub Actions ya no corre en `monthly`: eso pregunta el día uno de cada mes, en el mismo instante que todos los demás; una programación cron reparte la carga y mantiene el ritmo mensual (S8906)\n* El tipo de dato sigue ahora al rol. Un puesto del patrón prescribe no solo el rol sino también el tipo, y ambos están en el mismo registro del type-detector: al elegir un rol se obtiene ya el tipo correspondiente. Donde un puesto admite varios tipos no se fija ninguno; donde no prescribe ninguno, cualquier elección sigue siendo correcta. Si aun así el tipo no encaja en el puesto, el banco de trabajo lo dice en lugar de callar: en la fila («espera number»), como aviso debajo, y en el campo del patrón, que ahora indica el motivo — «✕ CONSUMPTION: tipo mixed en lugar de number» — en vez de un escueto «no encaja». Antes, un punto con el rol correcto y el tipo equivocado caía del patrón en silencio y el aparato entero se reconocía como algo menor Cuando un rol acierta en varios puestos que difieren en el tipo — el sentido de marcha de la persiana ocupa DIRECTION como booleano y DIRECTION_ENUM como número —, el banco de trabajo elige el puesto cuyo tipo encaja, y ambas formas se consideran correctas.\n* Al guardar una plantilla ya no se pierden los destinos de escritura. Todo actuador que lleva su propio estado escribe en el mismo punto que lee: persiana, atenuador y termostato usan todos 1.LEVEL. Justo en ese caso el guardado tiraba el camino de escritura, y el alias resultante mostraba la posición pero ya no se dejaba mover. Las filas que solo escriben — el STOP de la persiana — desaparecían por completo. Con Tasmota nunca se notó, porque allí se lee tele.STATE y se escribe cmnd.POWER. El tipo de aparato en la hoja de la plantilla sufría un segundo descuido: tres patrones se llaman distinto que su tipo (blinds/blind, mediaPlayer/media, levelSlider/slider), y una persiana afirmaba por eso no tener tipo alguno",
15
+ "pl": "* Źródła kompilacji przeniesiono z `src/` do `src-admin/`. ioBroker rezerwuje tę nazwę dla źródeł interfejsu, które są pakowane do `admin/` i nigdy nie trafiają do użytkownika, a kontrola adapterów pomija takie katalogi przy szukaniu brakujących zależności. Dlatego `@iobroker/type-detector` pozostaje w `devDependencies`, gdzie jest jego miejsce: esbuild wbudowuje go w `admin/detector.js` podczas kompilacji, a w czasie działania nikt go nie ładuje. Użytkownik otrzymuje gotowy plik 71 KB, a nie pakiet 548 KB (W5042)\n* Strona ustawień pobiera teraz tłumaczenia z `admin/i18n/` — słownika, który ioBroker czyta sam (`\"i18n\": true`) i z którym radzi sobie Weblate. Jedenaście języków, które i tak już nosiła, przeniosło się tam bez zmian; ani jedno słowo nie zostało przetłumaczone na nowo. Zakładka zachowuje własny słownik, teraz w `admin/sprachen/`: 588 kluczy po niemiecku i angielsku, a nieznany język wraca do angielskiego. Dwa słowniki, dwa zadania — to nazwę `i18n` sprawdza kontrola adapterów i oczekuje tam wszystkich jedenastu języków (W5603, W5614, W5015)\n* Wpisy changelogu do 0.9.7 i 0.9.8 są teraz kompletne we wszystkich jedenastu językach. Dziewięć z nich niosło tylko skrót — angielski tekst do 0.9.7 liczy 3000 znaków z pięcioma nagłówkami i 22 punktami, rosyjski miał 480 bez żadnej struktury. Test porównuje teraz każdy wpis z angielskim oryginałem pod względem długości, nagłówków i liczby punktów (W1145)\n* Dwa dodatki po stronie programistycznej, w samym adapterze niewidoczne: `.vscode/settings.json` podpina schematy JSON, dzięki czemu błędy w `io-package.json` czy `jsonConfig.json` rzucają się w oczy już podczas pisania, a nie dopiero w kontroli adapterów (S4036). A aktualizacja GitHub Actions nie chodzi już w trybie `monthly` — to pyta pierwszego dnia miesiąca, w tej samej chwili co wszyscy inni; harmonogram cron rozkłada obciążenie i zachowuje miesięczny rytm (S8906)\n* Typ danych podąża teraz za rolą. Miejsce we wzorcu określa nie tylko rolę, ale i typ, a oba znajdują się w tym samym rekordzie type-detectora — wybierając rolę, od razu dostaje się pasujący typ. Tam, gdzie miejsce dopuszcza kilka typów, nie ustawia się nic; tam, gdzie nie określa żadnego, każdy wybór pozostaje słuszny. Jeśli typ mimo to nie pasuje do miejsca, warsztat to mówi, zamiast milczeć: w wierszu („oczekuje number”), jako ostrzeżenie pod nim i w polu wzorca, które teraz podaje powód — „✕ CONSUMPTION: typ mixed zamiast number” — zamiast suchego „nie pasuje”. Wcześniej punkt z właściwą rolą i niewłaściwym typem bezgłośnie wypadał ze wzorca, a całe urządzenie rozpoznawano jako coś mniejszego Gdy rola trafia w kilka miejsc różniących się typem — kierunek jazdy rolety zajmuje DIRECTION jako wartość logiczną, a DIRECTION_ENUM jako liczbę — warsztat wybiera miejsce, którego typ pasuje, a obie postacie uchodzą za właściwe.\n* Przy zapisie szablonu nie giną już cele zapisu. Każdy element wykonawczy, który prowadzi własny stan, zapisuje do tego samego punktu, który odczytuje — roleta, ściemniacz i termostat używają do tego 1.LEVEL. Właśnie w tym przypadku zapis wyrzucał ścieżkę zapisu, a zbudowany z niego alias pokazywał położenie, ale nie dawał się już przestawić. Wiersze, które tylko zapisują — STOP rolety — wypadały całkowicie. Przy Tasmocie nigdy tego nie było widać, bo tam czyta się tele.STATE, a zapisuje cmnd.POWER. Typ urządzenia w arkuszu szablonu cierpiał na drugie przeoczenie: trzy wzorce nazywają się inaczej niż ich typ (blinds/blind, mediaPlayer/media, levelSlider/slider), przez co roleta twierdziła, że nie ma żadnego typu",
16
+ "uk": "* Вихідні файли збірки перенесено з `src/` до `src-admin/`. ioBroker закріпив цю назву за джерелами інтерфейсу, які збираються в `admin/` і ніколи не потрапляють до користувача, а перевірка адаптерів пропускає такі каталоги під час пошуку відсутніх залежностей. Тому `@iobroker/type-detector` залишається в `devDependencies` — саме там йому й місце: esbuild вбудовує його в `admin/detector.js` під час збірки, а під час роботи його ніхто не завантажує. Користувач отримує готовий файл на 71 КБ, а не пакет на 548 КБ (W5042)\n* Сторінка налаштувань бере переклади з `admin/i18n/` — словника, який ioBroker читає сам (`\"i18n\": true`) і з яким уміє працювати Weblate. Одинадцять мов, які вона й так несла, переїхали туди без змін: жодного слова не перекладали заново. Вкладка зберігає власний словник, тепер у `admin/sprachen/`: 588 ключів німецькою та англійською, а невідома мова відкочується до англійської. Два словники — два завдання: саме назву `i18n` перевіряє контролер адаптерів і чекає там усі одинадцять мов (W5603, W5614, W5015)\n* Записи переліку змін до 0.9.7 і 0.9.8 тепер повні всіма одинадцятьма мовами. Дев'ять із них несли лише стислий виклад: англійський текст до 0.9.7 має 3 000 знаків із п'ятьма заголовками та 22 пунктами, російський мав 480 без жодної структури. Новий тест звіряє кожен запис з англійським оригіналом за довжиною, заголовками та кількістю пунктів (W1145)\n* Два доповнення для розробки, у самому адаптері невидимі: `.vscode/settings.json` під'єднує схеми JSON, тож помилки в `io-package.json` чи `jsonConfig.json` впадають в око вже під час набору, а не лише в перевірці адаптерів (S4036). А оновлення GitHub Actions більше не йде за `monthly` — це запит першого числа місяця, тієї самої миті, що й у всіх інших; розклад cron розподіляє навантаження й зберігає місячний ритм (S8906)\n* Тип даних тепер слідує за роллю. Місце в шаблоні задає не лише роль, а й тип, і обидва лежать в одному записі type-detector — обираючи роль, ви одразу отримуєте потрібний тип. Там, де місце допускає кілька типів, не встановлюється нічого; там, де воно не задає жодного, будь-який вибір лишається правильним. Якщо тип усе ж не пасує до місця, верстак про це каже, а не мовчить: у рядку («очікується number»), попередженням під ним і в полі шаблону, яке тепер називає причину — «✕ CONSUMPTION: тип mixed замість number» — замість голого «не пасує». Раніше точка з правильною роллю та хибним типом безшумно випадала з шаблону, і весь пристрій розпізнавався як щось менше Якщо роль влучає в кілька місць, що різняться типом, — напрям руху ролети лежить на DIRECTION як логічне значення і на DIRECTION_ENUM як число, — верстак обирає те місце, чий тип пасує, і обидві форми вважаються правильними.\n* Під час збереження шаблону більше не втрачаються цілі запису. Кожен виконавчий пристрій, що веде власний стан, пише в ту саму точку, яку читає: ролета, димер і термостат використовують для цього 1.LEVEL. Саме в цьому випадку збереження відкидало шлях запису, і побудований аліас показував положення, але вже не піддавався керуванню. Рядки, що лише пишуть, — STOP ролети — випадали повністю. На Tasmota це ніколи не проявлялося, бо там читається tele.STATE, а пишеться cmnd.POWER. Тип пристрою в аркуші шаблону страждав від другого недогляду: три шаблони звуться інакше, ніж їхній тип (blinds/blind, mediaPlayer/media, levelSlider/slider), і ролета через це стверджувала, що типу в неї немає зовсім",
17
+ "zh-cn": "* 构建源码已从 `src/` 移至 `src-admin/`。ioBroker 用这个名称专指那些会被打包进 `admin/`、从不随适配器分发给用户的前端源码,适配器检查器在查找缺失依赖时会跳过这类目录。因此 `@iobroker/type-detector` 保留在 `devDependencies` 中,这正是它应在的位置:esbuild 在构建时将它内联进 `admin/detector.js`,运行时没有任何代码会加载它。用户拿到的是 71 KB 的成品文件,而不是 548 KB 的整个软件包(W5042)\n* 设置页面现在从 `admin/i18n/` 取用翻译——这是 ioBroker 自己读取的词典(`\"i18n\": true`),Weblate 也能处理它。页面原本就携带的十一种语言原封不动地迁了过去,没有一个词是重新翻译的。选项卡保留自己的词典,现位于 `admin/sprachen/`:588 个键,德语和英语,遇到未知语言则回退为英语。两个词典,两种职责——适配器检查器查看的正是 `i18n` 这个名字,并期望其中有全部十一种语言(W5603、W5614、W5015)\n* 0.9.7 和 0.9.8 的更新日志条目现已在全部十一种语言中补全。其中九种此前只有一段简短摘要——0.9.7 的英文正文有 3000 个字符、五个小标题和 22 个条目,俄文版却只有 480 个字符,毫无层次。现在有一项测试会按长度、小标题和条目数量,将每条记录与英文原文逐一比对(W1145)\n* 两项面向开发的补充,在适配器本身完全看不到:`.vscode/settings.json` 接入了 JSON 模式,`io-package.json` 或 `jsonConfig.json` 中的错误在输入时就会显现,而不必等到适配器检查器(S4036)。另外 GitHub Actions 的更新不再使用 `monthly`——那会在每月一号、和所有人同一时刻发起询问;改用 cron 计划既分散了负载,又保持每月一次的节奏(S8906)\n* 数据类型现在跟随角色。模式中的位置不仅规定角色,也规定类型,两者就存放在 type-detector 的同一条记录里——因此选定角色时会一并设好对应的类型。位置允许多种类型时不作设定;位置未规定类型时,任何选择都仍然正确。若类型终究与位置不符,工作台会明说而不再沉默:在该行显示「需要 number」,其下给出警告,模式字段也会说明原因——「✕ CONSUMPTION:类型 mixed 而非 number」——而不再只是干巴巴的「不匹配」。此前,角色正确而类型错误的数据点会悄无声息地掉出模式,整台设备也随之被识别为更次要的类型当同一角色命中多个类型不同的位置时——卷帘的行进方向在 DIRECTION 上是布尔值,在 DIRECTION_ENUM 上是数字——工作台会挑选类型相符的那个位置,两种形式都算正确。\n* 保存模板时不再丢失写入目标。凡是自己维护状态的执行器,写入的正是它读取的那个点——卷帘、调光器和恒温器都用 1.LEVEL。恰恰在这种情况下,保存会把写入路径丢掉,由此生成的别名只能显示位置、再也无法调节。只写不读的行——卷帘的 STOP——则整行消失。在 Tasmota 上从未暴露,因为那里读的是 tele.STATE、写的是 cmnd.POWER。模板页中的设备类型还有第二处疏忽:有三个模式的名称与其类型不同(blinds/blind、mediaPlayer/media、levelSlider/slider),因此卷帘一直声称自己没有任何类型"
18
+ },
6
19
  "0.9.8": {
7
- "en": "* The changelog only lists versions that actually exist on npm. The entries 0.9.1 to 0.9.6 were local intermediate steps and were never published; their content is now summarised under 0.9.7. Found by the repochecker (E2004, E1032)\n* The README no longer explains installation via “install from custom URL” — in the official repository that goes through the adapter list (E6013)\n* `dependabot.yml` gets a seven-day cooldown for npm packages: what appears today is proposed a week later. If a compromised release is pulled within that time, it never arrives here (E8915). And `@types/node` stays on its major version — the types must match the Node release the adapter runs on (E8917)",
8
- "de": "* Der Changelog nennt nur noch Fassungen, die es auf npm wirklich gibt. Die Einträge 0.9.1 bis 0.9.6 waren lokale Zwischenstände und wurden nie veröffentlicht; ihr Inhalt steht jetzt zusammengefasst bei 0.9.7. Gefunden vom Repochecker (E2004, E1032)\n* Die README erklärt die Installation nicht mehr über „aus eigener URL“ — im offiziellen Repository geht das über die Adapterliste (E6013)\n* `dependabot.yml` bekommt eine Abkühlzeit von sieben Tagen für npm-Pakete: Was heute erscheint, wird erst in einer Woche vorgeschlagen. Wird eine kompromittierte Fassung in dieser Zeit zurückgezogen, kommt sie hier nie an (E8915). Und `@types/node` bleibt bei seiner Hauptversion — die Typen müssen zu der Node-Fassung passen, unter der der Adapter läuft (E8917)",
9
- "ru": "Приведение в порядок перед подачей в репозиторий ioBroker: в списке изменений остались только версии, действительно существующие на npm (0.9.1–0.9.6 были локальными промежуточными шагами, их содержимое собрано в 0.9.7), README больше не описывает установку по своей ссылке, а dependabot получил семидневную выдержку для npm-пакетов и запрет на смену мажорной версии @types/node.",
10
- "pt": "Arrumação antes da submissão ao repositório ioBroker: o changelog só lista versões que existem mesmo no npm (0.9.1–0.9.6 eram passos intermédios locais, o seu conteúdo está reunido em 0.9.7), o README já não explica a instalação por URL própria, e o dependabot recebeu sete dias de arrefecimento para pacotes npm e a proibição de saltar a versão maior de @types/node.",
11
- "nl": "Opruiming voor de aanmelding bij het ioBroker-repository: de changelog noemt alleen nog versies die echt op npm staan (0.9.1–0.9.6 waren lokale tussenstappen, hun inhoud staat samengevat bij 0.9.7), de README legt installatie via een eigen URL niet meer uit, en dependabot kreeg zeven dagen afkoeltijd voor npm-pakketten plus een verbod op majorsprongen van @types/node.",
12
- "fr": "Rangement avant la soumission au dépôt ioBroker : le changelog ne cite plus que des versions qui existent vraiment sur npm (0.9.1–0.9.6 étaient des étapes locales, leur contenu est résumé sous 0.9.7), le README n'explique plus l'installation par URL personnalisée, et dependabot reçoit sept jours de refroidissement pour les paquets npm ainsi que l'interdiction de changer la version majeure de @types/node.",
13
- "it": "Riordino prima della candidatura al repository ioBroker: il changelog elenca solo versioni che esistono davvero su npm (0.9.1-0.9.6 erano passi intermedi locali, il loro contenuto e riassunto sotto 0.9.7), il README non spiega piu l'installazione da URL propria, e dependabot riceve sette giorni di raffreddamento per i pacchetti npm e il divieto di saltare la versione maggiore di @types/node.",
14
- "es": "Ordenacion antes de la solicitud al repositorio de ioBroker: el changelog solo menciona versiones que existen realmente en npm (0.9.1-0.9.6 eran pasos intermedios locales, su contenido esta resumido en 0.9.7), el README ya no explica la instalacion por URL propia, y dependabot recibe siete dias de enfriamiento para paquetes npm y la prohibicion de saltar la version mayor de @types/node.",
15
- "pl": "Porzadki przed zgloszeniem do repozytorium ioBroker: changelog wymienia juz tylko wersje, ktore naprawde istnieja w npm (0.9.1-0.9.6 byly lokalnymi krokami posrednimi, ich tresc zebrano w 0.9.7), README nie opisuje juz instalacji z wlasnego adresu, a dependabot dostal siedmiodniowy okres wystudzenia dla pakietow npm oraz zakaz zmiany wersji glownej @types/node.",
16
- "uk": "Впорядкування перед поданням до репозиторію ioBroker: у переліку змін лишилися тільки версії, які справді є на npm (0.9.1–0.9.6 були локальними проміжними кроками, їхній зміст зібрано в 0.9.7), README більше не описує встановлення за власним посиланням, а dependabot отримав семиденну витримку для npm-пакетів і заборону змінювати мажорну версію @types/node.",
17
- "zh-cn": "提交到 ioBroker 仓库前的整理:更新日志只保留 npm 上真实存在的版本(0.9.1 至 0.9.6 只是本地中间状态,内容已归入 0.9.7),README 不再介绍通过自定义地址安装,dependabot 为 npm 包设置了七天冷却期,并禁止 @types/node 的主版本跳跃。"
20
+ "en": "* The changelog only lists versions that actually exist on npm. The entries 0.9.1 to 0.9.6 were local intermediate steps and were never published; their content is now summarised under 0.9.7. Found by the repochecker (E2004, E1032)\n* The README no longer describes how to add the adapter by hand — in the official repository it is picked from the adapter list (E6013)\n* `dependabot.yml` gets a seven-day cooldown for npm packages: what appears today is proposed a week later. If a compromised release is pulled within that time, it never arrives here (E8915). And `@types/node` stays on its major version — the types must match the Node release the adapter runs on (E8917)",
21
+ "de": "* Der Changelog nennt nur noch Fassungen, die es auf npm wirklich gibt. Die Einträge 0.9.1 bis 0.9.6 waren lokale Zwischenstände und wurden nie veröffentlicht; ihr Inhalt steht jetzt zusammengefasst bei 0.9.7. Gefunden vom Repochecker (E2004, E1032)\n* Die README beschreibt nicht mehr, wie man den Adapter von Hand hinzufügt — im offiziellen Repository wählt man ihn aus der Adapterliste (E6013)\n* `dependabot.yml` bekommt eine Abkühlzeit von sieben Tagen für npm-Pakete: Was heute erscheint, wird erst in einer Woche vorgeschlagen. Wird eine kompromittierte Fassung in dieser Zeit zurückgezogen, kommt sie hier nie an (E8915). Und `@types/node` bleibt bei seiner Hauptversion — die Typen müssen zu der Node-Fassung passen, unter der der Adapter läuft (E8917)",
22
+ "ru": "* В списке изменений теперь указаны только те версии, которые действительно существуют на npm. Записи с 0.9.1 по 0.9.6 были локальными промежуточными шагами и никогда не публиковались; их содержимое собрано в 0.9.7. Найдено проверкой репозитория (E2004, E1032)\n* README больше не описывает, как добавить адаптер вручную — в официальном репозитории его выбирают из списка адаптеров (E6013)\n* `dependabot.yml` получает семидневную выдержку для npm-пакетов: то, что вышло сегодня, будет предложено лишь через неделю. Если скомпрометированный выпуск за это время отзовут, сюда он так и не попадёт (E8915). А `@types/node` остаётся на своей мажорной версии — типы должны соответствовать той версии Node, под которой работает адаптер (E8917)",
23
+ "pt": "* O changelog lista apenas versões que existem mesmo no npm. As entradas 0.9.1 a 0.9.6 foram passos intermédios locais e nunca foram publicadas; o seu conteúdo está agora resumido em 0.9.7. Detetado pelo verificador do repositório (E2004, E1032)\n* O README já não descreve como adicionar o adaptador à mão — no repositório oficial escolhe-se a partir da lista de adaptadores (E6013)\n* O `dependabot.yml` passa a ter sete dias de arrefecimento para pacotes npm: o que aparece hoje só é proposto uma semana depois. Se uma versão comprometida for retirada nesse período, nunca chega aqui (E8915). E o `@types/node` mantém-se na sua versão maior — os tipos têm de corresponder à versão do Node em que o adaptador corre (E8917)",
24
+ "nl": "* De changelog noemt alleen nog versies die echt op npm staan. De vermeldingen 0.9.1 tot 0.9.6 waren lokale tussenstappen en zijn nooit gepubliceerd; hun inhoud staat nu samengevat bij 0.9.7. Gevonden door de repochecker (E2004, E1032)\n* De README beschrijft niet langer hoe je de adapter met de hand toevoegt — in het officiële repository kies je hem uit de adapterlijst (E6013)\n* `dependabot.yml` krijgt een afkoeltijd van zeven dagen voor npm-pakketten: wat vandaag verschijnt, wordt pas een week later voorgesteld. Wordt een gecompromitteerde versie binnen die tijd teruggetrokken, dan komt zij hier nooit aan (E8915). En `@types/node` blijft op zijn hoofdversie — de typen moeten passen bij de Node-versie waaronder de adapter draait (E8917)",
25
+ "fr": "* Le changelog ne cite plus que des versions qui existent vraiment sur npm. Les entrées 0.9.1 à 0.9.6 étaient des étapes intermédiaires locales et n'ont jamais été publiées ; leur contenu est désormais résumé sous 0.9.7. Détecté par le vérificateur de dépôt (E2004, E1032)\n* Le README n'explique plus comment ajouter l'adaptateur à la main — dans le dépôt officiel, on le choisit dans la liste des adaptateurs (E6013)\n* `dependabot.yml` reçoit un délai de refroidissement de sept jours pour les paquets npm : ce qui paraît aujourd'hui n'est proposé qu'une semaine plus tard. Si une version compromise est retirée pendant ce délai, elle n'arrive jamais ici (E8915). Et `@types/node` reste sur sa version majeure — les types doivent correspondre à la version de Node sous laquelle tourne l'adaptateur (E8917)",
26
+ "it": "* Il changelog elenca solo versioni che esistono davvero su npm. Le voci da 0.9.1 a 0.9.6 erano passi intermedi locali e non sono mai state pubblicate; il loro contenuto è ora riassunto sotto 0.9.7. Rilevato dal controllo del repository (E2004, E1032)\n* Il README non descrive più come aggiungere l'adapter a mano — nel repository ufficiale lo si sceglie dall'elenco degli adapter (E6013)\n* `dependabot.yml` riceve sette giorni di raffreddamento per i pacchetti npm: ciò che esce oggi viene proposto solo una settimana dopo. Se una versione compromessa viene ritirata in quel periodo, qui non arriva mai (E8915). E `@types/node` resta alla sua versione maggiore: i tipi devono corrispondere alla versione di Node su cui gira l'adapter (E8917)",
27
+ "es": "* El changelog solo menciona versiones que existen realmente en npm. Las entradas 0.9.1 a 0.9.6 fueron pasos intermedios locales y nunca se publicaron; su contenido está ahora resumido en 0.9.7. Detectado por el verificador del repositorio (E2004, E1032)\n* El README ya no describe cómo añadir el adaptador a mano: en el repositorio oficial se elige de la lista de adaptadores (E6013)\n* `dependabot.yml` recibe un enfriamiento de siete días para los paquetes npm: lo que aparece hoy se propone una semana después. Si una versión comprometida se retira en ese plazo, aquí no llega nunca (E8915). Y `@types/node` se queda en su versión mayor: los tipos deben coincidir con la versión de Node bajo la que corre el adaptador (E8917)",
28
+ "pl": "* Changelog wymienia już tylko wersje, które naprawdę istnieją w npm. Wpisy od 0.9.1 do 0.9.6 były lokalnymi krokami pośrednimi i nigdy nie zostały opublikowane; ich treść jest teraz zebrana w 0.9.7. Wykryte przez kontrolę repozytorium (E2004, E1032)\n* README nie opisuje już, jak dodać adapter ręcznie — w oficjalnym repozytorium wybiera się go z listy adapterów (E6013)\n* `dependabot.yml` otrzymuje siedmiodniowy okres wystudzenia dla pakietów npm: to, co ukazuje się dziś, zostanie zaproponowane dopiero za tydzień. Jeśli w tym czasie wycofa się naruszone wydanie, nigdy tu nie trafi (E8915). A `@types/node` pozostaje przy swojej wersji głównej — typy muszą pasować do wersji Node, pod którą działa adapter (E8917)",
29
+ "uk": "* У переліку змін тепер лишилися тільки версії, які справді є на npm. Записи від 0.9.1 до 0.9.6 були локальними проміжними кроками й ніколи не публікувалися; їхній зміст зібрано в 0.9.7. Виявлено перевіркою репозиторію (E2004, E1032)\n* README більше не описує, як додати адаптер вручну — в офіційному репозиторії його обирають зі списку адаптерів (E6013)\n* `dependabot.yml` отримує семиденну витримку для npm-пакетів: те, що виходить сьогодні, пропонується лише через тиждень. Якщо скомпрометований випуск за цей час відкличуть, сюди він так і не потрапить (E8915). А `@types/node` лишається на своїй мажорній версії — типи мають відповідати тій версії Node, під якою працює адаптер (E8917)",
30
+ "zh-cn": "* 更新日志现在只列出 npm 上确实存在的版本。0.9.1 至 0.9.6 这些条目只是本地的中间步骤,从未发布过;它们的内容已归入 0.9.7。由仓库检查器发现(E2004、E1032)\n* README 不再说明如何手动添加适配器——在官方仓库中,直接从适配器列表里选取即可(E6013)\n* `dependabot.yml` 为 npm 包设置了七天冷却期:今天发布的版本,一周后才会被提议采用。若某个被植入后门的版本在这段时间内被撤回,它就永远不会到达这里(E8915)。另外 `@types/node` 保持在当前主版本——类型必须与适配器实际运行的 Node 版本相匹配(E8917)"
18
31
  },
19
32
  "0.9.7": {
20
33
  "en": "Seven packages from a code review — 45 fixes between 0.9.0 and this release. The intermediate steps 0.9.1 to 0.9.6 stayed local and were never published; they are summarised here.\n\n**Data loss and failure paths**\n* An enumeration error now stops a move. Previously the old alias was deleted anyway — and afterwards it was gone while the new one sat in no enumeration at all\n* A partial failure while deleting no longer turns the retry button into a prop: only what really went is dropped\n* Orphaned points are deleted on the second attempt too\n* A load error on the enumerations leaves the previous state standing instead of emptying it — and while they are unknown, nothing is written. Before, one hiccup could drop an alias out of every room and function\n* A load error on your own templates is reported instead of swallowed; otherwise the next save would have replaced an existing template with version 1\n\n**Connection and display**\n* The tab works again after a dropped connection. The admin's WebSocket fires `connect` once per page lifetime and `reconnect` afterwards — nobody listened, and neither object nor state changes arrived\n* Template mode no longer rebuilds itself every second, and where the selection goes, its subscriptions go too\n* “Differs from the alias” now also shows in alias mode — where it says the most\n* Switching sources quickly no longer fetches the wrong value; the source jump list never appears twice\n* Object names follow the admin language; the function match looks at every language and no longer creates a duplicate\n\n**Templates**\n* A broken name hint no longer takes down the whole source view — including the nested form `(a+)+` where the expression engine stalls\n* The formula of a fallback source survives updating, an unknown device type no longer throws\n* Importing checks more than id and states; a hand-typed id no longer replaces someone else's template\n* The `%N%` placeholder only hits the output number now, not every trailing digit\n* The blind gets its STOP: a button press has no state to read, and that case was unknown to template application — **not a single** blind alias ever had one\n* ON_TIME finds its slot (four templates carried the wrong role)\n\n**MQTT and Tasmota**\n* An empty `custom` entry no longer takes anything down, `enabled: false` counts as switched off\n* No more false “cannot publish” for ioBroker.mqtt and sonoff — there, publishing capability is simply unknown, not denied\n* “Answer received” only for a real answer; `Vcc` and `Command` are not commands\n\n**Speed, measured on a production system with 24,786 objects**\n* The search box no longer blocks: **236 ms per keystroke → 0**, the whole tree **263 → 67 ms**\n* A redraw no longer costs half a second — binary search instead of linear scans: drawing a source **15.8 → 1.6 ms**, an alias with 50 points **51.9 → 14.2 ms**\n* A read formula can no longer freeze the tab for good\n* What is subscribed is what is read — before, a single alias could subscribe to half an adapter",
21
34
  "de": "Sieben Pakete aus einem Code-Review — 45 behobene Fehler zwischen 0.9.0 und dieser Fassung. Die Zwischenstände 0.9.1 bis 0.9.6 waren lokal und wurden nie veröffentlicht; hier stehen sie zusammengefasst.\n\n**Datenverlust und Fehlerpfade**\n* Ein Fehler an den Aufzählungen hält das Verlegen jetzt auf. Vorher lief das Löschen des alten Alias trotzdem — danach war er weg und der neue stand in keiner Aufzählung mehr\n* Ein Teilfehler beim Löschen macht den Wiederholen-Knopf nicht mehr zur Attrappe: Es wird nur ausgetragen, was wirklich weg ist\n* Verwaiste Punkte werden auch beim zweiten Anlauf gelöscht\n* Ein Ladefehler bei den Aufzählungen lässt den alten Stand stehen, statt ihn zu leeren — und solange sie unbekannt sind, wird nichts geschrieben. Vorher konnte ein Aussetzer beim Laden dazu führen, dass ein Alias aus allen Räumen und Funktionen fiel\n* Ein Ladefehler bei den eigenen Vorlagen wird gemeldet statt verschwiegen; vorher hätte das nächste Speichern eine vorhandene Vorlage mit Version 1 ersetzt\n\n**Verbindung und Anzeige**\n* Nach einem Verbindungsabbruch arbeitet der Reiter wieder. Der WebSocket des Admin feuert `connect` nur einmal pro Seitenleben, danach `reconnect` — das hörte niemand, und es kamen weder Objekt- noch Wertänderungen an\n* Der Vorlagenmodus baut sich nicht mehr im Sekundentakt neu auf, und wo die Auswahl fällt, fallen auch ihre Abos\n* „Weicht vom Alias ab“ erscheint jetzt auch im Aliasmodus — dort, wo die Marke am meisten sagt\n* Ein schneller Quellenwechsel holt keinen fremden Wert mehr, die Quellen-Sprungliste steht nie doppelt\n* Objektnamen folgen der Adminsprache; der Funktionsabgleich sieht alle Sprachfassungen an und legt keinen Doppelgänger mehr an\n\n**Vorlagen**\n* Ein kaputter Namenshinweis legt nicht mehr die ganze Quellenansicht lahm — samt der verschachtelten Form `(a+)+`, an der die Ausdrucks-Maschine hängenbleibt\n* Die Formel einer Ersatzquelle überlebt das Aktualisieren, ein unbekannter Gerätetyp wirft nicht mehr\n* Das Einlesen prüft mehr als Kennung und Zustände; eine von Hand eingetippte Kennung ersetzt keine fremde Vorlage mehr\n* Der Platzhalter `%N%` trifft nur noch die Ausgangsnummer, nicht jede Endziffer\n* Der Rollladen bekommt seinen STOP: Ein Tastendruck hat keinen Zustand zum Lesen, und diesen Fall kannte das Anwenden nicht — **kein einziger** Rollladen-Alias hatte je einen\n* ON_TIME findet seinen Platz (vier Vorlagen trugen die falsche Rolle)\n\n**MQTT und Tasmota**\n* Ein leerer `custom`-Eintrag legt nichts mehr lahm, `enabled: false` gilt als abgeschaltet\n* Kein falsches „kann nicht senden“ mehr bei ioBroker.mqtt und sonoff — dort ist die Sendefähigkeit schlicht unbekannt, nicht verneint\n* „Antwort erhalten“ nur noch bei einer echten Antwort; `Vcc` und `Command` sind keine Befehle\n\n**Tempo, am Produktivsystem mit 24.786 Objekten gemessen**\n* Das Suchfeld blockiert nicht mehr: **236 ms je Anschlag → 0**, der ganze Baum **263 → 67 ms**\n* Ein Neuzeichnen kostet keine halbe Sekunde mehr — Binärsuche statt linearer Scans: Zeichnen einer Quelle **15,8 → 1,6 ms**, eines Alias mit 50 Punkten **51,9 → 14,2 ms**\n* Eine Leseformel kann den Reiter nicht mehr dauerhaft einfrieren\n* Abonniert wird, was gelesen wird — vorher konnte ein einziger Alias den halben Adapter abonnieren",
22
- "ru": "Скорость на большой системе (измерено на боевой системе с 24 786 объектами): поле поиска больше не блокирует интерфейс (236 мс на нажатие → 0, дерево 263 → 67 мс), перерисовка ускорена за счёт бинарного поиска по отсортированному индексу и обратной карты источник → алиас (алиас 51,9 → 14,2 мс), формулы чтения кешируются и не могут больше намертво подвесить вкладку, счётчик объектов снова обновляется, лишний прогон детектора и пятикратно продублированное правило записи убраны.",
23
- "pt": "Desempenho num sistema grande (medido no sistema de produção com 24 786 objetos): o campo de pesquisa deixou de bloquear (236 ms por tecla → 0, árvore 263 → 67 ms), o redesenho acelera com pesquisa binária no índice ordenado e um mapa inverso fonte → alias (alias 51,9 → 14,2 ms), as fórmulas de leitura são memorizadas e já não podem congelar o separador, o contador de objetos volta a atualizar, e caíram uma passagem inútil do detetor e a regra de escrita repetida cinco vezes.",
24
- "nl": "Snelheid op een groot systeem (gemeten op het productiesysteem met 24.786 objecten): het zoekveld blokkeert niet meer (236 ms per toetsaanslag → 0, boom 263 → 67 ms), opnieuw tekenen gaat sneller door binair zoeken in de gesorteerde index en een omgekeerde kaart bron → alias (alias 51,9 → 14,2 ms), leesformules worden onthouden en kunnen het tabblad niet meer blijvend bevriezen, de objectteller loopt weer mee, en een overbodige detectorronde en de vijfvoudig uitgeschreven schrijfregel zijn verdwenen.",
25
- "fr": "Rapidité sur un grand système (mesuré sur le système de production, 24 786 objets) : le champ de recherche ne bloque plus (236 ms par frappe → 0, arbre 263 → 67 ms), le redessin accélère grâce à une recherche binaire dans l'index trié et à une carte inverse source → alias (alias 51,9 → 14,2 ms), les formules de lecture sont mémorisées et ne peuvent plus figer l'onglet durablement, le compteur d'objets se met à jour de nouveau, et un passage inutile du détecteur ainsi que la règle d'écriture écrite cinq fois ont disparu.",
26
- "it": "Velocita su un sistema grande (misurato sul sistema di produzione con 24.786 oggetti): il campo di ricerca non blocca piu (236 ms per battuta → 0, albero 263 → 67 ms), il ridisegno accelera grazie alla ricerca binaria sull'indice ordinato e a una mappa inversa sorgente → alias (alias 51,9 → 14,2 ms), le formule di lettura vengono memorizzate e non possono piu congelare la scheda, il contatore degli oggetti torna ad aggiornarsi, e sono spariti un giro inutile del rilevatore e la regola di scrittura ripetuta cinque volte.",
27
- "es": "Rapidez en un sistema grande (medido en el sistema de produccion con 24.786 objetos): el campo de busqueda ya no bloquea (236 ms por pulsacion → 0, arbol 263 → 67 ms), el redibujado acelera con busqueda binaria sobre el indice ordenado y un mapa inverso fuente → alias (alias 51,9 → 14,2 ms), las formulas de lectura se memorizan y ya no pueden congelar la pestana, el contador de objetos vuelve a actualizarse, y desaparecen una pasada inutil del detector y la regla de escritura repetida cinco veces.",
28
- "pl": "Szybkosc na duzym systemie (zmierzone na systemie produkcyjnym z 24 786 obiektami): pole wyszukiwania juz nie blokuje (236 ms na nacisniecie → 0, drzewo 263 → 67 ms), przerysowanie przyspiesza dzieki wyszukiwaniu binarnemu po posortowanym indeksie i mapie odwrotnej zrodlo → alias (alias 51,9 → 14,2 ms), formuly odczytu sa zapamietywane i nie moga juz trwale zamrozic karty, licznik obiektow znow sie aktualizuje, a zniknely zbedny przebieg detektora i piciokrotnie powielona regula zapisu.",
29
- "uk": "Швидкодія на великій системі (виміряно на робочій системі з 24 786 об'єктами): поле пошуку більше не блокує (236 мс на натискання → 0, дерево 263 → 67 мс), перемальовування пришвидшено завдяки двійковому пошуку впорядкованим індексом і зворотній карті джерело → аліас (аліас 51,9 → 14,2 мс), формули читання кешуються й більше не можуть назавжди підвісити вкладку, лічильник об'єктів знову оновлюється, а зайвий прохід детектора та п'ятиразово продубльоване правило запису прибрано.",
30
- "zh-cn": "大型系统上的速度(在拥有 24.786 个对象的生产系统上实测):搜索框不再卡顿(每次按键 236 毫秒 → 0,整棵树 263 → 67 毫秒),重绘通过对有序索引的二分查找和“来源 → 别名”反向表加速(别名 51,9 → 14,2 毫秒),读取公式的结果会被缓存且不再能长久冻结标签页,对象计数重新同步,多余的一次检测器运行以及重复五遍的写入规则均已移除。"
35
+ "ru": "Семь пакетов из код-ревью — 45 исправлений между 0.9.0 и этим выпуском. Промежуточные шаги с 0.9.1 по 0.9.6 остались локальными и никогда не публиковались; здесь они собраны вместе.\n\n**Потеря данных и пути отказа**\n* Ошибка в перечислениях теперь останавливает перенос. Раньше старый алиас всё равно удалялся — и после этого его не было, а новый не значился ни в одном перечислении\n* Частичный сбой при удалении больше не превращает кнопку повтора в бутафорию: снимается только то, что действительно исчезло\n* Осиротевшие точки удаляются и со второй попытки\n* Ошибка загрузки перечислений оставляет прежнее состояние на месте, вместо того чтобы его очистить, — и пока они неизвестны, ничего не записывается. Раньше одна заминка могла выбросить алиас из всех комнат и функций\n* Об ошибке загрузки собственных шаблонов теперь сообщается, а не умалчивается; иначе следующее сохранение заменило бы существующий шаблон версией 1\n\n**Соединение и отображение**\n* После обрыва связи вкладка снова работает. WebSocket админки выдаёт `connect` один раз за время жизни страницы, а дальше только `reconnect` — этого никто не слушал, и не приходили ни изменения объектов, ни изменения значений\n* Режим шаблонов больше не перестраивается ежесекундно, и вместе с выбором переезжают его подписки\n* «Отличается от алиаса» показывается теперь и в режиме алиаса — там, где эта пометка говорит больше всего\n* Быстрое переключение источников больше не подтягивает чужое значение; список перехода по источникам не появляется дважды\n* Имена объектов следуют языку админки; сопоставление функций смотрит на все языковые варианты и больше не создаёт двойников\n\n**Шаблоны**\n* Сломанная подсказка имени больше не выводит из строя весь вид источника — включая вложенную форму `(a+)+`, на которой застревает движок выражений\n* Формула запасного источника переживает обновление, неизвестный тип устройства больше не приводит к ошибке\n* Импорт проверяет не только идентификатор и состояния; идентификатор, введённый вручную, больше не заменяет чужой шаблон\n* Подстановка `%N%` попадает только в номер выхода, а не в любую последнюю цифру\n* Рольставня получает свой STOP: у нажатия кнопки нет состояния для чтения, и этот случай применение шаблонов не знало — **ни у одного** алиаса рольставни его никогда не было\n* ON_TIME находит своё место (четыре шаблона несли неверную роль)\n\n**MQTT и Tasmota**\n* Пустая запись `custom` больше ничего не ломает, `enabled: false` считается выключением\n* Больше никаких ложных «не может отправлять» для ioBroker.mqtt и sonoff — там способность к отправке просто неизвестна, а не отрицается\n* «Ответ получен» — только при настоящем ответе; `Vcc` и `Command` не являются командами\n\n**Скорость, измерено на боевой системе с 24 786 объектами**\n* Поле поиска больше не блокирует: **236 мс на нажатие → 0**, всё дерево **263 → 67 мс**\n* Перерисовка больше не стоит полсекунды — бинарный поиск вместо линейных проходов: отрисовка источника **15,8 → 1,6 мс**, алиаса с 50 точками **51,9 → 14,2 мс**\n* Формула чтения больше не может намертво подвесить вкладку\n* Подписываемся на то, что читаем, — раньше один-единственный алиас мог подписаться на половину адаптера",
36
+ "pt": "Sete pacotes de uma revisão de código — 45 correções entre 0.9.0 e esta versão. Os passos intermédios 0.9.1 a 0.9.6 ficaram locais e nunca foram publicados; estão aqui resumidos.\n\n**Perda de dados e caminhos de falha**\n* Um erro nas enumerações passa a interromper a mudança. Antes o alias antigo era apagado à mesma — e depois tinha desaparecido, enquanto o novo não constava de enumeração nenhuma\n* Uma falha parcial ao apagar já não transforma o botão de repetir num adereço: só é retirado o que realmente desapareceu\n* Os pontos órfãos são apagados também à segunda tentativa\n* Um erro ao carregar as enumerações deixa o estado anterior de pé em vez de o esvaziar — e enquanto forem desconhecidas, nada é escrito. Antes, um soluço podia deixar um alias fora de todas as divisões e funções\n* Um erro ao carregar os modelos próprios é comunicado em vez de silenciado; caso contrário, a gravação seguinte teria substituído um modelo existente pela versão 1\n\n**Ligação e apresentação**\n* O separador volta a funcionar depois de uma quebra de ligação. O WebSocket do Admin dispara `connect` uma única vez por vida da página e `reconnect` depois disso — ninguém escutava, e não chegavam alterações nem de objetos nem de valores\n* O modo de modelos já não se reconstrói a cada segundo, e onde vai a seleção vão também as suas subscrições\n* «Difere do alias» aparece agora também no modo de alias — onde a marca diz mais\n* Trocar de fonte rapidamente já não vai buscar o valor errado; a lista de salto entre fontes nunca aparece duas vezes\n* Os nomes dos objetos seguem o idioma do Admin; a correspondência de funções olha para todos os idiomas e já não cria um duplicado\n\n**Modelos**\n* Uma dica de nome avariada já não derruba a vista de fontes inteira — incluindo a forma aninhada `(a+)+`, onde o motor de expressões encrava\n* A fórmula de uma fonte de reserva sobrevive à atualização, um tipo de dispositivo desconhecido já não rebenta\n* A importação verifica mais do que o id e os estados; um id escrito à mão já não substitui o modelo de outra pessoa\n* O marcador `%N%` só acerta no número da saída, já não em qualquer dígito final\n* O estore recebe o seu STOP: premir um botão não tem estado para ler, e esse caso era desconhecido da aplicação de modelos — **nenhum** alias de estore alguma vez teve um\n* O ON_TIME encontra o seu lugar (quatro modelos levavam a função errada)\n\n**MQTT e Tasmota**\n* Uma entrada `custom` vazia já não derruba nada, `enabled: false` conta como desligado\n* Acabaram os falsos «não consegue publicar» no ioBroker.mqtt e no sonoff — aí a capacidade de publicar é simplesmente desconhecida, não negada\n* «Resposta recebida» apenas para uma resposta a sério; `Vcc` e `Command` não são comandos\n\n**Velocidade, medida num sistema de produção com 24 786 objetos**\n* A caixa de pesquisa deixou de bloquear: **236 ms por tecla → 0**, a árvore inteira **263 → 67 ms**\n* Redesenhar já não custa meio segundo — pesquisa binária em vez de varrimentos lineares: desenhar uma fonte **15,8 → 1,6 ms**, um alias com 50 pontos **51,9 → 14,2 ms**\n* Uma fórmula de leitura já não pode congelar o separador de vez\n* Subscreve-se o que se lê — antes, um único alias podia subscrever meio adaptador",
37
+ "nl": "Zeven pakketten uit een codereview — 45 correcties tussen 0.9.0 en deze versie. De tussenstappen 0.9.1 tot 0.9.6 bleven lokaal en zijn nooit gepubliceerd; hier staan ze samengevat.\n\n**Gegevensverlies en foutpaden**\n* Een fout bij de opsommingen houdt het verplaatsen nu tegen. Voorheen werd het oude alias toch verwijderd — en daarna was het weg, terwijl het nieuwe in geen enkele opsomming stond\n* Een gedeeltelijke fout bij het verwijderen maakt van de herhaalknop geen decorstuk meer: alleen wat echt weg is, wordt uitgeschreven\n* Verweesde punten worden ook bij de tweede poging verwijderd\n* Een laadfout bij de opsommingen laat de vorige stand staan in plaats van hem te legen — en zolang ze onbekend zijn, wordt er niets geschreven. Eerder kon één hapering een alias uit alle ruimtes en functies laten vallen\n* Een laadfout bij de eigen sjablonen wordt gemeld in plaats van ingeslikt; anders had de volgende keer opslaan een bestaand sjabloon door versie 1 vervangen\n\n**Verbinding en weergave**\n* Na een verbroken verbinding werkt het tabblad weer. De WebSocket van de Admin vuurt `connect` één keer per paginaleven af en daarna `reconnect` — daar luisterde niemand naar, en er kwamen object- noch waardewijzigingen binnen\n* De sjabloonmodus bouwt zichzelf niet meer elke seconde opnieuw op, en waar de selectie heen gaat, gaan haar abonnementen mee\n* «Wijkt af van het alias» verschijnt nu ook in de aliasmodus — daar waar het het meest zegt\n* Snel van bron wisselen haalt geen verkeerde waarde meer op; de spronglijst van bronnen staat nooit dubbel\n* Objectnamen volgen de Admin-taal; de functievergelijking kijkt naar alle taalvarianten en maakt geen dubbelganger meer aan\n\n**Sjablonen**\n* Een kapotte naamhint legt niet meer de hele bronweergave plat — inclusief de geneste vorm `(a+)+`, waarop de expressiemachine vastloopt\n* De formule van een vervangende bron overleeft het bijwerken, een onbekend apparaattype gooit geen fout meer\n* Het inlezen controleert meer dan id en toestanden; een met de hand getypt id vervangt niet langer andermans sjabloon\n* De plaatshouder `%N%` raakt nu alleen het uitgangsnummer, niet elk eindcijfer\n* Het rolluik krijgt zijn STOP: een toetsdruk heeft geen toestand om te lezen, en dat geval kende het toepassen van sjablonen niet — **geen enkel** rolluik-alias heeft er ooit een gehad\n* ON_TIME vindt zijn plek (vier sjablonen droegen de verkeerde rol)\n\n**MQTT en Tasmota**\n* Een lege `custom`-vermelding legt niets meer plat, `enabled: false` geldt als uitgeschakeld\n* Geen vals «kan niet verzenden» meer bij ioBroker.mqtt en sonoff — daar is het verzendvermogen simpelweg onbekend, niet ontkend\n* «Antwoord ontvangen» alleen nog bij een echt antwoord; `Vcc` en `Command` zijn geen commando's\n\n**Snelheid, gemeten op een productiesysteem met 24.786 objecten**\n* Het zoekveld blokkeert niet meer: **236 ms per toetsaanslag → 0**, de hele boom **263 → 67 ms**\n* Opnieuw tekenen kost geen halve seconde meer — binair zoeken in plaats van lineair scannen: een bron tekenen **15,8 → 1,6 ms**, een alias met 50 punten **51,9 → 14,2 ms**\n* Een leesformule kan het tabblad niet meer blijvend bevriezen\n* Er wordt geabonneerd op wat gelezen wordt — eerder kon één enkel alias zich op een halve adapter abonneren",
38
+ "fr": "Sept lots issus d'une revue de code — 45 corrections entre 0.9.0 et cette version. Les étapes intermédiaires 0.9.1 à 0.9.6 sont restées locales et n'ont jamais été publiées ; elles sont résumées ici.\n\n**Perte de données et chemins d'erreur**\n* Une erreur sur les énumérations interrompt désormais le déplacement. Auparavant l'ancien alias était supprimé quand même — et ensuite il avait disparu, tandis que le nouveau ne figurait dans aucune énumération\n* Un échec partiel lors de la suppression ne transforme plus le bouton « réessayer » en décor : seul ce qui est réellement parti est retiré\n* Les points orphelins sont supprimés aussi à la deuxième tentative\n* Une erreur de chargement des énumérations laisse l'état précédent en place au lieu de le vider — et tant qu'elles sont inconnues, rien n'est écrit. Avant, un seul hoquet pouvait faire tomber un alias hors de toutes les pièces et fonctions\n* Une erreur de chargement de vos propres modèles est signalée au lieu d'être avalée ; sinon l'enregistrement suivant aurait remplacé un modèle existant par la version 1\n\n**Connexion et affichage**\n* L'onglet refonctionne après une coupure de connexion. Le WebSocket de l'Admin émet `connect` une seule fois par vie de page, puis `reconnect` — personne n'écoutait, et ni les changements d'objets ni ceux de valeurs n'arrivaient\n* Le mode modèles ne se reconstruit plus chaque seconde, et là où va la sélection vont aussi ses abonnements\n* « Diffère de l'alias » s'affiche maintenant aussi en mode alias — là où la mention dit le plus\n* Changer de source rapidement ne récupère plus une valeur étrangère ; la liste de saut entre sources n'apparaît jamais en double\n* Les noms d'objets suivent la langue de l'Admin ; la correspondance des fonctions examine toutes les langues et ne crée plus de doublon\n\n**Modèles**\n* Une indication de nom cassée ne met plus à terre toute la vue des sources — y compris la forme imbriquée `(a+)+`, sur laquelle le moteur d'expressions se bloque\n* La formule d'une source de secours survit à la mise à jour, un type d'appareil inconnu ne lève plus d'erreur\n* L'import vérifie plus que l'identifiant et les états ; un identifiant saisi à la main ne remplace plus le modèle d'autrui\n* Le marqueur `%N%` ne touche plus que le numéro de sortie, et non chaque chiffre final\n* Le volet obtient son STOP : un appui sur un bouton n'a aucun état à lire, et ce cas était inconnu de l'application des modèles — **aucun** alias de volet n'en a jamais eu\n* ON_TIME trouve sa place (quatre modèles portaient le mauvais rôle)\n\n**MQTT et Tasmota**\n* Une entrée `custom` vide ne met plus rien à terre, `enabled: false` compte comme désactivé\n* Plus de faux « ne peut pas publier » pour ioBroker.mqtt et sonoff — là, la capacité de publication est simplement inconnue, et non refusée\n* « Réponse reçue » uniquement pour une vraie réponse ; `Vcc` et `Command` ne sont pas des commandes\n\n**Rapidité, mesurée sur un système de production de 24 786 objets**\n* Le champ de recherche ne bloque plus : **236 ms par frappe → 0**, l'arbre entier **263 → 67 ms**\n* Un redessin ne coûte plus une demi-seconde — recherche binaire au lieu de parcours linéaires : dessiner une source **15,8 → 1,6 ms**, un alias de 50 points **51,9 → 14,2 ms**\n* Une formule de lecture ne peut plus figer l'onglet durablement\n* On s'abonne à ce qu'on lit — auparavant, un seul alias pouvait s'abonner à la moitié d'un adaptateur",
39
+ "it": "Sette pacchetti da una revisione del codice — 45 correzioni tra la 0.9.0 e questa versione. I passi intermedi dalla 0.9.1 alla 0.9.6 sono rimasti locali e non sono mai stati pubblicati; qui sono riassunti.\n\n**Perdita di dati e percorsi d'errore**\n* Un errore sulle enumerazioni ora ferma lo spostamento. Prima il vecchio alias veniva comunque cancellato — e dopo non c'era più, mentre il nuovo non compariva in nessuna enumerazione\n* Un fallimento parziale durante la cancellazione non riduce più il pulsante «riprova» a una finta: viene tolto solo ciò che è davvero sparito\n* I punti orfani vengono cancellati anche al secondo tentativo\n* Un errore di caricamento delle enumerazioni lascia in piedi lo stato precedente invece di svuotarlo — e finché sono sconosciute non viene scritto nulla. Prima bastava un singhiozzo perché un alias cadesse fuori da tutte le stanze e le funzioni\n* Un errore di caricamento dei modelli propri viene segnalato anziché ingoiato; altrimenti il salvataggio successivo avrebbe sostituito un modello esistente con la versione 1\n\n**Connessione e visualizzazione**\n* Dopo un'interruzione della connessione la scheda torna a funzionare. Il WebSocket dell'Admin emette `connect` una sola volta per vita della pagina e poi `reconnect` — nessuno lo ascoltava, e non arrivavano né modifiche di oggetti né di valori\n* La modalità modelli non si ricostruisce più ogni secondo, e dove va la selezione vanno anche le sue sottoscrizioni\n* «Differisce dall'alias» compare ora anche in modalità alias — dove il segno dice di più\n* Cambiare sorgente rapidamente non recupera più un valore altrui; l'elenco di salto tra sorgenti non appare mai due volte\n* I nomi degli oggetti seguono la lingua dell'Admin; il confronto delle funzioni guarda tutte le lingue e non crea più un doppione\n\n**Modelli**\n* Un suggerimento di nome rotto non manda più in blocco l'intera vista delle sorgenti — compresa la forma annidata `(a+)+`, sulla quale il motore delle espressioni si inchioda\n* La formula di una sorgente di riserva sopravvive all'aggiornamento, un tipo di dispositivo sconosciuto non solleva più errori\n* L'importazione controlla più di id e stati; un id digitato a mano non sostituisce più il modello di qualcun altro\n* Il segnaposto `%N%` colpisce solo il numero dell'uscita, non ogni cifra finale\n* La tapparella ottiene il suo STOP: la pressione di un tasto non ha stato da leggere, e l'applicazione dei modelli non conosceva questo caso — **nemmeno un** alias di tapparella ne ha mai avuto uno\n* ON_TIME trova il suo posto (quattro modelli portavano il ruolo sbagliato)\n\n**MQTT e Tasmota**\n* Una voce `custom` vuota non manda più in blocco nulla, `enabled: false` vale come spento\n* Niente più falsi «non può pubblicare» per ioBroker.mqtt e sonoff — lì la capacità di pubblicare è semplicemente sconosciuta, non negata\n* «Risposta ricevuta» solo per una risposta vera; `Vcc` e `Command` non sono comandi\n\n**Velocità, misurata su un sistema di produzione con 24 786 oggetti**\n* La casella di ricerca non blocca più: **236 ms per battuta → 0**, l'intero albero **263 → 67 ms**\n* Un ridisegno non costa più mezzo secondo — ricerca binaria invece di scansioni lineari: disegnare una sorgente **15,8 → 1,6 ms**, un alias con 50 punti **51,9 → 14,2 ms**\n* Una formula di lettura non può più congelare la scheda per sempre\n* Si sottoscrive ciò che si legge — prima un singolo alias poteva sottoscrivere mezzo adapter",
40
+ "es": "Siete paquetes de una revisión de código: 45 correcciones entre la 0.9.0 y esta versión. Los pasos intermedios 0.9.1 a 0.9.6 quedaron en local y nunca se publicaron; aquí están resumidos.\n\n**Pérdida de datos y caminos de error**\n* Un error en las enumeraciones detiene ahora el traslado. Antes el alias antiguo se borraba igualmente, y después ya no estaba, mientras el nuevo no figuraba en ninguna enumeración\n* Un fallo parcial al borrar ya no convierte el botón de reintento en un decorado: solo se retira lo que realmente desapareció\n* Los puntos huérfanos se borran también al segundo intento\n* Un error al cargar las enumeraciones deja en pie el estado anterior en lugar de vaciarlo, y mientras sean desconocidas no se escribe nada. Antes, un solo tropiezo podía dejar un alias fuera de todas las habitaciones y funciones\n* Un error al cargar las plantillas propias se comunica en vez de silenciarse; de lo contrario, el siguiente guardado habría sustituido una plantilla existente por la versión 1\n\n**Conexión y presentación**\n* Tras una caída de la conexión, la pestaña vuelve a funcionar. El WebSocket del Admin lanza `connect` una sola vez por vida de la página y `reconnect` después; nadie escuchaba, y no llegaban ni cambios de objetos ni de valores\n* El modo de plantillas ya no se reconstruye cada segundo, y adonde va la selección van también sus suscripciones\n* «Difiere del alias» aparece ahora también en el modo alias, que es donde más dice\n* Cambiar de fuente rápidamente ya no trae un valor ajeno; la lista de salto entre fuentes nunca aparece dos veces\n* Los nombres de objeto siguen el idioma del Admin; la comparación de funciones mira todos los idiomas y ya no crea un duplicado\n\n**Plantillas**\n* Una pista de nombre rota ya no tumba toda la vista de fuentes, incluida la forma anidada `(a+)+`, en la que el motor de expresiones se atasca\n* La fórmula de una fuente de reserva sobrevive a la actualización, un tipo de dispositivo desconocido ya no lanza error\n* La importación comprueba más que el id y los estados; un id escrito a mano ya no sustituye la plantilla de otra persona\n* El marcador `%N%` solo acierta en el número de salida, no en cualquier dígito final\n* La persiana recibe su STOP: pulsar un botón no tiene estado que leer, y ese caso era desconocido para la aplicación de plantillas: **ni un solo** alias de persiana lo tuvo nunca\n* ON_TIME encuentra su sitio (cuatro plantillas llevaban el rol equivocado)\n\n**MQTT y Tasmota**\n* Una entrada `custom` vacía ya no tumba nada, `enabled: false` cuenta como apagado\n* Se acabaron los falsos «no puede publicar» en ioBroker.mqtt y sonoff: allí la capacidad de publicar es simplemente desconocida, no denegada\n* «Respuesta recibida» solo ante una respuesta de verdad; `Vcc` y `Command` no son comandos\n\n**Velocidad, medida en un sistema de producción con 24 786 objetos**\n* El cuadro de búsqueda ya no bloquea: **236 ms por pulsación → 0**, el árbol entero **263 → 67 ms**\n* Un redibujado ya no cuesta medio segundo: búsqueda binaria en lugar de recorridos lineales; dibujar una fuente **15,8 → 1,6 ms**, un alias con 50 puntos **51,9 → 14,2 ms**\n* Una fórmula de lectura ya no puede congelar la pestaña para siempre\n* Se suscribe lo que se lee: antes, un único alias podía suscribir medio adaptador",
41
+ "pl": "Siedem pakietów z przeglądu kodu — 45 poprawek między 0.9.0 a tym wydaniem. Kroki pośrednie od 0.9.1 do 0.9.6 pozostały lokalne i nigdy nie zostały opublikowane; tutaj są zebrane razem.\n\n**Utrata danych i ścieżki błędów**\n* Błąd przy wyliczeniach zatrzymuje teraz przenoszenie. Wcześniej stary alias i tak był usuwany — a potem już go nie było, podczas gdy nowy nie figurował w żadnym wyliczeniu\n* Częściowe niepowodzenie przy usuwaniu nie zamienia już przycisku ponowienia w atrapę: wypisywane jest tylko to, co naprawdę zniknęło\n* Osierocone punkty są usuwane także przy drugim podejściu\n* Błąd wczytywania wyliczeń pozostawia poprzedni stan, zamiast go opróżniać — a dopóki są nieznane, nic nie jest zapisywane. Wcześniej jedno potknięcie mogło wyrzucić alias ze wszystkich pomieszczeń i funkcji\n* Błąd wczytywania własnych szablonów jest zgłaszany, a nie przemilczany; w przeciwnym razie kolejny zapis zastąpiłby istniejący szablon wersją 1\n\n**Połączenie i wyświetlanie**\n* Po zerwaniu połączenia zakładka znowu działa. WebSocket Admina wysyła `connect` tylko raz na czas życia strony, a potem `reconnect` — nikt tego nie słuchał i nie docierały ani zmiany obiektów, ani wartości\n* Tryb szablonów nie przebudowuje się już co sekundę, a wraz z wyborem przenoszą się jego subskrypcje\n* „Różni się od aliasu\" pojawia się teraz także w trybie aliasu — tam, gdzie mówi najwięcej\n* Szybka zmiana źródła nie pobiera już obcej wartości; lista skoków między źródłami nigdy nie pojawia się podwójnie\n* Nazwy obiektów podążają za językiem Admina; dopasowanie funkcji patrzy na wszystkie wersje językowe i nie tworzy już sobowtóra\n\n**Szablony**\n* Zepsuta podpowiedź nazwy nie unieruchamia już całego widoku źródeł — łącznie z zagnieżdżoną postacią `(a+)+`, na której zacina się silnik wyrażeń\n* Formuła źródła zastępczego przeżywa aktualizację, nieznany typ urządzenia nie wyrzuca już błędu\n* Wczytywanie sprawdza więcej niż identyfikator i stany; ręcznie wpisany identyfikator nie zastępuje już cudzego szablonu\n* Wypełniacz `%N%` trafia tylko w numer wyjścia, a nie w każdą końcową cyfrę\n* Roleta dostaje swój STOP: naciśnięcie przycisku nie ma stanu do odczytu, a tego przypadku stosowanie szablonów nie znało — **ani jeden** alias rolety nigdy go nie miał\n* ON_TIME znajduje swoje miejsce (cztery szablony niosły niewłaściwą rolę)\n\n**MQTT i Tasmota**\n* Pusty wpis `custom` już niczego nie unieruchamia, `enabled: false` liczy się jako wyłączone\n* Koniec z fałszywym „nie może wysyłać\" przy ioBroker.mqtt i sonoff — tam zdolność wysyłania jest po prostu nieznana, a nie zaprzeczona\n* „Odpowiedź otrzymana\" tylko przy prawdziwej odpowiedzi; `Vcc` i `Command` nie są poleceniami\n\n**Szybkość, zmierzona na systemie produkcyjnym z 24 786 obiektami**\n* Pole wyszukiwania już nie blokuje: **236 ms na naciśnięcie → 0**, całe drzewo **263 → 67 ms**\n* Przerysowanie nie kosztuje już pół sekundy — wyszukiwanie binarne zamiast przebiegów liniowych: narysowanie źródła **15,8 → 1,6 ms**, aliasu z 50 punktami **51,9 → 14,2 ms**\n* Formuła odczytu nie może już trwale zamrozić zakładki\n* Subskrybowane jest to, co czytane — wcześniej pojedynczy alias potrafił zasubskrybować pół adaptera",
42
+ "uk": "Сім пакетів із код-рев'ю — 45 виправлень між 0.9.0 і цим випуском. Проміжні кроки з 0.9.1 до 0.9.6 лишилися локальними й ніколи не публікувалися; тут вони зібрані разом.\n\n**Втрата даних і шляхи відмов**\n* Помилка в переліках тепер зупиняє перенесення. Раніше старий аліас усе одно видалявся — і після цього його не було, а новий не значився в жодному переліку\n* Часткова невдача під час видалення більше не перетворює кнопку повтору на бутафорію: знімається лише те, що справді зникло\n* Осиротілі точки видаляються й з другої спроби\n* Помилка завантаження переліків лишає попередній стан на місці, замість того щоб його спорожнити, — і поки вони невідомі, нічого не записується. Раніше одна затримка могла викинути аліас з усіх кімнат і функцій\n* Про помилку завантаження власних шаблонів тепер повідомляють, а не замовчують; інакше наступне збереження замінило б наявний шаблон версією 1\n\n**З'єднання та відображення**\n* Після обриву зв'язку вкладка знову працює. WebSocket адмінки видає `connect` лише раз за час життя сторінки, а далі тільки `reconnect` — цього ніхто не слухав, і не надходили ні зміни об'єктів, ні зміни значень\n* Режим шаблонів більше не перебудовується щосекунди, і разом з вибором переїжджають його підписки\n* «Відрізняється від аліаса» показується тепер і в режимі аліаса — там, де ця позначка каже найбільше\n* Швидке перемикання джерел більше не підтягує чуже значення; список переходу між джерелами ніколи не з'являється двічі\n* Імена об'єктів ідуть за мовою адмінки; зіставлення функцій дивиться на всі мовні варіанти й більше не створює двійника\n\n**Шаблони**\n* Зламана підказка імені більше не виводить з ладу весь вигляд джерела — разом із вкладеною формою `(a+)+`, на якій застрягає рушій виразів\n* Формула запасного джерела переживає оновлення, невідомий тип пристрою більше не спричиняє помилку\n* Імпорт перевіряє не лише ідентифікатор і стани; ідентифікатор, введений вручну, більше не заміняє чужий шаблон\n* Підстановка `%N%` влучає лише в номер виходу, а не в будь-яку останню цифру\n* Ролета отримує свій STOP: натискання кнопки не має стану для читання, і цього випадку застосування шаблонів не знало — **жоден** аліас ролети його ніколи не мав\n* ON_TIME знаходить своє місце (чотири шаблони несли хибну роль)\n\n**MQTT і Tasmota**\n* Порожній запис `custom` більше нічого не ламає, `enabled: false` вважається вимкненим\n* Більше жодних хибних «не може надсилати» для ioBroker.mqtt і sonoff — там здатність надсилати просто невідома, а не заперечена\n* «Відповідь отримано» — лише за справжньої відповіді; `Vcc` і `Command` не є командами\n\n**Швидкість, виміряно на робочій системі з 24 786 об'єктами**\n* Поле пошуку більше не блокує: **236 мс на натискання → 0**, усе дерево **263 → 67 мс**\n* Перемальовування більше не коштує пів секунди — двійковий пошук замість лінійних проходів: малювання джерела **15,8 → 1,6 мс**, аліаса з 50 точками **51,9 → 14,2 мс**\n* Формула читання більше не може назавжди заморозити вкладку\n* Підписуємося на те, що читаємо, — раніше один-єдиний аліас міг підписатися на половину адаптера",
43
+ "zh-cn": "一次代码评审带来的七个修复包——0.9.0 到本版本之间共 45 处修正。中间版本 0.9.1 至 0.9.6 只留在本地、从未发布,其内容汇总于此。\n\n**数据丢失与故障路径**\n* 枚举出错时现在会中止迁移。此前旧别名照样被删除——之后它已不存在,而新别名却不属于任何枚举\n* 删除过程中的部分失败不再把「重试」按钮变成摆设:只有真正消失的条目才会被注销\n* 孤立的数据点在第二次尝试时同样会被删除\n* 枚举加载失败时保留原有状态,而不是将其清空——并且在枚举未知期间不写入任何内容。以前一次卡顿就可能让某个别名从所有房间和功能中掉出去\n* 自建模板加载失败会被报告而非吞掉;否则下一次保存就会用版本 1 覆盖已有模板\n\n**连接与显示**\n* 连接中断后选项卡可以继续工作。Admin 的 WebSocket 在每个页面生命周期内只触发一次 `connect`,之后只有 `reconnect`——此前无人监听,对象变更和值变更都收不到\n* 模板模式不再每秒重建一次,选择移到哪里,它的订阅就跟到哪里\n* 「与别名不一致」现在在别名模式下同样显示——那正是这个标记最有意义的地方\n* 快速切换源不再取到别处的值;源跳转列表不会重复出现\n* 对象名称跟随 Admin 语言;功能比对会查看所有语言版本,不再创建重复项\n\n**模板**\n* 损坏的名称提示不再拖垮整个源视图——包括嵌套形式 `(a+)+`,表达式引擎会在它上面卡死\n* 备用源的公式在更新后得以保留,未知设备类型不再抛出异常\n* 导入时检查的不只是 id 和状态;手动输入的 id 不会再覆盖他人的模板\n* 占位符 `%N%` 现在只匹配输出编号,而不是任意末尾数字\n* 卷帘拿到了它的 STOP:按键动作没有可读取的状态,而模板应用此前并不认识这种情况——**没有一个**卷帘别名曾经有过\n* ON_TIME 找到了自己的位置(四个模板带着错误的角色)\n\n**MQTT 与 Tasmota**\n* 空的 `custom` 条目不再拖垮任何东西,`enabled: false` 视为已关闭\n* ioBroker.mqtt 和 sonoff 不再出现错误的「无法发送」——在那里发送能力只是未知,而非被否定\n* 只有收到真正的回复才显示「已收到回复」;`Vcc` 和 `Command` 并不是命令\n\n**速度,在拥有 24 786 个对象的生产系统上实测**\n* 搜索框不再阻塞:**每次按键 236 毫秒 → 0**,整棵树 **263 → 67 毫秒**\n* 重绘不再耗费半秒——以二分查找取代线性扫描:绘制一个源 **15.8 → 1.6 毫秒**,含 50 个数据点的别名 **51.9 → 14.2 毫秒**\n* 读取公式不会再让选项卡永久冻结\n* 订阅的正是要读取的内容——此前单个别名就可能订阅半个适配器"
31
44
  },
32
45
  "0.9.0": {
33
46
  "en": "Several sources behind one alias are now visible: a chip names their count, every row its origin, and the way back leads from each source to the alias. The fields “reads from” and “writes to” show the full id, the pattern names now come from the admin, and values keep running in the alias view. A complete run on the production system brought four findings: the role list was half empty because the detector delivers its slot expressions as text with slashes — 210 roles instead of 232, and BRIGHTNESS without a role in six patterns; and a point the template lists under a different name now keeps its role and its caption at the source.",
@@ -80,19 +93,6 @@
80
93
  "pl": "Publikacja przez npm trusted publishing (OIDC) — wydania są od teraz podpisywane z poświadczeniem pochodzenia. Bez zmian funkcjonalnych.",
81
94
  "uk": "Публікація через npm trusted publishing (OIDC) — випуски тепер підписані з підтвердженням походження. Функціональних змін немає.",
82
95
  "zh-cn": "通过 npm 可信发布(OIDC)发布——此后的版本均带有来源签名。无功能变更。"
83
- },
84
- "0.8.0": {
85
- "en": "Ready for the repository: settings page in eleven languages, ESLint and a CI workshop, checks that run before every commit. The buttons at the bottom now follow the mode. New description.",
86
- "de": "Bereit fürs Repository: Einstellungsseite in elf Sprachen, ESLint und eine CI-Werkstatt, Prüfungen vor jedem Commit. Die Knöpfe unten richten sich jetzt nach dem Modus. Neue Beschreibung.",
87
- "ru": "Готово для репозитория: страница настроек на одиннадцати языках, ESLint и CI-мастерская, проверки перед каждым коммитом. Кнопки внизу теперь зависят от режима. Новое описание.",
88
- "pt": "Pronto para o repositório: página de definições em onze idiomas, ESLint e uma oficina de CI, verificações antes de cada commit. Os botões em baixo seguem agora o modo. Nova descrição.",
89
- "nl": "Klaar voor de repository: instellingenpagina in elf talen, ESLint en een CI-werkplaats, controles voor elke commit. De knoppen onderaan volgen nu de modus. Nieuwe beschrijving.",
90
- "fr": "Prêt pour le dépôt : page de réglages en onze langues, ESLint et un atelier CI, vérifications avant chaque commit. Les boutons du bas suivent désormais le mode. Nouvelle description.",
91
- "it": "Pronto per il repository: pagina delle impostazioni in undici lingue, ESLint e un’officina CI, controlli prima di ogni commit. I pulsanti in basso seguono ora la modalità. Nuova descrizione.",
92
- "es": "Listo para el repositorio: página de ajustes en once idiomas, ESLint y un taller de CI, comprobaciones antes de cada commit. Los botones de abajo ahora siguen el modo. Nueva descripción.",
93
- "pl": "Gotowe do repozytorium: strona ustawień w jedenastu językach, ESLint i warsztat CI, sprawdzenia przed każdym commitem. Przyciski na dole podążają teraz za trybem. Nowy opis.",
94
- "uk": "Готово до репозиторію: сторінка налаштувань одинадцятьма мовами, ESLint і CI-майстерня, перевірки перед кожним комітом. Кнопки внизу тепер залежать від режиму. Новий опис.",
95
- "zh-cn": "已为仓库做好准备:十一种语言的设置页面、ESLint 与 CI 工作流、每次提交前的检查。底部按钮现在会随模式变化。全新的说明文字。"
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.alias-workbench",
3
- "version": "0.9.8",
3
+ "version": "0.9.9",
4
4
  "description": "Creates aliases the comfortable way — devices that vis, Alexa and the device adapter understand. Templates do the work: shipped ones for HomeMatic and Tasmota, your own for everything else. Live values while you build, dry run before anything is written.",
5
5
  "author": {
6
6
  "name": "Ricardo Hipp",
@@ -22,7 +22,7 @@
22
22
  "esbuild": "^0.28.2"
23
23
  },
24
24
  "scripts": {
25
- "build": "esbuild src/detector-bundle.js --bundle --minify --format=iife --target=es2019 --outfile=admin/detector.js",
25
+ "build": "esbuild src-admin/detector-bundle.js --bundle --minify --format=iife --target=es2019 --outfile=admin/detector.js",
26
26
  "lint": "eslint .",
27
27
  "lint:fix": "eslint . --fix",
28
28
  "test:package": "mocha test/package.js --exit",