iobroker.laundrylens 0.4.9 → 0.4.11

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,15 @@ 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.11 (2026-08-26)
108
+ - Fix: audited every remaining admin UI setting for the same class of bug fixed in 0.4.10 (a field silently never reaching the code that uses it) and found one more - "Notify also for probable program" (`notifyOnProbable`) was read via the device-config lookup but never included in what that lookup actually returns, so the checkbox had no effect
109
+ - Extended `tests/test_manager_config_wiring.js` to also check fields read directly off the device-config lookup (not just fields passed into `WashDataManager`), so this class of bug should be caught automatically going forward
110
+
111
+ ### 0.4.10 (2026-08-26)
112
+ - 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
113
+ - 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`)
114
+ - 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
115
+
107
116
  ### 0.4.9 (2026-08-24)
108
117
  - 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
118
 
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "laundrylens",
4
- "version": "0.4.9",
4
+ "version": "0.4.11",
5
5
  "news": {
6
+ "0.4.11": {
7
+ "en": "Fix: audited every remaining admin UI setting for the same class of bug fixed in 0.4.10 (a field silently never reaching the code that uses it) and found one more: \"Notify also for probable program\" (notifyOnProbable) was read in code but never returned by the internal device-config lookup, so checking it had no effect - Telegram updates always waited for the full auto-confirm threshold regardless of this setting. The regression test from 0.4.10 was extended to also check this class of field (read from the device-config lookup directly, not just fields passed into WashDataManager), so this category of bug should now be caught automatically going forward.",
8
+ "de": "Fix: alle übrigen Admin-Einstellungen auf dieselbe Fehlerart geprüft, die in 0.4.10 behoben wurde (ein Feld, das nie beim nutzenden Code ankommt) - und noch einen Fall gefunden: „Auch bei wahrscheinlichem Programm benachrichtigen\" (notifyOnProbable) wurde im Code gelesen, aber vom internen Geräte-Konfigurations-Lookup nie zurückgegeben, sodass die Checkbox wirkungslos war - Telegram-Updates warteten immer auf die volle Auto-Bestätigungs-Schwelle, unabhängig von dieser Einstellung. Der Regressionstest aus 0.4.10 wurde erweitert, um auch diese Art von Feld zu prüfen (direkt aus dem Geräte-Konfigurations-Lookup gelesen, nicht nur an WashDataManager übergebene Felder) - dieser Fehlertyp sollte künftig automatisch auffallen.",
9
+ "ru": "Исправление: проверены все оставшиеся настройки админ-интерфейса на тот же тип ошибки, что был исправлен в 0.4.10 (поле, которое незаметно никогда не доходит до использующего его кода) - и найден ещё один случай: «Уведомлять также при вероятной программе» (notifyOnProbable) считывался в коде, но никогда не возвращался внутренним поиском конфигурации устройства, поэтому включение этого флажка не имело эффекта - уведомления Telegram всегда ждали полного порога автоподтверждения независимо от этой настройки. Регрессионный тест из 0.4.10 расширен для проверки и этого класса полей.",
10
+ "pt": "Correção: auditadas todas as demais configurações da interface admin em busca do mesmo tipo de bug corrigido na 0.4.10 (um campo que silenciosamente nunca chega ao código que o usa) - e encontrado mais um caso: \"Notificar também para programa provável\" (notifyOnProbable) era lido no código, mas nunca retornado pela busca interna de configuração do dispositivo, então marcá-lo não tinha efeito - as atualizações do Telegram sempre esperavam o limite total de confirmação automática, independentemente dessa configuração. O teste de regressão da 0.4.10 foi ampliado para também verificar essa classe de campo.",
11
+ "nl": "Fix: alle overige admin-instellingen gecontroleerd op hetzelfde soort bug dat in 0.4.10 is opgelost (een veld dat stilletjes nooit bij de gebruikende code terechtkomt) - en nog één geval gevonden: \"Ook melden bij waarschijnlijk programma\" (notifyOnProbable) werd in de code gelezen, maar nooit geretourneerd door de interne apparaat-configuratie-opzoeking, waardoor het aanvinken geen effect had - Telegram-updates wachtten altijd op de volledige auto-bevestigingsdrempel, ongeacht deze instelling. De regressietest uit 0.4.10 is uitgebreid om ook dit soort veld te controleren.",
12
+ "fr": "Correction : audit de tous les autres réglages de l'interface admin pour le même type de bug corrigé dans la 0.4.10 (un champ qui n'atteint silencieusement jamais le code qui l'utilise) - et un cas de plus trouvé : « Notifier aussi pour un programme probable » (notifyOnProbable) était lu dans le code mais jamais renvoyé par la recherche interne de configuration de l'appareil, donc cocher la case n'avait aucun effet - les mises à jour Telegram attendaient toujours le seuil complet d'auto-confirmation, quel que soit ce réglage. Le test de régression de la 0.4.10 a été étendu pour vérifier aussi cette catégorie de champ.",
13
+ "it": "Correzione: verificate tutte le altre impostazioni dell'interfaccia admin per lo stesso tipo di bug corretto nella 0.4.10 (un campo che silenziosamente non raggiunge mai il codice che lo usa) - e trovato un altro caso: \"Notifica anche per programma probabile\" (notifyOnProbable) veniva letto nel codice ma mai restituito dalla ricerca interna della configurazione del dispositivo, quindi selezionarlo non aveva alcun effetto - gli aggiornamenti Telegram attendevano sempre la soglia completa di auto-conferma, indipendentemente da questa impostazione. Il test di regressione della 0.4.10 è stato esteso per verificare anche questa categoria di campo.",
14
+ "es": "Corrección: auditadas todas las demás configuraciones de la interfaz de administración en busca del mismo tipo de error corregido en la 0.4.10 (un campo que silenciosamente nunca llega al código que lo usa) - y se encontró un caso más: \"Notificar también para programa probable\" (notifyOnProbable) se leía en el código pero nunca era devuelto por la búsqueda interna de configuración del dispositivo, por lo que marcarlo no tenía efecto - las actualizaciones de Telegram siempre esperaban el umbral completo de auto-confirmación, sin importar esta configuración. La prueba de regresión de la 0.4.10 se amplió para verificar también esta clase de campo.",
15
+ "pl": "Poprawka: sprawdzono wszystkie pozostałe ustawienia interfejsu admina pod kątem tego samego rodzaju błędu naprawionego w 0.4.10 (pole, które nigdy po cichu nie dociera do kodu, który go używa) - i znaleziono jeszcze jeden przypadek: \"Powiadamiaj też przy prawdopodobnym programie\" (notifyOnProbable) było odczytywane w kodzie, ale nigdy nie było zwracane przez wewnętrzne wyszukiwanie konfiguracji urządzenia, więc zaznaczenie go nie miało efektu - powiadomienia Telegram zawsze czekały na pełny próg auto-potwierdzenia, niezależnie od tego ustawienia. Test regresyjny z 0.4.10 został rozszerzony, by sprawdzać także tę klasę pól.",
16
+ "uk": "Виправлення: перевірено всі інші налаштування адмін-інтерфейсу на той самий тип бага, виправленого в 0.4.10 (поле, яке непомітно ніколи не доходить до коду, що його використовує) - і знайдено ще один випадок: «Сповіщати також при ймовірній програмі» (notifyOnProbable) зчитувалося в коді, але ніколи не поверталося внутрішнім пошуком конфігурації пристрою, тому позначення прапорця не мало ефекту - сповіщення Telegram завжди чекали повного порогу автопідтвердження, незалежно від цього налаштування. Регресійний тест з 0.4.10 розширено для перевірки й цього класу полів.",
17
+ "zh-cn": "修复:审查了所有其余的管理界面设置,寻找与 0.4.10 中修复的同类错误(某字段悄悄地从未到达使用它的代码)——又发现了一个:\"可能程序也通知\"(notifyOnProbable)在代码中被读取,但内部设备配置查找从未返回它,因此勾选它没有任何效果——无论此设置如何,Telegram 更新始终等待完整的自动确认阈值。0.4.10 中的回归测试已扩展,以便也检查这一类字段。"
18
+ },
19
+ "0.4.10": {
20
+ "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.",
21
+ "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.",
22
+ "ru": "Исправление: найдена настоящая причина бага с ложным перезапуском из-за защиты от сминания (в 0.4.9 была уточнена только формулировка): main.js собирал объект конфигурации для WashDataManager поле за полем, и «ignoreAntiKnitter» в этом списке полностью отсутствовал — защита с блокировкой поэтому никогда не могла активироваться, независимо от положения чекбокса, даже с сохранённым шаблоном. Также найдены и исправлены ещё две настройки, пострадавшие от такой же ошибки и никогда не действовавшие, что бы ни было настроено: «Порог распознавания программы (%)» (matchThreshold) и «Мгновенное принятие от уверенности (%)» (instantConfirmThreshold). Добавлен регрессионный тест, проверяющий, что каждая настройка, читаемая WashDataManager, действительно передаётся из main.js.",
23
+ "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.",
24
+ "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.",
25
+ "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.",
26
+ "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.",
27
+ "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.",
28
+ "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.",
29
+ "uk": "Виправлення: знайдено справжню причину бага фальшивого перезапуску через захист від зминання (0.4.9 лише уточнила формулювання): main.js збирав об'єкт конфігурації для WashDataManager поле за полем, і «ignoreAntiKnitter» повністю бракувало в цьому списку - тому захист блокування ніколи не міг активуватися, незалежно від стану прапорця, навіть зі збереженим шаблоном. Також знайдено й виправлено ще два налаштування, що постраждали від такого самого типу пропуску і тому ніколи не діяли, що б не було налаштовано: «Поріг розпізнавання програми (%)» (matchThreshold) і «Миттєве прийняття від впевненості (%)» (instantConfirmThreshold). Додано регресійний тест, який перевіряє, що кожне налаштування, яке читає WashDataManager, дійсно передається з main.js.",
30
+ "zh-cn": "修复:找到了防皱误重启问题的真正根源(0.4.9 只是澄清了措辞):main.js 在构建传给 WashDataManager 的配置对象时逐字段列出,而\"ignoreAntiKnitter\"完全没有列入其中——因此无论复选框如何设置,即使已保存参考模式,锁定保护也永远无法激活。同时还发现并修复了另外两个受到同类遗漏影响、无论如何配置都从未生效的设置:\"程序识别阈值 (%)\"(matchThreshold)和\"从置信度立即采用 (%)\"(instantConfirmThreshold)。新增了一个回归测试,用于检查 WashDataManager 读取的每一项设置是否都确实从 main.js 传递过来。"
31
+ },
6
32
  "0.4.9": {
7
33
  "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
34
  "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,19 @@ 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,
165
+ notifyOnProbable: !!cfg.notifyOnProbable,
153
166
  ignoreAntiKnitter: cfg.ignoreAntiKnitter !== false,
154
167
  },
155
168
  ];
@@ -193,6 +206,19 @@ class WashdataAdapter extends utils.Adapter {
193
206
  d.autoConfirmThreshold !== null
194
207
  ? Number(d.autoConfirmThreshold)
195
208
  : 85,
209
+ instantConfirmThreshold:
210
+ d.instantConfirmThreshold !== undefined &&
211
+ d.instantConfirmThreshold !== null &&
212
+ d.instantConfirmThreshold !== ""
213
+ ? Number(d.instantConfirmThreshold)
214
+ : 92,
215
+ matchThreshold:
216
+ d.matchThreshold !== undefined &&
217
+ d.matchThreshold !== null &&
218
+ d.matchThreshold !== ""
219
+ ? Number(d.matchThreshold)
220
+ : 55,
221
+ notifyOnProbable: !!d.notifyOnProbable,
196
222
  ignoreAntiKnitter: d.ignoreAntiKnitter !== false,
197
223
  }));
198
224
  }
@@ -241,6 +267,9 @@ class WashdataAdapter extends utils.Adapter {
241
267
  matchIntervalMin: deviceCfg.matchIntervalMin || 5,
242
268
  matchPersist: deviceCfg.matchPersist || 3,
243
269
  autoConfirmThreshold: deviceCfg.autoConfirmThreshold ?? 85,
270
+ instantConfirmThreshold: deviceCfg.instantConfirmThreshold ?? 92,
271
+ matchThreshold: deviceCfg.matchThreshold ?? 55,
272
+ ignoreAntiKnitter: deviceCfg.ignoreAntiKnitter,
244
273
  },
245
274
  {
246
275
  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.11",
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",