{"_id":"iobroker.laundrylens","_rev":"34-014d3e6ba47e33a2535f76b38d9dc84d","name":"iobroker.laundrylens","dist-tags":{"latest":"0.4.37"},"versions":{"0.4.5":{"name":"iobroker.laundrylens","version":"0.4.5","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.5","maintainers":[{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"668cf8234bbd15a1cd8ee5738968f0badf39a2e0","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.5.tgz","fileCount":24,"integrity":"sha512-tVQYNv6yAmd6P5qwTlhs0ptO+HhucQ5+BDWXVApoVXy2PU463gYkS8BOkSEleWRNuBnTVps/gSXm2CAefovebQ==","signatures":[{"sig":"MEUCIFN8qbMsPzxQorwVYPlD9trFTAlvMrUmFN40YXkZ4CHpAiEApvNBHFLt5XmCZ5motf/g4GBGPk5STw3whS4xUSURa1Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":558652},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"4cb82be08d9159ce5d69e6ae09c0c3b0c274de4a","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"10.9.8","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-iobroker":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.5_1786880406575_0.8725408625675799","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"iobroker.laundrylens","version":"0.4.6","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.6","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"b33214cea6ebf5ce9156c95e47301c0646658ae7","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.6.tgz","fileCount":24,"integrity":"sha512-ubNo2mWnYVCZo8ujX+oOH1YDxUnMFaPmVxKpm2Zl9FlBt5KXXIZWMoPGxsRxoPdUEpx8YQboSNcIP8sJ2y/Z2w==","signatures":[{"sig":"MEYCIQDpD24zNp/8hT6sbksC6stNcm5ybNdAiXbyOeJ6m24nVQIhANPsGvR66v4HBcT21LVaXk+u50LMlULx1Ythg01INmWT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":525194},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"29469d5bc78e903a3f70ca8f6d9bac3242732348","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.6_1786905543664_0.13442113862280003","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"iobroker.laundrylens","version":"0.4.7","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.7","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"c168362fd1e6eba303b301ba45bd6fdfe055a295","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.7.tgz","fileCount":24,"integrity":"sha512-5RRejNj7wj0lEGTTLtHLtQVYkw2KvzscLIPgGi0Zf7d/5OZ3JpkMYAGpl4Nf9thcQi2x/8JbLMU5XfgMYCTioA==","signatures":[{"sig":"MEQCIBg2yb4mu1YITYZ3qekVRIxjuSLdEG5kHnOjJgY/KDYLAiAEnSeIqQ/+4m9ll3x/ezWcoRrzF4RyIQP89ay8N6P65A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":532451},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"2694fde6095d9fbccffd4728550db038df8c5859","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.7_1786910422268_0.47337991390897427","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"iobroker.laundrylens","version":"0.4.8","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.8","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"a6ec09223522260ab1ee052c8576dc75d1bdc7b6","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.8.tgz","fileCount":24,"integrity":"sha512-NGeZXcTVPDb1a+MCjkR8HUYyUjE9ArMZHxAscJqn0szm0ewdCRVR5o2l7pYyc8ulizBD76XtaQXzvJadmXjVaQ==","signatures":[{"sig":"MEUCIQDAYVzsMN8PWRH3s+e6VvTJ1FCwG6p3gaXWpCLZCheRAQIgDgICMAwwVfH5Jm2xKtDZDK1zNbLDVKNvBwYKSUGgnmY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":539219},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"81023a6f3df3020317c4a1374f52fd540100c1a8","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.8_1786987547345_0.7632906514500966","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"iobroker.laundrylens","version":"0.4.9","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.9","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"4f192fd1f77d644a3b41e66251927f410f886848","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.9.tgz","fileCount":24,"integrity":"sha512-0AgHsEvi6ZwMR+eR3Roy11VZj/O0WQ9rsP53YKvGu1xy8KhfTy9ACgZ6txseFXSOJTULvUlnTKZaYHx3ZoOb3A==","signatures":[{"sig":"MEYCIQCvii+wr7G3MUU55g6iW4FLWyZCYH3wVzWjZmQZ8JMNRQIhAPR5aVxAmvc7/dlfCSnyzuZFaKIGmdbVdvWSRNIcE+S3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":554164},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"aaafdd89c168b393822afd588e0c58635f54ad47","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.9_1787588686635_0.6461599679107342","host":"s3://npm-registry-packages-npm-production"}},"0.4.10":{"name":"iobroker.laundrylens","version":"0.4.10","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.10","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"d79f3c4ae5082fdd38f22dfb2aa7dd274f557e3b","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.10.tgz","fileCount":24,"integrity":"sha512-EDYP44ugldiYVtELJCKPYFpHC0GsI//8UdraDeH1Wf2RMwDHT8mtKPzbQb3tR+CVWS1MSOWumqalvSx+rrGxPA==","signatures":[{"sig":"MEUCIAOaxkw2uBeqkCwb91ZzR5w5f30BmG6aIctblflUlx5pAiEAlv6xiaCJI4i8dNbq52os1dB/liYC/SbeK7NXP6aBzvk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":566140},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"35aa3a6bb6accd5aed786704fd1296f8b733fe20","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.10_1787761947742_0.30742653700582245","host":"s3://npm-registry-packages-npm-production"}},"0.4.11":{"name":"iobroker.laundrylens","version":"0.4.11","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.11","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"e2412c0b1317c4c6bde9987d0848b61ce686e41a","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.11.tgz","fileCount":24,"integrity":"sha512-By16X4fInnS+5IaKNBJoaoX5/x7wUD65F5H/dl9O21ZOwqcJDJIi97Ln0JQrT8ZpM22nslbKaJGv/Iml91+Q1Q==","signatures":[{"sig":"MEUCIA/d1I/ystw5z9RGqV3bNAvZuf6gD2T+dntQcFc6Qhz1AiEAmEFHUzirjZXjpktjH6cyMi4R76i8tmGTqOhrSUcS5No=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":574844},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"88450b0db4e855078204e4e00fc5e334b811333f","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.11_1787764725315_0.66426558390608","host":"s3://npm-registry-packages-npm-production"}},"0.4.12":{"name":"iobroker.laundrylens","version":"0.4.12","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.12","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"c958fecb782b1ec724f4b362085634e1495d80c5","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.12.tgz","fileCount":24,"integrity":"sha512-Hcy5Lz1skr6z4PuIu7nWVTQRamo3eNFNf7XxKTKd1zarMGi0DobbQrqk089Q8Q0c8nRv1JexQdLNxkA43F9jtQ==","signatures":[{"sig":"MEUCIFH4J33g2B5dGpGFbR5nHnIllyGgjxu4sRQ2ue8PquguAiEAlooT14/oQehHcTl1rTQOHUiDfcShVAyWX+4Jq8TXnSM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":581274},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"b65b604a7043d450fee91758fbfaa1cb8684f82b","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.12_1787809846214_0.3298904265867437","host":"s3://npm-registry-packages-npm-production"}},"0.4.13":{"name":"iobroker.laundrylens","version":"0.4.13","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.13","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"fcc8592c9ce20130a52fc8f46a57f4a7129bbdd7","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.13.tgz","fileCount":24,"integrity":"sha512-a1PZZgMSNwl6P6zlAO1M748tHoM/Mj4mDqXXzTj2w90cEo1Vkf3zkJ5kuOU5Dp+uewCIypoSHy6rTxFx74rc/A==","signatures":[{"sig":"MEQCIBbCv79b/umE/DhRWj39tiTDvc6CrMz3IA1HY1ynlB8wAiAhDvjP0zZidrsgT1L4Odu1R1GTwFNWfB7lY8dpRg9Ldg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":584605},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"7311dc1ad507c57a8829b3e91164c0979c041071","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.13_1787810411065_0.710351390896532","host":"s3://npm-registry-packages-npm-production"}},"0.4.14":{"name":"iobroker.laundrylens","version":"0.4.14","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.14","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"78a62c011cd5809161ab24198eee955c61ff6852","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.14.tgz","fileCount":24,"integrity":"sha512-8KEstgrTrYUjRpgQUk+ArHAjFs7jmdZZHeEUS+CMysJb0MwVj/hrXTcuQCpuK8vFCsQigCvgoKWgmkdDp+q1pw==","signatures":[{"sig":"MEYCIQCfsVW0Cidp/0yazKQaAMWAoL2BthqmOmkPuf2RvOQv3QIhAK89+Io8QtDROEH6fMhqCfGLXi4T4Ctlar3CQ64424mu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":644020},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"f02d7d0c3e58c2463aeb0e53c0f48722afe52e2e","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.14_1788108704589_0.027444540435628717","host":"s3://npm-registry-packages-npm-production"}},"0.4.15":{"name":"iobroker.laundrylens","version":"0.4.15","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.15","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"045f11eb4bddc906682aee9378e0d13c1bfe518d","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.15.tgz","fileCount":24,"integrity":"sha512-J9Y12si1SZ/DBYKStP9bwGNNI9twLepL4LgvI0Iu4k6Uh5vTEu+hEZSZ6StZpZb+7VqJU9GUgdl9Ch4j7Rji9A==","signatures":[{"sig":"MEQCIA1Ha59NjPugIS9wXoZ3R+v0GVa7Xo3yQI/rZe3kMkXLAiBdvp1xOSP5LdYyx2w7naw8UVXRF65tjwstNSkUJm0Y1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":650375},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"98510fbf62941d9a3cca0e665f377853fdd06ece","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.15_1788197496116_0.6238667017609154","host":"s3://npm-registry-packages-npm-production"}},"0.4.16":{"name":"iobroker.laundrylens","version":"0.4.16","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.16","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"49e6a20d4e579fd9306d4c8fad636ea6aeb90d3d","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.16.tgz","fileCount":25,"integrity":"sha512-6zIJUg6XThZqrbFdvcgcKukxswV8DaSZ8qdZ3YyGr191U0/bM25thQncRs10UbDxVixRIPrwWVOWDsRegBQ/Jg==","signatures":[{"sig":"MEUCICmfYV6GC4h3ORYZmAV7fETFv/vI0xUZYF95HjY3EwpyAiEAwfY7rfDNn9kNADr1W4m4FqBNXKroCtR37oTEFgh9Row=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":650715},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"72ce0880905fc9674c3ed6e29e7582a4e38fdf9e","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.16_1788201697879_0.27826285695078234","host":"s3://npm-registry-packages-npm-production"}},"0.4.17":{"name":"iobroker.laundrylens","version":"0.4.17","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.17","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"7f949a17bcf2347feb2d3fc4af28fe9dbe96733a","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.17.tgz","fileCount":27,"integrity":"sha512-kqlhM39tCb5p7iJ+u3PWJJK1lziF8aJsI3nYq8EK52FLzm/DkJzgDazuzl087V4ZsORQc+KpXNyXQe7uddrCEA==","signatures":[{"sig":"MEQCIHuGucX3WXhylgIgvNyKMHLRrUqN6Kuh3KZkYm4XLXKaAiB8s2ae6N0q9k/nsfdG5hVu6P1JU3Ki4V+Nw0nBwZgLQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":668051},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"a5b03872d7ad454fdc4288709f30a385b996c070","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.17_1788258720734_0.7429602127739665","host":"s3://npm-registry-packages-npm-production"}},"0.4.18":{"name":"iobroker.laundrylens","version":"0.4.18","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.18","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"459308762dbbe0ff1727a038ad227e5e2c0929d9","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.18.tgz","fileCount":27,"integrity":"sha512-GNJm51fWNmzWetwGGnbHEoQDDGXhx4Ep+PMIhOqk0+zFBuKEPbDEHsOHOKBCs9YL9vm0jHoaKy+Vlw06PVJ7Mw==","signatures":[{"sig":"MEUCIQDb43YUwMBrxtN3HcEdBMCa123YSVd8wmeZUzfVYgizygIgAY/Dv+wsCMu+hlGudWuejVo36NbK1EU3Yw7BPwFZi18=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":668444},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"acce6ebacc9466f52186dbda24163e7e72d44397","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@iobroker/adapter-core":"^3.4.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.18_1788300705207_0.22743946567984152","host":"s3://npm-registry-packages-npm-production"}},"0.4.19":{"name":"iobroker.laundrylens","version":"0.4.19","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.19","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"4268954e890d58e86ecc8d6e1ae25bb88ee44354","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.19.tgz","fileCount":27,"integrity":"sha512-3TVAWD4BArHHChF1Nwngl7dc4IvyMxwNKvV9SIG2inkEcgWMpVOmKtlRkq12w6EDxfPIl95Tcbhe+PRKUCaR4Q==","signatures":[{"sig":"MEUCIQDKbqtagkNJGkfxRTAqHeDv7/Do+hi5WpfhONy34zXAnQIgZQsh4gGBY40nXvQEu/xn9LdA6vhGVsFfPw3uk2+lA+4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":665901},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"b5ab3d5a3546fd0b6a954651985366544707269d","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^5.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.19_1788640828439_0.6152406143215263","host":"s3://npm-registry-packages-npm-production"}},"0.4.20":{"name":"iobroker.laundrylens","version":"0.4.20","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.20","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"b14e03f06604a397a0fef104675c4dce0f2cba6f","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.20.tgz","fileCount":27,"integrity":"sha512-XTRe7iVDHs7u2LnANBpdIZ/W6ZYp0OiZAPfbrUZjVE+m9m6LP/y3bFeIcjHvAUhT4d/7Qc+ZRB9nAlTMk5pQ5Q==","signatures":[{"sig":"MEQCIBdRga7ceD0qxlHnRQknNVXFwzk51nTPGbjeWaWT1BpBAiASTNYIDjxUXZ+L1E9BUS5W2ZFq4tTtRIt7zG3xNKAx4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":665755},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"d8f5bea95498813aa07a3e0150082227285774f0","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.1.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.20_1788886928177_0.38413856288012416","host":"s3://npm-registry-packages-npm-production"}},"0.4.21":{"name":"iobroker.laundrylens","version":"0.4.21","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.21","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"6e03d98e719a77625c46bae7c4bb77aabf778a54","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.21.tgz","fileCount":27,"integrity":"sha512-B6UkCx7RNJ03VifVp9vzNjXkipMH4b2/3nAxGSQSiyVhOI6z37824vuPoIdjyGsVj799r0YMDzXN3zLtvXHSjQ==","signatures":[{"sig":"MEUCIGZYEUT9sANfwnU2VhC9OPFxs1d/0hKugmRQdvKco+f0AiEAvf1HdFEL4QDvQPBmpi2Ea1X5YjSwxVIdI5pxHGfGvAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":692544},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"0f0e9e957a582b0c4d3adf57bdb067a1f5c9ab77","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.1.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.21_1788962200347_0.3634763397463603","host":"s3://npm-registry-packages-npm-production"}},"0.4.22":{"name":"iobroker.laundrylens","version":"0.4.22","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.22","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"ea473ccea2eb400e2b87ec7daa11d9a7ad32abcc","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.22.tgz","fileCount":27,"integrity":"sha512-HN+KRx7neSeRgitSWRMGxLJ5VQtZzZ6DSgKClt7OPCxH6QU7iBu0PaG30mkl9Osujosi4lyo1Vg/PMSAEHiaFA==","signatures":[{"sig":"MEUCIEal7nIrOB1QLW7/nKTGvCi5YSoJZoQs+dhhtcWmu5yVAiEApfFZ7rALUQqATo2iOcAxrAxySaLD/hiUXvxS0hXJkiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":693897},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"dafef60ee698665fc2e0c183d4449b13fc8e349a","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.1.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.22_1789581578623_0.7985201891705358","host":"s3://npm-registry-packages-npm-production"}},"0.4.23":{"name":"iobroker.laundrylens","version":"0.4.23","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.23","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"af1f2e74d1a48deb29eab74375d488ca2ddaa197","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.23.tgz","fileCount":27,"integrity":"sha512-lGmccUrT3uEtUQD9ObOgmQx1RvGaU2HJknYO93TpNzxaLjWaNWl30FHCwPVZCPVPjEnhjZaq/kI4sDxQ/u5n/Q==","signatures":[{"sig":"MEYCIQDOPRQHAEDCgIPaajam4vBFl5ircwzNRqMoVSgHOiVFqAIhANVveBPw9PV6l1VeRBjL5/PCe1giCqrcviRjFeJl8pgO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":698247},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"63f2ba37fb62ddbcb1dadeae7253673ea672129d","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.19.1","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.1.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.23_1789633373648_0.2877571077000336","host":"s3://npm-registry-packages-npm-production"}},"0.4.24":{"name":"iobroker.laundrylens","version":"0.4.24","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.24","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"d34b11d9dfa4dd95af208612bbb2d27d50b103cf","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.24.tgz","fileCount":27,"integrity":"sha512-Has2acSQj++fRDQuFbgdeUjD7IUtd4nY7hx3ekgqMgEKw6hKTyFxN0G+JKmV1g8z0UXqbiKjREfTYp17hKk46A==","signatures":[{"sig":"MEQCIEBlkvABk8ycdkFRyXneayU38lZATCKL/1TAeSuJ3i/7AiAFdj/F+JUW1iyWgBGHLfin2AmTGzyVQALN4R2Iu1QooA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEB3t9iQyR+DUsrY9qGf36bZsIOHqYQEgH6/t3Rwcuh1AiA7Gz9OppFRxzfMlAqD0tgf6csLzBKJKiF1ctsN1hehEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":704723},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"01e151aa1953bdbcd3251bdc65806c6b6b5091f2","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.20.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.1.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.24_1790323252055_0.5683281551398802","host":"s3://npm-registry-packages-npm-production"}},"0.4.25":{"name":"iobroker.laundrylens","version":"0.4.25","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.25","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"d6be8fc697552ae9998997d26fc993a05ca8c27b","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.25.tgz","fileCount":27,"integrity":"sha512-PoBp73L8hL2IkJAgOfPBQbCajF1emQBf62cikrLLAyo2JJJo90wHXj3ReLS2Oa1yETpvjgsOayFiy/Uta61Qqw==","signatures":[{"sig":"MEYCIQCZ3Jm39qtOIcBKbSiR0vR0nScLgqOQfx52tMaNn4TJQAIhAKzn9kA4zODfCXZcMAjftbJLYJtL8oHBMtAslDiv1fWB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBZPORbCeoUQSo2VjBYsbPaNEGxObfIjNO/F/tjVU/V5AiB5X9t5LUUeBHo1Y6ytfgrggVPLPe0LhIwr7zODoR6Zew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":711672},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"6de092a498e9c32fea1cb62574b23932827405fe","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.20.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.1.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.25_1790326627968_0.7630163000109986","host":"s3://npm-registry-packages-npm-production"}},"0.4.26":{"name":"iobroker.laundrylens","version":"0.4.26","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.26","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"d845a5e9f765e3f8acea79a0ff8d194a775112d7","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.26.tgz","fileCount":27,"integrity":"sha512-QWX1gRgwjLqyc6Sxj3oCcF9DcuvDeyw1vKbYhlIrfKbcjBjHVMBv+S1nTh8v9NucgkbIP0Aldyc3oHIq5UFYHQ==","signatures":[{"sig":"MEYCIQCW8mmEvP8diVIJ72E51mHKpsrIqzF1xF3Ej3uGXz1oTwIhAPYtlEx8Q/6ik7R7JZpDy96OhSwN0/zlA2P/Bf5LbLbJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC7CJ+gO9UgkF3ERVoFzd+HAgMwdsqp88vX+I7zMmDHMQIhAI9UBL5ZmL6sDTpLJz4XOFwUBwhnhwvlDpX3n2WcMk3r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":716116},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"9d36e88b9af38d7c640da174f79c754394ec6c92","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.20.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.1.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.26_1790341177928_0.031703957841874075","host":"s3://npm-registry-packages-npm-production"}},"0.4.27":{"name":"iobroker.laundrylens","version":"0.4.27","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88"},"license":"MIT","_id":"iobroker.laundrylens@0.4.27","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"64702cdf3e8c27da7bfae7fa3f99b7b5a17e25b7","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.27.tgz","fileCount":27,"integrity":"sha512-BrDk028xHpTZTjXPiJb+KHy8CEjxOo9tsrIHC5rIWggZvf83uS8JuWDNhfIsr7FK53gvfXVldJOxiGMrM9pwrg==","signatures":[{"sig":"MEYCIQCb3W/2yWMpRP57c6GrjpfgDstkJ7QIrAWMPND6h+E/yQIhAKmXKkjIviW1pC1tWfgipClzLPwnaCFtvtz2sfM56ur5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBHD4o2I9h9xCY/4SHfMoVrfIe28h1uns+vYSW02loAeAiBCEhe5CqmBJqwFWqdcW/ptS1QvZydB+2i6DpM8hogqKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":721811},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"fbc4ab711c51833a8b980f45941f85f9b1c78619","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.20.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.1.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.27_1790359652447_0.46700444928231266","host":"s3://npm-registry-packages-npm-production"}},"0.4.28":{"name":"iobroker.laundrylens","version":"0.4.28","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","_id":"iobroker.laundrylens@0.4.28","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"0d58f08c861b45fe90aa4244657de4f1e1ab7d60","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.28.tgz","fileCount":27,"integrity":"sha512-Pf9LgnCJ/SiJe2OlqFZn87IlmhLIkMjVItA09cLQa/iTWskAxH2/1Fly4gCOQU8XtChf2KMCAU1Lf8jt+n2R/g==","signatures":[{"sig":"MEQCIEHV60tyyBMuA/fUUoIYC6TycA9DYUN0cSMcPaz4WGk0AiBKoIuPTm9zodFyH9JTpLd7SN/JjrW0V7UGbI7NFBJAgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD5+FYDAM8bjA2URt0+vS5xm5VCSYktQ4jNkVZe0DkuWQIhAPU8wLrhSJFEFr/AOQFzZRpPXsCVkUs/yparE6BdiXLk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":720733},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"4d5bd491556219a325efa9bf4dece6627b017e98","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.20.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.2.2","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.28_1790546771828_0.008741715085162749","host":"s3://npm-registry-packages-npm-production"}},"0.4.29":{"name":"iobroker.laundrylens","version":"0.4.29","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","_id":"iobroker.laundrylens@0.4.29","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"aa7d7d950d9c74032b093b2fa156addd352e292a","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.29.tgz","fileCount":27,"integrity":"sha512-UN2t7HCGkt2Ux/c4gHA49XQVX6tfl1vkEJ3P1y7rzSyA1C/TAE1oVrST9eHEfywU6gexqL9sAgTkH2CVeg8W3A==","signatures":[{"sig":"MEUCIQCAYDfxqm5cA+ZXg5dzQHdr0k94AyglH/JKJ6S9Bdm0tAIgI27yTsvWgIq0MR6gkOvslfaeaxzqHKCKuoqVlnA06R4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIC+EDYv4sisofFJtl7xjlYhZPrcxGVhaZAD6l4jGawczAiEA9jHaq2qYMlt4UBNGruzZJw485+4RjuXUmo27k6oauOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":722721},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"fd18b70fd9468a4154f8fa090440985cb41106ce","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.20.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^22.1.0","@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.2.2","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.29_1790547532383_0.1285591912254116","host":"s3://npm-registry-packages-npm-production"}},"0.4.30":{"name":"iobroker.laundrylens","version":"0.4.30","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","_id":"iobroker.laundrylens@0.4.30","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"0fed155b57579d28505c366778e468c570ef640e","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.30.tgz","fileCount":27,"integrity":"sha512-dU/7j40wd7AVXeBcs6581mS38yU0I/v4CJ2kfi/wd2ps5lga4boS/xZjBylBdXTLH99yA1MERmiUIhm3+s7atg==","signatures":[{"sig":"MEQCIFl/jIrOroq2qJCf6eWbUHuhuvYIgxYr4o2bJGUslNmOAiBFiMeYCw8e6/T0032yzS/IMTyK1Sw6LSN4nF/3JnKV0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGE9OoPgwwsjm9IV0Qg8OYs4fqGQTjphUBGyhcY9MABHAiBP0zmDOXQOQuofqTXkZGuvhXDvrG4tnPVpYB4FkKfvBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":726122},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"cf878aabf8c8ce9d63e6b73e9eb738e24e3914b6","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.20.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.2.2","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.30_1790548697942_0.5177449482824559","host":"s3://npm-registry-packages-npm-production"}},"0.4.31":{"name":"iobroker.laundrylens","version":"0.4.31","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","_id":"iobroker.laundrylens@0.4.31","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"51f776ec59166e9ecbb6cd01a15b41a1af563fca","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.31.tgz","fileCount":27,"integrity":"sha512-xa/s/8zDEoICbDFA8UYtNTyF7dy09Nz+YTVF1Wxv7/fSGesOzCsNpHRPYEW8kAUfIdeUJRkBjsTVOypfqER4dg==","signatures":[{"sig":"MEUCICoxjbW8TCYC1k97XCENZvX4cDKjeS88CQtrH9xmfHMrAiEAhghFNm9T2+rkTBtyUbBHiOZveQiuqrjfyrOtB+7KUj4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFEipjVZ1rrjfqNeoLJ+Et/HLsErn0s436YHHAbeKYXnAiBMA71ZSkQjo1H9xfNCqBdU6LyRP4+da/M7DuObFSxN0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":732777},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"4d69d1a0c0db736dc2e8758fd9ad51fa1ccaeaa4","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.20.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.2.2","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.31_1790549626276_0.41617205135552116","host":"s3://npm-registry-packages-npm-production"}},"0.4.32":{"name":"iobroker.laundrylens","version":"0.4.32","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","_id":"iobroker.laundrylens@0.4.32","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"f690431e5b81f00b887d9785952749343dbc298f","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.32.tgz","fileCount":27,"integrity":"sha512-ywnPQTFibEDdhywQ9dHQKxx45/qj5dFA8cgtVlo4Ni26PC0bCEDUhdCDNqKFFhxuymGZKipGwJpF07fVAEF3ig==","signatures":[{"sig":"MEQCICPkL0lJLkPCaasHL4+yrqK+1H81pnSU7H9eM41DQQ2BAiBFRGwogDsaxjKyAx2eRBL84pm7DNSVTfJUPEjI2xx7Lw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC9eLehtgqyNXM/s5NKDHNTOQpu5IuaiIYuu8SB0ImeqgIgLyLg8Lfcl/RPFFit0NvZiCL1WrJWIPDdfPOYZDHLVvs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.32","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":734687},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"8fa1f48f15ef35d25c4830f953e6af31603d2ceb","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.20.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.2.2","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.32_1790550069296_0.5789484099645508","host":"s3://npm-registry-packages-npm-production"}},"0.4.33":{"name":"iobroker.laundrylens","version":"0.4.33","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","_id":"iobroker.laundrylens@0.4.33","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"6113c47494a6272dcb631dd54d17d479b7d4afad","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.33.tgz","fileCount":27,"integrity":"sha512-eZUl2rS0ip1M14B3+Rfri7NiQyy0gI5JxWdv8lZGATOHhFtgwPO23JDwp6de1l7abCYKG1GCaWozXg2//hq9cA==","signatures":[{"sig":"MEQCICHnGhoiMg7lUhN02MEmAkHvnzeYXBbsS7aIGAycnflDAiAIV9aFIWeYd894yJK8RuRyUxH0CSTO4iie8nzlLXkwQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH/Mo4sccCFjCdstW/kcsLxby60W0XxueF0QrYcWFmG/AiEA4IQIPOUGbk2k1AqTojcuJaAB98Z+h+NGi4Ax4TtzrB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.33","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":767992},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"0180d16f1c04161ed4a38365fc78033cadf4e059","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.21.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.2.2","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.33_1790974555337_0.5938177758339387","host":"s3://npm-registry-packages-npm-production"}},"0.4.34":{"name":"iobroker.laundrylens","version":"0.4.34","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","_id":"iobroker.laundrylens@0.4.34","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"c31773a90afe2d970f2ed0e293b7725ccf904e7e","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.34.tgz","fileCount":27,"integrity":"sha512-EAmWgAMftHRyVN2quP/alz3JUH4FaLZpClgNxwnftRl0gLODEEz89r+u3oIzHRbVJFp+HjvE2ppG07Fduur9ig==","signatures":[{"sig":"MEUCIQDbUxrbWd4sLMS0gT39oFkQ28X4vgqJnjjeptZD1Sp1aAIgL0xBEMQxV2T8zwVTmUs6lLRdoMXn/HJHARIWR0kR5DI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHM67pwy0djRh3IVIz5boRCBLNELeU0p8imuAaSrMH1kAiA5XG002l15PltjwiNdlBAiqCKeTSwpjtuoU11XFobJag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.34","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":775386},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"cce3e7f2ce512b051e4ccaa3ba3181a33793d507","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.21.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.2.2","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.34_1790991961897_0.8985022397598714","host":"s3://npm-registry-packages-npm-production"}},"0.4.35":{"name":"iobroker.laundrylens","version":"0.4.35","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","_id":"iobroker.laundrylens@0.4.35","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"0366414d1f245dc23999c7f0e045a60abf93dc38","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.35.tgz","fileCount":27,"integrity":"sha512-facfwVPJQPgcSk/kLpU7ONyMKBTSnI2dxg5RvRk6y6EWEloNTZFCiSSQGm8vJtkWP/xCqy92Lc9Py0TJ/gP+wg==","signatures":[{"sig":"MEUCIQCtF0cXEZbaHAQgd9BOggTm2OAvnRLiAmCbsCPwaQp7eQIgJmu2JU64EM78+xV0U05EJSxN9Y8MjHtfHJZPBKP19fs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHDWHTDDryZmM+iRctdON9YVocRhhbc54z0VtL+Zs6LGAiEAtJw4t0P87ePbe3w7B1xLD5k1PJ+tRFIjQccxzdDFY0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.35","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":775510},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"65ef07a532a110b1d073b15bf8a93a8673580247","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.21.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.2.2","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.35_1791010756205_0.9564879241960003","host":"s3://npm-registry-packages-npm-production"}},"0.4.36":{"name":"iobroker.laundrylens","version":"0.4.36","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","_id":"iobroker.laundrylens@0.4.36","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"0597f83f9eeb336f13c89fbaa6bf05203ed34e54","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.36.tgz","fileCount":27,"integrity":"sha512-4HtlVO26EpDBEqCVmfmCJlqDnf62XPyjEo/TIJ6/XmRdyBz80lITBvVfNxkIehBneirOALtUjqix/VVFI4lVVw==","signatures":[{"sig":"MEYCIQD6X995ug0VDXdrntSzzEtD9TlThbdp0NXiyBcxlBXaNwIhAK3q5qntxsemrxdJsDFd+mvlRvUICsX4O/tGkl+DjS4U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC/d329JpiNmSlN2OmOBqU0/y4rNgJs1YMQIe+Up1OvCAiBOnIZC/3zrvfI816ThVg5os7dYocOGeiIPO0wXOIYTQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.36","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":774098},"main":"main.js","engines":{"node":">=22.0.0"},"gitHead":"972a9082518c2d3f50e74a1d1b1c1fbb211514a3","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.21.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.2.2","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"tmp":"tmp/iobroker.laundrylens_0.4.36_1791017422188_0.9520399742392174","host":"s3://npm-registry-packages-npm-production"}},"0.4.37":{"_id":"iobroker.laundrylens@0.4.37","bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"dist":{"shasum":"87bed05eee4298b9735d97e319248195d73dffa2","tarball":"https://registry.npmjs.org/iobroker.laundrylens/-/iobroker.laundrylens-0.4.37.tgz","fileCount":27,"integrity":"sha512-HwvWcijvOXTDW4/Ody7QU7/40pUfYtaK+kNt9bykpbHMobv6fU/8MbhqXzVY0HJMRvfyFEs80O32si0U8jYyQw==","signatures":[{"sig":"MEUCICtqMmPIaJ4bhv0u29TTtNbSvm96lJVYlNHp1r6SfGTeAiEA4nh60zD37Mfc84mpiXPGXS7u3aC+zqQGlB1Ysno1zTg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFaMlrTQ0s40hNXV+07t47SgqMVPGDjH1NmNJjLOfomSAiAHm0w6ZbBdgrGgs+NangtrequYEFoDnEB5lVnSAIFEGQ=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iobroker.laundrylens@0.4.37","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":771194},"main":"main.js","name":"iobroker.laundrylens","author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"engines":{"node":">=22.0.0"},"gitHead":"1119b37f9709b2158a5bf79d647b6569d08b8d92","license":"MIT","scripts":{"lint":"eslint .","test":"node node_modules/mocha/bin/mocha --exit tests/","release":"release-script","translate":"translate-adapter","test:package":"node node_modules/mocha/bin/mocha --exit test/package.js","test:integration":"mocha test/integration --exit"},"version":"0.4.37","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"c98f2fe6-f987-4d5d-8726-3f758e218a28"}},"homepage":"https://github.com/backfisch88/ioBroker.laundrylens","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"_npmVersion":"11.21.0","description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","directories":{},"maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"_nodeVersion":"24.21.0","dependencies":{"@iobroker/adapter-core":"^3.4.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.0.0","@tsconfig/node22":"^22.0.5","@iobroker/testing":"^6.3.0","@iobroker/adapter-dev":"^1.5.0","@iobroker/eslint-config":"^2.3.4","@alcalzone/release-script":"^5.2.1","@alcalzone/release-script-plugin-license":"^5.2.2","@alcalzone/release-script-plugin-iobroker":"^5.2.0","@alcalzone/release-script-plugin-manual-review":"^5.2.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/iobroker.laundrylens_0.4.37_1791020233896_0.2802492999330284"}}},"time":{"created":"2026-08-16T11:40:06.453Z","modified":"2026-10-03T09:37:14.296Z","0.4.5":"2026-08-16T11:40:06.731Z","0.4.6":"2026-08-16T18:39:03.812Z","0.4.7":"2026-08-16T20:00:22.420Z","0.4.8":"2026-08-17T17:25:47.499Z","0.4.9":"2026-08-24T16:24:46.860Z","0.4.10":"2026-08-26T16:32:27.899Z","0.4.11":"2026-08-26T17:18:45.496Z","0.4.12":"2026-08-27T05:50:46.387Z","0.4.13":"2026-08-27T06:00:11.295Z","0.4.14":"2026-08-30T16:51:44.731Z","0.4.15":"2026-08-31T17:31:36.403Z","0.4.16":"2026-08-31T18:41:38.054Z","0.4.17":"2026-09-01T10:32:00.888Z","0.4.18":"2026-09-01T22:11:45.424Z","0.4.19":"2026-09-05T20:40:28.675Z","0.4.20":"2026-09-08T17:02:08.386Z","0.4.21":"2026-09-09T13:56:40.473Z","0.4.22":"2026-09-16T17:59:38.875Z","0.4.23":"2026-09-17T08:22:53.758Z","0.4.24":"2026-09-25T08:00:52.159Z","0.4.25":"2026-09-25T08:57:08.073Z","0.4.26":"2026-09-25T12:59:38.038Z","0.4.27":"2026-09-25T18:07:32.586Z","0.4.28":"2026-09-27T22:06:11.917Z","0.4.29":"2026-09-27T22:18:52.535Z","0.4.30":"2026-09-27T22:38:18.065Z","0.4.31":"2026-09-27T22:53:46.377Z","0.4.32":"2026-09-27T23:01:09.381Z","0.4.33":"2026-10-02T20:55:55.458Z","0.4.34":"2026-10-03T01:46:02.020Z","0.4.35":"2026-10-03T06:59:16.340Z","0.4.36":"2026-10-03T08:50:22.392Z","0.4.37":"2026-10-03T09:37:13.988Z"},"bugs":{"url":"https://github.com/backfisch88/ioBroker.laundrylens/issues"},"author":{"url":"https://github.com/backfisch88","name":"backfisch88","email":"henrik.schoenhofen@icloud.com"},"license":"MIT","homepage":"https://github.com/backfisch88/ioBroker.laundrylens","keywords":["ioBroker","washing machine","dryer","smart plug","shelly","power monitoring","cycle detection","laundrylens"],"repository":{"url":"git+https://github.com/backfisch88/ioBroker.laundrylens.git","type":"git"},"description":"ioBroker adapter that detects washing machine and dryer cycles via smart plug power measurement, matches them against learned programs and estimates remaining time","maintainers":[{"name":"bluefox","email":"dogafox@gmail.com"},{"name":"backfisch88","email":"henrik.schoenhofen@icloud.com"}],"readme":"![Logo](admin/icon.png)\n\n# ioBroker.laundrylens\n\n[![NPM version](https://img.shields.io/npm/v/iobroker.laundrylens.svg)](https://www.npmjs.com/package/iobroker.laundrylens)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nSelf-learning ioBroker adapter for automatic detection of washing machine and dryer cycles via smart plug power measurement. Recognizes running programs, estimates remaining time and sends Telegram notifications – fully local, no cloud.\n\n> **Alpha release.** Tested on Siemens iQ washing machine and dryer. Other brands and models may require tuning. Feedback welcome.\n\n---\n\n## How it works\n\nLaundryLens records the power consumption curve of each cycle and compares it against stored program profiles using segment-weighted correlation and a DTW-lite algorithm. Confidence is accumulated over multiple matching rounds before a program is accepted, which prevents single outliers from triggering a wrong match. Remaining time is estimated dynamically based on both elapsed time and the current energy rate – not just a fixed average.\n\nThe adapter is self-learning: there are no pre-built profiles. Every program is trained on your specific device. Recognition improves with each completed cycle.\n\n---\n\n## Features\n\n- Cycle detection via state machine (OFF → STARTING → RUNNING ↔ PAUSED → ENDING)\n- Self-learning program matching (segment-weighted correlation + DTW tiebreak)\n- Score accumulation over multiple rounds with device-specific confidence thresholds\n- Override lock: manually selected programs are not overwritten by background matching\n- Adaptive remaining time estimation combining time-based and energy-rate signals\n- Admin UI with expandable cycle list, inline power graph (canvas), phase legend, trim and split per touch/drag\n  - This is why the adapter ships a custom admin tab (`admin/tab_m.html`) rather than relying on jsonConfig or the standard Device Manager component: neither supports rendering an interactive per-cycle power curve, editing phase boundaries by touch/drag, or splitting/trimming a recorded trace - all of which are core to how LaundryLens is used day to day (reviewing what a cycle actually did, correcting mismatches, building new program profiles from a trace).\n- Telegram notifications with configurable update thresholds, placeholders (`{progress}`, `{prevTime}`, `{state:objectId}` for any ioBroker data point) and conditional text blocks\n- Also supports Pushover, Signal, WhatsApp, Matrix, notify-my-android, Prowl, and email (via [ioBroker.email](https://github.com/iobroker-community-adapters/ioBroker.email)) as notification targets\n- Multiple devices: one instance per device (washing machine, dryer, …)\n- Localized, ready-to-display text data points (`phaseText`, `stateText`, `programText`) alongside the language-neutral internal ones, for dropping straight into a VIS dashboard\n\n---\n\n## Requirements\n\n- ioBroker with js-controller ≥ 6.0.11\n- Node.js ≥ 22\n- A smart plug or power meter adapter providing a watt data point per device (e.g. [Shelly EM](https://www.shelly.com/en/products/shop/shelly-em))\n\n---\n\n## Installation\n\nInstall **LaundryLens** via the ioBroker Admin adapter list (tab \"Adapters\"), then create a separate adapter instance for each device and select the watt data point in the instance configuration.\n\n---\n\n## Configuration\n\nEach instance has the following settings:\n\n| Setting | Description |\n|---|---|\n| Device name | Display name for this device |\n| Device type | `washing_machine` or `dryer` (affects phase detection logic) |\n| Power sensor (W) | ioBroker data point providing watt values |\n| Power threshold (W) | Minimum wattage to consider the device as running |\n| Off delay (min) | Time to wait after power drops before ending the cycle |\n| Start energy gate (Wh) | Minimum energy consumed before matching starts (filters short spikes) |\n| Duration tolerance | Allowed deviation from learned average duration (0.05–0.5) |\n| Matching interval (min) | How often matching runs during a cycle |\n| Match confirmations | Number of consecutive rounds a match must hold before being accepted |\n| Auto-confirm threshold (%) | Confidence at which a match is confirmed automatically |\n| Instant-confirm threshold (%) | Confidence at which a match is accepted immediately (2 rounds in a row) |\n| Program detection threshold (%) | Minimum confidence for a candidate to be considered at all |\n| Notify on probable match | Send a notification even before a match is officially confirmed |\n| Ignore anti-crease | Ignore anti-crease phases at the end of dryer cycles |\n\nThe defaults are tuned for Siemens iQ appliances. Detection threshold is a trade-off: lower means faster notifications but higher risk of wrong matches. Some experimentation is expected.\n\n---\n\n## Data points per device\n\n| Data point | Type | Description |\n|---|---|---|\n| `state` | string | off / starting / running / paused / ending (language-neutral internal key, meant for automations) |\n| `stateText` | string | Same as `state`, but as ready-to-display, localized text (e.g. \"Running ⚙️\" / \"Läuft ⚙️\") - see [`displayLanguage`](#configuration) |\n| `running` | boolean | Simple on/off indicator |\n| `program` | string | Detected program name |\n| `programText` | string | Same as `program`, but with the `detecting...` placeholder localized (a confirmed program is your own saved name, passed through unchanged) |\n| `confidence` | number | Match confidence in % |\n| `timeRemaining` | number | Estimated remaining time in seconds |\n| `totalDuration` | number | Estimated total cycle duration in seconds |\n| `cycleProgress` | number | Cycle progress 0–100 % |\n| `phase` | string | Current cycle phase (language-neutral internal key, e.g. `washing`, `dryer_drying`) |\n| `phaseText` | string | Same as `phase`, but as ready-to-display, localized text with an emoji (e.g. \"🫧 Washing\" / \"🫧 Wäscht\") |\n| `lastCycleProgram` | string | Program of the last completed cycle |\n| `lastCycleDuration` | number | Duration of the last cycle in minutes |\n| `lastCycleEnergy` | number | Energy consumed in the last cycle in Wh |\n| `availablePrograms` | string (JSON) | Array of all saved program names, e.g. for external dropdowns |\n\n`phase`/`state`/`program` are meant for automations/scripts and use fixed, language-neutral values that never change with your ioBroker language - use the matching `*Text` data point instead if you want to show status directly in a VIS dashboard without building your own translation table. The language for `phaseText`/`stateText`/`programText` defaults to the ioBroker system language, and can be overridden per device with the \"Display language\" setting.\n\n---\n\n## Using data points in notification messages\n\nBesides the built-in placeholders (`{device}`, `{program}`, `{duration}`, `{energy}`, `{startTime}`, `{endTime}`, `{progress}`, `{prevTime}`), a notification message template can include the current value of **any** ioBroker data point with:\n\n```\n{state:objectId}\n```\n\nFor example, to include the current outside temperature and electricity price in a \"done\" message:\n\n```\n🧺 {device} done!\n⏱️ Total runtime: {duration} min\n🌡️ Outside: {state:0_userdata.0.outsideTemp}°C\n💶 Price: {state:0_userdata.0.electricityPrice} ct/kWh\n```\n\nThis also works inside the conditional `[...]` blocks: `[🌡️ Outside: {state:0_userdata.0.outsideTemp}°C]` disappears from the message entirely if that data point is empty or doesn't exist, exactly like it would for an empty built-in placeholder. A missing or unreadable object ID never breaks the rest of the message - it just resolves to nothing.\n\n---\n\n## Getting started tips\n\n- Let the device run at least 3–5 cycles per program before expecting reliable detection.\n- Start with fewer programs. The fewer profiles you have, the higher the match accuracy.\n- Use the **Cycles tab** in the admin UI to review past cycles, trim noise from the start/end of a recorded trace, or split a trace that captured two programs.\n- Use the **Export** function before any update to back up your learned profiles and cycle history.\n\n---\n\n## Changelog\n\n### **WORK IN PROGRESS**\n\n### 0.4.37 (2026-10-03)\n- 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)\n- Fix: `@iobroker/testing` devDependency bumped to `^6.3.0` (current; was `^6.2.2`)\n\n### 0.4.36 (2026-10-03)\n- 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`\n- Covered by 3 new test cases extending `tests/test_programs_and_feedback_sync.js`\n\n### 0.4.35 (2026-10-03)\n- 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\n- Covered by a new regression test (`tests/test_phase_text_tick_update.js`)\n\n### 0.4.34 (2026-10-02)\n- Fix: reported live with screenshots - `availablePrograms` could show `[]` for a device that clearly had saved programs visible in the admin tab's own \"Programme\" list, while a second device correctly showed all of its programs. Root cause: the data point (and `programOverride`'s dropdown states) was only ever written from five specific admin-tab actions (create/delete/rename a program, \"clear all data\") - never at startup, and never after a program got auto-learned from a confirmed cycle. A device whose programs were all auto-learned, with none of those five actions performed since the last restart, kept showing an empty list indefinitely even though `profileStore` had loaded the real programs from disk\n- Fix: `needsFeedback` stayed `false` even with a cycle visibly pending confirmation in the admin tab's \"Lernkontrolle\" tab (complete with its own \"1\" badge). Root cause: the data point was declared in `io-package.json` but never actually written anywhere - the admin tab computes its own pending-cycle count entirely client-side (`updateFeedbackBadge()` in `tab_m.html`, counting cycles with `!confirmed`), so the data point itself never reflected it\n- Both are now re-synced (a) unconditionally at the end of every device's startup, (b) after every finished cycle, and (c) - for `needsFeedback` - after a cycle is confirmed or corrected via the admin tab, mirroring the admin tab's own counting logic exactly\n\n### 0.4.33 (2026-10-02)\n- Fix: reported live with logs + a screenshot - a brand new cycle could show a leftover best-candidate guess from the *previous*, already-finished cycle for several minutes (e.g. \"~30 Speed (76%)\" right at the start of a new washing-machine cycle, matching exactly what the previous cycle had matched), before that new cycle's own matching had run even once. Root cause: `_onDetectorState()`'s `STARTING` case reset about a dozen per-cycle fields but not `_bestCandidate`, the field driving both the admin tab's live preview and, at the next confirmed transition, the persisted `program`/`programText`/`confidence` data points. The `STARTING` transition is now the single, authoritative reset point for every per-cycle field (also added the phase-tracking fields as defensive redundancy) - a new cycle can no longer show anything left over from the one before it\n- Fix: `cycleProgress` stayed stuck at its last value (often 100%) after a cycle finished, instead of resetting to 0. The reset call reused `_onTime()`, which has a guard that only writes `cycleProgress` when `progressPct > 0` (meant to ignore a brief non-match mid-cycle) - the deliberate reset-to-0 call was silently swallowed by that same guard. `_onTime()` now takes a `forceWrite` parameter that the reset call uses to bypass the guard\n- Fix: an uncaught exception during cycle-finish post-processing (notably the post-hoc phase analysis that only washing machines/dishwashers run, more complex than the dryer's live phase tracking) could silently skip the `onStateChange` callback that keeps the `state`/`stateText`/`running`/`program`/`phase` data points in sync - the same class of bug as 0.4.31's dryer-specific case, but for any device type and any exception source. Now guarded with try/catch so a failure in post-processing can never block the state-sync callback\n- New option **\"Show probable program before confirmation\"**: off by default (unchanged behavior - `program`/`programText` show `\"detecting...\"` until a match is actually confirmed). When enabled, a live best-candidate guess reaching at least 40% confidence is shown immediately, prefixed with `\"≈\"` (e.g. `\"≈ 30 Speed\"`), updated continuously as confidence changes - not just the admin tab's own preview anymore, but the actual data points too\n- New option **\"Text data points without emoji\"**: off by default. When enabled, `phaseText`/`stateText` omit their emoji (e.g. `\"Washing\"` instead of `\"🫧 Washing\"`) - useful for dashboards, text-to-speech, or anywhere emoji don't render usefully\n- All four issues found via a live report (screenshots + debug logs) and fixed with full regression test coverage, including reverting each fix and confirming its test fails first\n\n### 0.4.32 (2026-09-27)\n- Fix: follow-up to 0.4.31 - a restart alone did not clear an *already*-stale `state` data point (e.g. stuck on \"Running\"), even with 0.4.31 installed. `onReady()` only re-wrote the `state`/`stateText`/`running`/`program`/`phase` data points when a restore branch fired (sensor currently drawing power, or a saved cycle needs resuming/finishing) - with neither true (the common case: an idle device whose last cycle already finished cleanly), nothing touched them at all, so a stale leftover value would survive any number of restarts\n- Fixed by unconditionally re-syncing these data points with the manager's actual resolved state (`manager.currentState`/`manager.getStatus()`) at the end of every device's startup, regardless of which restore branch fired or didn't. Covered by a new source-inspection regression test (`tests/test_startup_state_sync.js`); also re-ran the full js-controller integration test since this touches `onReady()`\n- If you're still seeing a stuck status after installing 0.4.31: this release should finally clear it on the next restart\n\n### 0.4.31 (2026-09-27)\n- Fix: reported live - the admin tab showed the dryer as off while the `state` data point still read \"Running\". Root cause: the dryer's anti-crease \"power drop\" quick-finish path (`WashDataManager.processPowerReading()` - force-ends a cycle 45s after a sudden power drop, to react faster than waiting for the full off-delay) set the in-memory state to `off` directly and called the internal `_onCycleFinished()`, but - unlike the normal `_onDetectorState()` OFF transition - never invoked the `onStateChange` callback afterwards. That callback is what `main.js`'s `_onManagerState()` uses to write the `state`/`stateText`/`running`/`program`/`programText`/`phase`/`phaseText` data points, so they stayed frozen on their last value from before the drop even though the live status the admin tab reads (`WashDataManager._buildStatus()` via `getStatus`) was already correct. `lastCycle`/`lastCycleProgram`/etc. were unaffected (a separate callback), which is why cycle history looked fine while only the live status data points were stuck\n- Fixed by firing `onStateChange` after the quick-finish, exactly as the normal end-of-cycle transition already does. Covered by a new regression test (`tests/test_dryer_drop_finish_state_callback.js`)\n- If you're seeing the stuck-state symptom right now: restarting the adapter clears it immediately without waiting for the next cycle to start\n\n### 0.4.30 (2026-09-27)\n- Fix: removed the `sinon` devDependency again - it's already provided transitively via `@iobroker/testing`, so listing it directly was flagged as redundant by the review checker (E0063)\n- Fix: `tests/test_elapsed_time_unit.js`'s fake-adapter object (added in 0.4.29) made the same bare-global-timer mistake `test_restart_resume_low_power.js` had in 0.4.28 - reworked to use this suite's established native-setTimeout/setInterval alias pattern (E5004/E5005)\n- 0.4.29 was tagged and pushed but never reached npm before this follow-up was needed, so its `io-package.json` news entry has been folded into this one rather than left dangling (the review checker's E2004 flags any news entry for a version npm doesn't have)\n- Found via the second ioBroker.repositories manual review pass (PR #6459) on 0.4.29\n\n### 0.4.29 (2026-09-27)\n- 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`/`WashDataManager._buildStatus()`. All four now consistently use seconds, matching `timeRemaining`/`totalDuration`. Covered by a new regression test (`tests/test_elapsed_time_unit.js`)\n- Fix: added `sinon` as an explicit devDependency - several existing tests already `require(\"sinon\")` directly, but it was missing from `package.json` (a phantom dependency the repository checker had flagged back when this adapter was first submitted)\n- Both found via the ioBroker.repositories manual review pass on 0.4.27/0.4.28 (PR #6459); the `elapsedTime` unit mismatch had previously been marked \"ignore for now\" by the reviewer before being flagged again in a later pass\n\n### 0.4.28 (2026-09-27)\n- Fix: `@iobroker/testing` devDependency bumped to `^6.2.2` (the review checker's required minimum; was `^6.1.0`)\n- Fix: the GitHub noreply author email (`backfisch88@users.noreply.github.com`), rejected by the repository review checker, replaced with a real contact address in `package.json`, `io-package.json` and the `README.md`/`LICENSE` copyright lines\n- Fix: `tests/test_restart_resume_low_power.js`'s fake-adapter object called the bare global `setTimeout`/`setInterval` directly, which the review checker's plain-timer-usage check flags; reworked to use the same native-timer-alias pattern already used by every other test file in this suite. The mock's job is unchanged - it still just forwards to the real timer under the `adapter.setTimeout`/`adapter.setInterval` name\n- Found via the first ioBroker.repositories manual review pass (PR #6459) on 0.4.27\n\n### 0.4.27 (2026-09-25)\n- Fix: the notification-target dropdown in the admin tab showed a hardcoded German placeholder (\"Alle (broadcast)\") for every notification adapter except Telegram/email, regardless of the configured system language - for Telegram this got overwritten a moment later once the user list loaded, but for Pushover/Signal/WhatsApp/Matrix/notify-my-android/Prowl it was never replaced. Now uses the existing translation everywhere\n- Fix: a Telegram user's display name (settable by anyone who messages the configured bot) was written into the admin tab's dropdown options via unescaped string concatenation - a stored-XSS-style risk in the admin UI. Now HTML-escaped before insertion\n- Found via a repository-quality review of the admin tab; both are covered by new regression tests\n\n### 0.4.26 (2026-09-25)\n- Fix: a program correctly detected early in a cycle (confirmed via score accumulation, which can land as low as 60% confidence) could later revert to \"detecting...\" near the end if it was never boosted by locking - the protection against this (locking a confirmed program so a later run of unmatched readings can't wipe it) used to only activate if some individual reading also happened to reach 75% confidence on its own. Now it activates immediately on every confirmation, regardless of the confirming confidence. Confirmed against a real log: a wash cycle's program was correctly detected at 68.4% at 07:31, then a ~90-minute stretch of \"no match\" readings (bestCandidate still consistently the same program, just below the 55% match threshold) would have reverted it before this fix. A high-confidence, persistent override to a genuinely different program remains possible and unaffected\n\n### 0.4.25 (2026-09-23)\n- New: full per-phase duration learning model for remaining-time estimation. Each program now learns not just its overall duration, but how long each individual phase (heating, washing, spinning, dryer_drying, cooling, ...) typically takes, and in what order. Once at least 3 confirmed cycles have data for the current phase, remaining time is estimated as \"time left in the current phase, plus the typical duration of every phase that historically follows it\" - far more accurate near the end of a cycle than a single whole-cycle average, especially for a phase (like a dryer's main drying phase) whose position relative to total cycle length varies a lot between runs. Automatically falls back to the 0.4.24 time/energy blend until enough phase data exists\n\n### 0.4.24 (2026-09-23)\n- Improved remaining-time/progress accuracy, especially for the dryer: each program now also learns its historical duration variance (`durationCV`) - a dryer's drying time depends heavily on load size/dampness, so it naturally varies far more than a fixed-temperature wash. The remaining-time estimate now leans more on the live energy-consumption pace for programs known to vary a lot, and more on the historical time average for consistent ones\n- Fix: the reported progress percentage is now derived from the same blended remaining-time estimate instead of a separate pure elapsed-time ratio, so \"Fortschritt\" and the predicted finish time can no longer disagree with each other\n- Added a remaining-time cap for the dryer's short \"cooling\" phase, matching the washer's existing \"spinning\" cap\n\n### 0.4.23 (2026-09-16)\n- Fix: a cycle interrupted by an ioBroker restart while the device's power had already returned to idle was silently orphaned - the on-startup restore logic only handled the case where power was still high at restart, so the manager just reinitialized to \"off\" without ever properly finishing the interrupted cycle, leaving it stuck showing \"running\" with stale pre-restart values forever. Combined with the `offDelayMin` fix in 0.4.22, this should resolve \"cycle never ends\" reports after a mid/post-cycle adapter restart\n\n### 0.4.22 (2026-09-16)\n- Fix: the per-device \"Off delay\" setting (`offDelayMin`) was silently ignored - `CycleDetector`'s config merge never translated it into the field the detector actually uses (`offDelay`, in seconds), so every device always used a hardcoded 5-minute default regardless of what was configured. Found via a real trace where a cycle stayed stuck as \"running\" long after power had genuinely dropped to ~0W. Note: this alone doesn't fully explain very long stalls (well over an hour) - if a cycle still gets stuck after this fix, please share the adapter log from around that time\n\n### 0.4.21 (2026-09-08)\n- Fix: translated all remaining German user-visible strings in the admin tab (toasts, table headers, confirm dialogs - about 35 instances, more than initially found by review) into the existing i18n system\n- Fix: a cycle's `matchedProfile` could be stored server-side as literal German text (\"Anti-Knitter\") for anti-crease-tagged cycles, showing up untranslated in the `lastCycleProgram` data point and cycle history regardless of system language - now stored as a language-neutral marker and translated at display time\n- Fix: two remaining hardcoded German date/time locales in the admin tab now use the configured language like everywhere else\n- Fix: added the full MIT license text to README.md (previously only the header/copyright line)\n- Extended the English-only regression test to also cover the admin tab, closing the gap that let these issues go unnoticed for several releases\n\n### 0.4.20 (2026-09-08)\n- Fix: added Node.js 26 to the CI test matrix (`unit-tests` and `adapter-tests`)\n- Fix: updated the `@iobroker/testing` devDependency to 6.1.0 - checked both 6.0.0's and 6.1.0's breaking changes against this adapter (no `prepare` script, no `encryptedNative` properties, no `changeAdapterConfig()` usage in the integration test - none apply); full test suite, `test:package`, and `test:integration` all still pass\n\n### 0.4.19 (2026-09-05)\n- Fix: use `node:`-prefixed built-in module imports (`node:fs`, `node:path`) consistently everywhere (`lib/displayLabels.js`, `test/integration.js`, `test/package.js`), not just in `main.js`\n- Fix: updated `@iobroker/adapter-core` to the currently required minimum version (3.4.3)\n- Fix: three incomplete Dutch/Polish/Ukrainian changelog translations for 0.4.12 that were noticeably shorter than the English original\n\n### 0.4.18 (2026-09-02)\n- Fix: the dryer anti-crease lock period (learned duration + a fixed 10-minute buffer) could expire while the dryer was still genuinely doing its anti-crease tumbling - real anti-crease duration varies cycle to cycle, so a fixed length occasionally ran out mid-tumble, letting the tail end trigger a false new-cycle detection. The lock now extends when a genuine tumble spike occurs near its expiry, capped at 90 minutes total from the beep\n\n### 0.4.17 (2026-08-31)\n- New: `phaseText`, `stateText`, `programText` data points - localized, ready-to-display versions of the existing language-neutral `phase`/`state`/`program`, useful for a VIS dashboard without building your own translation table\n- New: \"Display language\" setting per device (defaults to the ioBroker system language)\n- Internal: the phase-translation table (previously only in the admin tab, for the cycle graph legend) is now one shared file (`admin/phaseLabels.json`) used by both the admin UI and the new server-side data points, instead of two separately maintained copies\n- Translated remaining German code comments to English (not a review/checker requirement - developer-only comments in German are explicitly permitted - done on request)\n- Reorganized the README changelog: the current 0.4.x series stays here in full, the pre-0.4.0 beta history (0.2.2–0.3.0) moved entirely to CHANGELOG_OLD.md (previously one version, 0.2.5, existed with near-duplicate text in both places)\n\n### 0.4.16 (2026-08-31)\n- New: notification templates support a `{state:objectId}` placeholder that resolves any ioBroker data point's current value at send time (e.g. outside temperature, electricity price), in addition to the existing built-in placeholders. Works inside conditional `[...]` blocks too - a block hides itself if the referenced data point is empty\n- Fix: a leftover German word (\"Fertig\") in the notification subject line\n\n### 0.4.15 (2026-08-31)\n- Fix: notification-language cache was module-level state (compact-mode leak risk between instances sharing a process) - moved to an instance field, same fix class already applied to ProfileStore's MIN_CONFIDENCE\n- Fix: two devices accidentally sharing the same power sensor now log a warning instead of one silently losing updates\n- Fix: `durationTolerance`/`matchIntervalMin`/`matchPersist`/`offDelayMin` normalization used a bare `||` default (same falsy-zero bug class fixed for other fields in 0.2.3) - aligned to the strict check\n- Removed unused dead code (`msgBlockTimer`, never assigned anywhere)\n\n### 0.4.14 (2026-08-30)\n- Replaced the low-resolution 128x128 adapter icon with a new, sharper 256x256 version\n\n### 0.4.13 (2026-08-27)\n- Fix: the `running` state's name was still German (\"Läuft\") on existing installations, even though the code has said \"Running\" for a long time - it was missing from the state-name migration list added in 0.4.12 (found via a fresh object dump). Extended `tests/test_english_only.js` to check that every state id is covered by the migration, catching this kind of gap automatically going forward\n\n### 0.4.12 (2026-08-26)\n- Fix: all log messages and state names are now in English (found via the ioBroker.repositories manual review - PR #6459) - several were still German, including `forceFinish`/`programOverride`/`lastMessage` and others\n- Fix: the `forceFinish` button state now correctly has `read: false`, matching the ioBroker role specification for `role: \"button\"`\n- Fix: existing installations are automatically migrated to the corrected English state names on next start (`setObjectNotExistsAsync` never updates an already-existing object, so a one-time migration step was needed)\n- Fix: running multiple devices on one adapter instance via native config's `devices` array was effectively impossible - the single configured device and the array were treated as mutually exclusive rather than combined. A dedicated admin UI for adding devices this way is still being worked on separately; for now, entries can be added by editing the instance's native config directly\n- Docs: corrected the Requirements section (Node.js ≥ 22, js-controller ≥ 6.0.11 - it previously listed older, no-longer-enforced minimums), documented why the adapter ships a custom admin tab, and linked the recommended Shelly EM hardware\n\n### 0.4.11 (2026-08-26)\n- 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\n- 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\n\n### 0.4.10 (2026-08-26)\n- 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\n- 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`)\n- 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\n\n### 0.4.9 (2026-08-24)\n- 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\n\n### 0.4.8 (2026-08-16)\n- No functional changes. Migrated `admin/i18n` to the short-format file structure (`i18n/<lang>.json` instead of `i18n/<lang>/translations.json`) via `npm run translate convert` - repository checker suggestion S5601\n\n### 0.4.7 (2026-08-16)\n- Fix: on devices going through the generic phase-history branch (currently dryers), recorded phase timestamps could show wildly wrong values (often large negative numbers, e.g. from days-old previous cycles) because the internal phase-history buffer was never cleared between cycles - found via a production object-structure dump during the \"add to latest\" review\n- Fix: repository checker finding - invalid state role `\"value.percent\"` on `cycleProgress` (not a valid ioBroker role), corrected to `\"value\"`\n\n### 0.4.6 (2026-08-16)\n- No functional changes. Switched npm publishing to Trusted Publishing (OIDC) so releases are signed with provenance (repository checker E2008)\n\n### 0.4.5 (2026-08-08)\n- Fix: a finished cycle could stay stuck showing \"running\" indefinitely if the power sensor stopped reporting after settling at a flat value (many sensors, incl. Shelly, only report on change) - the state machine is now re-evaluated periodically (heartbeat) so it can still finish on schedule\n- Fix: repository checker findings from issue #39 (real `test:package` validation instead of a no-op stub, corrected `adminUI.tab`/`materializeTab` config, responsive `jsonConfig.json` layout, various CI/tooling fixes)\n- (copilot) Adapter requires node.js >= 22 now\n- (ioBroker-Bot) Adapter requires js-controller >= 6.0.11 now.\n- (ioBroker-Bot) Adapter requires admin >= 7.8.23 now.\n\n### 0.4.1 (2026-07-30)\n- Fix: `ReferenceError: _suggestedApplied is not defined` crashing the admin tab in some browsers/modes\n- Fix: some Admin instances (especially the newer React-based rendering) showed a 404 \"File tab.html not found\" instead of loading the admin tab correctly - caused by an earlier cleanup that removed the `materializeTab` flag, which actually controls which filename (`tab.html` vs. `tab_m.html`) Admin resolves the custom tab to\n\n### 0.4.0 (2026-07-30)\n- New: full multilingual support - admin UI, notifications, and program phase names now translate automatically into 11 languages (en, de, ru, pt, nl, fr, it, es, pl, uk, zh-cn) based on the ioBroker system language\n- New: all code comments translated to English, full compliance with the official `@iobroker/eslint-config` (formatting + JSDoc)\n- Fix: the \"All devices\" status column and default notification templates weren't going through translation\n- Infrastructure: CI no longer needs a committed `package-lock.json`; real integration test added; git history cleaned up\n- Note: cycles recorded before this update show phases as an uncolored/unrecognized segment in the graph legend (the old German phase names no longer match the new internal phase keys) - purely cosmetic, only affects historical data\n\nOlder changelog entries (pre-0.4.0 beta history) can be found in [CHANGELOG_OLD.md](CHANGELOG_OLD.md).\n\n---\n\n## Contributing\n\nIssues and pull requests are welcome: [Issues](https://github.com/backfisch88/ioBroker.laundrylens/issues)\n\n---\n\n## License\n\nMIT License\n\nCopyright (c) 2026 backfisch88 <henrik.schoenhofen@icloud.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","readmeFilename":"README.md"}