iobroker.laundrylens 0.4.9 → 0.4.10

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/README.md CHANGED
@@ -104,6 +104,11 @@ The defaults are tuned for Siemens iQ appliances. Detection threshold is a trade
104
104
 
105
105
  ### **WORK IN PROGRESS**
106
106
 
107
+ ### 0.4.10 (2026-08-26)
108
+ - Fix: found the actual root cause of the anti-crease false-restart bug (0.4.9 only clarified the checkbox wording) - `main.js` built the config object passed into `WashDataManager` field-by-field, and `ignoreAntiKnitter` was missing from that list entirely, so the lock-out protection could never activate regardless of the checkbox or a saved reference pattern
109
+ - Fix: found and fixed two more settings silently broken by the exact same kind of omission, which likewise never took effect no matter what was configured: "Program detection threshold (%)" (`matchThreshold`) and "Instant adoption from confidence (%)" (`instantConfirmThreshold`)
110
+ - Added a regression test (`tests/test_manager_config_wiring.js`) that checks every setting `WashDataManager` reads is actually passed through from `main.js`, to catch this class of bug in the future
111
+
107
112
  ### 0.4.9 (2026-08-24)
108
113
  - Fix: on dryers, anti-crease tumbling after the beep could be mistaken for the start of a new cycle even when a reference pattern had been recorded, because the lock-out protection was tied to the "Ignore saved anti-crease pattern" checkbox rather than to whether a pattern actually exists - clarified the checkbox's label/help text (was easy to read backwards) and added a hint after saving a pattern if that checkbox still needs to be switched off
109
114
 
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "laundrylens",
4
- "version": "0.4.9",
4
+ "version": "0.4.10",
5
5
  "news": {
6
+ "0.4.10": {
7
+ "en": "Fix: found the real root cause of the anti-crease false-restart bug (0.4.9 only clarified wording): main.js built the config object passed into WashDataManager field-by-field, and \"ignoreAntiKnitter\" was missing from that list entirely - so the lock-out protection could never activate no matter what the checkbox was set to, even with a reference pattern saved. Also found and fixed two more settings silently affected by the exact same kind of omission, which likewise never took effect regardless of what was configured: \"Program detection threshold (%)\" (matchThreshold) and \"Instant adoption from confidence (%)\" (instantConfirmThreshold). Added a regression test that checks every setting WashDataManager reads is actually passed through from main.js.",
8
+ "de": "Fix: die eigentliche Ursache des Anti-Knitter-Fehl-Neustart-Bugs gefunden (0.4.9 hatte nur die Formulierung klargestellt): main.js baute das an WashDataManager übergebene Config-Objekt Feld für Feld zusammen, und „ignoreAntiKnitter\" fehlte komplett in dieser Liste – die Sperrzeit-Schutzlogik konnte dadurch nie aktiviert werden, egal wie die Checkbox stand, selbst mit gespeichertem Referenzmuster. Zusätzlich zwei weitere Einstellungen gefunden und behoben, die genau demselben Fehler zum Opfer gefallen waren und dadurch nie wirkten, egal was eingestellt war: „Programm-Erkennungs-Schwelle (%)\" (matchThreshold) und „Sofortübernahme ab Konfidenz (%)\" (instantConfirmThreshold). Regressionstest ergänzt, der prüft, dass jede von WashDataManager gelesene Einstellung auch tatsächlich aus main.js durchgereicht wird.",
9
+ "ru": "Исправление: найдена настоящая причина бага с ложным перезапуском из-за защиты от сминания (в 0.4.9 была уточнена только формулировка): main.js собирал объект конфигурации для WashDataManager поле за полем, и «ignoreAntiKnitter» в этом списке полностью отсутствовал — защита с блокировкой поэтому никогда не могла активироваться, независимо от положения чекбокса, даже с сохранённым шаблоном. Также найдены и исправлены ещё две настройки, пострадавшие от такой же ошибки и никогда не действовавшие, что бы ни было настроено: «Порог распознавания программы (%)» (matchThreshold) и «Мгновенное принятие от уверенности (%)» (instantConfirmThreshold). Добавлен регрессионный тест, проверяющий, что каждая настройка, читаемая WashDataManager, действительно передаётся из main.js.",
10
+ "pt": "Correção: encontrada a causa raiz real do bug de reinício falso por anti-amarrotamento (a 0.4.9 apenas esclareceu o texto): o main.js construía o objeto de configuração passado ao WashDataManager campo a campo, e \"ignoreAntiKnitter\" estava totalmente ausente dessa lista - por isso a proteção de bloqueio nunca podia ser ativada, independentemente do estado da caixa de seleção, mesmo com um padrão salvo. Também encontradas e corrigidas mais duas configurações afetadas pelo mesmo tipo de omissão, que igualmente nunca tinham efeito: \"Limite de detecção de programa (%)\" (matchThreshold) e \"Adoção instantânea a partir da confiança (%)\" (instantConfirmThreshold). Adicionado um teste de regressão que verifica se toda configuração lida pelo WashDataManager é realmente repassada pelo main.js.",
11
+ "nl": "Fix: de echte oorzaak van de valse-herstart-bug bij kreukbescherming gevonden (0.4.9 verduidelijkte alleen de tekst): main.js bouwde het configuratie-object voor WashDataManager veld voor veld op, en \"ignoreAntiKnitter\" ontbrak volledig in die lijst - de vergrendelingsbescherming kon daardoor nooit worden geactiveerd, ongeacht de stand van het selectievakje, zelfs met een opgeslagen patroon. Ook nog twee andere instellingen gevonden en verholpen die aan dezelfde soort omissie leden en daardoor nooit effect hadden: \"Programmaherkenningsdrempel (%)\" (matchThreshold) en \"Direct overnemen vanaf betrouwbaarheid (%)\" (instantConfirmThreshold). Regressietest toegevoegd die controleert of elke instelling die WashDataManager leest ook echt vanuit main.js wordt doorgegeven.",
12
+ "fr": "Correction : la véritable cause du bug de faux redémarrage anti-froissage a été trouvée (la 0.4.9 n'avait clarifié que le texte) : main.js construisait l'objet de configuration passé à WashDataManager champ par champ, et « ignoreAntiKnitter » manquait entièrement dans cette liste - la protection par verrouillage ne pouvait donc jamais s'activer, quel que soit l'état de la case à cocher, même avec un motif enregistré. Deux autres réglages ont aussi été trouvés et corrigés, victimes du même type d'omission et n'ayant donc jamais d'effet : « Seuil de détection du programme (%) » (matchThreshold) et « Adoption immédiate à partir de la confiance (%) » (instantConfirmThreshold). Ajout d'un test de régression qui vérifie que chaque réglage lu par WashDataManager est bien transmis depuis main.js.",
13
+ "it": "Correzione: trovata la vera causa del bug del falso riavvio anti-piega (la 0.4.9 aveva solo chiarito il testo): main.js costruiva l'oggetto di configurazione passato a WashDataManager campo per campo, e \"ignoreAntiKnitter\" mancava completamente da quell'elenco - la protezione di blocco non poteva quindi mai attivarsi, indipendentemente dallo stato della casella, anche con un modello salvato. Trovate e corrette anche altre due impostazioni colpite dallo stesso tipo di omissione, mai effettive indipendentemente da cosa fosse configurato: \"Soglia di rilevamento programma (%)\" (matchThreshold) e \"Adozione istantanea dalla confidenza (%)\" (instantConfirmThreshold). Aggiunto un test di regressione che verifica che ogni impostazione letta da WashDataManager sia effettivamente passata da main.js.",
14
+ "es": "Corrección: se encontró la causa real del error de reinicio falso por antiarrugas (la 0.4.9 solo aclaró el texto): main.js construía el objeto de configuración pasado a WashDataManager campo por campo, y \"ignoreAntiKnitter\" faltaba por completo en esa lista - la protección de bloqueo nunca podía activarse, sin importar el estado de la casilla, incluso con un patrón guardado. También se encontraron y corrigieron otras dos configuraciones afectadas por el mismo tipo de omisión, que nunca tenían efecto sin importar lo configurado: \"Umbral de detección de programa (%)\" (matchThreshold) y \"Adopción instantánea desde confianza (%)\" (instantConfirmThreshold). Se añadió una prueba de regresión que verifica que cada ajuste leído por WashDataManager realmente se pase desde main.js.",
15
+ "pl": "Poprawka: znaleziono prawdziwą przyczynę błędu fałszywego restartu przy ochronie przed gnieceniem (0.4.9 doprecyzowała tylko tekst): main.js budował obiekt konfiguracji przekazywany do WashDataManager pole po polu, a \"ignoreAntiKnitter\" całkowicie brakowało na tej liście - ochrona blokady nigdy nie mogła się więc aktywować, niezależnie od stanu pola wyboru, nawet przy zapisanym wzorcu. Znaleziono i naprawiono też dwa kolejne ustawienia dotknięte tym samym rodzajem pominięcia, które nigdy nie działały niezależnie od konfiguracji: \"Próg wykrywania programu (%)\" (matchThreshold) i \"Natychmiastowe przyjęcie od pewności (%)\" (instantConfirmThreshold). Dodano test regresyjny sprawdzający, czy każde ustawienie odczytywane przez WashDataManager jest rzeczywiście przekazywane z main.js.",
16
+ "uk": "Виправлення: знайдено справжню причину бага фальшивого перезапуску через захист від зминання (0.4.9 лише уточнила формулювання): main.js збирав об'єкт конфігурації для WashDataManager поле за полем, і «ignoreAntiKnitter» повністю бракувало в цьому списку - тому захист блокування ніколи не міг активуватися, незалежно від стану прапорця, навіть зі збереженим шаблоном. Також знайдено й виправлено ще два налаштування, що постраждали від такого самого типу пропуску і тому ніколи не діяли, що б не було налаштовано: «Поріг розпізнавання програми (%)» (matchThreshold) і «Миттєве прийняття від впевненості (%)» (instantConfirmThreshold). Додано регресійний тест, який перевіряє, що кожне налаштування, яке читає WashDataManager, дійсно передається з main.js.",
17
+ "zh-cn": "修复:找到了防皱误重启问题的真正根源(0.4.9 只是澄清了措辞):main.js 在构建传给 WashDataManager 的配置对象时逐字段列出,而\"ignoreAntiKnitter\"完全没有列入其中——因此无论复选框如何设置,即使已保存参考模式,锁定保护也永远无法激活。同时还发现并修复了另外两个受到同类遗漏影响、无论如何配置都从未生效的设置:\"程序识别阈值 (%)\"(matchThreshold)和\"从置信度立即采用 (%)\"(instantConfirmThreshold)。新增了一个回归测试,用于检查 WashDataManager 读取的每一项设置是否都确实从 main.js 传递过来。"
18
+ },
6
19
  "0.4.9": {
7
20
  "en": "Fix: on dryers, anti-crease tumbling after the beep could be mistaken for a new cycle starting, even when a reference pattern had been recorded, because the lock-out protection was tied to the \"Ignore saved anti-crease pattern\" checkbox rather than to the pattern's existence. Clarified that checkbox's label and help text, since it was easy to read backwards. The app now also shows a hint after saving a reference pattern if that checkbox still needs to be turned off for the pattern to actually be used.",
8
21
  "de": "Fix: Bei Trocknern konnte das Knitterschutz-Nachlaufen nach dem Piepton fälschlich als neuer Zyklus erkannt werden, selbst wenn ein Referenzmuster gespeichert war, weil der Sperrzeit-Schutz an die Checkbox „Gespeichertes Anti-Knitter-Muster ignorieren\" gekoppelt war statt an das Vorhandensein des Musters. Beschriftung und Hilfetext dieser Checkbox klarer formuliert, da sie leicht missverständlich waren. Die App zeigt jetzt außerdem nach dem Speichern eines Referenzmusters einen Hinweis, falls diese Checkbox noch ausgeschaltet werden muss, damit das Muster tatsächlich genutzt wird.",
package/main.js CHANGED
@@ -150,6 +150,18 @@ class WashdataAdapter extends utils.Adapter {
150
150
  cfg.autoConfirmThreshold !== null
151
151
  ? Number(cfg.autoConfirmThreshold)
152
152
  : 85,
153
+ instantConfirmThreshold:
154
+ cfg.instantConfirmThreshold !== undefined &&
155
+ cfg.instantConfirmThreshold !== null &&
156
+ cfg.instantConfirmThreshold !== ""
157
+ ? Number(cfg.instantConfirmThreshold)
158
+ : 92,
159
+ matchThreshold:
160
+ cfg.matchThreshold !== undefined &&
161
+ cfg.matchThreshold !== null &&
162
+ cfg.matchThreshold !== ""
163
+ ? Number(cfg.matchThreshold)
164
+ : 55,
153
165
  ignoreAntiKnitter: cfg.ignoreAntiKnitter !== false,
154
166
  },
155
167
  ];
@@ -193,6 +205,18 @@ class WashdataAdapter extends utils.Adapter {
193
205
  d.autoConfirmThreshold !== null
194
206
  ? Number(d.autoConfirmThreshold)
195
207
  : 85,
208
+ instantConfirmThreshold:
209
+ d.instantConfirmThreshold !== undefined &&
210
+ d.instantConfirmThreshold !== null &&
211
+ d.instantConfirmThreshold !== ""
212
+ ? Number(d.instantConfirmThreshold)
213
+ : 92,
214
+ matchThreshold:
215
+ d.matchThreshold !== undefined &&
216
+ d.matchThreshold !== null &&
217
+ d.matchThreshold !== ""
218
+ ? Number(d.matchThreshold)
219
+ : 55,
196
220
  ignoreAntiKnitter: d.ignoreAntiKnitter !== false,
197
221
  }));
198
222
  }
@@ -241,6 +265,9 @@ class WashdataAdapter extends utils.Adapter {
241
265
  matchIntervalMin: deviceCfg.matchIntervalMin || 5,
242
266
  matchPersist: deviceCfg.matchPersist || 3,
243
267
  autoConfirmThreshold: deviceCfg.autoConfirmThreshold ?? 85,
268
+ instantConfirmThreshold: deviceCfg.instantConfirmThreshold ?? 92,
269
+ matchThreshold: deviceCfg.matchThreshold ?? 55,
270
+ ignoreAntiKnitter: deviceCfg.ignoreAntiKnitter,
244
271
  },
245
272
  {
246
273
  onStateChange: (state, status) =>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.laundrylens",
3
- "version": "0.4.9",
3
+ "version": "0.4.10",
4
4
  "description": "ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time",
5
5
  "author": {
6
6
  "name": "backfisch88",