iobroker.laundrylens 0.4.35 → 0.4.37
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 +8 -0
- package/io-package.json +27 -27
- package/main.js +10 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -132,6 +132,14 @@ This also works inside the conditional `[...]` blocks: `[🌡️ Outside: {state
|
|
|
132
132
|
|
|
133
133
|
### **WORK IN PROGRESS**
|
|
134
134
|
|
|
135
|
+
### 0.4.37 (2026-10-03)
|
|
136
|
+
- Fix: three test files added in recent releases (`test_show_probable_program.js`, `test_cycle_finish_exception_guard.js`, `test_cycle_boundary_reset.js`) called the bare global `setTimeout()`/`setInterval()` directly in their fake-adapter mocks - the same mistake made and fixed before in other test files, missed again when writing these new ones. Brought in line with the native-timer-alias pattern used everywhere else in this suite (review checker E5004/E5005)
|
|
137
|
+
- Fix: `@iobroker/testing` devDependency bumped to `^6.3.0` (current; was `^6.2.2`)
|
|
138
|
+
|
|
139
|
+
### 0.4.36 (2026-10-03)
|
|
140
|
+
- Fix: follow-up to 0.4.34's `needsFeedback` fix, reported live - deleting a cycle (e.g. an unconfirmed one someone just discards without confirming/correcting it first) could also leave `needsFeedback` stuck on `true` forever, since only `confirmCycle`/`correctCycle` had been covered. `clearAllData` and `importConfig` had the same gap (both can also replace `cycleHistory`/profiles wholesale). All three now also re-sync `needsFeedback`; `clearAllData`/`importConfig` additionally re-sync `availablePrograms`
|
|
141
|
+
- Covered by 3 new test cases extending `tests/test_programs_and_feedback_sync.js`
|
|
142
|
+
|
|
135
143
|
### 0.4.35 (2026-10-03)
|
|
136
144
|
- Fix: reported live - `phaseText` could get stuck showing an earlier phase (e.g. "Aufheizen"/heating) while `phase` had correctly moved on (e.g. to "dryer_drying"). Root cause: `phase` was already written on every `_onTime()` tick (which fires frequently throughout a running cycle), but `phaseText` (the human-readable, localized, emoji-carrying label) was only ever written in `_onManagerState()` - which only runs on actual state transitions (off/starting/running/paused/ending), not on every phase change within a single long "running" period. Both data points now update together on every tick
|
|
137
145
|
- Covered by a new regression test (`tests/test_phase_text_tick_update.js`)
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "laundrylens",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.37",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.4.37": {
|
|
7
|
+
"en": "Fix: three test files added in recent releases (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js) called the bare global setTimeout()/setInterval() directly in their fake-adapter mocks, which the review checker's plain-timer-usage check flags - brought in line with the native-timer-alias pattern already used everywhere else in this test suite. Fix: bumped the @iobroker/testing devDependency to the current version (6.3.0).",
|
|
8
|
+
"de": "Fix: drei in juengeren Releases hinzugefuegte Testdateien (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js) riefen in ihren Fake-Adapter-Mocks das nackte globale setTimeout()/setInterval() direkt auf, was die Pruefung des Review-Checkers auf rohe Timer-Aufrufe meldet - an das in dieser Testsuite ueberall sonst verwendete native-Timer-Alias-Muster angeglichen. Fix: die devDependency @iobroker/testing auf die aktuelle Version (6.3.0) angehoben.",
|
|
9
|
+
"ru": "Исправление: три тестовых файла, добавленных в недавних релизах (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js), напрямую вызывали голый глобальный setTimeout()/setInterval() в своих фиктивных адаптерах, что отмечает проверка чекера на использование простых таймеров - приведено в соответствие с шаблоном нативных алиасов таймеров, уже используемым повсюду в этом наборе тестов. Исправление: devDependency @iobroker/testing обновлена до текущей версии (6.3.0).",
|
|
10
|
+
"pt": "Correcao: tres arquivos de teste adicionados em versoes recentes (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js) chamavam diretamente o setTimeout()/setInterval() global simples em seus mocks de adaptador falso, o que o verificador de revisao sinaliza - alinhados ao padrao de alias nativo de temporizador ja usado em todo o resto desta suite de testes. Correcao: a devDependency @iobroker/testing foi atualizada para a versao atual (6.3.0).",
|
|
11
|
+
"nl": "Fix: drie testbestanden die in recente releases zijn toegevoegd (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js) riepen in hun fake-adapter mocks rechtstreeks de kale globale setTimeout()/setInterval() aan, wat de controle van de review-checker op kaal timergebruik signaleert - in lijn gebracht met het native-timer-aliaspatroon dat al overal elders in deze testsuite wordt gebruikt. Fix: de devDependency @iobroker/testing bijgewerkt naar de huidige versie (6.3.0).",
|
|
12
|
+
"fr": "Correction : trois fichiers de test ajoutes dans des versions recentes (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js) appelaient directement le setTimeout()/setInterval() global brut dans leurs mocks de faux adaptateur, ce que signale la verification du checker sur l'utilisation brute des timers - alignes sur le modele d'alias natif de timer deja utilise partout ailleurs dans cette suite de tests. Correction : la devDependency @iobroker/testing mise a jour vers la version actuelle (6.3.0).",
|
|
13
|
+
"it": "Correzione: tre file di test aggiunti nelle release recenti (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js) chiamavano direttamente il setTimeout()/setInterval() globale nudo nei loro mock di adattatore fittizio, cosa segnalata dal controllo del checker sull'uso di timer semplici - allineati allo schema di alias nativo del timer gia usato ovunque nel resto di questa suite di test. Correzione: la devDependency @iobroker/testing aggiornata alla versione attuale (6.3.0).",
|
|
14
|
+
"es": "Correccion: tres archivos de prueba anadidos en versiones recientes (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js) llamaban directamente al setTimeout()/setInterval() global simple en sus mocks de adaptador simulado, lo que la verificacion del checker sobre uso de temporizadores simples marca - alineados con el patron de alias nativo de temporizador ya usado en el resto de esta suite de pruebas. Correccion: la devDependency @iobroker/testing actualizada a la version actual (6.3.0).",
|
|
15
|
+
"pl": "Poprawka: trzy pliki testowe dodane w ostatnich wydaniach (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js) wywolywaly bezposrednio goly globalny setTimeout()/setInterval() w swoich atrapach adaptera, co zglasza kontrola checkera dotyczaca uzycia prostych timerow - dostosowano do wzorca aliasow natywnych timera uzywanego juz wszedzie indziej w tym zestawie testow. Poprawka: zaktualizowano devDependency @iobroker/testing do aktualnej wersji (6.3.0).",
|
|
16
|
+
"uk": "Виправлення: три тестові файли, доданi в останніх релізах (test_show_probable_program.js, test_cycle_finish_exception_guard.js, test_cycle_boundary_reset.js), напряму викликали голий глобальний setTimeout()/setInterval() у своїх фіктивних адаптерах, що позначає перевірка чекера на використання простих таймерів - приведено у відповідність із шаблоном нативних псевдонімів таймера, який уже використовується всюди в цьому наборі тестів. Виправлення: devDependency @iobroker/testing оновлено до поточної версії (6.3.0).",
|
|
17
|
+
"zh-cn": "修复:最近版本中新增的三个测试文件(test_show_probable_program.js、test_cycle_finish_exception_guard.js、test_cycle_boundary_reset.js)在其伪造适配器中直接调用了原生的全局 setTimeout()/setInterval(),这会被审查检查器的简单计时器使用检测标记——现已与本测试套件中其余部分一致使用原生计时器别名写法。修复:将 @iobroker/testing 开发依赖升级到当前版本(6.3.0)。"
|
|
18
|
+
},
|
|
19
|
+
"0.4.36": {
|
|
20
|
+
"en": "Follow-up to 0.4.34's needsFeedback fix: deleting a cycle (e.g. an unconfirmed one someone just discards without confirming/correcting it first), clearing all data, or importing a config could also leave needsFeedback stuck on true, since only confirmCycle/correctCycle had been covered. Now also re-synced after deleteCycle, clearAllData and importConfig (the latter two also re-sync availablePrograms, since they can add/replace profiles too).",
|
|
21
|
+
"de": "Folgefix zum needsFeedback-Fix aus 0.4.34: Das Löschen eines Zyklus (z. B. eines unbestätigten, den man einfach verwirft, ohne ihn vorher zu bestätigen/korrigieren), das Löschen aller Daten oder der Import einer Konfiguration konnten needsFeedback ebenfalls dauerhaft auf true belassen, da bisher nur confirmCycle/correctCycle abgedeckt waren. Wird jetzt auch nach deleteCycle, clearAllData und importConfig synchronisiert (die letzten beiden synchronisieren zusätzlich availablePrograms, da sie auch Programme hinzufügen/ersetzen können).",
|
|
22
|
+
"ru": "Дополнение к исправлению needsFeedback из 0.4.34: удаление цикла (например, неподтверждённого, который просто отклоняют без предварительного подтверждения/исправления), очистка всех данных или импорт конфигурации тоже могли оставить needsFeedback застрявшим на true, поскольку ранее были покрыты только confirmCycle/correctCycle. Теперь также синхронизируется после deleteCycle, clearAllData и importConfig (последние два дополнительно синхронизируют availablePrograms, так как они тоже могут добавлять/заменять программы).",
|
|
23
|
+
"pt": "Acompanhamento da correção do needsFeedback em 0.4.34: excluir um ciclo (ex. um não confirmado que alguém apenas descarta sem confirmar/corrigir antes), limpar todos os dados ou importar uma configuração também podiam deixar needsFeedback preso em true, já que só confirmCycle/correctCycle haviam sido cobertos. Agora também é ressincronizado após deleteCycle, clearAllData e importConfig (os dois últimos também ressincronizam availablePrograms, já que podem adicionar/substituir programas).",
|
|
24
|
+
"nl": "Vervolg op de needsFeedback-fix van 0.4.34: het verwijderen van een cyclus (bijv. een onbevestigde die iemand gewoon weggooit zonder deze eerst te bevestigen/corrigeren), alle data wissen, of een configuratie importeren konden needsFeedback ook vast laten zitten op true, aangezien alleen confirmCycle/correctCycle waren afgedekt. Wordt nu ook opnieuw gesynchroniseerd na deleteCycle, clearAllData en importConfig (de laatste twee synchroniseren ook availablePrograms, omdat ze ook programma's kunnen toevoegen/vervangen).",
|
|
25
|
+
"fr": "Suite de la correction needsFeedback de la 0.4.29 : supprimer un cycle (par ex. un cycle non confirmé que l'on écarte simplement sans le confirmer/corriger au préalable), effacer toutes les données ou importer une configuration pouvaient aussi laisser needsFeedback bloqué sur true, car seuls confirmCycle/correctCycle étaient couverts. Désormais resynchronisé aussi après deleteCycle, clearAllData et importConfig (ces deux derniers resynchronisent aussi availablePrograms, car ils peuvent également ajouter/remplacer des programmes).",
|
|
26
|
+
"it": "Seguito della correzione di needsFeedback della 0.4.34: eliminare un ciclo (es. uno non confermato che viene semplicemente scartato senza prima confermarlo/correggerlo), cancellare tutti i dati o importare una configurazione potevano anch'essi lasciare needsFeedback bloccato su true, poiché erano coperti solo confirmCycle/correctCycle. Ora risincronizzato anche dopo deleteCycle, clearAllData e importConfig (questi ultimi due risincronizzano anche availablePrograms, poiché possono anche aggiungere/sostituire programmi).",
|
|
27
|
+
"es": "Seguimiento de la corrección de needsFeedback de 0.4.34: eliminar un ciclo (p. ej. uno no confirmado que simplemente se descarta sin confirmarlo/corregirlo antes), borrar todos los datos o importar una configuración también podían dejar needsFeedback atascado en true, ya que solo confirmCycle/correctCycle estaban cubiertos. Ahora también se resincroniza tras deleteCycle, clearAllData e importConfig (estos dos últimos también resincronizan availablePrograms, ya que pueden añadir/sustituir programas).",
|
|
28
|
+
"pl": "Kontynuacja poprawki needsFeedback z 0.4.34: usunięcie cyklu (np. niepotwierdzonego, który ktoś po prostu odrzuca bez wcześniejszego potwierdzenia/poprawienia), wyczyszczenie wszystkich danych lub import konfiguracji mogły również pozostawić needsFeedback na stałe na true, ponieważ wcześniej objęto tylko confirmCycle/correctCycle. Teraz synchronizowane również po deleteCycle, clearAllData i importConfig (te dwa ostatnie synchronizują też availablePrograms, ponieważ mogą dodawać/zastępować programy).",
|
|
29
|
+
"uk": "Продовження виправлення needsFeedback з 0.4.34: видалення циклу (наприклад, непідтвердженого, який просто відхиляють без попереднього підтвердження/виправлення), очищення всіх даних або імпорт конфігурації також могли залишати needsFeedback застряглим на true, оскільки раніше були охоплені лише confirmCycle/correctCycle. Тепер також синхронізується після deleteCycle, clearAllData та importConfig (останні два також синхронізують availablePrograms, оскільки вони можуть додавати/замінювати програми).",
|
|
30
|
+
"zh-cn": "0.4.34 needsFeedback 修复的后续:删除某个周期(例如直接丢弃一个未确认的周期,而不先确认/更正它)、清除所有数据或导入配置,也可能导致 needsFeedback 一直卡在 true,因为此前只覆盖了 confirmCycle/correctCycle。现在 deleteCycle、clearAllData 和 importConfig 之后也会重新同步(后两者还会同步 availablePrograms,因为它们也可能添加/替换程序)。"
|
|
31
|
+
},
|
|
6
32
|
"0.4.35": {
|
|
7
33
|
"en": "Fix: phaseText could get stuck showing an earlier phase (e.g. \"Aufheizen\"/heating) while phase correctly moved on (e.g. to \"dryer_drying\") - phase was already updated on every tick, but phaseText (the human-readable, localized label) was only ever written at actual state transitions, not on every phase change within a single running cycle. Both now update together on every tick.",
|
|
8
34
|
"de": "Fix: phaseText konnte auf einer älteren Phase hängen bleiben (z. B. \"Aufheizen\"), während phase korrekt weiterlief (z. B. zu \"dryer_drying\") - phase wurde bereits bei jedem Tick aktualisiert, phaseText (das menschenlesbare, übersetzte Label) aber nur bei tatsächlichen Zustandsübergängen, nicht bei jedem Phasenwechsel innerhalb eines laufenden Zyklus. Beide werden jetzt gemeinsam bei jedem Tick aktualisiert.",
|
|
@@ -67,32 +93,6 @@
|
|
|
67
93
|
"pl": "Poprawka: prawdziwe zgloszenie bledu - zakladka administratora pokazywala suszarke jako wylaczona, podczas gdy datapoint stanu nadal pokazywal \"Running\". Przyczyna: sciezka szybkiego zakonczenia cyklu suszarki przy ochronie przed gnieceniem (\"power drop\" - wymusza zakonczenie cyklu 45s po nagłym spadku mocy, aby zareagowac szybciej niz czekajac na pelne opoznienie wylaczenia) ustawiala stan wewnetrzny na wylaczony bezposrednio, ale nigdy nie powiadamiala o tym reszty adaptera - dlatego datapointy state/stateText/running/program/phase pozostawaly zamrozone na ostatniej wartosci sprzed spadku, mimo ze status na zywo odczytywany przez zakladke administratora byl juz poprawny. Naprawiono, wywolujac to samo powiadomienie, ktore wywoluje juz normalne przejscie konca cyklu. Jesli widzisz to teraz, ponowne uruchomienie adaptera natychmiast czysci utkniete wartosci bez czekania na kolejny cykl.",
|
|
68
94
|
"uk": "Виправлення: реальне повідомлення про помилку - вкладка адміністратора показувала сушарку вимкненою, тоді як датапоінт стану все ще показував \"Running\". Причина: шлях швидкого завершення циклу сушарки при захисті від зминання (\"power drop\" - примусово завершує цикл через 45 секунд після різкого падіння потужності, щоб реагувати швидше за повне очікування затримки вимкнення) встановлював внутрішній стан на вимкнено напряму, але ніколи не повідомляв про це решту адаптера - тому датапоінти state/stateText/running/program/phase залишалися замороженими на останньому значенні до падіння, хоча живий статус, який читає вкладка адміністратора, вже був коректним. Виправлено викликом того самого сповіщення, яке вже викликає звичайний перехід у кінці циклу. Якщо ви бачите це зараз, перезапуск адаптера негайно очищує застряглі значення без очікування наступного циклу.",
|
|
69
95
|
"zh-cn": "修复:一个真实的问题反馈——管理标签页显示烘干机已关闭,但状态数据点仍显示「Running」。根本原因:烘干机的防皱「功率骤降」快速结束路径(在功率突然下降 45 秒后强制结束周期,以比等待完整关闭延迟更快地做出反应)直接将内存中的状态设为关闭,但从未通知适配器的其余部分——因此 state/stateText/running/program/phase 数据点一直冻结在骤降前的最后一个值,尽管管理标签页读取的实时状态早已正确。修复方法是触发与正常周期结束转换相同的通知。如果你现在正遇到这个问题,重启适配器即可立即清除卡住的值,无需等待下一个周期。"
|
|
70
|
-
},
|
|
71
|
-
"0.4.30": {
|
|
72
|
-
"en": "Fix: elapsedTime declares role \"value.interval\", which requires its value in seconds, but it was computed and stored in minutes everywhere (the state definition's unit, the one-time migration for existing installs, main.js's periodic update, and the live snapshot the admin tab reads via getStatus). All four now consistently use seconds, matching timeRemaining/totalDuration. Fix: removed the sinon devDependency again - it's already provided transitively via @iobroker/testing, so listing it directly was redundant (review checker E0063). Fix: a second test file's fake-adapter timers reworked to use this suite's established native-setTimeout/setInterval alias pattern (review checker E5004/E5005).",
|
|
73
|
-
"de": "Fix: elapsedTime deklariert die Rolle \"value.interval\", die einen Wert in Sekunden erfordert, wurde aber ueberall in Minuten berechnet und gespeichert (die unit der State-Definition, die einmalige Migration fuer bestehende Installationen, das periodische Update in main.js sowie der Live-Snapshot, den der Admin-Tab ueber getStatus liest). Alle vier Stellen nutzen jetzt konsistent Sekunden, passend zu timeRemaining/totalDuration. Fix: die devDependency sinon wieder entfernt - sie wird bereits transitiv ueber @iobroker/testing bereitgestellt, die direkte Auflistung war daher ueberfluessig (Review-Checker E0063). Fix: die Fake-Adapter-Timer einer weiteren Testdatei auf das in dieser Suite etablierte native-setTimeout/setInterval-Alias-Muster umgestellt (Review-Checker E5004/E5005).",
|
|
74
|
-
"ru": "Исправление: elapsedTime объявляет роль \"value.interval\", которая требует значение в секундах, но оно везде вычислялось и хранилось в минутах (unit в определении состояния, разовая миграция для существующих установок, периодическое обновление в main.js и живой снимок, который вкладка администратора читает через getStatus). Теперь все четыре места единообразно используют секунды, как timeRemaining/totalDuration. Исправление: devDependency sinon снова удалена - она уже предоставляется транзитивно через @iobroker/testing, поэтому её прямое указание было избыточным (чекер ревью E0063). Исправление: таймеры фиктивного адаптера ещё одного тестового файла переведены на принятый в этом наборе тестов шаблон нативных алиасов setTimeout/setInterval (чекер ревью E5004/E5005).",
|
|
75
|
-
"pt": "Correcao: elapsedTime declara o papel \"value.interval\", que exige o valor em segundos, mas era calculado e armazenado em minutos em todos os lugares (a unit da definicao do estado, a migracao unica para instalacoes existentes, a atualizacao periodica em main.js e o snapshot ao vivo que a aba de administracao le via getStatus). Os quatro agora usam segundos de forma consistente, como timeRemaining/totalDuration. Correcao: a devDependency sinon foi removida novamente - ja e fornecida de forma transitiva via @iobroker/testing, entao listar diretamente era redundante (verificador de revisao E0063). Correcao: os temporizadores do adaptador simulado de outro arquivo de teste foram ajustados para o padrao de alias nativo setTimeout/setInterval ja estabelecido nesta suite (verificador de revisao E5004/E5005).",
|
|
76
|
-
"nl": "Fix: elapsedTime declareert de rol \"value.interval\", die de waarde in seconden vereist, maar werd overal in minuten berekend en opgeslagen (de unit van de state-definitie, de eenmalige migratie voor bestaande installaties, de periodieke update in main.js en de live-snapshot die het admin-tabblad via getStatus leest). Alle vier gebruiken nu consistent seconden, zoals timeRemaining/totalDuration. Fix: de devDependency sinon opnieuw verwijderd - deze wordt al transitief geleverd via @iobroker/testing, dus direct vermelden was overbodig (review-checker E0063). Fix: de nep-adaptertimers van nog een testbestand omgezet naar het in deze suite gevestigde native-setTimeout/setInterval-aliaspatroon (review-checker E5004/E5005).",
|
|
77
|
-
"fr": "Correction : elapsedTime declare le role \"value.interval\", qui exige une valeur en secondes, mais celle-ci etait calculee et stockee en minutes partout (l'unit de la definition d'etat, la migration ponctuelle pour les installations existantes, la mise a jour periodique dans main.js et l'instantane en direct que l'onglet admin lit via getStatus). Les quatre utilisent desormais les secondes de maniere coherente, comme timeRemaining/totalDuration. Correction : la devDependency sinon a ete retiree de nouveau - elle est deja fournie de maniere transitive via @iobroker/testing, la lister directement etait donc redondant (verificateur de revue E0063). Correction : les timers du faux adaptateur d'un autre fichier de test ont ete alignes sur le modele d'alias natif setTimeout/setInterval deja etabli dans cette suite (verificateur de revue E5004/E5005).",
|
|
78
|
-
"it": "Correzione: elapsedTime dichiara il ruolo \"value.interval\", che richiede il valore in secondi, ma veniva calcolato e memorizzato ovunque in minuti (l'unit della definizione dello stato, la migrazione una tantum per le installazioni esistenti, l'aggiornamento periodico in main.js e lo snapshot live letto dalla scheda admin tramite getStatus). Tutti e quattro ora usano in modo coerente i secondi, come timeRemaining/totalDuration. Correzione: la devDependency sinon e stata rimossa di nuovo - e gia fornita in modo transitivo tramite @iobroker/testing, quindi elencarla direttamente era ridondante (checker di revisione E0063). Correzione: i timer del finto adattatore di un altro file di test sono stati allineati allo schema di alias nativo setTimeout/setInterval gia stabilito in questa suite (checker di revisione E5004/E5005).",
|
|
79
|
-
"es": "Correccion: elapsedTime declara el rol \"value.interval\", que exige el valor en segundos, pero se calculaba y almacenaba en minutos en todas partes (la unit de la definicion del estado, la migracion unica para instalaciones existentes, la actualizacion periodica en main.js y la instantanea en vivo que la pestana de administracion lee mediante getStatus). Los cuatro usan ahora segundos de forma consistente, igual que timeRemaining/totalDuration. Correccion: se elimino de nuevo la devDependency sinon - ya se proporciona de forma transitiva via @iobroker/testing, por lo que listarla directamente era redundante (verificador de revision E0063). Correccion: los temporizadores del adaptador simulado de otro archivo de prueba se ajustaron al patron de alias nativo setTimeout/setInterval ya establecido en esta suite (verificador de revision E5004/E5005).",
|
|
80
|
-
"pl": "Poprawka: elapsedTime deklaruje role \"value.interval\", ktora wymaga wartosci w sekundach, ale wszedzie byla obliczana i przechowywana w minutach (unit definicji stanu, jednorazowa migracja dla istniejacych instalacji, okresowa aktualizacja w main.js oraz zrzut na zywo odczytywany przez zakladke admina przez getStatus). Wszystkie cztery miejsca uzywaja teraz spojnie sekund, tak jak timeRemaining/totalDuration. Poprawka: usunieto ponownie devDependency sinon - jest juz dostarczana tranzytywnie przez @iobroker/testing, wiec bezposrednie jej wymienianie bylo zbedne (checker przegladu E0063). Poprawka: timery falszywego adaptera w kolejnym pliku testowym dostosowano do juz ustalonego w tym zestawie wzorca aliasow natywnych setTimeout/setInterval (checker przegladu E5004/E5005).",
|
|
81
|
-
"uk": "Виправлення: elapsedTime оголошує роль \"value.interval\", яка вимагає значення в секундах, але воно всюди обчислювалося і зберігалося в хвилинах (unit у визначенні стану, одноразова міграція для наявних інсталяцій, періодичне оновлення в main.js та живий знімок, який вкладка адміністратора читає через getStatus). Тепер усі чотири місця узгоджено використовують секунди, як timeRemaining/totalDuration. Виправлення: devDependency sinon знову видалено - вона вже надається транзитивно через @iobroker/testing, тому пряме зазначення було зайвим (чекер перегляду E0063). Виправлення: таймери фіктивного адаптера ще одного тестового файлу переведено на вже усталений у цьому наборі шаблон нативних псевдонімів setTimeout/setInterval (чекер перегляду E5004/E5005).",
|
|
82
|
-
"zh-cn": "修复:elapsedTime 声明的角色为「value.interval」,该角色要求数值以秒为单位,但此前在所有位置都以分钟计算和存储(状态定义的 unit、面向现有安装的一次性迁移、main.js 中的周期性更新,以及管理标签页通过 getStatus 读取的实时快照)。现在这四处已统一改为秒,与 timeRemaining/totalDuration 保持一致。修复:再次移除了 sinon 这一开发依赖——它已经通过 @iobroker/testing 间接提供,直接列出属于多余(审查检查器 E0063)。修复:另一个测试文件中伪造适配器的计时器已改为本测试套件中已确立的原生 setTimeout/setInterval 别名写法(审查检查器 E5004/E5005)。"
|
|
83
|
-
},
|
|
84
|
-
"0.4.28": {
|
|
85
|
-
"en": "Dependency/repo-hygiene fixes reported by the ioBroker repository review: bumped @iobroker/testing to the current minimum (6.2.2). Replaced the GitHub noreply author email (not accepted by the review checker) with a real contact address in package.json, io-package.json and the README/LICENSE copyright lines. Reworked a test file's fake-adapter timers to use the same native-setTimeout/setInterval alias pattern already used everywhere else in the suite, so the checker's plain-timer-usage check no longer misidentifies it (the mock's job is exactly to forward to the real timer under the adapter.setTimeout name - behavior is unchanged).",
|
|
86
|
-
"de": "Abhaengigkeits-/Repo-Hygiene-Fixes aus dem ioBroker-Repository-Review: @iobroker/testing auf die aktuell geforderte Mindestversion (6.2.2) angehoben. Die GitHub-Noreply-Autoren-E-Mail (vom Review-Checker nicht akzeptiert) in package.json, io-package.json sowie den Copyright-Zeilen von README/LICENSE durch eine echte Kontaktadresse ersetzt. Die Fake-Adapter-Timer einer Testdatei auf dasselbe native-setTimeout/setInterval-Alias-Muster umgestellt, das im Rest der Testsuite bereits ueberall verwendet wird, damit die Checker-Pruefung auf rohe Timer-Aufrufe die Datei nicht mehr faelschlich meldet (die Mock-Funktion leitet ohnehin nur unter dem Namen adapter.setTimeout an den echten Timer weiter - Verhalten unveraendert).",
|
|
87
|
-
"ru": "Исправления зависимостей и гигиены репозитория по итогам ревью репозитория ioBroker: @iobroker/testing обновлён до текущего минимума (6.2.2). Адрес электронной почты автора GitHub noreply (не принимаемый чекером ревью) заменён на реальный контактный адрес в package.json, io-package.json и строках авторских прав README/LICENSE. Таймеры фиктивного адаптера в одном тестовом файле переведены на тот же шаблон нативных алиасов setTimeout/setInterval, который уже используется во всём остальном наборе тестов, чтобы проверка на использование простых таймеров больше не срабатывала ошибочно (мок и так лишь перенаправляет вызов под именем adapter.setTimeout к настоящему таймеру - поведение не изменилось).",
|
|
88
|
-
"pt": "Correcoes de dependencias/higiene do repositorio apontadas pela revisao do repositorio ioBroker: @iobroker/testing atualizado para o minimo atual (6.2.2). O e-mail de autor noreply do GitHub (nao aceito pelo verificador de revisao) foi substituido por um endereco de contato real no package.json, io-package.json e nas linhas de copyright do README/LICENSE. Os temporizadores do adaptador simulado de um arquivo de teste foram ajustados para usar o mesmo padrao de alias nativo setTimeout/setInterval ja usado em todo o restante da suite, para que a verificacao de uso de temporizadores simples do checker deixe de identifica-lo incorretamente (o mock apenas encaminha para o temporizador real sob o nome adapter.setTimeout - o comportamento nao muda).",
|
|
89
|
-
"nl": "Dependency-/repo-hygienefixes gemeld door de ioBroker-repository-review: @iobroker/testing bijgewerkt naar het huidige minimum (6.2.2). Het GitHub-noreply-auteurs-e-mailadres (niet geaccepteerd door de review-checker) vervangen door een echt contactadres in package.json, io-package.json en de copyright-regels van README/LICENSE. De nep-adaptertimers van een testbestand omgezet naar hetzelfde native-setTimeout/setInterval-aliaspatroon dat al overal elders in de testsuite wordt gebruikt, zodat de checkercontrole op kaal timergebruik het bestand niet langer ten onrechte meldt (de mock geeft toch al enkel door onder de naam adapter.setTimeout aan de echte timer - gedrag blijft ongewijzigd).",
|
|
90
|
-
"fr": "Corrections de dependances/hygiene du depot signalees par la revue du depot ioBroker : @iobroker/testing mis a jour vers le minimum actuel (6.2.2). L'adresse e-mail d'auteur noreply de GitHub (non acceptee par le verificateur de revue) remplacee par une veritable adresse de contact dans package.json, io-package.json ainsi que les lignes de copyright du README/LICENSE. Les timers du faux adaptateur d'un fichier de test reorganises pour utiliser le meme modele d'alias natif setTimeout/setInterval deja utilise partout ailleurs dans la suite, afin que la verification des appels de timer bruts par le checker ne le signale plus a tort (le mock ne fait que relayer vers le vrai timer sous le nom adapter.setTimeout - le comportement reste inchange).",
|
|
91
|
-
"it": "Correzioni di dipendenze/pulizia del repository segnalate dalla revisione del repository ioBroker: @iobroker/testing aggiornato al minimo attuale (6.2.2). L'indirizzo email dell'autore noreply di GitHub (non accettato dal checker di revisione) sostituito con un indirizzo di contatto reale in package.json, io-package.json e nelle righe di copyright di README/LICENSE. I timer del finto adattatore di un file di test riorganizzati per usare lo stesso schema di alias nativo setTimeout/setInterval gia usato ovunque nel resto della suite, cosi il controllo del checker sull'uso di timer semplici non lo segnala piu erroneamente (il mock si limita comunque a inoltrare al timer reale con il nome adapter.setTimeout - il comportamento resta invariato).",
|
|
92
|
-
"es": "Correcciones de dependencias/higiene del repositorio senaladas por la revision del repositorio ioBroker: @iobroker/testing actualizado al minimo actual (6.2.2). La direccion de correo del autor noreply de GitHub (no aceptada por el verificador de revision) reemplazada por una direccion de contacto real en package.json, io-package.json y las lineas de copyright de README/LICENSE. Los temporizadores del adaptador simulado de un archivo de prueba reorganizados para usar el mismo patron de alias nativo setTimeout/setInterval ya usado en el resto de la suite, para que la verificacion del checker sobre el uso de temporizadores simples deje de detectarlo por error (el mock de todos modos solo reenvia al temporizador real bajo el nombre adapter.setTimeout - el comportamiento no cambia).",
|
|
93
|
-
"pl": "Poprawki zaleznosci/higieny repozytorium zgloszone przez przeglad repozytorium ioBroker: zaktualizowano @iobroker/testing do aktualnego minimum (6.2.2). Adres e-mail autora typu noreply z GitHub (nieakceptowany przez checker przegladu) zastapiono prawdziwym adresem kontaktowym w package.json, io-package.json oraz w liniach praw autorskich README/LICENSE. Timery falszywego adaptera w jednym pliku testowym przebudowano tak, aby uzywaly tego samego wzorca aliasow natywnych setTimeout/setInterval, ktory jest juz uzywany wszedzie indziej w zestawie testow, dzieki czemu kontrola checkera dotyczaca golych wywolan timerow juz blednie tego nie zglasza (mock i tak jedynie przekazuje wywolanie do prawdziwego timera pod nazwa adapter.setTimeout - zachowanie sie nie zmienia).",
|
|
94
|
-
"uk": "Виправлення залежностей і гігієни репозиторію, виявлені під час перегляду репозиторію ioBroker: @iobroker/testing оновлено до поточного мінімуму (6.2.2). Адресу електронної пошти автора GitHub noreply (яку не приймає чекер перегляду) замінено на справжню контактну адресу в package.json, io-package.json та рядках авторських прав README/LICENSE. Таймери фіктивного адаптера в одному тестовому файлі переведено на той самий шаблон нативних псевдонімів setTimeout/setInterval, який уже використовується всюди в решті набору тестів, щоб перевірка чекера на використання простих таймерів більше не позначала це помилково (мок і так лише передає виклик до справжнього таймера під назвою adapter.setTimeout - поведінка не змінюється).",
|
|
95
|
-
"zh-cn": "根据 ioBroker 仓库审查报告修复的依赖/仓库卫生问题:将 @iobroker/testing 升级到当前要求的最低版本(6.2.2)。将审查检查器不接受的 GitHub noreply 作者邮箱,替换为 package.json、io-package.json 以及 README/LICENSE 版权行中的真实联系邮箱。将某测试文件中伪造适配器的计时器改为使用测试套件其余部分早已统一采用的原生 setTimeout/setInterval 别名写法,使检查器对「直接使用原生计时器」的检测不再误报该文件(该模拟函数本来就只是以 adapter.setTimeout 之名转发给真实计时器——行为未发生变化)。"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
package/main.js
CHANGED
|
@@ -1153,6 +1153,10 @@ class WashdataAdapter extends utils.Adapter {
|
|
|
1153
1153
|
mgr.traceStore.deleteTrace(cycleId);
|
|
1154
1154
|
await mgr._saveState();
|
|
1155
1155
|
await mgr.traceStore.save();
|
|
1156
|
+
// Deleting a cycle - even an unconfirmed one, without ever
|
|
1157
|
+
// confirming/correcting it first - changes whether any cycle
|
|
1158
|
+
// still needs feedback, exactly like confirming one does.
|
|
1159
|
+
await this._updateNeedsFeedback(obj.message.deviceId, mgr);
|
|
1156
1160
|
respond({ ok: true });
|
|
1157
1161
|
break;
|
|
1158
1162
|
}
|
|
@@ -1171,6 +1175,7 @@ class WashdataAdapter extends utils.Adapter {
|
|
|
1171
1175
|
mgr._saveState(),
|
|
1172
1176
|
]);
|
|
1173
1177
|
await this._updateOverrideStates(obj.message.deviceId, mgr);
|
|
1178
|
+
await this._updateNeedsFeedback(obj.message.deviceId, mgr);
|
|
1174
1179
|
respond({ ok: true });
|
|
1175
1180
|
break;
|
|
1176
1181
|
}
|
|
@@ -1203,6 +1208,11 @@ class WashdataAdapter extends utils.Adapter {
|
|
|
1203
1208
|
importedTraces = Object.keys(data.traces).length;
|
|
1204
1209
|
}
|
|
1205
1210
|
|
|
1211
|
+
// Imported data can add profiles and/or replace cycleHistory
|
|
1212
|
+
// wholesale - same as any other action that changes either.
|
|
1213
|
+
await this._updateOverrideStates(obj.message.deviceId, mgr);
|
|
1214
|
+
await this._updateNeedsFeedback(obj.message.deviceId, mgr);
|
|
1215
|
+
|
|
1206
1216
|
respond({
|
|
1207
1217
|
ok: true,
|
|
1208
1218
|
imported: data.profiles.length,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.laundrylens",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.37",
|
|
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",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@iobroker/adapter-core": "^3.4.3"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@iobroker/testing": "^6.
|
|
39
|
+
"@iobroker/testing": "^6.3.0",
|
|
40
40
|
"@iobroker/eslint-config": "^2.3.4",
|
|
41
41
|
"@iobroker/adapter-dev": "^1.5.0",
|
|
42
42
|
"@alcalzone/release-script": "^5.2.1",
|