{"_id":"@uboness/homebridge-mqtt","_rev":"26-b5b006458d90d605863c5718cc0b91e2","name":"@uboness/homebridge-mqtt","dist-tags":{"latest":"0.4.0"},"versions":{"0.0.1":{"name":"@uboness/homebridge-mqtt","version":"0.0.1","keywords":["homebridge-plugin"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.1","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"f29e1984a457c8f568e5be424bce7db83b4f373d","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.1.tgz","fileCount":474,"integrity":"sha512-TM8ANDGaHOSXKfEEMn0l6rxeMu3x9yjyxzrH1c/HSA7j5F0jItzUeUaH7lnLDZjDbJkbEmJ181BS8N9ewzreAQ==","signatures":[{"sig":"MEUCIQDsXRmThb5c1RzQIPOkka/J1a7HxqPCxyxmh6DzM4DFvAIgTg9/0fa2K2jbTSiRDE/Vsn0y+0w0/Lh1SmYCpG0DqNE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":565128},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"857db488426860fbab2285f1e74d978b395e0bb0","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.18.1","dependencies":{"mqtt":"^5.10.3"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","homebridge":"^1.8.5","typescript":"^4.9.5","@types/node":"^18.16.20","@inquirer/prompts":"^3.3.0","commit-and-tag-version":"^12.5.0","homebridge-config-ui-x":"^4.64.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.1_1737841432267_0.5552372690458323","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@uboness/homebridge-mqtt","version":"0.0.2","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.2","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"b2cb38a2aacb55ca5299d6f81b9c0ea646a5d1ca","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.2.tgz","fileCount":474,"integrity":"sha512-GjVHCYbEzC43P61Eou+HXVH0TQjMF6tjwOXufgSR5/P0NT2LbYp3EmoO+v3/ecJH1mJtUUpwP/JHNcjPhiIuYQ==","signatures":[{"sig":"MEUCIQDWjigkENNOSBtc5ylFeJBkjyvmfJ6q1JADQJC2Th8megIgSC1ETywNXlkaS9uErdOf4X6gzK3NUuf48ZK6Xty/uxM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":565226},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f298ed8284d6bb1d06030125c96387f8d7d07824","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.18.1","dependencies":{"mqtt":"^5.10.3"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","homebridge":"^1.8.5","typescript":"^4.9.5","@types/node":"^18.16.20","@inquirer/prompts":"^3.3.0","commit-and-tag-version":"^12.5.0","homebridge-config-ui-x":"^4.64.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.2_1737844079783_0.05762116472158185","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@uboness/homebridge-mqtt","version":"0.0.3","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.3","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"4d2014e77d23451682d1bb3715ebccff22e4e0e0","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.3.tgz","fileCount":478,"integrity":"sha512-khhzK93NAo3kZrB9pYgTk5ZxZOmIHnr0TcoVA4mH5axrlDI5lgn3yzH1nLoDkhGYIIhi9fbF99m3a7qWfOe5eg==","signatures":[{"sig":"MEUCIQCFYa/PXRhWU6jn3qu0fRQ3tuaw2zDmms+rYJva1/SWewIgeTi9MxhLeBCU6MbJ20d8rWtLbT2McOJok7ElKOt34uk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":567532},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"605e4f88960e1974dc9a9cd5527138c5b18f0a3e","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.18.1","dependencies":{"mqtt":"^5.10.3"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","homebridge":"^1.8.5","typescript":"^4.9.5","@types/node":"^18.16.20","@inquirer/prompts":"^3.3.0","commit-and-tag-version":"^12.5.0","homebridge-config-ui-x":"^4.64.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.3_1737849058412_0.1605457826414054","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@uboness/homebridge-mqtt","version":"0.0.4","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.4","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"7a29fffb0c6f4c05af5b2523bc64968875172b3e","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.4.tgz","fileCount":494,"integrity":"sha512-NOgAVNHl02H3pH6/tMKAwZW0cnh/mf7LQiWYAR1u6O46Ef9AkNxzFMVBDYhhWPPRuiQT7LcqiogJWElN40DzLA==","signatures":[{"sig":"MEQCIDVxkEvkUOrkoJt5bZ2ljmGO+LFdqnCFZwEy/dfiexvUAiB2yKc1iJmWKVhkFbg8qbI4blceEq/WgwGn8SAcWMUV3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":586284},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"faa94c85fd4ad211a6ee7ef139263b8f2caf7cc2","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.18.1","dependencies":{"mqtt":"^5.10.3"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","homebridge":"^1.8.5","typescript":"^4.9.5","@types/node":"^18.16.20","@inquirer/prompts":"^3.3.0","commit-and-tag-version":"^12.5.0","homebridge-config-ui-x":"^4.64.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.4_1737861540663_0.2549321271766871","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@uboness/homebridge-mqtt","version":"0.0.5","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.5","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"4179d9b92dce4f3d3f5a640fbe9c0c3251fcae22","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.5.tgz","fileCount":494,"integrity":"sha512-Euw2g2uwNs31fb2QV+zgV13s1tfkVA3WEWlMC5SyDamZwoc4IGAir9T7doyxj8ZAxMRoSnhsKbX0PepoL6+MNQ==","signatures":[{"sig":"MEUCICPyObPoXPn0egyK7X7oozDG76lM/wXFp1NQbu3CeCwaAiEAjmM4Hj9ALMsq2rcroBeZthYNOrP6B3izc/jkVLAg74s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":603488},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"324650ec539a47706735af8ebff271eee40f298f","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.18.1","dependencies":{"mqtt":"^5.10.3"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","homebridge":"^1.8.5","typescript":"^4.9.5","@types/node":"^18.16.20","@inquirer/prompts":"^3.3.0","commit-and-tag-version":"^12.5.0","homebridge-config-ui-x":"^4.64.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.5_1737931090513_0.3448935602753507","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@uboness/homebridge-mqtt","version":"0.0.6","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.6","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"db28159a168f48bf248c76cda5d40af92c750ecf","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.6.tgz","fileCount":494,"integrity":"sha512-Y21a0WI2oDoGHkazO5aXiJc9KZ+9vF3/eQR2mOjY+xk4aktR/q+DZiaAs+TAsyOtfdbU1oNE7ZDhwt/+p78dEg==","signatures":[{"sig":"MEQCIBBH6QeaQqolNbfZCLwrHmfxaHYg/D/QWhxZXs36g3DrAiBx6FMclL7vGZfIKafC7WMmammD9PmjC+Yxld2YD9Tbug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":611605},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"76598fa2d2ed58b9848c64b089618e8a683300dc","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.18.2","dependencies":{"mqtt":"^5.10.3"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","homebridge":"^1.8.5","typescript":"^4.9.5","@types/node":"^18.16.20","@inquirer/prompts":"^3.3.0","commit-and-tag-version":"^12.5.0","homebridge-config-ui-x":"^4.64.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.6_1738365735561_0.26152507057442653","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@uboness/homebridge-mqtt","version":"0.0.7","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.7","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"e61cbd82f4194abcf4ba5dd3db21de4b1af72e4f","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.7.tgz","fileCount":494,"integrity":"sha512-oEP+BEPmY04VjW4KoLJTzH2mo2k7h4ULcHXyunKiXysn/OA2CGwqEpzoBAodL0dJpKOt/dtYOzhefZVYo6S+2Q==","signatures":[{"sig":"MEQCIHA18Q6QtyrQN+GGfLsto9thqObSzZhGSMnMc98nFZwZAiB33nyBvi7bkAtgQmvO/5HDWEk0FGlapy5vV64UTPx1Hw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":611653},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"c19168f4b69cec7c2ae8bd98bd19dcdb9fab153b","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.18.2","dependencies":{"mqtt":"^5.10.3"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","homebridge":"^1.8.5","typescript":"^4.9.5","@types/node":"^18.16.20","@inquirer/prompts":"^3.3.0","commit-and-tag-version":"^12.5.0","homebridge-config-ui-x":"^4.64.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.7_1740836978449_0.18250589943909779","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@uboness/homebridge-mqtt","version":"0.0.8","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.8","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"6d3d233d5368aea4bf09a7aa15fe200a6a81df0a","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.8.tgz","fileCount":494,"integrity":"sha512-keC3NDZOJ74p3VXynOh9oJTbsngHgLfSCXkkJlIMP4/yORMjbEBNP0SDfCq/fnjk8ng0DpKEV3cDZ+ZbNlAZgw==","signatures":[{"sig":"MEQCIDGPxN3khpEePfqQHa8tnMp7O+8fSA6kR48mqBFa8UIdAiAXYQPamqeSuoJ1kUODUTTIB6uMc7bO4Z7FCpbCG/mWzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":611738},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"ac0029373e0b15b07f59dd10e6d5452940e2d3f4","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.18.2","dependencies":{"mqtt":"^5.10.3"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","homebridge":"^1.8.5","typescript":"^4.9.5","@types/node":"^18.16.20","@inquirer/prompts":"^3.3.0","commit-and-tag-version":"^12.5.0","homebridge-config-ui-x":"^4.64.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.8_1740837679858_0.891903038781988","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@uboness/homebridge-mqtt","version":"0.0.9","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.9","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"0a6d50ba514780996dd99a8a5cf2d2b3448b0980","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.9.tgz","fileCount":494,"integrity":"sha512-dWhB4Mc32sECqpzu5gO/kH6zowi5oz0lyN3spGKIayoNuEzAjO9W0rngMvn9HWEudBpnYnpxOn0g3/4ZezFOiA==","signatures":[{"sig":"MEUCIQCfRH/V3a2+oljEs1j2wgAogTFJeEbQjZ7cVHauPmYFAgIgf1z8l+jldfpPkP9NNdmJXQNcmbNIZl341knQMIFK5zk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":613368},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6ffac82d2c45a797f2911a5f7bb7113879ebf100","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.18.2","dependencies":{"mqtt":"^5.10.4"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^3.0.2","homebridge":"^1.9.0","typescript":"^4.9.5","@types/node":"^18.19.79","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.0","homebridge-config-ui-x":"^4.71.2"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.9_1741110869589_0.7168147242976328","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@uboness/homebridge-mqtt","version":"0.0.11","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.0.11","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"f61f678e5397421cab4d6e0133c0aa2404b9f721","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.0.11.tgz","fileCount":494,"integrity":"sha512-I45HkvFmpvqMy6RYR3B/f4YlqZ3Ie6rOG5JwptdYb8RYM22Wq5hR8fLtmTHbTwFouo2GaoP2jtE8/LK9jJ4WjA==","signatures":[{"sig":"MEYCIQCh4hvCBVnr0z5SBTEoIddDlNRywMjdhAcTo4ehbKTgmgIhAI2C6gZoRvucCR7KcPBgP6ii6CV+Cga01DYAkGW7qsij","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":619346},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^18.17.0 || ^20.9.0","homebridge":"^1.6.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"37b9afdf13271333cc462a37924c7df9e008fb74","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.19.4","dependencies":{"mqtt":"^5.14.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.0.11_1754955841114_0.6326128043677062","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@uboness/homebridge-mqtt","version":"0.1.0","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.1.0","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"b54805dddf2a6aa4554335f6edd0377c56160f2a","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.1.0.tgz","fileCount":494,"integrity":"sha512-iYvxyXkCsIybvEM49hX5Ql6Xx1AaImxe5yqNNIsyA5GbTn2JCqazi5hHsV2lJrIwjTPk/Kvjm5LK83ydGeziVw==","signatures":[{"sig":"MEUCIG3fPR81nFojwyzAR8K7HUIzln26QJHMqai0b5zmzvVtAiEAhbafzklMx7yvvUipwigvcF+ZVlHRuyRDftwY4gjEq28=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":619829},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"335f85509c48f5e2bd29475e8f8b18fb36a93c78","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.19.4","dependencies":{"mqtt":"^5.14.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.1.0_1754957170055_0.3276153020013266","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@uboness/homebridge-mqtt","version":"0.1.1","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.1.1","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"cf49040c3d8ed8ab27c81506187181c89a200cb1","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.1.1.tgz","fileCount":494,"integrity":"sha512-m239UbrnKXEZDJXxOW/1LXQ8mP8wdQEkyEWzG4lFEku3uNIa4AYyz+ewhg0EfdBPDLzRX2jGu4QsHbAqrrPX8Q==","signatures":[{"sig":"MEYCIQDh9FOJPt9MoxI1BE+lTkC1rkLfRkJC520oBZbuxS6rbwIhAPH3jnMTFAlikiLDLZNEyMn9nx0kTcdQm/zMSigC9OQp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":620421},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8dc9974f8f80570fcce6f31ba8ff31cbe5b2f03a","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:push && pnpm run release:publish","release:bump":"commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.9.3","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"22.18.0","dependencies":{"mqtt":"^5.14.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.1.1_1755033203088_0.2751956380802998","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@uboness/homebridge-mqtt","version":"0.1.2","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.1.2","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"65f4a49a095c5fdb0bd2571ee06195b0cd13f226","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.1.2.tgz","fileCount":494,"integrity":"sha512-4zqt4kLn4isXDcxu+0DwVP0oa15kv1HKfwwhYnUTgaRV+CMSqhHc6AODVLg9zZcebKaoW/nFqKHk4xNgyIHbVw==","signatures":[{"sig":"MEYCIQC/fVpp9N95tsq9H/7TEJTO7OwdF8jd7K9jqPDRtyaQOgIhALxqjTxYEYMvfRPf3Qf85jBeyUEmy2QZfTykUPdRooDY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":623005},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"c3b480174f2faefc7fec452d9070ddc559f83a82","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.19.4","dependencies":{"mqtt":"^5.14.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.1.2_1757178339867_0.1731989999071477","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@uboness/homebridge-mqtt","version":"0.2.0","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.0","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"94589065bbbdfce9f21c3fd4812b936769981ab4","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.0.tgz","fileCount":530,"integrity":"sha512-yU1ACEGMQl3RmDXq+31XsLw46HshzGt33nCzZ3WxXNXBZrXECaHQjZl+KbcUova86H76qyouan0yvj74gjgJqw==","signatures":[{"sig":"MEQCIB0DLbjcrlH7OFd4ch8OUF0Tc5Uu1hkIb2sPjM/xicXgAiAEWH7BbMjN67wD1UOmGateCZUF95SzbyYTzqL3gKFskA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":683541},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6f61873d067ccbdf1cb75a59af495b5102245bdf","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.19.4","dependencies":{"mqtt":"^5.14.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.0_1757533511567_0.8976664463739525","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@uboness/homebridge-mqtt","version":"0.2.1","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.1","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"e7f6834a92b4f15a871bffc6d98a9260248c6313","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.1.tgz","fileCount":530,"integrity":"sha512-ILB7fFiXlpL0MjQT36y17ax9DNzsOh1qPJr9q63OQt1Xsa7eD43iHBpOgg8CDwMT1J6CT6fXKUxFu9ngBZpeMA==","signatures":[{"sig":"MEQCIAseQr8ii5+V/x1mUKqKrwvyzXIcoq0bidxgbOfKnwjxAiBADudRbE/RRd1jPK7tDTJIeFdU9KiJwMfHQqDPRZJVug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":683824},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"3e552bca8f6e32a1df0cc36a903530b003bf210e","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.19.4","dependencies":{"mqtt":"^5.14.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.1_1757630455399_0.8604151558254196","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@uboness/homebridge-mqtt","version":"0.2.2","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.2","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"45e52be6104bd2bb3c73a1190a4da8a76288383b","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.2.tgz","fileCount":530,"integrity":"sha512-sn/n5MVX+knZOyM5GK+W8QlUeP5q6HUeaIotUr63/sAFwki98Crhn2n0K8Vpoebc/Hu1kT7NeXuBE0kMxbpK4A==","signatures":[{"sig":"MEUCIA8j/lwQ3fnBXLG924fY5Zx1o9moAniQT2azDRIb4aVDAiEA0lGRXM3iwampXuowDFhHZZQQIn56E8NC3Z4qAQD5Uig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":685168},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6224e9e09225dc1572099efd18f14fc853d20350","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.19.4","dependencies":{"mqtt":"^5.14.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.2_1757633544038_0.4341879872184333","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@uboness/homebridge-mqtt","version":"0.2.3","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.3","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"736104e64468f33779706f3d6a99263f7c243f70","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.3.tgz","fileCount":530,"integrity":"sha512-fcoqvpluMb7x3lG1ePZGBq8nDTKdBdCxfd0Jy6qaKxMAO9+oVGVVCy2T9Cxgal5+1P4KuxfU1ExHnTX48J2IGQ==","signatures":[{"sig":"MEUCIHO78ZY3owIxXNOYlLgPIzedMVRKB38Vv47MRbYzkfQdAiEA+pp9ZQ3fnQ42+Tr27T51Js7iBJkFMCSR/8L+rlTjS8s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":686277},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"c66786e11186e34e023210cb2383b0dfd6be2eb2","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.19.4","dependencies":{"mqtt":"^5.14.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.3_1757639425856_0.7280889813009825","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@uboness/homebridge-mqtt","version":"0.2.4","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.4","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"c36f0fd44d40089884088a2df6824b50157c53d3","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.4.tgz","fileCount":530,"integrity":"sha512-1mP1lB7/cdENZQ8xN3wTNRZzWzzmLTEPOnxTatKYjXif7nEy/cZxftzEcdBbAz5VJ4s6kubNak4i2wr5XVZjbA==","signatures":[{"sig":"MEUCIQD4XWqXzlUTnmU0aNOXOF9Fyduxpp/ydu0ZJfNli3kbOgIgZ/g8p4dyHVVWWHKIZUqloJkTdaG7xNBMUs/2qAVPQDU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":686757},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"ad623f06906be472596376469b6b9f948db5753d","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.8.2","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"20.19.4","dependencies":{"mqtt":"^5.14.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.4_1757757706710_0.3693262318187527","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@uboness/homebridge-mqtt","version":"0.2.5","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.5","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"2e3ba5dcbc8189deeb7b52d6a421dfc98952ebf5","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.5.tgz","fileCount":550,"integrity":"sha512-wgUlWon/WonnpoAbqa8XzUKDEwhm0a0lL1Y0oGq4wiaVkKmq9p26YugJ2EP6USrUjO3pltl/5FoN6DY62HBPdw==","signatures":[{"sig":"MEUCIAV8eyDsyg8ZYD2ByDCHRR9A/4Pc7TUy9iyCzXbpgDJHAiEAtkOTc2XJcxu/VWKkhYPRJcpsIJ2ZKB+srb7WkDbCvuw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":718687},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"999f6b9de2f725a749bf8caf78de682dc53fb8d1","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.9.3","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"22.18.0","dependencies":{"mqtt":"^5.14.0","uuid":"^13.0.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","homebridge":"^1.11.0","typescript":"^5.9.2","@types/node":"^24.2.1","@inquirer/prompts":"^3.3.2","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.4.1"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.5_1758045960909_0.7770171601708167","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@uboness/homebridge-mqtt","version":"0.2.6","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.6","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"fd1a75f824b4fd8a613f045f8aabc86615d78da8","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.6.tgz","fileCount":550,"integrity":"sha512-KdhxHjf5+0wXKkL8zZNHbIkszmRHZEeGl5JxGkKL1sfRqcaKCve9a1ncN2jREQQCpzqWhlAAA73dpX2clc6h2A==","signatures":[{"sig":"MEUCIBbR+P++O3Yioaci3e98REhGzEV9+k0hgt20HYrVgzbrAiEA350VgmnqAmyUE3MlhFatr+Yhb7OJCHX5MOzaN/nu7Oo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":718824},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"009cabc39d583072ccc28e8758f80adba81c64e3","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","cbuild":"pnpm run clean && pnpm run build","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.9.4","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"22.22.0","dependencies":{"mqtt":"^5.15.0","uuid":"^13.0.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.3","homebridge":"^1.11.2","typescript":"^5.9.3","@types/node":"^25.3.0","@inquirer/prompts":"^8.3.0","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.18.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.6_1771801811123_0.5146495926540466","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@uboness/homebridge-mqtt","version":"0.2.7","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.7","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"29544e82c7edd99e091ae219e602e3775ac58d0b","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.7.tgz","fileCount":550,"integrity":"sha512-wW4RWhR7K+5dnA/QEDDl6yXtBcV1M579Up1UvSkssu4zcLtsoNDorRaJj9r5L0Z0AxuznpqErIdBNptEJZ31gw==","signatures":[{"sig":"MEUCIQDY7gi5ABsiiJC0+dmDkALfJkeFv8y1FALVVZkinq3c1wIgF5IZkblpFzhqC8eLjUAaWd+l4RZrYsuKsWXuA3CMmKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":718910},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"1d2feabbedab2400f08b912a9d185a1120527a6b","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","cbuild":"pnpm run clean && pnpm run build","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.9.7","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"22.22.2","dependencies":{"mqtt":"^5.15.0","uuid":"^13.0.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.3","homebridge":"^1.11.4","typescript":"^5.9.3","@types/node":"^25.3.0","@inquirer/prompts":"^8.3.0","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.21.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.7_1775311694788_0.3565353360837844","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@uboness/homebridge-mqtt","version":"0.2.8","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.8","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"88a66af22737a2aefd7b6028bf3a4fa8518c6f9f","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.8.tgz","fileCount":550,"integrity":"sha512-Gbj7hhEQB64BG+CEiTRxKXkdSOXFAuBmteGJaIVRawWt31CsfcfVVJsEBGWc5/EGJPEYiLWHTQTl9LpMBgKGsA==","signatures":[{"sig":"MEQCICkep3bJMTwRY+pWs5U6UAOptNpOuQbKaJMEf8E1bwDLAiB8NpfXNOKacQCxbMrA84lUWtvO2/SnYQgF2m12DNY/IA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":719188},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"9b8b54174e0cd49c49f37a3b7314846501496ba3","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","cbuild":"pnpm run clean && pnpm run build","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.9.7","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"22.22.2","dependencies":{"mqtt":"^5.15.0","uuid":"^13.0.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.3","homebridge":"^1.11.4","typescript":"^5.9.3","@types/node":"^25.3.0","@inquirer/prompts":"^8.3.0","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.21.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.8_1776091030199_0.0811536732475231","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@uboness/homebridge-mqtt","version":"0.2.9","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.9","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"224c8b66315ee77e72e4e480486d846882010530","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.9.tgz","fileCount":550,"integrity":"sha512-hBkChbQ1Jtu/pjTLxTkyK/h/LJ/UGO1QUoOXPbCxeMpliUOcOvP5FUBlMhQ4Lx1auCx9JuvqlXyJacdJpQdRAA==","signatures":[{"sig":"MEUCIQDD8fDM8ZnoCWO6jpiLI60WrvWsNBHxjVotWWr89cBMrQIgCbGganeNZqG3QrPyGfIN23CdrbVd3VsQgCC0zTBfDYo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":719498},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"e2af104ed0920c40a4e1303d40719141623c34e4","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","cbuild":"pnpm run clean && pnpm run build","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.9.7","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"22.22.2","dependencies":{"mqtt":"^5.15.0","uuid":"^13.0.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.3","homebridge":"^1.11.4","typescript":"^5.9.3","@types/node":"^25.3.0","@inquirer/prompts":"^8.3.0","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.21.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.9_1776098452828_0.661578816118235","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@uboness/homebridge-mqtt","version":"0.2.10","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.2.10","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"b679cd7c5d15ea2a0434fad638ec1e2bf01e37cd","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.2.10.tgz","fileCount":550,"integrity":"sha512-S7sCPI5X4HzthGQTw0ioUt/7Fqxolppvxzk+gaw/N34TEMb/aEU56v+feSJTIWrhnM+zEaj8QH94HTjpvZW72A==","signatures":[{"sig":"MEUCIHuudNM8SQhKX/wfZfjHlWv60gEU2z2kcwnMpnOvEqNwAiEAxupk6iSFf7icTI/WfoB0IxMfEeXyK4/ARAiKTHw3GKs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":720898},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":"^20.9.0 || ^22.18.0","homebridge":"^1.11.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6cd012985dea6ccc3c81d9ef94f9324de734a102","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","cbuild":"pnpm run clean && pnpm run build","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"10.9.7","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"22.22.2","dependencies":{"mqtt":"^5.15.0","uuid":"^13.0.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.3","homebridge":"^1.11.4","typescript":"^5.9.3","@types/node":"^25.3.0","@inquirer/prompts":"^8.3.0","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.21.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.2.10_1776174317466_0.2811752857748637","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@uboness/homebridge-mqtt","version":"0.3.0","keywords":["homebridge-plugin","mqtt"],"author":{"name":"uboness"},"license":"Apache-2.0","_id":"@uboness/homebridge-mqtt@0.3.0","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"homepage":"https://github.com/uboness/{{name}}#readme","bugs":{"url":"https://github.com/uboness/{{name}}/issues"},"dist":{"shasum":"3a742b1356e139587e343df974f964a31867624f","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.3.0.tgz","fileCount":550,"integrity":"sha512-SOI8piTf08o21yVZ58iuq7jHKZA3UwCARW9/uIXUYPCOHBGwrH6IuXb8olDgm9xP1W/JcPyKTfW/bvC1ARfWRQ==","signatures":[{"sig":"MEUCIQDEwQvCfiXcH+gib3GK8CrWvBBmRRKBpy0PGSCcssoGyQIgcxOivjLaozcUSsWy9SilNyJz++jIKiYD8Jq09n5QZZQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":692398},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":"^18.20.4 || ^20.15.1 || ^22 || ^24","homebridge":"^1.11.4 || ^2.0.0-beta.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"896fff3ba22ca2c15c42abcbdfead8ec1f06654e","scripts":{"build":"pnpm run clean && tsc","clean":"rimraf ./dist","watch":"pnpm run clean && tsc -w","cbuild":"pnpm run clean && pnpm run build","release":"pnpm run release:bump && pnpm run release:postbump","release:bump":"pnpm run build && commit-and-tag-version","release:push":"git push --follow-tags","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","prepublishOnly":"pnpm run build","release:publish":"npm publish --access public","release:postbump":"pnpm run release:push && pnpm run release:publish","release:bump-major":"commit-and-tag-version --release-as major","release:bump-minor":"commit-and-tag-version --release-as minor"},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"repository":{"url":"git+https://github.com/uboness/{{name}}.git","type":"git"},"_npmVersion":"11.12.1","description":"Homebridge Mqtt Plugin","directories":{},"displayName":"Homebridge Mqtt","_nodeVersion":"24.15.0","dependencies":{"mqtt":"^5.15.0","uuid":"^13.0.0"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.1.3","homebridge":"1.11.4","typescript":"^5.9.3","@types/node":"^25.3.0","commit-and-tag-version":"^12.5.2","homebridge-config-ui-x":"^5.22.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-mqtt_0.3.0_1776775581018_0.8903195715312027","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@uboness/homebridge-mqtt","version":"0.4.0","author":{"name":"uboness"},"publishConfig":{"@uboness:registry":"https://registry.npmjs.org "},"displayName":"Homebridge Mqtt","description":"Homebridge Mqtt Plugin","license":"Apache-2.0","type":"module","keywords":["homebridge-plugin","mqtt"],"repository":{"type":"git","url":"git+https://github.com/uboness/homebridge-mqtt.git"},"bugs":{"url":"https://github.com/uboness/homebridge-mqtt/issues"},"engines":{"homebridge":"^1.11.4 || ^2.0.0-beta.0","node":"^18.20.4 || ^20.15.1 || ^22 || ^24"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"main":"dist/index.js","scripts":{"clean":"rimraf ./dist","build":"pnpm run clean && tsc","cbuild":"pnpm run clean && pnpm run build","watch":"pnpm run clean && tsc -w","prepublishOnly":"pnpm run build","release:bump":"pnpm run build && commit-and-tag-version","release:bump-minor":"commit-and-tag-version --release-as minor","release:bump-major":"commit-and-tag-version --release-as major","release:postbump":"pnpm run release:push && pnpm run release:publish","release:push":"git push --follow-tags","release:publish":"npm publish --access public","release":"pnpm run release:bump && pnpm run release:postbump","release-minor":"pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish","release-major":"pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish"},"devDependencies":{"@types/node":"^25.3.0","commit-and-tag-version":"^12.5.2","homebridge":"1.11.4","homebridge-config-ui-x":"^5.22.0","rimraf":"^6.1.3","typescript":"^5.9.3"},"dependencies":{"mqtt":"^5.15.0","uuid":"^13.0.0"},"_id":"@uboness/homebridge-mqtt@0.4.0","gitHead":"4388f7a1c813e6ca3dd55e2dc2a8b983e28a5442","types":"./dist/index.d.ts","homepage":"https://github.com/uboness/homebridge-mqtt#readme","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-lzCR/j3j3lgEKaHzrIrTxOgE0ANDxvuDnPqGxdEfuk7ceULwAJynOCob82aLcF1lwg2xKw9SfbHaXynawQNS/g==","shasum":"4dba057b09cef89019a2a952c70fa4eb955b96af","tarball":"https://registry.npmjs.org/@uboness/homebridge-mqtt/-/homebridge-mqtt-0.4.0.tgz","fileCount":550,"unpackedSize":691310,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAt21jQsKVKVdrP9gPdCahK7uF4uC1pdK+S3wQMov7QjAiEA5sAyRGYXgUo7K+c9KBBMZ+kYfBoKCC9eASwUBJHbvaU="}]},"_npmUser":{"name":"uboness","email":"uboness@gmail.com"},"directories":{},"maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/homebridge-mqtt_0.4.0_1777640167602_0.7657512998496461"},"_hasShrinkwrap":false}},"time":{"created":"2025-01-25T21:43:52.190Z","modified":"2026-05-01T12:56:07.933Z","0.0.1":"2025-01-25T21:43:52.534Z","0.0.2":"2025-01-25T22:28:00.003Z","0.0.3":"2025-01-25T23:50:58.643Z","0.0.4":"2025-01-26T03:19:00.858Z","0.0.5":"2025-01-26T22:38:10.756Z","0.0.6":"2025-01-31T23:22:15.833Z","0.0.7":"2025-03-01T13:49:38.651Z","0.0.8":"2025-03-01T14:01:20.170Z","0.0.9":"2025-03-04T17:54:29.762Z","0.0.11":"2025-08-11T23:44:01.320Z","0.1.0":"2025-08-12T00:06:10.304Z","0.1.1":"2025-08-12T21:13:23.281Z","0.1.2":"2025-09-06T17:05:40.056Z","0.2.0":"2025-09-10T19:45:11.824Z","0.2.1":"2025-09-11T22:40:55.635Z","0.2.2":"2025-09-11T23:32:24.244Z","0.2.3":"2025-09-12T01:10:26.064Z","0.2.4":"2025-09-13T10:01:46.923Z","0.2.5":"2025-09-16T18:06:01.125Z","0.2.6":"2026-02-22T23:10:11.313Z","0.2.7":"2026-04-04T14:08:15.021Z","0.2.8":"2026-04-13T14:37:10.354Z","0.2.9":"2026-04-13T16:40:52.976Z","0.2.10":"2026-04-14T13:45:17.610Z","0.3.0":"2026-04-21T12:46:21.177Z","0.4.0":"2026-05-01T12:56:07.818Z"},"bugs":{"url":"https://github.com/uboness/homebridge-mqtt/issues"},"author":{"name":"uboness"},"license":"Apache-2.0","homepage":"https://github.com/uboness/homebridge-mqtt#readme","keywords":["homebridge-plugin","mqtt"],"repository":{"type":"git","url":"git+https://github.com/uboness/homebridge-mqtt.git"},"description":"Homebridge Mqtt Plugin","maintainers":[{"name":"uboness","email":"uboness@gmail.com"}],"readme":"# Homebridge Mqtt Plugin\n\n## !! Experimental !!\n\n[![Build](https://github.com/uboness/homebridge-mqtt/actions/workflows/build.yml/badge.svg)](https://github.com/uboness/homebridge-mqtt/actions/workflows/build.yml)\n\n- [Core Ideas](#core-ideas)\n  - [Device Configuration](#device-configuration)\n- [Settings](#settings)\n  - [Templates](#templates)\n- [Converters Reference](#converters-reference)\n- [Characteristics Reference](#characteristics-reference)\n- [Services Reference](#services-reference)\n  - [air-quality-sensor](#air-quality-sensor)\n  - [battery](#battery)\n  - [button](#button)\n  - [co2-sensor](#co2-sensor)\n  - [contact-sensor](#contact-sensor)\n  - [co-sensor](#co-sensor)\n  - [door](#door)\n  - [doorbell](#doorbell)\n  - [fan](#fan)\n  - [humidifier-dehumidifier](#humidifier-dehumidifier)\n  - [humidity-sensor](#humidity-sensor)\n  - [leak-sensor](#leak-sensor)\n  - [lightbulb](#lightbulb)\n  - [light-sensor](#light-sensor)\n  - [lock](#lock)\n  - [microphone](#microphone)\n  - [motion-sensor](#motion-sensor)\n  - [occupancy-sensor](#occupancy-sensor)\n  - [outlet](#outlet)\n  - [security-system](#security-system)\n  - [smoke-sensor](#smoke-sensor)\n  - [speaker](#speaker)\n  - [switch](#switch)\n  - [temperature-sensor](#temperature-sensor)\n  - [thermostat](#thermostat)\n  - [window](#window)\n  - [window-covering](#window-covering)\n  \n\nThis plugin enables the configuration of devices (HomeKit accessories) that are driven by MQTT topics.\n\n## Core Ideas\n - Multiple brokers are supported\n - Each broker defines:\n   - a unique id\n   - connection settings to a single MQTT broker\n   - `baseTopic` a \"prefix\" topic that will be prepended to all topics configured by the devices & templates\n   - device configurations - all driven by topics within the broker\n   - device templates - reusable device configuration segments (helps keep configuration clean and simple)\n\n### Device Configuration\nA device configuration is made out of:\n- `id` - This identifies the device in homebridge, so it needs to be unique within the Homebridge instance.\n- `type` - The primary service type\n- `name` - Serves as both the primary service name and the HomeKit accessory name\n- `deviceName` - If set, serves as the accessory name (used to separate the accessory and primary service names)\n- `topics` - Defines the characteristics of the primary service and their associated (read/write) topics from/to which values will be read/written\n- `services` - An array of additional (secondary) services that are part of the HomeKit accessory.\n\nHere's an example of a simple lightbulb accessory that happens to have a built-in light sensor:\n\n```json\n{\n  \"id\": \"my-ceiling-light\",\n  \"type\": \"lightbulb\",\n  \"name\": \"My Ceiling Lamp\",\n  \"topics\": {\n    \"on\": {\n      \"get\": \"my-home/my-room/my-ceiling-light/on\",\n      \"set\": \"my-home/my-room/my-ceiling-light/on/set\",\n      \"converter\": \"boolean\"\n    },\n    \"brightness\": {\n      \"get\": \"my-home/my-room/my-ceiling-light/brightness\",\n      \"set\": \"my-home/my-room/my-ceiling-light/brightness/set\"\n    }\n  },\n  \"services\": [\n    {\n      \"type\": \"light-sensor\",\n      \"name\": \"Light Sensor\",\n      \"topics\": {\n        \"ambientLevel\": {\n          \"get\": \"my-home/my-room/my-ceiling-light/lux\",\n          \"set\": \"my-home/my-room/my-ceiling-light/lux/set\"\n        }\n      }\n    }\n  ]\n}\n```\nEach service type defines a set of required characteristics which must be configured within the `topics` configuration\n(e.g. A `switch` service must define the `on` characteristic).\n\nThere may also be optional characteristics that a service can support (e.g. all sensor services support the \n`statusLowBattery` characteristic, though it's optional).\n\nThe HomeKit Accessory Protocol (HAP) Specification define the services supported in homekit and their required/optional\ncharacteristics. This plugin roughly follows these specifications with a few exceptions here and there.\n\nIn the example above, the configured MQTT topics hold the values that will eventually be read/published by\nthe relevant characteristics. MQTT values are strings and therefore we need a way to convert these values to the appropriate\ntype that is expected by each characteristic. This is the role of the `converter`. Each characteristic support a set of\nconverters that helps in converting different formats. For example, as in the above, by default, the `on` characteristic\nexpects `1` (for \"on\") and `0` (for \"off\") values. But if the MQTT value holds `true` and `false` instead, the `boolean`\nconverter will be able to handle it. What if the MQTT values is `YES` and `NO`? Well, there's a converter\nfor that too - a more generic one: `converter: { \"on\": \"YES\", \"off\": \"NO\" }` - in this case, we indicate which MQTT\nvalues represent `on` and `off`.\n\nSome systems (e.g. zigbee2mqtt) publish JSON values to their MQTT topic. To fetch a JSON value, you append\nthe \"path\" to the value within the JSON to the topic itself, using the `$` sign as a separator. For example,\nthe following hum characteristic configuration reads/writes the hue values from/to JSON values in the MQTT topics:\n\n```json\n{\n  \"hue\": {\n    \"get\": \"zigbee2mqtt/Garage Led$color.hue\",      // reads from\n    \"set\": \"zigbee2mqtt/Garage Led/set$color.hue\"   // publishes to\n  }\n}\n```\nIn the above, the topic is `zigbee2mqtt/Garage Led` holds a JSON object of the form:\n```json\n{\n  //...\n  \"color\": {\n    \"hue\": 212,\n    \"saturation\": 10,\n    \"x\": 0.3131,\n    \"y\": 0.3232\n  }\n  //...\n}\n```\nWith the `$` syntax, the plugin knows how to read it and extract the appropriate value.\n\nSimilarly, when publishing a value to the `zigbee2mqtt/Garage Led/set` topic, the plugin will create a JSON value of\nthe following form:\n\n```json\n{ \"color\": { \"hue\": 200 }}\n```\n\nAt the moment, not all HAP services are supported by this plugins, but certainly a big chunk of the most common ones.\nMore services/characteristics may be added in the future.\n\nThere are many service types to choose from and many characteristic types as well, all of which are \n\n## Settings\n\nHere's an example of the plugin configuration:\n\n```json\n{\n    \"name\": \"Mqtt\",\n    \"platform\": \"Mqtt\",\n    \"logger\": {\n      \"trace\": false // change to 'true' to output extensive logs (only works when HB runs in debug mode)\n    },\n    \"servers\": [\n      {\n        \"id\": \"knx\",\n        \"host\": \"mqtt.local\",\n        \"port\": 1883,\n        \"auth\": { // optional, remove if your MQTT broker doesn't require authentication\n          \"username\": \"<username>\",\n          \"password\": \"<password>\"\n        },\n        \"baseTopic\": \"knx\",\n        \"templates\": [\n          // all the KNX device templates are configued here (see below)\n        ],\n        \"devices\": [\n          // all the KNX devices are configured here\n        ]\n      },\n      {\n        \"id\": \"zigbee2mqtt\",\n        \"host\": \"mqtt.local\",\n        \"port\": 1883,\n        \"auth\": { // optional, remove if your MQTT broker doesn't require authentication\n          \"username\": \"<username>\",\n          \"password\": \"<password>\"\n        },\n        \"baseTopic\": \"z2m\",\n        \"templates\": [\n          // all the z2m device templates are configued here (see below)\n        ],\n        \"devices\": [\n          // all the z2m devices are configured here\n        ]\n      }\n    ]\n}\n```\nIn the example above, the plugin is configured with 2 brokers - one that holds all KNX devices values and another that\nis the [zigbee2mqtt](https://www.zigbee2mqtt.io/) broker.\n\nIf you look closely thought, they are actually pointing to\nthe same server - they could point to different servers, but in this case it's the same server and the only thing that\nreally differentiate them is the `baseTopic` - all KNX values are under the `knx` base topic while all the `zigbee2mqtt`\ntopics are under the `z2m` base topic.\n\nIn this case, we could have also use a single MQTT connection by dropping the `baseTopic` setting and make sure that the\ndevices use the full MQTT topic paths in their configurations. So there are a lot of possibilities to design this in a\nway to best fit your setup.\n\n### Templates\n\nWe've seen above an example of a device configuration. These configurations may vary from simple to complex, depending on\nthe type of services (and the number of services) each device/accessory has. But event in its simplest form, like a simple\n`switch` device with a single primary `switch` service that only has one `on` characteristic, when you have many of such\nservices defined, the configuration may look quite cumbersome. More over, it really depends on the setup you have at home, \nbut it is often the case that the same physical device types are used across the house, for example:\n\n- If you have KNX installed in the house, the setups for all your switches in the house is most likely similar and the\n  only thing that changes between them is the KNX group addresses that are associated with them.\n\n- If you have a Hue bridge at home, and you're using Hue motion sensor, it's very likely you have a bunch of those and\n  zigbee2mqtt will expose their state in similar ways (just under a different base topic)\n\nThere can be many examples as the two above, but the point is, with the normal device configuration as we've seen, you'll \nfind yourself copy-pasting configurations all over the place. This is where **Templates** enter the picture.\n\nBut first, lets say we have 2 Hue motion sensors in the house and we configure them without templates, here's how it might\nlook like:\n\n```json\n{\n  //...\n  \"devices\": [\n    {\n      \"id\": \"garage-motion\",\n      \"name\": \"Garage Motion\",\n      \"type\": \"motion-sensor\",\n      \"topics\": {\n        \"motionDetected\": {\n          \"get\": \"Garage Motion$occupancy\",\n          \"converter\": \"boolean\"\n        }\n      },\n      \"services\": [\n        {\n          \"name\": \"Battery Level\",\n          \"type\": \"battery\",\n          \"topics\": {\n            \"batteryLevel\": {\n              \"get\": \"Garage Motion$battery\"\n            }\n          }\n        },\n        {\n          \"name\": \"Light Sensor\",\n          \"type\": \"light-sensor\",\n          \"topics\": {\n            \"ambientLevel\": {\n              \"get\": \"Garage Motion$illuminance_lux\"\n            }\n          }\n        },\n        {\n          \"name\": \"Temperature Sensor\",\n          \"type\": \"temperature-sensor\",\n          \"topics\": {\n            \"currentTemperature\": {\n              \"get\": \"Garage Motion$temperature\"\n            }\n          }\n        }\n      ]\n    },\n    {\n      \"id\": \"stairs-motion\",\n      \"name\": \"Stairs Motion\",\n      \"type\": \"motion-sensor\",\n      \"topics\": {\n        \"motionDetected\": {\n          \"get\": \"Stairs Motion$occupancy\",\n          \"converter\": \"boolean\"\n        }\n      },\n      \"services\": [\n        {\n          \"name\": \"Battery Level\",\n          \"type\": \"battery\",\n          \"topics\": {\n            \"batteryLevel\": {\n              \"get\": \"Stairs Motion$battery\"\n            }\n          }\n        },\n        {\n          \"name\": \"Light Sensor\",\n          \"type\": \"light-sensor\",\n          \"topics\": {\n            \"ambientLevel\": {\n              \"get\": \"Stairs Motion$illuminance_lux\"\n            }\n          }\n        },\n        {\n          \"name\": \"Temperature Sensor\",\n          \"type\": \"temperature-sensor\",\n          \"topics\": {\n            \"currentTemperature\": {\n              \"get\": \"Stairs Motion$temperature\"\n            }\n          }\n        }\n      ]\n    }\n  ]\n}\n```\nOuch... as you can see, just defining 2 motion sensors already looks quite cumbersome and complex. And even more annoying, \nthe two configurations are almost identical - the only thing that differs them is the base topic of the device (which makes\nsense, because these are both Hue motion sensors, supporting the same characteristics and controlled by the same system (zigbee2mqtt)).\n\nSurely we can do better - We can define a template for a hue motion sensor and have both devices point to it:\n\n```json\n{\n  \"templates\": [\n    {\n      \"id\": \"hue-motion-sensor\",\n      \"type\": \"motion-sensor\",\n      \"topics\": {\n        \"motionDetected\": {\n          \"get\": \"{{baseTopic}}$occupancy\",\n          \"converter\": \"boolean\"\n        }\n      },\n      \"services\": [\n        {\n          \"name\": \"Battery Level\",\n          \"type\": \"battery\",\n          \"topics\": {\n            \"batteryLevel\": {\n              \"get\": \"{{baseTopic}}$battery\"\n            }\n          }\n        },\n        {\n          \"name\": \"Light Sensor\",\n          \"type\": \"light-sensor\",\n          \"topics\": {\n            \"ambientLevel\": {\n              \"get\": \"Stairs {{baseTopic}}$illuminance_lux\"\n            }\n          }\n        },\n        {\n          \"name\": \"Temperature Sensor\",\n          \"type\": \"temperature-sensor\",\n          \"topics\": {\n            \"currentTemperature\": {\n              \"get\": \"{{baseTopic}}$temperature\"\n            }\n          }\n        }\n      ]\n    }\n  ],\n  \"devices\": [\n    {\n      \"id\": \"garage-motion\",\n      \"name\": \"Garage Motion\",\n      \"baseTopic\": \"Garage Motion\",\n      \"template\": \"hue-motion-sensor\"\n    },\n    {\n      \"id\": \"stairs-motion\",\n      \"name\": \"Stairs Motion\",\n      \"baseTopic\": \"Stairs Motion\",\n      \"template\": \"hue-motion-sensor\"\n    }\n  ]\n}\n```\nThe template above defines the typical structure of a Hue motion sensor device and it uses parameter placeholders to\nmake it reusable. Then, when defining the devices, all that is required is to point to the template and provide a value\nto the template parameters (`baseTopic` in this case). Now imagine you have 10 such motion sensors in the house - this\nmakes their configuration a breeze. More over, it's great for maintenance - if you need to change how you handle a motion\nsensor, you just need to change the template and all motion sensor devices will automatically be updated.\n\nIt's also possible to use parameter placeholder in normal device configuration. For example\n\n```json\n{\n  \"devices\": [\n    {\n      \"id\": \"garage-motion\",\n      \"name\": \"Garage Motion\",\n      \"type\": \"motion-sensor\",\n      \"topic\": \"Garage Motion\",\n      \"topics\": {\n        \"motionDetected\": {\n          \"get\": \"{{topic}}$occupancy\",\n          \"converter\": \"boolean\"\n        }\n      },\n      \"services\": [\n        {\n          \"name\": \"Battery Level\",\n          \"type\": \"battery\",\n          \"topics\": {\n            \"batteryLevel\": {\n              \"get\": \"{{topic}}$battery\"\n            }\n          }\n        },\n        {\n          \"name\": \"Light Sensor\",\n          \"type\": \"light-sensor\",\n          \"topics\": {\n            \"ambientLevel\": {\n              \"get\": \"{{topic}}$illuminance_lux\"\n            }\n          }\n        },\n        {\n          \"name\": \"Temperature Sensor\",\n          \"type\": \"temperature-sensor\",\n          \"topics\": {\n            \"currentTemperature\": {\n              \"get\": \"{{topic}}$temperature\"\n            }\n          }\n        }\n      ]\n    }\n  ]\n}\n```\nIn the above example, we only need to define the `topic` of the accessory once in a parameter and \nhave all topics reference it. If the topic changes, we only need to change one place. Though again, the use\nof templates has the potential of a greater added value overall.\n\n## Converters Reference\n\n### Booleans\n- `boolean` - Converts \"true\" and \"false\" string values or `true` and `false` JSON values.\n- `zero-one` - Converts \"1\" and \"0\" to `true` and `false` (also `1` and `0` numeric JSON values)\n- `{ \"on\": \"<on_value>\", \"off\": \"<off_value>\" }` - Indicates the values that represent `true` (on) and `false` (off)\n\n### Percentages (%)\n- `homekit` - Homekit expects numbers between 0 - 100.\n- `decimal` - Converts numbers between 0 - 1 (`0.34` indicates `34%`)\n- `{ \"min\": <number>, \"max\": <number> }` - Translate any number between these bounds to a percentage value. Any number above the max will be converted to `max` and any number below the min will be converted to `min`.\n- `[ \"value1\", \"value2\", ... ]` - The values in the array represent the MQTT values, the index of each value in the array determines the 0-100 HomeKit value the MQTT value maps to.\n                                  for example [ \"low\", \"mid\", \"high\" ] will map `low` to 0, `mid` to 50 and `high` to 100. The converter will also \n                                  make sure that 0, 50, and 100 are the only possible values the characteristic will have (rounding other values to one of these values)\n\n### Hue\n- `homekit` - Homekit expects numbers representing arc degrees (0 - 360)\n- `percent-integer` - Converts a percentage value between 0 - 100\n- `percent-decimal` - Converts a percentage value between 0 - 1\n\n### Color Temperatures\n- `homekit` - Homekit expects numbers in mirek units ($mirek = \\frac{1,000,000}{Kelvin}$)\n- `mirek` - same as `homekit`\n- `kelvin` - Converts numbers in kelvin units\n\n### Illuminance\n- `homekit` - Homekit expects numbers in lux units\n- `lux` - same as `homekit`\n- `log-scale-lux` - Expects number in log scale values as used by Hue ($lux =(\\frac{logscale-1}{10000})^{10}$)\n\n### Temperatures\n- `homekit` - Homekit expects temperature to be in Celsius\n- `celsius` - same as `homekit`\n- `fahrenheit` - Expects temperatures to be in Fahrenheit units \n\n\n## Characteristics Reference\n\n- [Common Characteristics](#common-characteristics)\n- [Common Sensor Characteristics](#common-sensor-characteristics)\n- [active](#code-stylecolor-greenactivecode)\n- [airQuality](#code-stylecolor-greenairQualitycode)\n- [ambientLightLevel](#code-stylecolor-greenambientLightLevelcode)\n- [batteryLevel](#code-stylecolor-greenbatteryLevelcode)\n- [brightness](#code-stylecolor-greenbrightnesscode)\n- [co2Detected](#code-stylecolor-greenco2Detectedcode)\n- [co2Level](#code-stylecolor-greenco2Levelcode)\n- [co2PeakLevel](#code-stylecolor-greenco2PeakLevelcode)\n- [coDetected](#code-stylecolor-greencoDetectedcode)\n- [coLevel](#code-stylecolor-greencoLevelcode)\n- [coPeakLevel](#code-stylecolor-greencoPeakLevelcode)\n- [chargingState](#code-stylecolor-greenchargingStatecode)\n- [colorTemperature](#code-stylecolor-greencolorTemperaturecode)\n- [contactSensorState](#code-stylecolor-greencontactSensorStatecode)\n- [coolingThreshold](#code-stylecolor-greencoolingThresholdcode)\n- [currentFanState](#code-stylecolor-greencurrentFanStatecode)\n- [currentHeatingCoolingState](#code-stylecolor-greencurrentHeatingCoolingStatecode)\n- [currentHorizontalTiltAngle](#code-stylecolor-greencurrentHorizontalTiltAnglecode)\n- [currentHumidifierDehumidifierState](#code-stylecolor-greencurrentHumidifierDehumidifierStatecode)\n- [currentPosition](#code-stylecolor-greencurrentPositioncode)\n- [currentRelativeHumidity](#code-stylecolor-greencurrentRelativeHumiditycode)\n- [currentTemperature](#code-stylecolor-greencurrentTemperaturecode)\n- [currentVerticalTiltAngle](#code-stylecolor-greencurrentVerticalTiltAnglecode)\n- [faultMessage](#code-stylecolor-greenfaultMessagecode)\n- [heatingThreshold](#code-stylecolor-greenheatingThresholdcode)\n- [holdPosition](#code-stylecolor-greenholdPositioncode)\n- [hue](#code-stylecolor-greenhuecode)\n- [leakDetected](#code-stylecolor-greenleakDetectedcode)\n- [lockCurrentState](#code-stylecolor-greenlockCurrentStatecode)\n- [lockPhysicalControls](#code-stylecolor-greenlockPhysicalControlscode)\n- [lockTargetState](#code-stylecolor-greenlockTargetStatecode)\n- [motionDetected](#code-stylecolor-greenmotionDetectedcode)\n- [mute](#code-stylecolor-greenmutecode)\n- [no2Density](#code-stylecolor-greenno2Densitycode)\n- [obstructionDetected](#code-stylecolor-greenobstructionDetectedcode)\n- [occupancyDetected](#code-stylecolor-greenoccupancyDetectedcode)\n- [on](#code-stylecolor-greenoncode)\n- [outletInUse](#code-stylecolor-greenoutletInUsecode)\n- [ozoneDensity](#code-stylecolor-greenozoneDensitycode)\n- [pm10Density](#code-stylecolor-greenpm10Densitycode)\n- [pm25Density](#code-stylecolor-greenpm25Densitycode)\n- [positionState](#code-stylecolor-greenpositionStatecode)\n- [pressEvent](#code-stylecolor-greenpressEventcode)\n- [dehumidifierThreshold](#code-stylecolor-greendehumidifierThresholdcode)\n- [humidifierThreshold](#code-stylecolor-greenhumidifierThresholdcode)\n- [rotationDirection](#code-stylecolor-greenrotationDirectioncode)\n- [rotationSpeed](#code-stylecolor-greenrotationSpeedcode)\n- [saturation](#code-stylecolor-greensaturationcode)\n- [alarmType](#code-stylecolor-greenalarmTypecode)\n- [securitySystemCurrentState](#code-stylecolor-greensecuritySystemCurrentStatecode)\n- [securitySystemTargetState](#code-stylecolor-greensecuritySystemTargetStatecode)\n- [smokeDetected](#code-stylecolor-greensmokeDetectedcode)\n- [so2Density](#code-stylecolor-greenso2Densitycode)\n- [statusFault](#code-stylecolor-greenstatusFaultcode)\n- [statusLowBattery](#code-stylecolor-greenstatusLowBatterycode)\n- [statusTampered](#code-stylecolor-greenstatusTamperedcode)\n- [swingMode](#code-stylecolor-greenswingModecode)\n- [targetFanState](#code-stylecolor-greentargetFanStatecode)\n- [targetHeatingCoolingState](#code-stylecolor-greentargetHeatingCoolingStatecode)\n- [targetHorizontalTiltAngle](#code-stylecolor-greentargetHorizontalTiltAnglecode)\n- [targetHumidifierDehumidifierState](#code-stylecolor-greentargetHumidifierDehumidifierStatecode)\n- [targetPosition](#code-stylecolor-greentargetPositioncode)\n- [targetRelativeHumidity](#code-stylecolor-greentargetRelativeHumiditycode)\n- [targetTemperature](#code-stylecolor-greentargetTemperaturecode)\n- [targetVerticalTiltAngle](#code-stylecolor-greentargetVerticalTiltAnglecode)\n- [temperatureDisplayUnits](#code-stylecolor-greentemperatureDisplayUnitscode)\n- [vocDensity](#code-stylecolor-greenvocDensitycode)\n- [volume](#code-stylecolor-greenvolumecode)\n- [waterLevel](#code-stylecolor-greenwaterLevelcode)\n\n\nThe HomeKit spec. define a list of characteristics for every service type. Some are mandatory and some are options.\nThe characteristics here are defined under the `topics` field as a JSON object where the keys identify\nthe characteristic types and the values are the configurations for those characteristics. Since we're\ndealing with MQTT here, all the characteristics are driven by MQTT topics.\n\nGenerally, every characteristic that can be read (e.g. `currentTemperature`) will have a `get` configuration which defines the topic to which\nthe characteristic will subscribe to and the published values will be set on the characteristic. Similarly,\na characteristic that can be set, will have a `set` configuration which holds the topic to which the characteristic will\npublish its values when they change. Quite a few characteristics are both `read` and `write` and so they have\nboth `get` and `set` settings.\n\nIn addition to `set` and `get` it's also possible to configure a `converter` for the characteristic which determines how\nthe MQTT values are converted to the HomeKit values and vice versa. There are a fixed set of converters that are built in\nwhich you can pick from.\n\n### Actions\n\nFor write characteristics, in addition to the `set` topic, it's possible to define a `preSet` configuration. These are\nessentially a list of actions that will be executed prior to publishing the value to MQTT. If any of the actions\nfail, the value will be not be published to the MQTT.\n\n\nThe following actions are current supported:\n\n#### mqtt-publish\n\nPublishes a value to a MQTT topic. In addition, a `feedback` can be configured indicating that as a result\nof publishing the value, another value should be published (as a sort of confirmation) to another topic, in which\ncase the action will subscribe to that topic and wait for that value. Once the value arrives, the action\nis considered as \"executed successfully\". It's also possible to define a `timeout` for the feedback, in which\ncase when the timeout has passed and the feedback value is not yet published, the action execution will be\nconsidered as \"failed\".\n\n```js\n{\n  \"set\": \"...\",\n  \"preSet\": [\n    {\n      \"type\": \"mqtt-publish\",\n      \"topic\": \"<the topic to publish the value to>\",\n      \"value\": \"<the value to publish>\",\n      \"feedback?\": { // optional\n          \"topic\": \"<feedback topic>\",\n          \"value\": \"<expected feedback value>\",\n          \"timeout?\": <number> // timeout in milliseconds\n      }\n    }\n  ]\n}\n```\n\n#### wait\n\nAn action that simply stalls the execution for the configured timeout (in milliseconds). This can be useful\nwhen the system on the other side requires some \"breathing space\" between commands\n\n```js\n{\n    \"set\": \"...\",\n    \"preSet\": [\n        {\n            \"type\": \"wait\",\n            \"timeout\": <number> // the time to wait before continuing execution\n        }\n    ]    \n}\n```\n\nHere's a small use-case for the use of actions. Let's say you have a `window-covering` service representing blinds.\nYou can control the blinds by opening or closing them, but also send a \"hold\" command to command them to stop at their\ncurrent position. In some systems, when you want to move directly from \"closing\" to \"opening\" you first need to send\na \"hold\" command. This is where actions can help, by publishing a \"hold\" value prior to publishing the set value for\nthe `targetPosition`. Here is how this configuration may look like:\n\n```js\n{\n    ...\n    \"topics\": {\n        \"targetPosition\": {\n            \"preSet\": [\n                {\n                    \"type\": \"mqtt-publish\",\n                    \"topic\": \"blinds/targetPosition/set\",\n                    \"value\": \"50\", // 50 represents a \"hold\" value\n                    \"feedback\": {\n                        \"topic\": \"blinds/targetPosition\",\n                        \"value\": \"50\", // expecting 50 in return\n                        \"timeout\": 4000\n                    }\n                }\n            ],\n            \"set\": \"test/blinds/targetPosition/set\",\n            \"get\": \"test/blinds/targetPosition\",\n            \"converter\": [ \"100\", \"50\", \"0\" ]\n        },\n        \"currentPosition\": {\n            \"get\": \"test/blinds/currentPosition\",\n            \"converter\": [ \"100\", \"50\", \"0\"]\n        }\n    }\n}\n```\n\n### Common Characteristics\n\nThe following characteristic are optional and may be configured on any service type\n- [statusFault](#statusFault)\n- [faultMessage](#code-stylecolor-greenfaultmessagecode)\n\n### Common Sensor Characteristics\n\nIn addition to the above common characteristics, sensor devices may also support the following ones:\n- [statusLowBattery](#statusLowBatter)\n- [statusTampered](#statusTampered)\n\n### <code style=\"color: green\">active</code>\n\nIndicates whether the service is currently active. By default, will look for values `0` or `1` where `1` indicates\n`on`/`true` and `0` indicates `off`/`false`.\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [speaker](#speaker)\n- [humidifier-dehumidifier](#humidifier-dehumidifier)\n\n#### Configuration\n```json\n{\n  \"topics\": {\n    \"active\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"boolean\" | { \"min\": <number>, \"max\": <number> }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">airQuality</code>\n\nDescribes the subject assessment of air quality. By default, will look for the following values:\n- `0` - indicates \"unknown\"\n- `1` - indicates \"excellent\"\n- `2` - indicates \"good\"\n- `3` - indicates \"fair\"\n- `4` - indicates \"inferior\"\n- `5` - indicates \"poor\"\n\nYou can customize the read/published values using a value map converter (as shown below)\n\n#### Services\n- [air-quality-sensor](#air-quality-sensor)\n\n#### Configuration\n```json\n{\n  \"topics\": {\n    \"airQuality\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: {\n        \"unknown\"?:   \"<value representing 'unknown'>\",\n        \"excellent\"?: \"<value representing 'excellent'>\",\n        \"good\"?:      \"<value representing 'good'>\",\n        \"fair\"?:      \"<value representing 'fair'>\",\n        \"inferior\"?:  \"<value representing 'inferior'>\",\n        \"poor\"?:      \"<value representing 'poor'>\"\n      }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">ambientLightLevel</code>\n\nIndicates the current light level in `lux` numeric units.\nValues can be converted using the [Illuminance](#illuminance) converter.\n\n#### Services\n- [light-sensor](#light-sensor)\n\n#### Configuration\n```json\n{\n  \"topics\": {\n    \"ambientLightLevel\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: log-scale-lux\"\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">batteryLevel</code>\n\nDescribes the current level of the battery in a numeric value representing a percentage.\nValues can be converted using the [Percentages](#percentages-) converter.\n\n#### Services\n- [battery](#battery)\n\n#### Configuration\n```json\n{\n  \"topics\": {\n    \"batteryLevel\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"decimal\" | { \"min\": <number>, \"max\": <number> }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">brightness</code>\n\nDescribes a level of brightness in a numeric value representing a percentage.\nValues can be converted using the [Percentages](#percentages) converter.\n\n#### Services\n- [lightbulb](#lightbulb)\n- [doorbell](#doorbell)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"brightness\": {\n      \"get\": \"<read_topic>\",\n      \"get\": \"<write_topic>\",\n      \"converter\"?: \"decimal\" | { \"min\": <number>,  \"max\": <number> }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">co2Detected</code>\n\nIndicates if a sensor detects abnormal levels of Carbon Dioxide. By default, will look for `0` (indicating \"not detected\")\nor `1` (indicating \"detected\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [co2-sensor](#co2-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"co2Detected\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"'detected' value\", \"off\": \"'not-detected' value\" }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">co2Level</code>\n\nIndicates the detected level of Carbon Dioxide - a numeric value indicating parts per million (ppm).\n\n#### Services\n- [co2-sensor](#co2-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"co2Level\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">co2PeakLevel</code>\n\nIndicates the highest detected level of Carbon Dioxide detected by a sensor - a numeric value indicating parts per\nmillion (ppm).\n\n#### Services\n- [co2-sensor](#co2-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"co2PeakLevel\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">coDetected</code>\n\nIndicates if a sensor detects abnormal levels of Carbon Monoxide. By default, will look for `0` (indicating \"not detected\")\nor `1` (indicating \"detected\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [co-sensor](#co-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"coDetected\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"'detected' value\", \"off\": \"'not-detected' value\" }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">coLevel</code>\n\nIndicates the detected level of Carbon Monoxide - a numeric value indicating parts per million (ppm).\n\n#### Services\n- [co-sensor](#co-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"coLevel\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">coPeakLevel</code>\n\nIndicates the highest detected level of Carbon Monoxide detected by a sensor - a numeric value indicating parts per\nmillion (ppm).\n\n#### Services\n- [co-sensor](#co-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"coPeakLevel\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">chargingState</code>\n\nIndicates whether the battery-ran device is currently charging or not.\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [battery](#battery)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"chargingState\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"'charging' value\", \"off\": \"'not-charging' value\" }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">colorTemperature</code>\n\nDescribes color temperature - a numeric value in the mirek scale\nValues can be converted using the [Color Temperatures](#color-temperatures) converter.\n\n#### Services\n- [lightbulb](#lightbulb)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"colorTemperature\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<read_topic>\",\n      \"converter\"?: \"kelvin\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">contactSensorState</code>\n\nDescribes the state of a contact sensor. By default, will look for `0` (indicating \"no contact\") and `1` (indicating \"contact\")\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [contact-sensor](#contact-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"contactSensorState\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"'contact' value\", \"off\": \"'no-contact' value\" }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">coolingThreshold</code>\n\nDescribes the cooling threshold in Celsius for accessories that support heating and cooling.\nIf the thermostat operates in an \"auto\" mode and the current temperature goes above this\nthreshold the thermostat will start cooling.\nValues can be converted using the [Temperatures](#temperatures) converter.\n\n#### Services\n- [thermostat](#thermostat)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"coolingThreshold\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<read_topic>\",\n      \"converter\"?: \"fahrenheit\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">currentFanState</code>\n\n> [!NOTE]\n> When used as part of a `fan` service, this can be shorten to `currentState`\n\nDescribes the current state of the fan. Expects the following numeric values:\n- `0` - indicating \"inactive\" state\n- `1` - indicating \"idle\" state\n- `2` - indicating \"blowing air\" state\n\nOther values can be converted using a value-map converter (as shown below).\n\n#### Services\n- [fan](#fan)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"currentFanState\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: {\n        \"inactive\"?:    \"'inactive' state value\",\n        \"idle\"?:        \"'idle' state value\",\n        \"blowingAir\"?:  \"'blowing air' state value\"\n      }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">currentHeatingCoolingState</code>\n\n> [!NOTE]\n> When used as part of a `thermostat` service, this can be shorten to `currentState`\n\nDescribes the current mode of a thermostat. Expects the following numeric values:\n- `0` - indicating \"off\" state\n- `1` - indicating \"heat\" state\n- `2` - indicating \"cool\" state\n\nOther values can be converted using a value-map converter (as shown below).\n\n#### Services\n- [thermostat](#thermostat)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"currentHeatingCoolingState\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: {\n          \"off\"?:   \"'off' state value\",\n          \"heat\"?:  \"'heat' state value\",\n          \"cool\"?:  \"'cool' state value\"\n        }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">currentHorizontalTiltAngle</code>\n\nDescribes the current angle of the horizontal slats of the device. A numeric value in arc degrees, ranging\nbetween `-90` - `90`.\n\n#### Services\n- [window-covering](#window-convering)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"currentHorizontalTiltAngle\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">currentHumidifierDehumidifierState</code>\n\n> [!NOTE]\n> When used as part of a `humidifier-dehumidifier` service, this can be shorten to `currentState`\n\nDescribes the current state of a humidifier or/and a dehumidifier. Expecting the following numeric values:\n- `0` - indicating `inactive` state\n- `1` - indicating `idle` state\n- `2` - indicating `humidifying` state\n- `3` - indicating `dehumidifying` state\n\nOther values can be converted using a value-map converter (as shown below).\n\n#### Services\n- [humidifier-dehumidifier](#humidifier-dehumidifier)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"currentHumidifierDehumidifierState\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: {\n        \"inactive\"?:       \"'inactive' state value\",\n        \"idle\"?:           \"'idle' state value\",\n        \"humidifying\"?:    \"'humidifying' state value\",\n        \"dehumidifying\"?:  \"'dehumidifying' state value\"\n      }\n    }\n  }\n}\n```\n                                              \n\n### <code style=\"color: green\">currentPosition</code>\n\nDescribes the current position of accessories as a percentage value. `0` typically indicates \"fully closed\" while `100` \nindicates \"fully open\". Some services (e.g. `window-covering` let you reverse this).\nOther values can be converted using the [Percentages](#percentages-) converter.\n\n#### Services\n- [window](#window)\n- [door](#door)\n- [window-covering](#window-covering)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"currentPosition\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"decimal\" | { \"min\": <number>,  \"max\": <number> }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">currentRelativeHumidity</code>\n\nDescribes the current relative humidity of the device's environment. By default, expecting a numeric value\nbetween `0` and `100` representing a percentage.\nOther values can be converted using the [Percentages](#percentages-) converter.\n\n#### Services\n- [humidity-sensor](#humidity-sensor)\n- [humidifier-dehumidifier](#humidifier-dehumidifier)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"currentRelativeHumidity\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"decimal\" | { \"min\": <number>,  \"max\": <number> }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">currentTemperature</code>\n\nDescribes the current temperature of the environment in Celsius\nOther values can be converted using the [Temperatures](#temperatures) converter.\n\nBy default, values range between `10.0` and `38.0` with a minimum step of `0.1`. This can be adjusted in \nthe configuration (as shown below).\n\n#### Services\n- [thermostat](#thermostat)\n- [temperature-sensor](#temperature-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"currentTemperature\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"fahrenheit\",\n      \"minValue\"?: <number>, // in celsius (regardless of the converter), defaut: 10.0 \n      \"maxValue\"?: <number>, // in celsius (regardless of the converter), defaut: 38.0\n      \"minStep\"?: <number>   // in celsius (regardless of the converter), defaut: 0.1\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">currentVerticalTiltAngle</code>\n\nDescribes the current angle of the vertical slats of the device. Expecting a numeric value representing arc degrees \nbetween `-90` and `90`.\n\n#### Services\n- [window-covering](#window-convering)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"currentVerticalTiltAngle\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">faultMessage</code>\n\nA non-standard homekit characteristic indicating a fault message in case the device if faulty.\n\n> [!NOTE]\n> As a non-standard characteristic, this will no show up in the Home app, though other apps that support this\n> custom characteristic will show it (e.g. [Eve](https://www.evehome.com/en/eve-app)) \n\n#### Services\n\nThis characteristic is optional and can be configured on all service types.\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"faultMessage\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">heatingThreshold</code>\n\nDescribes the heating threshold in Celsius for accessories that support heating and cooling.\nIf the thermostat operates in an \"auto\" mode and the current temperature goes below this\nthreshold the thermostat will start heating.\nValues can be converted using the [Temperatures](#temperatures) converter.\n\n#### Services\n- [thermostat](#thermostat)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"heatingThreshold\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<read_topic>\",\n      \"converter\"?: \"fahrenheit\"\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">holdPosition</code>\n\nUsed to signal a device that it should stop it current operations in its current position (typically used for\nwindow-covering). This characteristic doesn't hold a value. To signal a \"hold\" it sets a value in the configured\n`set` topic. By default, it sets the value to `1`, though this can be changed in the configuration (as shown below). \n\n#### Services\n- [window-covering](#window-covering)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"holdPosition\": {\n      \"set\": \"<write_topic>\",\n      \"value\"?: \"any value that the device will understand as a 'hold' command\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">hue</code>\n\nDescribes hue or color. A hue is typically measured as an arc degree in a [Hue Wheel](). Expects, a numeric value\nbetween `0` and `360`.\nPercentage values (e.g. 34% of 360) are also supported and be configured using the [Hue Converter](#hue)\n\n#### Services\n- [lightbulb](#lightbulb)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"hue\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"percent-integer\" | \"percent-decimal\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">leakDetected</code>\n\nIndicates if a sensor detected a leak (e.g. water leak, gas leak). By default, will look for `0` (indicating \"not detected\")\nor `1` (indicating \"detected\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [leak-sensor](#leak-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"leakDetected\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"<value indicating 'detected'>\", \"off\": \"value indicating 'not-detected'\" }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">lockCurrentState</code>\n\n> [!NOTE]\n> When used as part of a `lock` service, this can be shorten to `currentState`\n\nDescribes the current state of a lock. Expecting the following numeric values:\n- `0` - indicating \"unsecured\" state\n- `1` - indicating \"secured\" state\n- `2` - indicating \"jammed\" state\n- `3` - indicating \"unknown\" state\n\nOther values can be converted using a value-map converter (as shown below).\n\n#### Services\n- [lock](#lock)\n- [garage-door](#garage-door)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"lockCurrentState\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: {\n        \"unsecured\"?:   \"'unsecured' state value\",\n        \"secured\"?:     \"'secured' state value\",\n        \"jammed\"?:      \"'jammed' state value\",\n        \"unknown\"?:     \"'unknown' state value\"\n      }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">lockPhysicalControls</code>\n\nDescribes a way to lock a set of physical controls on an accessory (eg. child lock). By default, will look for `0`\n(indicating \"not detected\") or `1` (indicating \"detected\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [fan](#fan)\n- [humidifier-dehumidifier](#humidifier-dehumidifier)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"lockPhysicalControls\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"boolean\" | { \"\": \"<value indicating 'locked'>\", \"off\": \"value indicating 'not-locked'\" }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">lockTargetState</code>\n\n> [!NOTE]\n> When used as part of a [`lock-mechansim`](#lock) service, this can be shorten to `targetState`\n\nDescribes the current state of a lock. Expecting the following numeric values:\n- `0` - indicating \"unsecured\" state\n- `1` - indicating \"secured\" state\n\nOther values can be converted using a converter (as shown below).\n\n#### Services\n- [lock](#lock)\n- [garage-door](#garage-door)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"lockTargetState\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"boolean\" | { \"secured\": \"<value indicating 'secured'>\", \"unsecured\": \"value indicating 'unsecured'\" } // a boolean 'true' indicates 'secured'\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">momentaryOn</code>\n\nThis is a special case of an 'on' characteristic when turned on it immediately turns back off.\nWhen turned on, it publishes the configured value to the configured topic.\n\n#### Services\n- [stateless-scene](#stateless-scene)\n\n#### Configuration\n\n```typescript\n{\n  \"topics\": {\n    \"momentaryOn\": {\n      \"set\": \"<read_topic>\",\n      \"value\": number | string | boolean // the momentary published value\n      \"resetValue\"?: number | string | boolean // will be set as the value immediately right after the momentary value above is set \n    }\n  }\n}\n```\n\n### <code style=\"color: green\">motionDetected</code>\n\nIndicates if a sensor detected motion. By default, will look for `true` (indicating \"detected\")\nor `false` (indicating \"not-detected\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [motion-sensor](#motion-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"motionDetected\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"<value indicating 'detected'>\", \"off\": \"value indicating 'not-detected'\" }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">mute</code>\n\nAllows the control of audio input or output accessory. By default, will look for `true` (indicating \"muted\")\nor `false` (indicating \"not-muted\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [speaker](#speaker)\n- [doorbell](#doorbell)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"motionDetected\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"<value indicating 'muted'>\", \"off\": \"value indicating 'not-muted'\" }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">no2Density</code>\n\nIndicates the current Nitrogen Dioxide density. A numeric value in $micrograms/m^3$ units. \n\n#### Services\n- [air-quality-sensor](#air-quality-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"no2Density\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">obstructionDetected</code>\n\nDescribes the current state of an obstruction sensor. By default, will look for `true` (indicating \"detected\")\nor `false` (indicating \"not detected\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [door](#door)\n- [window](#window)\n- [garage-door](#garage-door)\n- [window-covering](#window-covering)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"obstructionDetected\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"<value indicating 'detected'>\", \"off\": \"value indicating 'not-detected'\" }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">occupancyDetected</code>\n\nIndicates if occupancy was detected (e.g. a person present). By default, will look for `1` (indicating \"detected\")\nor `0` (indicating \"not detected\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [occupancy-sensor](#occupancy-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"occupancyDetected\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"<value indicating 'detected'>\", \"off\": \"value indicating 'not-detected'\" }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">on</code>\n\nRepresents the states for “on” and “off”. By default, will look for `true` (indicating \"on\")\nor `false` (indicating \"off\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [lightbulb](#lightbulb)\n- [outlet](#outlet)\n- [switch](#switch)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"on\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"<value indicating 'on'>\", \"off\": \"value indicating 'off'\" }\n    }\n  }\n}\n```\n\n\n\n### <code style=\"color: green\">outletInUse</code>\n\ndescribes if the power outlet has an appliance physically plugged in. By default, will look for `true` (indicating \"in-use\")\nor `false` (indicating \"not-in-use\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [outlet](#outlet)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"outletInUse\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"<value indicating 'in-use'>\", \"off\": \"value indicating 'not-in-use'\" }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">ozoneDensity</code>\n\nIndicates the current ozone density. A numeric value in $micrograms/m^3$ units.\n\n#### Services\n- [air-quality-sensor](#air-quality-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"ozoneDensity\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">pm10Density</code>\n\nIndicates the current PM10 micrometer particulate density. A numeric value in $micrograms/m^3$ units.\n\n#### Services\n- [air-quality-sensor](#air-quality-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"pm10Density\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">pm25Density</code>\n\nIndicates the current PM2.5 micrometer particulate density. A numeric value in $micrograms/m^3$ units.\n\n#### Services\n- [air-quality-sensor](#air-quality-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"pm25Density\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">positionState</code>\n\nDescribes the state of the position of accessories. Expecting the following numeric values:\n- `0` - indicating \"closing\" state\n- `1` - indicating \"opening\" state\n- `2` - indicating \"stopped\" state\n\nOther values can be converted using a value-map converter (as shown below).\n\n#### Services\n- [door](#door)\n- [window](#window)\n- [window-covering](#window-covering)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"lockCurrentState\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: {\n        \"closing\"?: \"'closing' state value\",\n        \"opening\"?: \"'opening' state value\",\n        \"stopped\"?: \"'stopped' state value\"\n      }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">pressEvent</code>\n\nDescribes a press event generated by a button. This characteristic doesn't hold a value nor publishes a \nvalue to an MQTT topic. All it does is monitor an MQTT topic and based on the value received it triggers\nthe appropriate event. By default, it expects the following numeric values:\n- `0` - indicating \"single-press\" event\n- `1` - indicating \"double-press\" event\n- `2` - indicating \"long-press\" event\n\nOther values can be converted using a value-map converter (as shown below).\n\n#### Services\n- [button](#button)\n- [doorbell](#doorbell)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"pressEvent\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: {\n        \"single\"?:  \"value indicating a 'single' press event\",\n        \"double\"?:  \"value indicating a 'double' press event\",\n        \"long\"?:    \"value indicating a 'long' press event\"\n      }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">dehumidifierThreshold</code>\n\nDescribes the relative humidity dehumidifier threshold, representing the maximum relative humidity that must be reached\nbefore a dehumidifier is turned on. Expects a numeric value indicating the humidity in percentage between \n`0` and `100`.\n\nOther values can be converted using a [Percentages](#percentages-) converter (as shown below).\n\n#### Services\n- [humidifier-dehumidifier](#humidifier-dehumidifier)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"dehumidifierThreshold\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"decimal\" | { \"min\": <number>, \"max\":  <number> }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">humidifierThreshold</code>\n\nDescribes the relative humidity humidifier threshold, representing the minimum relative humidity that must be reached\nbefore a humidifier is turned on. Expects a numeric value indicating the humidity in percentage between\n`0` and `100`.\n\nOther values can be converted using a [Percentages](#percentages-) converter (as shown below).\n\n#### Services\n- [humidifier-dehumidifier](#humidifier-dehumidifier)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"humidifierThreshold\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"decimal\" | { \"min\": <number>, \"max\":  <number> }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">rotationDirection</code>\n\ndescribes the direction of rotation of a fan. Expects the following numeric values:\n- `0` - indicates `clockwise` direction\n- `1` - indicates `counter-clockwise` direction\n\nOther values can be converted using a value-map converter (as shown below).\n\n#### Services\n- [fan](#fan)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"rotationDirection\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: { \"clockwise\": \"value representing 'clockwise'\", \"counter-clockwise\":  \"value representing 'counter-clockwise'\" }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">rotationSpeed</code>\n\nDescribes the rotation speed of a fan. A numeric value representing the speed as a percentage between \n`0` and `100`, where `0` indicates no speed and `100` indicates maximum speed.\n\nOther values are supported using the following converters:\n- `decimal` - expects a values representing the speed as a percentage value between `0` and `1` (e.g. `0.36` indicates `36%`)\n- `{ \"min\": <number>, \"max\": <number> }` - expects a value between the `min` and `max` value, from which it deduce the speed percentage.\n- `<number>` - A converter holding a number indicates the number of supported speed levels, expecting a number between `0` and the configured number.\n  For example, `converter: 5` indicates there are 6 speed levels to look for - `0`, `1`, `2`, `3`, `4`, `5`.\n- `string[]` - A converter holding an array of values, each representing a level. The speed level of each value is the index\n               of that value in the array - the first value will always represent \"no speed\". For example, `converter: [ \"off\", \"low\", \"medium\", \"high\" ]` will expect all to\n               receive any of these values. If, for example, it receives a `low` value, then it knows this value represents\n               `33%` speed level, as it's the first out of 3 possible speed levels (excl. the first one which is \"no-speed\").\n\n#### Services\n- [fan](#fan)\n- [humidifier-dehumidifier](#humidifier-dehumidifier)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"rotationDirection\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"decimal\" | { \"min\":  <number>, \"max\":  <number> } | <number> | string[]\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">saturation</code>\n\nDescribes color saturation. A numeric value indicating a percentage.\n\nValues can be converted using the [Percentages](#percentages-) converter.\n\n#### Services\n- [lightbulb](#lightbulb)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"saturation\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"decimal\" | { \"min\": <number>, \"max\": <number> }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">alarmType</code>\n\ndescribes the type of alarm triggered by a security system. The only alarm type that is currently supported\nby homekit is an \"unknown\" type. For this reason, by default, these are the values it expects:\n- `0` - indicating the alarm is cleared\n- any other value - indicating the generic \"unknown\" type.\n\nIt is possible to configure a different values to indicate the `cleared` state (as shown below)\n\n#### Services\n- [security-system](#security-system)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"alarmType\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: { \"cleared\":  \"value representing a 'cleared` state\"}\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">securitySystemCurrentState</code>\n\n> [!NOTE]\n> When used as part of a `security-system` service, this can be shorten to `currentState`\n\nDescribes the state of a security system. Expecting the following numeric values:\n- `0` - \"stay\" state\n- `1` - \"away\" state\n- `2` - \"night\" state\n- `3` - \"disarmed\" state\n- `4` - \"triggered\" state\n\nOther values can be converted using a value-map converter (as shown below).\n\n#### Services\n- [security-system](#security-system)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"securitySystemCurrentState\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: {\n        \"stay\"?:      \"'stay' state value\",\n        \"away\"?:      \"'away' state value\",\n        \"night\"?:     \"'night' state value\",\n        \"disarmed\"?:  \"'disarmed' state value\",\n        \"triggered\"?: \"'triggered' state value\",\n      }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">securitySystemTargetState</code>\n\n> [!NOTE]\n> When used as part of a `security-system` service, this can be shorten to `targetState`\n\nDescribes the target state of the security system. Expecting the following numeric values:\n- `0` - \"stay\" state\n- `1` - \"away\" state\n- `2` - \"night\" state\n- `3` - \"disarm\" state\n\nOther values can be converted using a value-map converter (as shown below).\n\nIt is also possible to limit the supported values using the `validValues` settings.\n\n#### Services\n- [security-system](#security-system)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"securitySystemTargetState\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: {\n        \"stay\"?:      \"'stay' state value\",\n        \"away\"?:      \"'away' state value\",\n        \"night\"?:     \"'night' state value\",\n        \"disarm\"?:    \"'disarm' state value\",\n      },\n      \"validValues\"?: string[] // e.g. [ \"stay\", \"away\", \"disarm\" ] to not show the 'night' option.\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">smokeDetected</code>\n\nIndicates if a sensor detects abnormal levels of smoke. By default, will look for `0` (indicating \"not detected\")\nor `1` (indicating \"detected\").\nValues can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [smoke-sensor](#smoke-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"smokeDetected\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"<value indicating 'detected'>\", \"off\": \"value indicating 'not-detected'\" }\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">so2Density</code>\n\nIndicates the current Sulphur Dioxide density. A numeric value in $micrograms/m^3$ units.\n\n#### Services\n- [air-quality-sensor](#air-quality-sensor)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"so2Density\": {\n      \"get\": \"<read_topic>\"\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">statusFault</code>\n\nIndicates the device is faulty. Expecting a `1` indicating a \"general fault\" and `0` indicating there's no fault.\nOther values can be converted using the [Booleans](#booleans) converter.\n\n#### Services\nThis characteristic is optional on all services. \n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"statusFault\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"'fault' value\", \"off\":  \"'no fault' value\"}\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">statusLowBattery</code>\n\nDescribes an accessory which has been tampered with. By default, will look for `0` indicating battery\nlevel is not low, and `1` indicating \"low-battery\" status.\nOther values can be converted using the [Booleans](#booleans) converter.\n\n#### Services\nThis characteristic is optional on all sensor services.\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"statusLowBattery\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"'low' status value\", \"off\":  \"'not-low' status value\"}\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">statusTampered</code>\n\nIndicates if a battery-ran device is running low on battery. By default, will look for `0` indicating battery\nlevel is not low, and `1` indicating \"low-battery\" status.\nOther values can be converted using the [Booleans](#booleans) converter.\n\n#### Services\nThis characteristic is optional on all sensor services.\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"statusTampered\": {\n      \"get\": \"<read_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"'tampered' status value\", \"off\":  \"'not-tampered' status value\"}\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">stickyOn</code>\n\nThis is a special case of an 'on' characteristic that is associated with a value. When turned on, \nit publishes this value to the configured `set` topic, and it stays turned on until it receives a\ndifferent value from the configured `get` topic. Trying to force it off will cause it to \"silently\" turn back\non (\"silently\" in that it will not publish the value to the `set` topic).\n\n#### Services\n- [stateful-scene](#stateful-scene)\n\n#### Configuration\n\n```typescript\n{\n  \"topics\": {\n    \"stickyOn\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"value\": number | string | boolean // the published value\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">swingMode</code>\n\nIndicates if swing mode is enabled. By default, will look for `0` indicating swing \"disabled\" mode, and `1`\nindicating swing \"enabled\" mode.\nOther values can be converted using the [Booleans](#booleans) converter.\n\n#### Services\n- [fan](#fan)\n- [humidifier-dehumidifier](#humidifier-dehumidifier)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"swingMode\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"boolean\" | { \"on\": \"'enabled' mode value\", \"off\":  \"'disabled' mode value\"}\n    }\n  }\n}\n```\n\n\n### <code style=\"color: green\">targetFanState</code>\n\n> [!NOTE]\n> When used as part of a `fan` service, this can be shorten to `targetState`\n\nDescribes the target state of the fan. Expecting the following numeric values:\n- `0` - indicates a \"manual\" state\n- `1` - indicates an \"auto\" state\n\nOther values can be converted using the value-map converter (as show below).\n\n#### Services\n- [fan](#fan)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"targetFanState\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: { \"auto\": \"'auto' state value\", \"manual\":  \"'manual' state value\"}\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">targetHeatingCoolingState</code>\n\n> [!NOTE]\n> When used as part of a `thermostat` service, this can be shorten to `targetState`\n\nDescribes the target mode of a thermostat. Expects the following numeric values:\n- `0` - indicating \"off\" state\n- `1` - indicating \"heat\" state\n- `2` - indicating \"cool\" state\n- `3` - indicating \"auto\" state\n\nOther values can be converted using a value-map converter (as shown below).\n\nIt is also possible to limit the possible values using the `validValues` setting.\n\n#### Services\n- [thermostat](#thermostat)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"targetHeatingCoolingState\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: {\n        \"off\"?:   \"'off' state value\",\n        \"heat\"?:  \"'heat' state value\", \n        \"cool\"?:  \"'cool' state value\",\n        \"auto\"?:  \"'auto' state value\",\n      },\n      \"validValues\": string[]  // e.g. [ \"off\", \"auto\" ] to only provide the user to stop the operation of the device\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">targetHorizontalTiltAngle</code>\n\nDescribes the target angle of the horizontal slats of the device. A numeric value in arc degrees, ranging\nbetween `-90` - `90`.\n\n#### Services\n- [window-covering](#window-convering)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"targetHorizontalTiltAngle\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\"\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">targetHumidifierDehumidifierState</code>\n\n> [!NOTE]\n> When used as part of a `humidifier-dehumidifier` service, this can be shorten to `targetState`\n\nDescribes the target state of a humidifier or/and a dehumidifier. Expecting the following numeric values:\n- `0` - indicating `humidifierDehumidifier` state - only applicable to devices that are both humidifiers and dehumidifiers, \nthis indicates that the device should always keep the humidity at bay, by both humidifying when humidity is low and\ndehumidifying when humidity is high (both low and high humidity levels are determined by the \n[humidifierThreshold](#code-stylecolor-greenhumidifierthresholdcode) and\n[dehumidifierThreshold](#code-stylecolor-greendehumidifierthresholdcode) characteristics.\n \n- `1` - indicating `humidifier` state - only applicable to devices that are humidifiers. Indicating that the device should\nhumidify if the humidity level is too low (reaches the [humidifierThreshold](#code-stylecolor-greenhumidifierthresholdcode)).\n\n- `2` - indicating `dehumidifier` state - only applicable to devices that are dehumidifiers. Indicating that the device should\n  dehumidify if the humidity level is too hight (reaches the [dehumidifierThreshold](#code-stylecolor-greendehumidifierthresholdcode)).\n\nOther values can be converted using a value-map converter (as shown below).\n\n#### Services\n- [humidifier-dehumidifier](#humidifier-dehumidifier)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"targetHumidifierDehumidifierState\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: {\n        \"humidifierDehumidifier\"?:  \"'humidifierDehumidifier' state value\",\n        \"humidifier\"?:              \"'humidifier' state value\",\n        \"dehumidifier\"?:            \"'dehumidifier' state value\"\n      }\n    }\n  }\n}\n```\n\n### <code style=\"color: green\">targetPosition</code>\n\nDescribes the target position of accessories as a percentage value. `0` typically indicates \"fully closed\" while `100`\nindicates \"fully open\". Some services (e.g. `window-covering` let you reverse this).\nOther values can be converted using the [Percentages](#percentages-) converter.\n\n#### Services\n- [window](#window)\n- [door](#door)\n- [window-covering](#window-covering)\n\n#### Configuration\n\n```json\n{\n  \"topics\": {\n    \"targetPosition\": {\n      \"get\": \"<read_topic>\",\n      \"set\": \"<write_topic>\",\n      \"converter\"?: \"decimal\" | { \"min\": <number>,  \"max\": <number> }\n    }\n  ","readmeFilename":"README.md"}