{"_id":"node-red-contrib-hal2","_rev":"55-0541a7623f805f3321fbda32cd1cf033","name":"node-red-contrib-hal2","dist-tags":{"latest":"3.3.0"},"versions":{"1.0.0":{"name":"node-red-contrib-hal2","version":"1.0.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.0.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"63ff97863215c3edeb206fa4e2f61f7bd87e246a","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.0.0.tgz","fileCount":31,"integrity":"sha512-XlQ98sTV3Br9XzlJ+EBdOyVFv1+gfuv4iKmwgVJ6MNj37wAMNd5C+wIgWaz32AsiQJFZfi7n6fVK3Y37/SQlxg==","signatures":[{"sig":"MEYCIQDdJ4TmCxS0n3PfoT12T6EDVIfw6ZUYLSVvZ5nacg+ZPwIhAP4u6fMlrK5mYCmnyljFAnYrqTCbG13l9HozUxfgglqS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":176227},"gitHead":"9fc5ecd113de82f1b7c910303c8e95752c3b15da","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.0.0_1636892793647_0.6212645921363071","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"node-red-contrib-hal2","version":"1.0.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.0.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"7f83b588bc5f8fef5b4d24e513a423155c6773ac","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.0.1.tgz","fileCount":31,"integrity":"sha512-dwlD/lwtShTVPfnOOjzT+EfvaeOMoqMSc+dEFttkXD1AszzzoVHOfr4Bp3v/sOrbBHIBFKZonxagH5vwWrbAxg==","signatures":[{"sig":"MEUCIDXRiBvEEgLlBu2X++ORo86QDE0PNrqbD4jTFDiTE+asAiEAl88YYs0GC701WXIHG5tBFvefXEHqDQQKyCqZUQTxfns=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":177177},"gitHead":"102b64e572dd841ff87e17cb0057dfe3abf56885","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.0.1_1636899843390_0.9816185780299282","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"node-red-contrib-hal2","version":"1.0.2","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.0.2","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"a74e273b1126857af5bd102429887e77b7395cc4","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.0.2.tgz","fileCount":31,"integrity":"sha512-ZGiu373TEt4aMGDlYRPEIi03cTL1YahXQSy/+ecm+VhU+CSn2c+etgVnHsvgUqU1iiGe4qQP4oBHrv3mQblrYw==","signatures":[{"sig":"MEYCIQD6dhFw7kgBEAsI4oHLOqZk6HzoFEsyqh3KpR9wYFSjDgIhAPhC33qVc7Z+b+j+XO3aPad0tnqS6/1gpw5S1num7MQR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":177703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhl27fCRA9TVsSAnZWagAAmAwQAI4NLPLM3n+osGiuziB0\nno6L9A4+4TuP5YbjNelONnKmZ6ESEt72D9YMZhSQR23wOTwnelCPSD94EwFl\naYhOeKZ/Vudi5iz1bfiZ0DXWvAgzBY9pwBHFsnygps/GJv+XjqD00QQB5Ik+\nyE4mkvPPLkQneK6k9IRu5vGpxJSP/EAR7GpB1WtZYDnKUP7YpwmuapgTmV6i\nxaRrdd7FgdxyL/CFkbxgymCXvQL4oR5GNBnm/6MrzL1Oa9FvZR9ZSo7vRPxI\n50ekCL2brShL6vp6mE9kB3LIV+mgPSeoSDOhQF/1zdPXH7tjb+weqLxjtSsl\nNsL1OWj4yFGRdNpTtcMjP0vxeauZgHHQv/xRrm94EJ5u87Jh8iXVKZ20LJ/g\n+ggveejXQvUUiSECxuh9ZNcG+CP0e8N/+Ut24ozF78J2qtqdF3MDo0OiIrMJ\nq1+P9keAEwcTcUbcUfL3TixaR0YniGV7qeFmz7kVL6SI8Pa1/Q4WEYyBy5fQ\ndV59CdqpQShUXX4AXLyrOy8S5QydFAdE8khup8y/5JHCTsS05qxB/8sByJy9\nT8J8+a++FuvMYhnqOS56Nn5+nJuiiTnEZWr/PnpFd93iqV5RZdp1jjrHELOx\n0DWBWxP5WyKO3seB4iVVvaQZ2gy2Obuf0eSqMKRj1h8DJc+RfPgbrDQji7jg\nccy2\r\n=4ioW\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"dfc1ec8d412726a04cec8b585c2814018435802d","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.0.2_1637314271068_0.47961866743277204","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"node-red-contrib-hal2","version":"1.1.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.1.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"48e6933ca2cdb50d500e702171bb913eb2fa4a9c","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.1.0.tgz","fileCount":31,"integrity":"sha512-QUm842LpwEyf/U7uhj3jcONRHYFLAONHXtgRjfHdMdCKIFQSVKPGPjkt18Xu+yuVeomSVl9yYgybu1pE2VRGiw==","signatures":[{"sig":"MEUCIQDMoiFGJSF1z+nCRXIQkTv0uup/6bQAWhYVmtnMf2IFPgIgWq7F0CA5l5nBc6Sy5MoIIEywDmBp0Utzoqt6/00ArpE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":180571,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxNfUCRA9TVsSAnZWagAAigoQAICK3ISesEf31FbUa3EI\nkmLCL18gtpas2lNVtOjZ7SbDZVNaaFbesPf7v3oYSqN70WwLexjTTZB+JnpC\nF/FK6C6nYBF7oeC/89TI9vE5jpW92hTt5nN1v+0dDFwTjs6No0oyhGWE2KD0\nOCEZO8Wx6V6x75pvizsLCsXg5MHsYU4L+rmMbF/YLlbothta0fY8J9hMd+rO\noWR7Yu3jOISH7FSZLqCdiCQVWryTQ0lIbbp7UpAH+UqNhVEOJ9mRn4BfXiFm\nN5u18NXTaFPaKC9Pnion0MmfXbsCtlKipS5yVGfQ+qJfOCvorZtUESZHaVqz\nJHfoIrnzS7ticjnEEWFNeRzD9Ed0kKspW+/itPCX14+moCeDmszNbTK4+dEk\ni51+JEwVvoXcCN/WHc5jzji/1x7w04Xr3IXQX3kY4Dnuy95zWU7yEVDGkI6D\noXJy75PAyuYm1ZqH9ZMGOg7Vwp1LPE++RSqfjm6xZf42KS1Kofu1M6OQCp8I\nfVs7UFY2MP10sqH0X3kShIz4lK/B17iaxed9qJW+p1CSRiwXpU8cA7rwUwn4\ngCDfGoW3uDxpSWN6/pvU3oUVCe/yV/MGTulCXxLqADAtWPlHfF4zdleI3Io2\nIFq49PYt8KSdD9468xthYSClOwtemIx4RpbIeYC5gZCbKKnCMm+FHck24Al+\nEwDO\r\n=4Zmw\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"0f4b1e56ac4800db06880470e34f29f0b2d15607","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.1.0_1640290260607_0.9687740247121865","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"node-red-contrib-hal2","version":"1.2.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.2.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"f9fb07480a7e39390b883da9d7cce0dc14707de1","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.2.0.tgz","fileCount":31,"integrity":"sha512-9jrwB7B+W/DheyvQZLXSNHZncApI/SWw5YDor/tqhszP+ZWwJrK+HUenHRZd9yU0lc9virjPbq7rkPynfHrALw==","signatures":[{"sig":"MEUCIC16Mi7kcEydxF6fnCwSs41IN3T23TJlbU9cvw71KsrtAiEApaxMWNilRL33XnBhRRytDU2SKepso3JGY1XGXtNuO2Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":187301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxxo3CRA9TVsSAnZWagAAbL8P/idmgxfm4NwnRn+Rzyq4\n215GeL3ZaSZxd/kNfLWRbGeSzxUByVwrfoLo8dC4FHY7CQEvhAnaYEhI8cCf\nV8VgMwUzSgoi7SQKLfIB2o56fe2qH9eCx/qqGu8EtLkOSjrM8kNFKrFxPGhj\nNrWjQ+oca6dZnhfB6fhTvvigL9T8ntt4k4VyGpwOlTrvetkyHhbwXeEF8Zv7\nfesWgqYEGed6l42c1RDgR9E1B7Xrc3e1s8QC+IDpiVxiFk3zcAvqDCYSCk4l\n2q5M3ZaXTGjwyFkj+P7s5X+DDLhpaMaOpUopl9Nymhi7c23+qwMOSo3pPsZy\noLHdbMBzQDcNs19U50FyMRfZzqXpZFDZHVxeybw8jyFsCB147bEAWOGnQQFq\nDyCIqLznrg42FCZO664qvz2yxcqCbHiVOSViRcCZaPYDRfI8B5cjPKs4iWIR\nM9mApaNqLAPDUBupS7pzVe/RljgrlCr9jgW3K2NdsRK/U48CTv1lx9EyEj/G\nDiIRUidDqfBHSy1PPeoUdU8fjkBK2Mi7YiDVwCE8yiuOCeWP4IyP8r14yO79\nL+PTqr7sMh1pg9htBxX5LYzNqnNYIY0IlORuJ0j2FEvkDaaRE9tRtmySRAQa\n3/GWDML8Um89SNAsNZa+8zpnrk8W3VALGpypVz/SR3atAPjjs5GUV/mkQc99\nPc7J\r\n=VHol\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"da588d1142a4a63724e67132ce250b258b894d94","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.2.0_1640438327760_0.3574419406392628","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"node-red-contrib-hal2","version":"1.2.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.2.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"b2afb2bd3bf0301873d391ce474d91cbf0213508","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.2.1.tgz","fileCount":31,"integrity":"sha512-CtdQUOJzfpQKUzGZrIcGK6uhJiWCipvbuNHCy759MEbAj1c0qLylMREh4JyVHqzReBg6of+g+e31isf3SCtGHA==","signatures":[{"sig":"MEUCIQCfBi7iuXrU1dKK1ESwZKDO2YPyPKx8aHkGB8teYxnM0QIgRCzSiyRokfMZSqfjlTI0tSs0qAFgEti/Ny4jzJvNXxM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":187941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhywnpCRA9TVsSAnZWagAACCEP/3N/AKLElxMPFDmgH00B\n7ylpZL8wU2ZrbaSl4bt/uh3N4cFpk1Zcbn2R/xCid7+VtjqLLtx+IglP/3IM\nn0tvpQ7YB6zlBIDq/ysVponzoawFGfJ1jxwSHFqojFR5INnMZv2+liywPLH8\nOmSaKKUCq3XePPyvdqwYHTY0F9qztZuFRIjKq7KRMaWWSRUKO7K8uW6/pYTX\n6bHKNQz41RMYO4tn8eYgWx10ZGCvjNdR64eu3fZZWKel4kC5dbVYBJ7TpsDn\nebKRVvg9dYcuvc8J2vSOyP0FnwQQqy3j1uNibaOASdTtSR3Rbej/DCocN38M\nECLPSzeh2oTi8/aJLGXaY/DcqLcO4Pm0wB604oq8fTIs156XPVxGVXXvQOiX\nFw9xP/Y4bHibuh+FrSjVvHwoxgqlLgD7/DuRWF9b3qdLO6ycHcfLOT3SC0Db\ns5lz/XLKmcxB7dQ8fuMmiY6vS2OvgbTaZc2MosO9I/p33nQcMuiZ+wNM7kPi\nsq7tnf0bd5Rq2estpjVeY88MahebdhI8J4FSTqyl3pSZZfxuJk3tzS557mHJ\n1wtP/6WFQCxqf66jAc0l7v8eIpYmnHAOgQ14JB5qAnFuvc5cBPqo+JxVtYFD\nCu6qnKXQJD36P+n0iI3+CcaE2D80mcBsoIrlEU3br2/AFAaNA3OJ1kLRUZkx\n34sN\r\n=wVtx\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"bdc4e9e5c20e1f7e4b1e400eefcd7943639da799","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.2.1_1640696297286_0.32323624005883334","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"node-red-contrib-hal2","version":"1.3.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.3.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"4da2c4c0cba67716ba323938b2705dc583329c2b","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.3.0.tgz","fileCount":31,"integrity":"sha512-IYmkDLPGBt+IRPTiKOCrq6ospo3ysBz91+JzRR2bfsM81xXvYcjo2foYt/p74OdqdtM3TpdxGiswUuOSQLA3hA==","signatures":[{"sig":"MEQCICEYT+4BqExWT6QP/+70Ngo7cnnLb/B+vaCoPifQ7ux5AiAK3eGyVHtkCznuVmS5qB1tUmReRa5sq5AEqJ11mDHiPw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":193131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhy1GsCRA9TVsSAnZWagAAcRsP/1eeZtY1VdYXr6/yQwzO\nIIH1yhgqUrvhFwxvDachOZsuyM6KpPSZzTRHbt8Geb/5nW0dJVYEuvaWQDCm\n9CW9eSuLHC1BCaOUUriLzspZSQpiBkepz8ohL+QM4KtCswnhk1OkLMePBhn1\nMABn4Bdqkk3Uyq3JYi7L4OineOr02crC8N0t6xbOZE4v4rRCnhYh7fUxLOaH\nMqNM48oQ2KWqumStmrY3iSabnu0FTygv1kYk0zKMsLUTs7pSHawSVI50VFMp\nifGhmc1VlSw2Cvb6vGPvCBSfUWtwmaownlaeDS41l360ORKET+lb3iEki+Ue\nYLX9x91XBglagJwgMSUGJYcluCbT1z3rOsdigVmNYa4GTG63Bj1+q+n/t0D/\nRMjOI73zSwOSvlNGfVMe7hR9WpocqZ8hDCHDqCfo4qw/Q6Gx1Mgd0zeNzTNx\nuxDXmVmLEOnywEekB/U9mTmHkgRRwI1jksS8gEgHa/j43muV5ZSSplu82e/1\ncLwwDjh+1E9wDZSw4FjGJfna/+i465Su+7LrVGzhtmTFtJqjGe27HF2817J0\nN/4zKot97C3PvWmm/CEaLccKvyr46aSZenG+TzJw/oC1Q20jKWjRB1eQUPNN\nSzfHdFH3NWnPQbZ2fDx+gWqlwplAyEVCymQYDOQwQqSvboBDHDZ1PuZ3nJFJ\nZNup\r\n=0c1U\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"5c2647a6177b4fa4608d41f92a7c8fa970ed0edc","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.3.0_1640714668301_0.8341445426618963","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"node-red-contrib-hal2","version":"1.4.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.4.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"f24690b29b5269c8e26487e6fe42f08f2e4c6f82","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.4.0.tgz","fileCount":31,"integrity":"sha512-LjnlzxuzOYgbhjDqraBm20T1/dNRFhnM/2NC/5XVkTUTQ8vqFH9X6s+87hgzEi9hTo9wQlfr2p3DLVHBd8Qz5w==","signatures":[{"sig":"MEUCIC9gffqMDVW/LDoj8hY7oZmtZccY8mGATULxhIBw6dmPAiEA6cR7rtuporlGW5Sb0no7LUnfG+QHN/HKQXN2VHsbiSY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":202648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzDcdCRA9TVsSAnZWagAAeyAP/059+A0VDdZe0qRiIBKb\nTJccSPZN5jLKD/12K//CSxFrBn8XFf7fPL44fIK4FneWG4r1VEZAouewf5hb\n7WX58UQR7/w1dQ1f1V0RwCZEMSxmxbfNIBkyZCfk/5NtSQF3/JlXgEMSdwt5\nCIlq1JKQQY8gKH/Acgp1tKoAgfGtcq/cjwEkpfvfKOOrKhcK2muuuGb5UB+S\nf7BjrSrH2+mL4E99JrY5HVt0o9d1njz0dwrzYOKI7UJtQL4FkkH/zVa8pies\nkBGWYPTUa4EbRznFXUCCYTHe76GPlvTZYboE5RmiMwENpvhgDFq9uz/Z4ypN\n5tx7iRad/gI+8FZYna4weBd8CH7AO0zizxh67u3dS8h8CqRXTF+VWe0nTQQ3\n5g6QoNLlvWdoBVhgbdy3VJkeoNhfeGQK6pz4T2dMP5QtT7BNbfoWydyZyBw0\nyo+M3BpXm/jKnL5IBCLNIR5myQay2B5wj94SF9o6jwpqXlbKsiox/+6cP6zq\nH/fpzM1uPWqEhcC3Q7ymwT9em9DRr7fS12y6Hb7VRM9fl41sRhu1WbL7S9n5\nwZR10LerK8V0YNf0ylfBXIoiU064DaEDOxAOUzgvW66WSNxqp8B32XMGg0s2\nT5vPpyJEjpZbmvEq/1NUN2E0aLSZU7L/gCVsR8L1MbQNZYs6HZRWEv9oGCMq\noEmU\r\n=s2rx\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"050431c565639283dbaef0097fe5079fe3b1f77b","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.4.0_1640773405294_0.5298431749521142","host":"s3://npm-registry-packages"}},"1.4.1":{"name":"node-red-contrib-hal2","version":"1.4.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.4.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"8c5449f33002aa7db52799611add0126eb2a9fa7","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.4.1.tgz","fileCount":31,"integrity":"sha512-K+dFP3ktNd+whHhZlXkcuZ4rOfFJDbJD8CO/qry3y8iM5vN1nt13WkTWK0SxrQIshAIPOIO2bqy9aoepflNeVw==","signatures":[{"sig":"MEQCIFcysmtw9223LniAelUFLHjjRVqKjY2g4Vg2hjdvS4IeAiBA9RU0XHMb2jImZ26GeGPPrErjiFU3JeruR/8unecRhw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":202706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0H5/CRA9TVsSAnZWagAAstIQAKTRTUnafKtKmmXwR/VE\ngKSkOYmBHu42R0sgpwB+e+tY4Rp+1DiafiTe1XS9L5ybvMrLk5xwkD4slcR5\nouo4avgXoao8et1/LKLKoZeBdKtW/E0faGJmYxzvcau7K2xo4RqQUs0G8s3/\nKRJeAwpyo/SXX8rxAq1uQeC+YMCwY8UidkxRWnQHAH6aPgK6MtS3kc6NOp5+\njgE/utAAHEiqLDaC1TW0lWPRIiswYq740FgY/OvNnUy/BmjmGhaYY3yRoxuc\nrmoKPWITFz2nAoSpuZFRMnj9fT4JSQzU5yG9gD5zedEpvzuGjqkYwl8ZUsZy\nT/TVO4HjD7MAOakBQ3Sp/RypdOfRyyhwTS8BM/05mYpJoejbaU7PfhM0inyP\nzVidUu4p3gBXkdAG4aAsiCB2RXJ8DlnJZeKLJhy6vu1n43y/Vq2Ur0Z4AFzO\n3sQLR4cMm3ySSNtcWFCyys7xc00TthUSNVdih++1vMwh6TWWOw+j/29VixTe\n4Zz2+cNhBO4ikSc5uUfx5aAsAqhO2QSNR+vFgNAqt3FzAlx9gIzwdrmdw/lv\nJJyOdxpB3ShoOmX/F8bxldEia+AWJ/aK1e2RDvrQUpuMTLxjW878YB1+CVko\nMmtQioohXM67bV8d982TIIXpkl6m3nDDhnOS8NcvZiIaDULKC2hJ8U8kc7qS\nsf81\r\n=ZoP7\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"1a0a8201073961e209e9499d641d0eacedd96940","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.4.1_1641053823752_0.8646651191719725","host":"s3://npm-registry-packages"}},"1.5.0":{"name":"node-red-contrib-hal2","version":"1.5.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.5.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"4bf5eb2174cf5a51818635b226a09b76cdadd6c8","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.5.0.tgz","fileCount":31,"integrity":"sha512-Jju7N8q/9oQ3uMOmDP9dv9LJfGvRFi70RmbTEn7DsIF2vl8ZrcwziWygpfZIGPyDT9EI5T1XWl0FLqr/Md6jLQ==","signatures":[{"sig":"MEUCIQCTN4vWeo/tP3C9CwlMQiJxzJBnSGxhhPU4Ajdc7OndFgIgXD7zRC1feWT9RMJQMPdhn+l1RqJ5wrhNqBvAGfyeyNg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":215878,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0YIOCRA9TVsSAnZWagAAOGYP/2k2Squ0cV8ejoQhON03\nGtdcqX9Fv0xpfHax01CU6YyUDGzbSnpJxJKwHWp89EjgVESZQqWqdbSH7l2i\nFQWXdmJ55EG3c92obbpKuoueDrK33KQVMd/LpQ2SW3LWODq9HwqOL1qlSK7R\nM7O76Og5au0/F5hbttPcEoVY1nPO2J7mL7rREsN46FbYVKb4zpedlXDjn/a4\nPT8gqNPEfeG7Nv75TkV2dyFD6oUGSWstMlDbbCE1QlTUky8AbJZb0v3z+Uxt\nM4O/6FA0EfQ7Es47kyXdIptEk2EYAuLCa/d0ZIrXXuRJ0cqQgGdwFQ79pDDY\nsVZ+XaTB2B2d/XEfGx8Icvu5EANtylEv+XnM3mtehSuHPs7UKVhT1J/kmJEM\n7wmqjJsyH0D9FMuociBXdyQv23hCbOU3SbceUkk6R2kwAzRsBz2x+nWqFTCw\nJscWZwg7RQGw1/cCrelvZYYzwKjrJ991DcYvKjjagjwsJna2PYllDmGYBiLn\nS3mJu6bBUJPIb7zKYKimaPrUhurFb/Ou0xyJZ3ygC92iphrDlt3IFm/udjhi\nyh81esYCfoG+Rt3+T5UlL5w1RiZ8B2arArS/0pWXVdUOalazB94x5yBbWP23\nnyJQMQRjK2ye9EGyKMtlRJnsXsbfklWN6XJ/GgO5czv4eCuiO88suAuZf1jP\nte5q\r\n=3AOM\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"ae398ab28e45907f288e00bcad9b50bbffd96e15","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.5.0_1641120270002_0.07324228111285636","host":"s3://npm-registry-packages"}},"1.5.1":{"name":"node-red-contrib-hal2","version":"1.5.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.5.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"60c1adfab4c686ce0a3bec91913304f66b233e51","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.5.1.tgz","fileCount":31,"integrity":"sha512-er9+QalqwSY017VYsIybp/9Mzz3wF+TDilV7iTA3F4aA8ICf5WUuikJMZhDvYW8bTE35gIrs9Gb6llg3ONTU+A==","signatures":[{"sig":"MEUCICfgBzowWZGh8C767C2c9Xq313SrrgH8l3lUj6PfTkRGAiEA22ANOAxePnHhZ53eXppRTEtztbDlRkvYtGxPBq6qDsM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":211083,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0YRvCRA9TVsSAnZWagAAr5UP/1VZfuJXcs1OhRGFzMkz\nRkJmdyctLitPYgkY0807LFainhVc5vk3lhXdLMfCq+TH4q7n9iWGGisp7nwH\nS3VI6x43JP319Hxw3Rg4QTB7/KLaFZBysZ5KwTYxGrr5DKWsHa+94Z3C0QF5\n2LwNF5EkWbmMdzoGosEjkXXSg440LmMPNnhwJ/e1kAiuZ7ZUcdjqJTmi0E37\nyIl7l9NC2yOjvO77xRcWnK1Nbylw6v0RaXvrdc5iB1ef3LUx8sU2518mAvUU\nx9c7Eqt89WCQbVm6NlWe5muJsu8SwRNRVt51JQYuSl7v/LMo6spdpZt2ql5P\nnb0e+voxmIL3WPcmf/Yv1dtIFt3LFP6qag0/e2Ywwo6zMlWoJ3LJQIY9LkqB\nlU+eYXYQUPy4ERugW/hnV7fHhxqyWQ7W1ZQ+Ty/rEQn1yAr6zbNgOf8b3vrr\nTXnLu0CaHoz1mCWQ8qWGKCo61Yb/g7l3KwCONg2jJwdxXRS0zs67V2VkXc6l\nYrCFLF2YixAJEUODpaC8K2Syfx49Nnib6pIYvGEH8zOA2lmB9+3Mc7FPffKD\nQL2c1uGt9nusmvbzrdltix+BUybcpJuWcH36/fbOI7vLh5TbQOQ9xpA/sf2W\nSTwYoWYQxp8AOpo4z6EaXRkXc9c5dQEuXPnSDLzxCrcmrDLegL4G4nnzstZ9\njgVW\r\n=CaRC\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"9f808922c5e99078028b59d6a793103e026937a0","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.5.1_1641120879729_0.36272654319042386","host":"s3://npm-registry-packages"}},"1.5.2":{"name":"node-red-contrib-hal2","version":"1.5.2","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.5.2","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"1b7692277a376b1e15465bc38cea73d0b8e4b64b","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.5.2.tgz","fileCount":31,"integrity":"sha512-STo+vhg0gSd9pggNu9kUXiy3Eeun6d4hY5Q13xnQwX3ebGk4VyHqkcGawLRoilU02STELoSfEJNk1tAUFrtSxQ==","signatures":[{"sig":"MEQCIDNsvfkLy6wEpUylxL5E1WB1AOwzXR4koFdOhZ6IzXz+AiBrsZthyKT2PBp6j501WS5snSxPF9LVPtVPGKsbDO5kKw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":215998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh0q1aCRA9TVsSAnZWagAAfpcP/1X6nqpFRRXjzHmTiFvF\njaNF4brB/9Whnchuvj2AWbeqGrinc4NRQP7Eu6Y7fkxP1QpP55S059LneeEE\nRa4WcBy8XgmHWzEGeN3SCsjRj7ayQ32qMTcH9d4V4hiwnk1+dKMaVIegOC1f\nJaAVPI2zhoEv9wKj2Lmj5MAvtmnPqtV8xpMu+bFjial/B1lZdtQElVIdTvs/\nbKa5W8JvEJAPwNnz2eX+KHOF5QTi53Tl4ZXhC4wCXhpxaNqj0ZXUyxLUR9kM\nlcvJZSV8xCAOzeCXVN1ICpADwmFwkpEop8+0WSnnZNA8a9wRI88Nto+TfMoD\niZSJeJtiHEdu7vCucDUoTaVESs14MkLM+XYMVUT0ZB1Cmxcmhw3uNjte4lCC\nN92UBQ4I0/IjQ7qpI8ouFX04CHUykcXeFn3sZK4GXpwAB+QrZC7SPrq8oCR8\nJ5uhGgdkg0F71YvrzgH99wyEBqGl5tELsEFc7v/DBvKu6rOPkKDDZpmp2qFw\n+sck4cYikw+z1AszccfKRo6xfD9lAR7qaK9B+O2LDfXgEoGuaKvuVjnJJ8nR\nKaWIArTAosGUe6slU9KXJCkhqZvkLHFwl1In+H810QIGTHua6MO9okbHayhj\n7StNX2MFpXpzRID8SbODiH8sA5wpyGTY7NnrVM9rhSdUHM/uB5bjo5YmR6Eu\nJFuY\r\n=8xzD\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"d445bdada263a87b8ad1844fce1ad4f08667e140","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.5.2_1641196890730_0.9757892729922812","host":"s3://npm-registry-packages"}},"1.6.0":{"name":"node-red-contrib-hal2","version":"1.6.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.6.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"aee30e289e28ff1236e13cd31697a2df3ef3aa6d","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.6.0.tgz","fileCount":31,"integrity":"sha512-i7Fgpxz2YUtHnCVJXHz+b3hVnDlcl4asgPVu1c1PsBjhtMS+rtfcX1RrU59ToQRssaNqzk6bxb5WMcJT0XRsEw==","signatures":[{"sig":"MEUCIQC0jHwvLW0Kt+CTs++rkptraJf75nilwNi/KbZIVixYoAIgJfY4JXS5PW/Xxw/IpMZp9fEl1Idu2IBQxU4Rt5byFYM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":228159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1GRLCRA9TVsSAnZWagAAWX4P/RA2JamFgwMXzEYnKcsV\nuuNUi02fQ92XmhQiqYL4FoyBIPM4WoXH8lI+LLvlJVCqD/+Cm2AdKhaoElkK\nSL1RT2l0x+mMH/6VicpbqIp12erwmYqwJCxYhTgSsi/l8X3i0vvhuo5R8A9K\nyyTroyMLU/IQWul1M02VbJMaoBPoTzCOAFhflhRv9Tq3qRZ8FjV8x52F1uGE\nc8weUn6Jocp2/CiqbYsTK7QmXYr4hAEGEeozuV4V9ZRUdi4bRNfp/kQ3qLiX\nhQRlXQfLzTct6+xEs/fWruaMFY1VcCZs1GH5GBZC1e4Ck1dt9PL/XewOR+kC\nIbFak8KMZM51SrskOIjgajmOw00eun9nfvE8DtfANjbJZA68YbAoWAgECkvF\nv8NHrlK6t2xNq14Htn/CajPTWotXHv4CEe7n7zrjNlOE2n7uqI4/VFOpGVw9\ndkzd+tP7GEYDg6hGR1PDYj72CMXjoWb5DW+bqprt4LhGblQutDOp/8OgPYl1\nsXONrFHxq4MO2rMT/20jJGCXhoZDf9y54g9BMlkofhl20ZFcySNE6S7xeRPp\nUMxsi8fNR79JRDMNKRBUSfliR8F7r2XEJbYE9w5IYvdHdcD6cXuNBZI0Ry2j\n9lNyUHBofGuDa0QOTj7tZPRk4O04nT5qRbwNaqC+BFfCXuZt8EAFJGapDjcc\nQezT\r\n=8KJ5\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"50a5f29ab4cc75f8430eb46b719cbae2ca381f09","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.6.0_1641309258877_0.24689520204783855","host":"s3://npm-registry-packages"}},"1.6.1":{"name":"node-red-contrib-hal2","version":"1.6.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.6.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"056e1e24c9b74817d83a43d53aeec8ceecb20bce","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.6.1.tgz","fileCount":32,"integrity":"sha512-QNGxeFbekKLOkMphfTGziVuWRpv8qRmOYbEQBS6NqmJUNb8KvSBaCkQh7G6yW/vLcxGsT7Gv3Jhi5IR6690c3g==","signatures":[{"sig":"MEYCIQCW0qqf97j61aB8039xbNrER4EqmZHQT2dZrkTnQHWHTAIhALPlMODdINdU7pgwvdIA46nWgnW7iS+xcZvjgoZpni6y","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":236907,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1UtTCRA9TVsSAnZWagAAzE8P/1DSHYzGRUMyX97ziSxu\nsjQZl15EmKx7VfnvJH6OP2NR+4Vkv8U6SOiz+ENYluJE5KQfdQL4VC+YF3QG\n8O8Yurk5n4d2bj3mM164GYVJwGDfT6vdHe+2EIXXK8jaIEqIVNurhBpa0Iiz\n3ft8K6WcudxWzYnVmukR4hq9vTfKFuuUh0nUrCWQuGqesGed4EwBEdG7O5AT\nn842THIP0SYALV7wN9upNFB7nYB0rSKBQTyzYLeFuT8/4XZX+2eOrmXwvscg\ntdr1dCgGPu7ByB9td/+1iUvLE6PkqUQssQuFxHFDgruAA0aXLwFBH5XYghh9\n+kNP6ikRpYRkNg9Nd5JDx6mO1BM5oAPC6B30MtPa7mtF8e35M20v3Eyk+r21\n7dt+Pg4FDRagIqeapeDBjs9N80JP1HbSHwQ29oLoRmGAgrR4jBfCBpnaG0oW\nMXNtRSx6UxQC5eeFPu/+v7d8SD01rAWYix2OyGL8dAGyGAy9kr7AMz1XGPev\nZZGhvweSatk7HRAfrDEJRJcx2TGaRoJepjtGktRkDDMbfNqPeVd2EycSC3QL\nUaBoCIGFPhFVrrxlsgNrHavpswJNJwSOye7j6ecOKsSyZc0mos5D6Fg3OZFz\nY/dGgsn/y5iQxnLG3SNfgrav17TO+RP2S6nbMuLYiXITRRL/yWUEOSwlPhuM\ncKfy\r\n=kY82\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"26bcf64ac21f60c5f74400375d18056efe5ed4c5","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.6.1_1641368403188_0.3735607627584825","host":"s3://npm-registry-packages"}},"1.7.0":{"name":"node-red-contrib-hal2","version":"1.7.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.7.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"2bbe234f892217ee1d6fa6c7431db32ab486dbef","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.7.0.tgz","fileCount":33,"integrity":"sha512-OPzAm2hmRyVaO4oktaXTMPr1TchL4nDeucYQPSc6ajDZFcPRrfgcC93CY2tcAKHK3THhqY92irauPQJFCjMuhg==","signatures":[{"sig":"MEQCIBjxfLhcOIqpwQ4bbpF4XgM6WzVa79sBZDjFly6FAsIzAiAUaARFfotF6SQdqmgWbGBid+SkkSnk/+lpEkUGES0gHw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":244030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1t90CRA9TVsSAnZWagAAvLQP/3oH3PbqiSsm/jr5FgOJ\noRaMt/XfAHVSELR87CwnIAkf12QZrpY4TVsij7/NucGYVSIv/3JdFXzoEtmx\njdj3d5WE8NUEAoViUR/uvZuw2HPCvw6A8HeVwWaxBMCAII+xRYBIPLhIEDj6\n01IK8OprL+CsAF21jp2BjC7k/Pet0RktVZwewLtb/ND5ttHU/VyKuxb3VH9h\nBf0Qq85AcIa9dhR3AEQSk1J3WqkV7zkjy2y8pf2C5XNL7J2fZ2/5z7UKMdh5\nTQxPFz2vJKKNf9V4gnSbebcK4sw69DSo71Gw8nNMlWp39DKaWkH+IzMSa9DB\n8YleksfWEld6Y8WTsJrv4xVcD9QqJOCW4mYp06Z5vEMt4O99UYj1akwooliy\nQvqRLJGCZeD6s6cZZMi4wqpBls5+tLSYmgN/8tYBIT/LaL0ngO9kY1+rK+jy\ngCPpRGhLiZEBgpMFhV/uMb0i418M+h/EbZ65C0mViK9Zk2Lt+N51JblZWuBF\n880gnxM3cngRnyinTQAve7p+dIu1NA80oA+x584QIGPFSvigao3YLJDzuQr6\nMOe8WbPdhmGguN5NXVrBRm3vI+hkt6OObLizKEne+Siky1q9cs3F9X7cn3Hi\nR+b6xNq5V4Of3jumjTsLxqEhX1vIacUfdnR40emO4O9MwiT6yQbzMFNdrQFI\n2PEt\r\n=kVH2\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"95c3ceba5abff0b2bae5be303ee8a4fa15baaaef","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.7.0_1641471860084_0.720535570604482","host":"s3://npm-registry-packages"}},"1.7.1":{"name":"node-red-contrib-hal2","version":"1.7.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.7.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"95c8dca6336bee8b9f4a022e3e7030971f56d995","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.7.1.tgz","fileCount":33,"integrity":"sha512-fUk4134AZdsq79OGkIG2tIPx5etyfbVxx7WScTsaQAF9/qutrPfiydkpAZIjDj+bEF9hw0BmF1ByKm65E4OdEA==","signatures":[{"sig":"MEUCIBDaaxJGZ8tEIn1qGGOvw+YjLSCLBdW2BYe0sby283foAiEArK+O9+aPz6YJDEIWSTrCh80qF6YW0/yjfEpWtv6lzH8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":244574,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2CdpCRA9TVsSAnZWagAA+2sP+wZJkQqGIDrXgLXzTx++\ndVlERpiBsBXv9h64LAxCtXkvjZcREaiOUFGemdu4aFQHrBffX1xKzUqjg76Q\n+TP840cE9H8/JPppRq1tQAsqIYwLbPNwTUSk/jGz4LkFq2Jy+Xm+68BGRDle\nWUWRNfX727dAQgSgn312St1LZrP1ANciHhzs1G6Z88o9rBpKapKom3Lkgf43\nkKflcO2tzO4bBi7mL7vOT/KSDzpzb7lNx+sO5/4fBeFizamdi9Jf0DdALKA4\nXl3BiPR18zDxBw2F25i1b33OaOtT7ggkCtSoyllQldiNuKbrRtSeJMyLUczY\naQCC2aRSFH1QMAiEeI6rrIvlcVxFiBFZBXVYz5Lc1SwxyEeJOWchWtpWNZy+\nIqrTwu0f7lS1tZ0Sk609lzc/JgeNI3mC9f07CtKtkZUWgTp7ln5S9/QpkDoI\nwQ5amDQm8y3Izhj1M6AnFTRq5iyMFZOW8WEA+d+1wL1Fl+qzKRkIjQS5jFsm\nYF8ARzActny6Q2C/JGRKuXVCnPvvusYc0O9T8CwIY5q89Ywi2Eyv/Fmg42tj\nemocFYu30J0kS9jRdgVmltAu7O6d/ozSO2Z59Mcfu71+6bz7g7qEgQ3TKZBX\nhm7K0B2r7FqlYpavdQ0VjvEV+ORZNn2l0pbZxGSdQRn0fNLSyuB0R7SX5jYV\n9Zfp\r\n=7r1t\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"e339460628e0c8815396ecf529385f8ea057f2da","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.7.1_1641555817100_0.35114011045695603","host":"s3://npm-registry-packages"}},"1.8.0":{"name":"node-red-contrib-hal2","version":"1.8.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.8.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"6e7b7e393879f31dd71a9d0220bc4eb67120e772","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.8.0.tgz","fileCount":33,"integrity":"sha512-Co0YxdfYkelkY5akNOQQ5VE8LuUVfQt6DTIYoc4TkOhifA0gLn9XPCxasB+SdzTi7M5xAAZpcSNfMwDNF9M6QA==","signatures":[{"sig":"MEUCIGR/Or/RXUTbIVAD2ra47C2d5g5RFK3DeBzebmdkXApfAiEAvUr7WUuZH22WNEZ41Ndwh11NvZpxJc5W9/Qz0IsWeus=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":246749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2cZtCRA9TVsSAnZWagAACQgQAJ3J8PhlqXfZcUAaIcyX\nTOcCmESty0KcHvZ5knz1MI1+dJVR2BCNmp6UFVb3BRTg9ZdS4v7ICtXmIuDd\n3iM7Op4bZvpSXubQNpKBwEEZ2JLokRP6rYy6JuvL+s5sG/JTGZC+7Y0OC1X9\nFQn2Wz55cTTS969wU+E1/UlSBlkX5TqUDSn5mo5hD+vdQdKztdtBvfiJM2+1\neOhWeMyyCaNefSmcXaUaRnqQua72ljvBprRKX5+BRKFSG8z5VpRVkAgZdnEW\nPEBsc6auFFBke8P/Kn0XA/WDYNhlxfvUfb1CTXW1ghVvBD0qoI0BMfT0kSA9\nTr1IvJwjLDb76IWefAav1VSJGoA0Es1rgVRQjMx42bSVxNQzg/Kt3GYKheub\nNN2AZClYBlcEqF0XWv9vg5VgMPV6pqNd+9WDMUtbvFrsj8ZUZQO4eQBxjgPo\nHieKFhCnGyYQX7mrWezOVfOfCXDKaQY9kOt0n39oc84nF0dBOzJCuNsrp1WH\nSqBTAO5Afl1ypVWmN/67FzA772lUI5FRWKz05fugVm4GKq0ZXBppAck7f40P\ngt0mG8en9dRB4ipbCKqgRpnc5WosHbDd28e7Nv02SzxFcf/qlS/4u3DIZtHT\nMr7iVSr3eqArcUl8T++pmIIyN955/C+bvp9Y9qip99+UmLbKrYP1gLurC+g2\nJ7u/\r\n=kwWb\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"78a14795a96d6890c755730bc370ea16d354dcbb","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.8.0_1641662060957_0.06136703343175376","host":"s3://npm-registry-packages"}},"1.8.1":{"name":"node-red-contrib-hal2","version":"1.8.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.8.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"316866685b03ced9d0776e23018b816b821fc6a3","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.8.1.tgz","fileCount":33,"integrity":"sha512-gqELCXAvguRkKg66T3LezXb27k3wpS8O6ivvr/kr63nuh92+aCwx7y+bWhmstS2Ej8ecVnymBiw12Dilmqn+Xg==","signatures":[{"sig":"MEYCIQC/skDt2MCL7qZs9yQmXr1U2L5yOBGgaEFRcWzcGh2XSgIhAMc/Gh9sOb3SzSlTEqPaDv5rufntWgo1pcEISvuLyNbb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":248613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2t7gCRA9TVsSAnZWagAA6gMQAJNm/FJRI5Ntvz1NKapV\nUZet6RsSHtjjwolc5nEuPlnvA4IJ3Qfw5buE6FDTllH3ETu6NFP1OYfU1V7o\nRtgwmAld3YmnAyKQunw99l76EckrgomdPM116+ISgw+7WnZsgcDzgLAO96as\nf3GnFHYdTAbna9Aeq680XUyddPOrRvbohBfW3Eph4uYRzdPutLHL0QTmy0j+\nUO+cCPaNq58c8zLTjYwt6Qx1iAW1bThjNhp3R/yDigYq2lnJJikfy+xu9stF\n+XuzV88SnNlE6rBAWbpDwvS6qe0GM7s8K0LG3Dqt0GTf0SCfXHPBnhWmeCRn\nwnfY/OvkKRbBWyht+WAF9OA13Pfxs0EJRlIVq/U8s0UzXQisdeOfcI6FsypG\npZTDlfdw+l+tQ9HXwKbaibueg647cJ74zaQ5v92j4plnDTBG0yImUNeacOQg\n3/sblaAOWPHO/4XAY8s3girgiDl7d+GzyZlJQ4B3n7WWm+RtMMBYF2Crhhes\niRRl9J+T4CcFlpC/diLeqSsii0Dy7tYwWVs0nnzjSUpT4hNybVuL5BExHC42\nTHXgMu+dKPDCp4Tj6r5j0bqJxO6hNmXtRPK1GhB/c762PDlFS9swtHprJHD7\ny333lCNsslm2AiA7duaQ3BBnFD+cdk8Vlhx81x4vyYHGIxACCqsS2YJuXhOC\nf1pR\r\n=plRB\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"c7947af40ceb603cdb1aa365c56c42840b1932a6","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.8.1_1641733856490_0.8136973813475228","host":"s3://npm-registry-packages"}},"1.9.0":{"name":"node-red-contrib-hal2","version":"1.9.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"f1f41e5b3a114713da319735379669d2518fcccf","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.0.tgz","fileCount":33,"integrity":"sha512-7g5wE7ASKGemwpRTBSCqs1DTSFkLECHjDd1Tn0fzQz85VbShTEUwP0YgOb+dGwCTdYUJNDp1dLX/3QX7FnJgFQ==","signatures":[{"sig":"MEQCIC+9Hb/NJse3FHxQTpFHliyxfYjmdjRLX4RtbUItqWXeAiAiVhN8eDYGKknd0abGdRmjPUDMr8ER4PRVMRJoxqN7oA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":251775,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2xk5CRA9TVsSAnZWagAAiOUP/0+YR4Su3CsY4Rju1JFZ\nRNKpVYODEINhGzWbtIObeQR3IWArtxKGGo3m0kzsDNJqXVw2xPrDAMVRp4sf\no+75u941JLvUFw4fj+O0kyyiSyEYyVGEnLm45UTI8D4RTvNPnkgD9y+pIZJ0\n7g+KzcmS/ZaTtdjrbFB2OdH8tBZs45FE944Ikha++yzFRpp0+TwiRYpaBu6s\nLo5mNqGr5HDDrww3M/cK9KHmeu58KYLX3JV0JDZJTjU5ajlghMUuUZNrFlGL\nijDUrzzBrxuwrvw3DtEe7nAeF804rN1GxhH0licwVnAQMTovRZCLyLY0mXO/\nsS0dA+KdFqiCFpY7iMHcBWnpTegHIqL8/XJH0jIXrW/JgoQNd8TVo3V/KxON\nI1ODhX92oAAr4PvgljFX3o3m8E7Yt/SnYwZFHRW+H/8hvv9sNmjMkukQp4q/\nrqs450gucXhhRkBJuaqPZ4C/2tFRYgLlxuVYk+sScUBvwqQc5vZCepOCRdBD\n0urV6YH4rOy0Uc7ZWZZvm20q1wzGI0BVXtP47lKCUkqxYPvcBJ6icg02fTCX\nozQngAae/8ItTliXyMcVMopuz5tGOmi0bT72W09MfT/+kwu5QLb6eMr1cBNF\nglanHPE+jV+KNkAJrploQdJIu2Yc1hHjQkmMbfRmaIBVMtnVYuImuj6Ulr6n\nO4R3\r\n=iPR1\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"4ad3d9ed50d7dbcc979a201cba5522f49f327fd5","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.0_1641748793186_0.7420104866386514","host":"s3://npm-registry-packages"}},"1.9.1":{"name":"node-red-contrib-hal2","version":"1.9.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"5a520e30cfd8066d615b976ceeb527cd71aa1c22","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.1.tgz","fileCount":33,"integrity":"sha512-LEtrc+s7Xl/O3t3030OWzk1sVdRiyGPnkPQtTr9zAp3WRd3WDuW1oYGfUK7fzvZBLEh1/fh6AJ1ybMZwZAjp8Q==","signatures":[{"sig":"MEYCIQCmcbszpmuLpMkJ50F1aT9yZDAFmjUGygPGM6+8/yWACAIhALm67IlA6ob1WKwlUgl+bjjQYQk80JSBz3lKE1SMyp3m","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":252050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2xxSCRA9TVsSAnZWagAAE6gP/RtoelVxoDc+uTV1RuDR\nTfxA3q/4l5Ia1uJTyqlhiZ3rN9A+54fVP41UHUA4qu0g0p3G/SUw+7j8pW79\nTZaI506z0rPF8VcFziAT6/EDMzMrTBXq5lM3Qf92Jxkcoz3J7gqBFO02JMWe\nMvPzfdaKNeIITe66puTYyJZef5Gtr1VROhhvzD/mcwOzCsNQDSrSDHD+MUkY\nMNK03wQTtnrX+XD5j8JCodzGWkzhPKVGu/3owd5pMc4G6oUSOS2Wik6XLS8u\n1RXeeb7GYKUF7fKYC6KFtKwVo3FK2PBLfB3g+z7FmhBeB1daoVYbJXwsT5JD\neJ+GxoAAzqvJPdH8d1hAqnmyjgbzf0nd1A0gQ9YHN2+yFAackkcXZo8WfoYf\nnPfn7rDxy3H4gNMsh8LNzeXrj8pEt+pqTOl5G6K90E9BvqjWGjdB+9tyS8VC\nQkrtXcoxTRi644DYfmXda4WySpdhy17bMj6O4pnBW1KwoIMV4xx56Zymot1p\n16IHv0yHlSQUz7iocFPe+WizFilDaBSfA1QMi9apD6Nt47v+2uYaDMznnOl8\nsLmzvugZWW2R/VN9/wsLwuCXV9bPpPSizQ0pf35MM93Bq9eDOmQkfG6i3Xko\nwyJqoC9eGxI7kYDT/LIUelaWoAL8wo556/MbgdiTXRyiWKu53IWy4w4SGmnm\nE8tH\r\n=P49k\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"7368730ab2b4b9673638b3db7a2ff951646d9a6e","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.1_1641749586642_0.9355301133459106","host":"s3://npm-registry-packages"}},"1.9.2":{"name":"node-red-contrib-hal2","version":"1.9.2","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.2","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"42a3df9ac7988381978a003114dd19899becc927","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.2.tgz","fileCount":33,"integrity":"sha512-+v84UBDjfaHjrzmknCPOWZjZGC2jF/uXtyQAvitX8YsrLzKRtzPOFhSloepDjPpwOqMn/mIj7xjcattAgljlyQ==","signatures":[{"sig":"MEUCIBIJ0fOri8zQ+SFJy3RzffZjFDkhktN7E4NB8d3//E/GAiEAtW01eyHPOhbCO01q+e6RGCGE5XqWN+H1JhUkREDkRTs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":252244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3oXjCRA9TVsSAnZWagAAMx4P/i0j4UT/Ib+FhVDGNjMU\nAw9m70aPIVreoKrFfR53MIy63jM830RPF+Ly63JbHfqM0BQmdqRUhno3rVPu\ni5zXJCzW8Cak1L4F+sYwcHZCB6UdIrAB10gOcxbILfidhcroe2ue3VTf5Cgb\n54JKHuXg8JjDxEcE4+85tJ+ZgBhR2SOo8h1ujN2ScujLq/KHKpzi8U7FyUTe\n0Vflf746WmAgZWTQXUp6k6j6dhNjtOikjeZ6LZxVCBy7diDr2xVIYuX4T8RY\nkBQRshdCJH+tpcG6uSvpHcvuvvyppwzih8az6pjzoxIMoNzSkhh+YF/s4ig3\n2YOIRRCQCS/8ZFo3ycyNbwJvKcOWjbTTB1F5EEelchT/K+TfVmwujoBtc4gl\nSkdNZ1iNUC1nyRwI8suXe2Ow+2bGb8G7tM1yboOMRiCNjrDe/JLdh2+wdjnL\nQepCxClqSGN9JYpI1jOYh2A7h/0/mxGPdFKuca4F3IYreLS6fxBndSosR850\nxq+uBEillFs9wxOfZ7pla1//Dc2Il4vDhmVOLH4ujEPEHfE3bghhZhhM4fME\nhY/Ea49WkkoAVhE3x6/e93u7veMvDJ8cO0HDOINzO7CFqprrweXmSEHzsZ5p\nL/M9ylxyY7s7k56yX1lwHULJI1es65Ft7o1MrhQa4mWrlaono1quX+7u/0y4\n/7Vv\r\n=em6P\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"b7f7395c3c2c9d494eabc72a9b6b9e6017bd38b9","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.2_1641973218930_0.7729343103949764","host":"s3://npm-registry-packages"}},"1.9.3":{"name":"node-red-contrib-hal2","version":"1.9.3","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.3","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"2e1be2f188470a5b889b2d8b8a75864a8777988e","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.3.tgz","fileCount":33,"integrity":"sha512-tG9Ln33k4BdTXadwkh8A7fGkxQUXu9z4LN6ghzLi8s3r0M5RZ9lNC/7zIg8xLCJtiR/YKBy/j4pBTbeVvOFdzw==","signatures":[{"sig":"MEQCIFdFDh66UaSmF9NYDtAPPIwO1n92rHADg15DKFCk8SNQAiAdEztlIvXzdFUhuAkG0ZCaNtmP8ilX53I+c21EFkQmXQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":252282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4WroCRA9TVsSAnZWagAAx/AQAIi8DmtOP28oR5cpUoeV\nnmglrL7kuh1R6vbL3d+T8BYT4IiAFKoBK5jVByMQ8iITdCTDnfhUfZ/aGvBz\nOLavS/lrU63OTKGJQ+gyJFSiBzlQApnBAog6jrYMRMO7oMnGkY5jC3ZQzbF9\nNG8uBJMjIVYplBwh3+OmdfIefIjyEZ4hXSIUXdqti4l+odgR90174c5Cqd4w\nNhqYlS76K7b/y3P7RAwHRSyH+nSMw4QQESuC91KeBorBJdOy01Q/XBy4DOWu\nvPpnvi45eo3eNS7biZVEUCP73ssLfwWSQ+pmqoTu7CgPZZqsjLtOYLz/dcYI\nQTgBtt3Gcrm+jQ/qmFnjLPixuFDK2px44N9XhY6QY0djcSluD93MKB6+Rm34\ngawcQLFnBVHBjlc6eTQi4ltDRRHyjxNMFRX4PCGpU2px2dH9T0M5DaXXJI3w\nVgz6cbLcCRUk+W/DOMsOmgN1/1+YXnLH5UFQaAWFjoX+M7j8IUHMUiR5SY8U\nhSwiNRwtWead6iWV12s0wO/bjjWPbWhp0HZlT4jVxx37FsZUfpVEOfP6Pwor\nMnLkl3Tka8dKWKAITR9FgDa3wnRIwmINjwM/eTA8RzJG4TW/75MlmCunqqJF\nhD7UZO5jF/d7hRpo5tXWDFqmDUYZ8BmLOwU8OOripvD6Nf7/C+e0/K9apygd\nMAWw\r\n=azVt\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"34faaa61abb964185bbb95139887fe5a232c80c3","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.3_1642162920649_0.8022126500633149","host":"s3://npm-registry-packages"}},"1.9.4":{"name":"node-red-contrib-hal2","version":"1.9.4","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.4","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"04b37f99b17365deee723bd9f3270f1a9a94a3a0","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.4.tgz","fileCount":33,"integrity":"sha512-CVhx6kdy1HrbALAE8Dph+4DrHCCQ7JR1EJVH3OJUcqsHm+ZUah+JejxIEUu2WfEoPXNA1AJyY3HTU+AMS0zIDw==","signatures":[{"sig":"MEUCIFQbXOs69E+xFJg4MS0AOup2umOVxvlfWNZQhDG4r4XIAiEAwfn9X0PEoYlAaqN2xL7yzOjDA9zBI3+pYiYyWEhXGlQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":252441,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6/ByCRA9TVsSAnZWagAA4iUP/11dCafin+UJ2HkkDxT6\n0H+90eg3IYmXR5o9mOw3EXxEEFyI+aGa0J8G+4OOiunEdgWW/oDAKchQhhEV\nUwwfd1ItUhIj9JEHcFvR+u/+MGI2iMkcuz/TqiuAk8kwGTARhTHpOUeckvcM\nMhy+++KEt/cArKEklg7T9yNUkJ0NIIwM3YdC3NAzxPMYz3Mh5Jb4TiQHs/3E\nii/RPJLZvAVIfwOg61zrCTRIF3WMeKfRwekzrSAijo2kg2LhSyeq3OQNkOFF\n/T7NfS2N8Pmdmkp+AwLrS79LPw961nl6kRZgKHuWBqE3XPacG7LmGhslvLIa\n6aIUuYjjMawixlkPE2DDTG6YJddwqWjTtiQZXrQZn57QpiNrN59sfscMUjck\nt/8PpdPQxPMH414p3eEkKSyjfIN9rX/odeofLOFaXkKkxUc1/V7IoZHlF8sP\nXzb4BXNbwTizUuu775eFOE2h2x2fL4qMQXiPBFdtm8xcpVrxECA2JB4sMJIJ\nrIkxL6KRRcc7737zVHgWdyNhgkjM3I88LM7GWM9b9++KIMz3s9l2HP18I9sT\n94NW1clJ/MRjR8UpDVjIzjPdKCQd+QZndfXBzw3Thv99PNMNMuIs6tk0kthU\nCIMVbzMWPctpPQkJPXl1kpPfwzPvUAdqv7h/Wp5i/qxETHrLw1+sjrD7Cyud\n6kql\r\n=Q/Fv\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"444ce88e858b7ecf71189a3a2cd8c1349bb488d2","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.4_1642852466034_0.17919810289692806","host":"s3://npm-registry-packages"}},"1.9.5":{"name":"node-red-contrib-hal2","version":"1.9.5","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.5","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"8e8e4850e3b2c6120c11a3de95e1557ae351ffd5","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.5.tgz","fileCount":34,"integrity":"sha512-Z4P5Vv377fG07c00tOUdJ1XrtP5cH+Reju/G9GibKBonnZDW/YtHEgquIHgbvOe0Cf1RuFjibAJj5C/+bLPzag==","signatures":[{"sig":"MEYCIQDhJTd1q/HOg7PZiLes+uWyFqO/qsoXpvy88BsCrbF5YgIhAOr3kMzzJ3fd5QW+38ll5vjPBr6qfA3j69y3wqDnc3Ky","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":291978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/BXQCRA9TVsSAnZWagAA8NIP/RNwMCui2r3oQG0NvAlW\nKwmQayAXVpmGXpSapxqF5N8gNqmaBnYqwx8HJEu87hoE0XHkK9jIRHRrjkU1\nWjfQZNIidLIhkYzwjObT9G3AOym5aq7m4YT3hXZnxT2iLimWDdSBwlYkbG/a\n8/NLSZLHcbxv9AVRrMxZXWbZY7CcrdUj71x/A3T1Szl9WRklFdLwRAzeTU8L\nVc4QqFRUdIVoM4ooUnkUwJ0nIM9VU7nCp+cihjtV4H982Bov8Y916YIH0Qc2\n0DCnXTwnCB+qPvYXq4UFt/aiVB5EH5fS+MjxCcfqo0ygT2o5h3y1RIcIOrG7\nKStGqdm+u2NotDzm2MRAUeYoVjVjFwLh9WRud2EVnXV3+BkD5wW9Cn4yBkI2\nalpx6mgE+sQr3DkcR6soG1dU+hp4kvIClleQ5RNWSwfM3kO53grCLJvB8rRv\nISb2GKNrYf1bxipKLzWfRUPaoW+TqQRQX6Xep3SjwsY/2RmfsWm32UgEpnat\nNQtzOKprPPFSMH1lVCzNMpkrKCpHGBNOX+Aoboukr3O7NQ9/2xEDlCCqpH2+\n6vphQ9QZgJ2DIlKWkX/xDG2DsNg/OKm4+4ZB2WtkCtfJmfI5H/UawX2QQD/G\nDXE+4jBExMDW0GBnVz6EI38M5ni8UpIxDYNCHSspCqo9jbIw43dZuZyJLbz2\nwJvx\r\n=FIuG\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"38767d387d167b40e709ffaaa35cbf81923bf748","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"engines":{"node":">=12.0.0"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.5_1643910608764_0.7976776911185446","host":"s3://npm-registry-packages"}},"1.9.6":{"name":"node-red-contrib-hal2","version":"1.9.6","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.6","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"031040015681580e57a7956892fb8e144c33ac9f","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.6.tgz","fileCount":34,"integrity":"sha512-2crbGJgEWnWPlkGjr/UFLo63WvNX6JjZqnwuWMiapFOLbIjDv+XpU3JoTpowFIgEqLpKuKMmDIiTPAdWdEbA7A==","signatures":[{"sig":"MEUCIQDf0+gRIECKNXuWfQjl3yrBS/WIsT/aJQ9QbYLX/f5eYQIgRqA8nHDIv7YDs/EoBfjQyYNW2oeTGF/ZPVSlkQtQDGY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":291974,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/Bc0CRA9TVsSAnZWagAAZ7wP/3xT0DZtk/l1Rh6H/aBF\ncW24dgSVvyJWB/eATdiMDj4yOxq6AJb8P6E+qUA+vQQPIVXMYFyh2sBFelww\nCyuVjbUxIBDVeeuxZPorS+cLEK3Y/VXpuyyruPEE1d7/cu5zJiiFrlB7hTZ6\nzkV8h7R1DHn1d88wM9/HfB7xQvSdUjc8Lzw9VtmPiNBBCRRSqHUssSVLSnUP\nJbc718eOJe+rANKzwEeJ2oJwzaZH83WWsuwPL7yzvp04csZNAq8gCUAm3tcZ\nAQJlJmlhEJ2l/6cMLmbxxCUfA7NZOgk98GDm4K26N+R0H7KDLs9NGlmiaimA\n/Ee49LvDEtdepoDcqVk6EFUfllZRlinGxdYz5P0V/ac+AFKihpUY0qSdQflg\n07oKuXCKdLm7M7lxrbXOBQoExc8RPgEUlAxYd5LBZqDb2eTPyF99gVJR+Ufb\nS2t4j0P8A18jhmLalHc0ABZIUFk6r0I6fA7wvGiY/XNzRIoCW1GYTKvYEcim\n6jNVrzYLinh7wrk16Aij0vzkMpRzNiJ1HCf2ccWKLU3tm59zYKkJOa+wtjys\nySaIcvne5CW9QUoWGOi+0j/d5Wm8J1SvDV6c8Kty4aRBG0IyQ42Egqf9q2EG\nqL76SKEgcAzuK7lWkvfwR4tddHZPjZD8espEgceZBLBo9v0liDrkbLJR4f3r\nwluq\r\n=AyJ/\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=12.0.0"},"gitHead":"9f3efa8ff34ef8cfd4b364e814bba79c90eeb121","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.6_1643910964354_0.1754196529941241","host":"s3://npm-registry-packages"}},"1.9.7":{"name":"node-red-contrib-hal2","version":"1.9.7","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.7","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"ceef797dd35c62860a7f23346f9998ff7cb01764","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.7.tgz","fileCount":34,"integrity":"sha512-Tw0odvZabL7ZcTtDhgxakQ218hRCk9ckgyCL/yCnV041Kpcg+azfou2hFIyM8WE650kGJDKpqPnOt466u5L6sw==","signatures":[{"sig":"MEUCIH+W98SNe7Gn6wNGROPIomv7uPuJ6fqNF1x+cZ+2whVfAiEAoznhnqgl4LsRI121gaWieu9oW26RcwVtvuECmxaSOYY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":291975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/BuvCRA9TVsSAnZWagAACPgP/jGmFvKfpfPLmtAOBm+A\nWMxDjq4MoIBxmdgRd+iEX7V+V54mNkwiBERMkA3+ICS4Xu8mNE8idrkJE6dI\nPRJ9NMKiLhj0jMKBzlrZSQ0zf19whilcpCEWJaP6wk/r5obksQfDb11ERS8q\n75KDov/9QMAuir/KDpHHq9XAwZiZwy92tG1KGyi3sLFKKNpkuiV/NhsJe7UJ\n+E/na3g8555en1lvDjkbI1ijls6FtVrKVY0MxsBqGGuJx/5YZvfuoXhXvS4z\n3R7NECroQe3ckM0D2irvP0UsA9gHxgj8ilMRUYw/1mqK/+2IdvyIvOujZiBe\nWyqyG53xE3sD19fxXLG1i5Vlj8lnnsqbDv/DoTT1H49T5m9bdXk8FZ2v4eT4\nZTV9bMYKnwCTk+nkrneNy8vKWkpYLRVccRzszdPzjOZ4Q8ze3s4k5j6F+82p\n70lG+9BoRpT4l3oZqMTY0bgl9DrpbVID87kTWMqjQ3qAEDU1XhZuL/6lSW/6\nT/Xk4iLZKLyZEfeIFfqfgutPFCgnw28FgBpdicVaHvlE0xTbnV5Ux9K3K9yI\nfupuZDD6Qtpgqf+iMwZKx94x5ooEFBV5+LPK4CkbZopkDu6f+4PFpEqvMahx\nObtv9SCg+DF5LFT8iw71tF0NMBsm0rtWpYtUEvdavp2h8EMHhXjMuxkU+win\nzPMm\r\n=ifWb\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=12.17.0"},"gitHead":"8482934806ada822da828dc798f62ed463fb5d27","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"6.14.8","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.7_1643912111159_0.5949104607018074","host":"s3://npm-registry-packages"}},"1.9.8":{"name":"node-red-contrib-hal2","version":"1.9.8","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.8","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"35beed877676988e96fd0a0b2987b10a26dc0cf3","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.8.tgz","fileCount":34,"integrity":"sha512-BzS9cURrCZUcfn+Nc4/tuJGMUPuo4KZ9u/FgLdDAXHAxTewUpjLD5QLTUJbRH79CjmB1V/iQyKMlqqT1ItorIQ==","signatures":[{"sig":"MEUCIDiGWMYh4iuLaZP3XiZxIxBnp5VdDj6ar9l/e3ztqjmbAiEAtZ1sXIH6ZUHu1HHZs3SLv1OGgcIRJVqLPpds/cD4ItI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":291974,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/o/hCRA9TVsSAnZWagAASVAP/RNpwq0POvUi6XTjOW32\npScT4QTkBRmO0moBev2ZizNMFPu0MOyGR3f3hNq7zoqL1sqGNqaWuNrIz0k4\nh5CrWTlaxvQGbGdcb/ehaLEKXtDPMstlWjN4Kfc8K53Y5ie3iTtGdqBIZw48\nnhMjv18xxbfCxZJc5xbYXKninptU0lZy2vkzaKNkAV6ghREbMoajd3by8+Bk\n5FKRX4Vk6+hX2GOOLY13w9mIvs5VS3ntzkn0gznj/krV2lfhItvbo+XOmoqc\nYA50me9OoP9VEUdKQzjOKqni4jdaLom6wmPHuXQYQmnVcz53eOwycqdzsild\ns7m3JHxxM9LCCkl5N32tmQNSgjGibVZI4bDwttM0NpgqA+vgkOmrEd5JhfsC\n2mqZUfyltDgHf4A07Dwqr5FBsrWZ2PxR0mPLB8L6nbh1pwJ58bg+MfT97KUp\nCdlUXAKqWpMmLSsyfQrH0k1uXOjIr23PRE0TbRe3aYG3W2wzGHDLCKvnuyjL\n2th4dLaeOgyrW4L0/Vn4KC/s1NjyB+EoTLKfAckPjpnOHcffk5yDrdHwX5Ln\ntFlUIvlVSCjlqaLPxG5+XxMv/CyUJiuKMWo5aqEC6At0UjSyD+nxiocMbnOL\ndBmMEfwbjT94jDSvIkNPgz9r8In4RxzZ7356a4s/wuHEznmzfmdlWkO3KtJR\nHMim\r\n=SI6d\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=12.0.0"},"gitHead":"b3879308476fc5ec284b62ac2139476d5e0a5233","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.4.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.8_1644072929620_0.021693992448319044","host":"s3://npm-registry-packages"}},"1.9.9":{"name":"node-red-contrib-hal2","version":"1.9.9","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.9","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"7f28e4a35085606c95c2c5803b81cb0239f4d939","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.9.tgz","fileCount":34,"integrity":"sha512-8z9B5nHZZw2rfWLKgFVJsZSno9PTqy7OU7rDvr9ntmxdBiwEn517pTCHE6QXFeyyh/u36tyBVCp57xSl2yX7JQ==","signatures":[{"sig":"MEYCIQCWryIvHDHN1RVoj3vOSFuOjt7MBgXgTzhjmN8n3ltCkwIhALRaZppE9ushjwINSlCHrRdpkgq9Mn8Zqu/IBmx3x95X","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":292573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBMM5CRA9TVsSAnZWagAAdzUP/0ZKbtRom7vsRv4AliS/\nlmuanF68xBeXoCUDJ4Lj96m0z+pwYh9MnSj+ieprUbJa89pZAgmGBOi9uTp5\nUKN1SZQIt0MQyGy7vgks5dRwtTxKv/F9waWOPs0zOR/YgPihNHUEuAEM9gcT\npOCigEtArL1cmrazzUZLkvl8Q4WU9l4LdcXUl97JClZxe8ZtdZRDmWhKjNxA\nJZhy8mlHz3qnqseGkZnRqip19MIkPyqQ4/Wqq1sImdWvDHgod12CENv7yM7p\nz7WJF8GOLZzL6LNai328sK8oHPxJRefGuSzQAYsDsQ6doxG0TcIjRv+tygon\ntHJrJB4kNm5fBp73lcqso7VyAudu+2hJox21ISFLlh7ogpy4p4ilJPPZbzOc\nWBeIBgyxqV0t5wS7CQu9DYdVDx1pTDufvmlBCeCFhXNwQx2a0teFASNNruW6\nbjHm3kCRbtS4dTd6k/Tuzz6eJLPDQ3k791kcX1F1jMu+pMs0NqZPrLoEgjES\nBWs4P9wAeuI6ZOJbQgUDwXkX1h72JpMuaeu3FqA649OGUIuCQFodRvjjHUWq\nLGvJ8KEDk1c71H5C5T+xYfQgv0gBytc1XFMgXlyX9DVnb/S4cdff44Rtu/D4\nonsvTg4VGTUj6iU885m5TUfrvjCO3Uf3yfdJ4XC4Pi3XUSpnlELMjvGCQhfl\n0B9l\r\n=fB1P\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=12"},"gitHead":"f6fb264094b33c8afd74618fdc7204292da4a1e7","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.4.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"12.19.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.9_1644479289822_0.2269720862867366","host":"s3://npm-registry-packages"}},"1.9.10":{"name":"node-red-contrib-hal2","version":"1.9.10","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.10","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"bbac81f98b6f3edd2ee160fe430ef14a79443b46","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.10.tgz","fileCount":34,"integrity":"sha512-8y2STn52xxj6DpQcFFJkLLG5La6S3JXCrPjpd5EpQ6RR6LlhoDBIi0GOYAaYS6XONxARCTprjGALk+Aqm2PKTw==","signatures":[{"sig":"MEQCIFkw5UT6qWDObdx4rOTtZwlpucQLUDy34NtkymP8r86PAiAiFhqr8dHlqizpLYf+NwrYOVeVp4IRWaqJhLP399CSVA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":295024,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiEikJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqaDg/7Bq++4JHcoNl9+gnM6NlkrtQM3JNBj3QUcbb2YDYKPPb6Wu5D\r\nPrM+o9JHiFUsz+n17f6pyI60Oh/5BEEeno2QfOOQW+k/C0HzQOYgWUZp8Kij\r\nXYBIcWisiWd+cQ1euH0+m7m0xNlg3PRoUVlAEkGNfiSGLVyGW9O8MPNSpfJw\r\nonpC8Fepk7k2TpgCe9eiZglgQYoqZMeNfnltyF7KeoD7TYeo9X9+ywaQ6lms\r\nr/sevWW7RjrxSE9P/0/9ftqeBuPeMYSzwtAqZD/X3gOaSW8vbY47vjl+VHLc\r\nUwVWt38e0BPpCqbINpeSIACf2azZRrFEMuxkjhtbGncwbeiMgGXtvJhoCALN\r\noMbk1JO5sEWEUDegU8sT/X1a0wMgLX1XgkXyJqWWYt36z1F8vhExfd3S1gsG\r\neiCtMcaxoWH1mSesRF7UsmzNEe8swHW8/lDs6w7WzFgL135yMPLsakQRBRPr\r\nfEbpNX/Xw2Gy9B2e+kb2aiQuVcP8de2pvYMIDs7YkHsWw8rf1xipD+CPO9Al\r\n/bJhry3SC992IHzzUDGT8UQiJ/ahyR6C33IRXTq8b7tXReCU/k3NPOyLOarF\r\ncs5ZeVc5tyLwAMy3yRnULRq8ePqpArzxJW+1ROKncMw1pgJx9ZQz8CrMxrka\r\nMEgQlmkF5dyD77ovPr7bGnuEC2BgFxHs9pw=\r\n=2Xn0\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=12"},"gitHead":"9ece4f7a9322e529b9ca57085c6cf48cbb190852","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.10_1645357320909_0.7557418646923864","host":"s3://npm-registry-packages"}},"1.9.11":{"name":"node-red-contrib-hal2","version":"1.9.11","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.9.11","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"c9e140bfa3afda104593361caa55a9c18333bbda","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.9.11.tgz","fileCount":34,"integrity":"sha512-e/S52bRHtHMJMK+tR7uOu1etRBNOURJSl93rdM4yEIt1Jv6P7Cky8sjVs8FuanWev2ErdzhLgjXd0xzv2Hk7yA==","signatures":[{"sig":"MEUCIHW4MfXN3B6ODUblI17lxEpDMrAuRyDcCB4eOBr8o6VMAiEAwjScgwPpeNJWOUMDD6wMQj2bkIM1c4zPDOSQ3vov7/U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":295804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiVoRWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrArBAApS+1D7SSf680A1SocAW9nwhmD8e8TllSKnqulMcUmRho50/q\r\nZ75NxjgmsMyovO3kO940T9mKd72ep+45+l2lh9GFztXBTodvWi+L9NMNdrsn\r\nRpwNbbjukZGQ9G8xBerAL9ZtZW0HDdvMicjp8ZbM//VgryG+f3ZlFMToxpML\r\nnm4VvX8fkgr7z2pfiYDVJ5MZrFXgP1V620NAzkKpf485AY+Z3GilEF7+b2NB\r\ntRFyCdKin29HJuLsQKAv24pXO9qOLRtkoUrDAOEV/r+9uQHReHgQ0tpHfMKh\r\n8ZFAs2v4/SSDlPchjBj1zDlyMHc6tmVI0HdnBHvxxwuXsQ8IwZVLw9nU6HpK\r\ntILCn0FI+MVLo51sb67vim/K0ElVcoMlAjQ84ekR33o5z41bxPDprJYcCygn\r\n59trU0Ig0szmnKbELpLOAm2C7weI6+Ic5msCZcNjqoVeDOuWsuBtAM4h6Z25\r\nChWkanxjClq2LDlQhkOPVpSCn1ZKmR88as/NOOQJhWINQCuHD5Sv99ZEbI+N\r\nei0M9aFPoKbcR2XVp40KJHKNH4ENSdKEzvdhd2N7ZRlSAWIv9/4qOwSBN2PO\r\nqeCxZyThVLuUwmBCfYRbIp2S5EZ7g4ecNqpz112wAArk7Jkx9Dkr9FSa3Ah9\r\nDAKVGmPxtdsCl2/dL9wa5vYb0XggdU+vaeE=\r\n=BsFU\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=12"},"gitHead":"e01ce2bbaf8b63f74775dbb474c43afca0429d85","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.9.11_1649837142309_0.43035555733014075","host":"s3://npm-registry-packages"}},"1.10.1":{"name":"node-red-contrib-hal2","version":"1.10.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.10.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"c47d7c32985ba064bde68c62eb0b054a43b971db","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.10.1.tgz","fileCount":34,"integrity":"sha512-TZU7oQEHwsI+3qU5XX910kdXxpd9rPK4Ng6DItzbSyXWyFJ+SREB8rmo8unKcHLdRdf/aGqDYgPjphLn9LsLYw==","signatures":[{"sig":"MEUCIQDWlXT3+yqvZ8G1XVmnNSNgnj6Rxi13rD2RkguAjEx1WwIgOsFt5VJoPPUxVCIWT57b8/2fisMwg3E4Z+VeFvQFCL8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":295485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiWrDmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpUUw//UjqzPE9Ud12Qf/VMYVgiw3GaKViWlqvaZOVRTCvXeytE4OPp\r\nNTcdoNwriDBz2+ALIvAR9xTMgcYnL1APSE5lOzxTGGV/+/6GPmCOac9KILEn\r\nnEAp9fxgLxl3IHn57yu3aaGGXG0ybCNuMRRykHdhSo8Yea6D1nfaUg5Qfejq\r\nn0CQw6A8Ry8QeoGxDoIjsYlsr5lBw6SAwX0vc6O+2jtwtV2HcdqoWo3x735c\r\nzMJ8pB0S2YMDnukNSWtD/is4NRrt/6FGsRTcgd1mpMPK7IPII/Pt2Q+h+Ymm\r\n/D6Ronu+zYPuWE1FcROxrmARlEWyXL7owCbqkDOzMWNp+rKCEOutcq4Bk5Mw\r\nAmkMggTiwI5O4PrCve1Feqj9aJl5LM0fOSYzhH+eacrCu5nr14hHo0Nw+DpU\r\nNdn2xWMlkbMD5H4a6iHYzrXW3rRSfDjM/Fusk97cnQk/+wNE3KJ+dYiBJoTK\r\n6f0yTGfCg6auD+DpJ8E4Y34hxyuRs71GeUPYiUReTAbECH4/4DRfN+PncZ59\r\nGAk5wKw3bfQuJ8z50xlZ6Yc6dJ9+Tzoe0u4AQUa+HG+YrQygomCmBJQeuyrq\r\n/oZRKm+65B7xi1VHqGBDVIdQJETGMei7RKtPxj8BSukzJBWsa4KTDQtu2Y4P\r\nUngavrnyA2ounYFH0nUsfGfJIo1qWyUTB8A=\r\n=2NQs\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"9e1049484897a566391df03034d07493af83bdbc","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.10.1_1650110694834_0.3586315406896776","host":"s3://npm-registry-packages"}},"1.10.2":{"name":"node-red-contrib-hal2","version":"1.10.2","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.10.2","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"53de03fbf79eb14377347f317b0c7880959fb8cc","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.10.2.tgz","fileCount":34,"integrity":"sha512-rLqfmiCzPEZTOYOkgqbfNhmslk1S0ba+3zHn1qhU4JzMFVevLMOjRv5MWc5ntxgGUL515pL0gBt0N7OWau1u0w==","signatures":[{"sig":"MEUCICWRolupUFRTDh1lkKVwoed8UF1zpRPE1z3PW2ivwSaBAiEA8lpVUdSzmyJ4MrE2LOIShiBMJ1lqKvxtz0Hc/EJ8xKM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":295608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiWwJvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrUpQ//bNCA1PaCV65Qktp9/4ICupgs4o1D7Xq+TnX1EvD/CXcbSEfP\r\nvnM+WxyYGOAnPEXtKi1/D6R/8Hd+8wIxLhui5SU/4u1sLDJZHoA/k65di6wb\r\n82YcKPhJ21KZTwzANIo2u0/oaacBT4tWGL9oMVtW9AV2r4tyP7n/CeV73+J6\r\nj2MI7fHwf2gm/RmZtf+Iqi+R0Eo3xzY5sTFoOmaYPPgWYG/W1wbDg/6ejiqU\r\nk5HPt/axqJz008O/Jre3Fqe3/lSiZ7kMGt8YFOvPR/mAXvEgq38e1hEZ8oqX\r\nueURHjN1GWj05oxP8N75HyUqnOwrlS2bC7Hdwmb9HROzN+Zs/jXt6ObNKJcw\r\nFnXZAAvBNqnYYLUFzlkL/vnr2/K7p01p8lI0JaNAy9ck1L3F2iS+7lfkiAmw\r\nDRTeIsa2GiJQR0pM37MhY4wrzY1XGtEAzxJhCdATGxcdzOIbjQDiJAgC/c4W\r\nip5WijjzYot6FIHmrWFXvMj2uuu3tcYP4ZQHzNTq+HUqaUQBid09NsYHqerB\r\ncw8JjZoEPo9veoYZxP9bQ8dqmQBBHyHA2ToqzCJSWJL0+p3VK+nGBuxzZuOU\r\nOyewF/8bOW7n5GtPl3fgKPEMRUeIp6CeZzmb5rqnzTk1TCnNQZGJTq16Pupi\r\nJIHdHDqgS/PEmFx8nw9KOSpUtTfDViutnec=\r\n=l0Oy\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"3594d639653ffebdc2a9e682d1974bd1f81af8ac","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.10.2_1650131567001_0.14664634235735163","host":"s3://npm-registry-packages"}},"1.10.3":{"name":"node-red-contrib-hal2","version":"1.10.3","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.10.3","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"91e8248876438872356dc61de24516aeaf017ef2","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.10.3.tgz","fileCount":34,"integrity":"sha512-9piUUY0VNnbH1ykjXzwINHNaUMmbie+u//cVvb5HZq2I/avl4WZuTUNYcM5dsaO4N2Zu7YxtLiUJ6ECOMPEcDQ==","signatures":[{"sig":"MEYCIQCPn5pXK3gH/grFYLLB96y/YMyix5vT3Z4BgFW9sOm8IwIhALbQDtHwZjRh21ePQnlBi7HxPRhohPrX3/uS0ibW8e3Z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":294317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiW+xFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpKzg/9HFgPj9SMRPazP8KKK4xp3yBVCh1c88iHN+jp2BwYv7yjgHYD\r\nGUrxPL7wmz/Y17GVwQ8wstksfnKr0jxHnikaFdgSu68JXBmejgNf7uwslxgR\r\nEvh0Ym7Rlt9W+bUtHJ9erayJXej9CQgNGKR/DwW9lEA6i/asH7AkmONDdWq3\r\nj2D6M1PmOjx18IGXuiDEhEtvTkm/kbbJhvOlCV77TaierEKEy/1ETw8qM55o\r\nIop2QGN+COf+CoZX92UWs4AMWTPf9zPmdjl0nCU++5vrQ6w3dOo/fU3TR+Vq\r\nMW9GCBil/dQSVyrS63QyCT24frRTkPt44h5f7IZy019E6KQBi5XwOd5DNZIV\r\nQ4pe1wA9tluc3WgHecCeA9ul6vi1/2xO+WmR+MexPxt2yb2xI5wZwc5FONlM\r\n5Sn7ooP6Dd7u19COf5iDJv5UcuKO6AKEb8dtcLRplAPw3koMzC52M+m34B0/\r\nq8fWL7yyMvP5uuP/nSHo/QYh3viXTTOFK1kMYyxWRqQJR8bBDNEiupFB3AfJ\r\nuoLpZ5b/CA2VJzFA5p419QCQm11ixwx1D23hTMe9gr2xUe0JImFJ0en9Z1pk\r\nbS1vgdN2xGhL/MfFLvtXc1j+/NlkBMrO/v3rSPby7FmU54poGnaFWgP7bYng\r\n11BomcCJAZGA8K3gv6se/Xl/pz/mjFQyxcM=\r\n=MTAb\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"b14bbe7688cfad0a173c767b3cc9d048222d050d","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.10.3_1650191429252_0.46658909807421156","host":"s3://npm-registry-packages"}},"1.11.0":{"name":"node-red-contrib-hal2","version":"1.11.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.11.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"8e7cfbff4950531cdc0219eb45e4b6b6b1639294","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.11.0.tgz","fileCount":35,"integrity":"sha512-VOtK9kkI0fleJmLcGUUTogT9zjn+J/yyVB3WmeVxYODnxaTh3Q9axTTsiK8+TNQ2/hdMZg2XcivLLo1vyXkMXQ==","signatures":[{"sig":"MEQCIClwFwC3n5Z+zr+0+4r9mjZFg5fJviypHO0R9pbnTYQGAiApOtFSABkO7DegVHUqYynjV/Yde+8wYpXGrLNH6iIGZg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJigpvHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoHsQ//fPyYWkbIhzSS/jD7/0pBAU4XrxIMt3gwXeDjXZyc7DBcEIGp\r\nsvU5+Ch2Uq1yozUjygBU9tnCq6v4VBvD61Asl1IU0mwmy9GCW0R6pCeKi0VV\r\nTLKde6K4mEskR/CgOsQBR33suYS8pIZIDfmN++T91MliyqLghIPm3VTs28H6\r\n4fvRx8GOv7muI1jCAVaP6YXiKV8BOAR6BeXCjp02skUxRHl2bZPPgcXSgs66\r\ndxqd9875Z7Y3yydPCpp6ZeQtwSnLZAd60G/r1ZXR9uP8FBkMxAwNKevg1nTi\r\nzFyAyov3qmC4cc1eggegXLBDAfEQaJxc5NxTuUL5x7Upx3Ftv0BA6a/CZhxM\r\nIIocSbNaN/fTUezR+63cC/NbDRfJsaYH3J/zSGV0OmW90/Kn70m/ozqnCF/V\r\n/GOEchlIwW1F/1zVNSa8jSVDG0HfgRhmQc83WIOVukMWLQyVXiPzMtuN/bkO\r\nBfPRnWJRCPcotbxL3VIysD7/wyM8NRwMuAbCbWxtVALLUKUDYoRBvjO27DuT\r\nqhFT9InZpVZwFd/fwzA53uTEsGXqDGCr+H1gQSsIGeLbONluBh28bv5OaVev\r\nHA2J5z2wRzWsCYXTf5uNuNM/UMGNZaN6ENjajFlJA/nluJ9mqKa2AmYXXv7V\r\nogKEFZoElmaUcCIeL9DD1hwll1+Qqe/M8no=\r\n=ajqN\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"e76e6da1dd49a97f763e4391434efef7882ec934","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.11.0_1652726727000_0.6310925370157745","host":"s3://npm-registry-packages"}},"1.11.1":{"name":"node-red-contrib-hal2","version":"1.11.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.11.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"d75521b74392d1e56af62153df1e41ac6ade36f2","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.11.1.tgz","fileCount":35,"integrity":"sha512-2IMW4tgpRV/EkwYISB4cMIc2RBFnQQp4wiCUCuiucd8prE1r9mNMQPQQnUrC1ExQx64I1zyS0tcaVomRzD5fLw==","signatures":[{"sig":"MEQCIEvO+4dkDQDbheYolkrJhDAB7EFuabCXTghKA3x6pcogAiBkmAcyk6iEujg4H9+rtqo/wcPvTlht36s+/57U23txmA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":311264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJigqPUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmopzw/+L9+2c1T/9eEP+0gD/uKc6usRpuEgFADzPv3nPZv3RjmA2mIF\r\ngMplGT3wq9veLemd0pCtQSA8HoPFjxMcr5QICtXAKJZOE8c+aXwmDExnSCH3\r\nLUMBHyd1c/44+D/Sif8fs3CnKdTeIb+NEWICO7HqNcJFAmZAlkokZeU1z9r5\r\nwcY6i5imyuvJe6w5OslHyVN85iGy/ZK2JW7V0DB/F4sW3m03FPKSIQNbBpHG\r\nL4gjwSyAc2aPl4XYidn3cHI0O1YyLO1wmyWhLaskZnBl0IM9AAfhh3dfbn95\r\nE/WfENJjI3xkZcTcrSpSZrDkwi7IaflLESxkmDdfNS/mQ1YLs7/ovKl1Ro1C\r\n32BpUI+ssexbI5dXSDUd4zEH9ahivMtMIPYHu6VObkXbPtIram1GLqpsZ71S\r\nHb+De08pszU03lntWKR7+iaoIz6/ClGy5/9xYTac12VR1eOiSboEiTHa/JMk\r\nvjU5ooKzWgmFLW4NHST3dWE+IHmzQpY/nJGdQLXngccT1WnmUhONJDAP9k5q\r\ncF6Z+kmEF7Apbr1jpyhVyVHdrdkWIb0bfuisRdmV3l6jF2JSFZChYeLYnjhc\r\nBCh2/iSkjw8Q1r6R3YuZ75fheBtoDnE2NCGl2Qb92UFyXMO/g4voCXZZc0qM\r\nHTsG0mh6393b4cVw6JbTIphORkksANk/iV4=\r\n=Ijus\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"9b591f9f9de031d0abb1c4579cfe6fd7f48db888","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.11.1_1652728788334_0.21243675997340739","host":"s3://npm-registry-packages"}},"1.12.0":{"name":"node-red-contrib-hal2","version":"1.12.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.12.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"e941a286ecf8d9f0e56d917d143d830f05d16ba6","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.12.0.tgz","fileCount":35,"integrity":"sha512-jWxr61geHbVlAeKfCFZIx3ZgtaWeEj44R5dlmEKu/iHQ/Yx2Eiw1EcI8MWVPjfPD9UoMGzmvptjzFJxOVQLyIQ==","signatures":[{"sig":"MEYCIQDBrreRT2nBjcyZRWjXiEFLGV5XO1Zgph5lB+3HJ9OhTAIhAI6vPy5RDYRZwiNnC9s+vWQRtCaopRzIp+We/OTvcz07","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":316484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijkFsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrUeA//VEkvIdZzLb8OHqN+P8ZoPMLlWsXKCGjz30Gy9GPtPWFcPZla\r\ngYlRwLgAs+k3EkDDqG73baDuThE0S5q/UWGwMVyh/RauUIB8qG+fmrErfGBN\r\nAqwNWL5ROvR386/r+EaT9nqYJUh6Fn2V/zSCZTHyV+zr5mRgyrPY75cNqga6\r\nu11M5EqUTuI3uU1SCydoLrVqKIFdPvsbVJ24WL3VCaJwyAi96Yvh+Ja9j2Az\r\nrB5DFI/ywlid1BCzkZbZpkGgfXmukPYkTubYlSoaPx8J6sdLX8A/m4XqGTHe\r\n9i1yYwfePxqF04XmBQdJB6AvHRuN8gW8U/iDKJIMl56Xre1NgMYDwu6vPPOP\r\nFowTlV2FubO6df3ZK7YWVoofre5gcxpyag3+Hzqq0gv9zsnvpKbV0N7b6hoK\r\nAezt3Tar/ziGC2MCXWHXhRxx9HqJjPysdRl06Mzyikd8Lqyt0/sp7+AI3shh\r\nA9vLUH8ZMva9WXX46eiarX6RFmoXHKxin14HDsJcqPPqyXmkwrFrCwhYlR0V\r\nxaoEjcTgCGgwpwcPEwA3CXN0c0ngH5QYrqZWEXkwKD44rKKo3AgIQrlHPDvh\r\nDArZZ1rPQE6hJ0KvsFuG5gdnnTECiJXQr7YvR9mx295gWJ5+fzPeaLhSWqCV\r\nvIEX2CP+KdwPSQrqrcEifyNojAHtAnVJO/k=\r\n=LXMM\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"a448ae515fc1074616c53edc326e8fe786d4291d","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.12.0_1653490027682_0.9344031153862944","host":"s3://npm-registry-packages"}},"1.13.0":{"name":"node-red-contrib-hal2","version":"1.13.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.13.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"0ae44b2bb0450a4245761af9796ab4649c16e148","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.13.0.tgz","fileCount":35,"integrity":"sha512-mako0n9UuV4GHLQ9bioU1tcjLKVdD1n21pOd/VHUyYpQi01fgiGW5ePRw7ghzgN+oKUb9ge3m5CG2Vlzo+1n1A==","signatures":[{"sig":"MEQCIAfd0deJpWu4rjCEP+8RQHtJXhNxxGuOwPYLhVWKxemeAiBlIJcaaMEnntPipc/nnMIGcajiK5jklYzQuBdmZ3cnAw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":334131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJipdKPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmozlBAAlq6KCAr/bfCo6pGZYVNYpOZzqiSibNHYF15olDHbeDPYg5ae\r\nkJuxUcSeBhk3kJYUmuWEGVXZaDREWnfb5U2I3NaL8MvzmS0m5p4Cf25wInvj\r\nD3zlK6HvcVfMVW5feI3DOhI3hxDhHa/PaDI6pc3jx6GuBNeplUZ6FdormV1+\r\n/mT8jNVRWcVp5BKJHvRzIANw9yTAEUYjatOAqrkZu9OWAir1Hm5X3FGh+wgm\r\nGa17PbsuYEZveZk7Or21u0LA0hVPklU8aojGo7alULd2UQ5AR+uHKvuCeOZC\r\neuaZtfj18iiPU4ikljhK1z13mkkkiKgLrkEuE3tZa5Mgbf/ZfDk4L8OXXMDf\r\nNo50ybM4UcF56IgLS2/ZJy3MPzReEv1Rww3s8gUgFryRIhLwgrtpF4+NSIRR\r\nO4wUoOUsmmjjh4asak71ANvJY0SKx2Fa4x+yhPzKzPBs9aBIAMruaokgB5QA\r\ncXwWHxTs+KRw2UdyolTkVXFjYCMTvKedNJ9nsDd1DGVRkBCoDJChMi1HlLOX\r\n+usN07iZhjjocPXcyT8fsIVqfMNkrq33i5XMm90oolT87ikquP5owBzQ7jgl\r\nUQqYqWye7YeIqasDDFNxXGqTwuG/wsZklQ3a5nGJlmhI1jyNahiH64EmWwtE\r\nJ/wnlmDYNg1MbbcrMYaTMPhzyWIg/j0FOZI=\r\n=/qQF\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"c929f372d0da57b66cfd629aa224095937becb4e","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.13.0_1655034511047_0.06616164414564629","host":"s3://npm-registry-packages"}},"1.14.0":{"name":"node-red-contrib-hal2","version":"1.14.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.14.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"8ca97cc014f6e715a89a02c2473c927a936ef150","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.14.0.tgz","fileCount":35,"integrity":"sha512-mHE3Sk056uJbJVpp9doMIpmSB1ULx/JMLtrBiH8WQFH6oj9flUFWdmtlHelGZswYl15qMZGZndljmVrARkIPsw==","signatures":[{"sig":"MEUCIGbcBnXfVY+SzN64pEis56m8OL8ozjUoKuvWCEIW+EWCAiEAkXPmKgxsCeW2aZ6sxxDPyoc3lxw202gfiqwu1cEjbZA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":336522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiuG7RACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpl6xAAiWmz0nA3FaKuNFynCMC4dPpXq9yd5q5gUPJMJGXSxTNEgJuP\r\nzw7RPzZGFNXAylpjhcdYfGQuJxqelkGVaBBy6qHwYDL12aeDv4lc5/qhWFWG\r\npIM66KgOMoliA2C6Kz8Eq6iBiDcg72oaSsMKgozxhkulLP/mHu5MDTfxp7gT\r\nNbyQSONajk2qN7voos64SdonejekQJfWzKYnr9CADYl7PngZBPE9DHccKs65\r\nT5NNNKoHvqOZ/r+9ADexkG2PJ4O+xBpfdtT2PF0XTdFN7r/U6FBpUr3ppPks\r\ntGfiJgWBa9S0gWQqzhthY1xsjE9BEt5KEtXwTep/SOuXeO+Ped1+7l/FEyiB\r\nXd/QQo9+H9DXFe1W3GV2K1SM2TZY1aoeUU/tv12F4/937qyVmm3hz+cVY4pm\r\nbiipcR09cdcFrYwCOvi8fcLGogC+XAutSBazgoLs5K1CLjX0MC34yFiqJyEv\r\nwatxJwE+zPuRV8oBewieOy7zvvJIjzoBVp7/HIgH1vgbAsLQ4d6y3FHeRNSq\r\nO8FQrYFPdU0UJV4gZhsYdjoR1Zxef1Vw21P+7IqxS1lT94cd/TjF9ByFb8lB\r\nPX7Dyj3XQGW5WBidsExFpVt00d4omlXFvXLby0lvIjcYxSCzE4qlof6JyJwH\r\nO+UR503JXx1FacjcddPPfPv7V/7BfJ6brCA=\r\n=oBuS\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"dd2d044a8753d29aae7a3acb08749266f4ce08d8","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.14.0_1656254161073_0.8526880695158843","host":"s3://npm-registry-packages"}},"1.14.1":{"name":"node-red-contrib-hal2","version":"1.14.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.14.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"6ab82622936a025caeafbd6f9d9d438dd7d5c9d9","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.14.1.tgz","fileCount":35,"integrity":"sha512-ohc+PcPCnOLyMGe7FREMrnggFpdme2wgG/4lS9kUTSQkaDVnMdF4RSXu6TUmReF6/WntlmahQTYQS39Ctjl1Kw==","signatures":[{"sig":"MEYCIQCceSeYqURAuIAh7YxcDevCrBuw6rsM+wkIT2oaoDsYhAIhAOF3duaYVZb+dXc/fBzh1SVsXe7RBAgTlOi121qt3GmN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":336616,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiv/rQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp9RQ/+NJRz55IPmT7G422Qxuxr0KIBw4cRe5C0GA0SZoOoS6McaeVD\r\nWxv1n7ljn/6olCJQPQ1T8HWkg0Je4HxNBByeF8pXjpgMOORaMwOgtVAY6ryT\r\nd6iEvIfyaYU1T/G6mnDe1f8IPbSex9qWBntmXxXRog+Kf71rtBEdsyF3z7/f\r\nIkUjtoAzn6LjUYJ04HzsmSqLBEp8O3vtIw+u1ThpQm7vJPMVl8OCU7xXpd83\r\ng8BhR37jgGGwVkiaAh165Ix9O/TnUyu/Cl1TTl7+oZRHbuBWocDKNZf++Ame\r\nQrWeSC98NTmfPl/yAQESXoTf35eaFJCHKEb6QeuDlyTSqBqboqrQOGfon4sh\r\nb9UX+buBhcBa2XFQpz6iV+QJ8+mDQfH82HHNf5ra5cqKL/luYKltc/YkzOlU\r\nq2zyU8PlEUVAvaRcN4ylqY/LAGCBFelX9na6BtXCfY8q9Q8T3esinMeElCrA\r\nHOvb42gJ+sXhriKFB87No/WzGCcva3VRAMGJ2wSUqPNu+HppAkXZB66+RWLj\r\nbvEOh4shS9D8rnF/xe+X7FVbbNvjfhRwxsC5Jj208JMmWwvzhK6v0CC72Ofr\r\nNSf/Lq4M60tNkqN4vV61Hg3v6uOTR/Llp40xENSDA1d9Cni7ZLMt6OREUQRf\r\n9f2Hv5Qxz955uAq0b+rAZSree+7qw4pV0KY=\r\n=HAMm\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"d664b0789285fac13df30a30c0f30d697011f5e3","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.14.1_1656748752174_0.7712531249116299","host":"s3://npm-registry-packages"}},"1.14.2":{"name":"node-red-contrib-hal2","version":"1.14.2","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.14.2","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"4ff538383ae84d00c1c5a97678a74f3dea059187","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.14.2.tgz","fileCount":35,"integrity":"sha512-ikNUmx/+OuE2BMBB29m8Jv7fmuwegbeWA3HAZ+W+uIGw/LWatDvW9LfZM/AR81IlKK2rsdVRds+Qq1ZsvsZsAw==","signatures":[{"sig":"MEUCIQC5Ek2nbQgCZXEC4GFG5NBwkKnD1N9czwrtWwIqwQJa7wIgT9zuD+j5gI2DcgkusVzgjwqu5Lgb0/r0e9KQf9pqkms=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":336526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiwc7iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqaSxAAln6PBl/6LyMoSVHIH9WCaaXjmLHLhplLMl9xtvUfhyNFBWV6\r\nr8UuO4cOj0w8MbQaO9bmxYXvA7rpUU+HptYOkYltv0hizOIX5T/kp0ZzNdwZ\r\n5cNwtylTjRVrDb2HNL3HFFerW6joo6HaCWdA9dkzJobc8ASEwPfZM8/0BUHR\r\nxdrs15sY/w0PEc2TLWoeeBk9f3jeXXxTAweT44f2pdN9kN86c7IS90o5vVBm\r\n6HfUy01N8606W3M1NPktZBeY14EMquEQJ7Sqzv9ZQ8zUD0//lELGIxObqUam\r\nB4UFm7euMqMv9RpBl7AbWfVFl2Ha9CVpxKKAAee5i2Eo8Rrrc1YflFqIaZL9\r\nNpA1Hzn+1o00nxsLH5oiNf8LBii//71kuVgKNqTW/0Ris7C9Br/0wr+B7sgW\r\nKBE1VnT8nPTncT+F7ar/cOi/2p4/waFqcL+r7Xma+XLvWbrpZc4R9LBjKJVz\r\ntZ7ohqUL6F82IqjowTXjTMC7TPqpuBZY0UqUxvOdwMkIr0M5QjgddlutCa8U\r\nYdn+oBd7bxDveKJWW0uhzom6OJiPVdIFGPhb+jQBY3k3RR1a/QhUAgqH9uKl\r\n0uxs3i3K5pyP2Ik9GSzMVOtqr9bJbMFlvqm8pTw6SawhWMgLL+0igdp2X0yV\r\nUZrHtoo83FSikJHrXfS0OFoHrBnWIjgYHpg=\r\n=8A8m\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"681475eee604df4d1108738adae318e31ecc8876","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.14.2_1656868578735_0.5663733273281608","host":"s3://npm-registry-packages"}},"1.14.3":{"name":"node-red-contrib-hal2","version":"1.14.3","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.14.3","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"f0ecbaa08ba7f411ba47912dc69dfa463a7bc9d3","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.14.3.tgz","fileCount":35,"integrity":"sha512-ur/s5+PqbYXYrBPB5+yMa/1nd28h3TNChXm/5ImbOyo1bxsdLQ8+q9XZSidlhPjFnhF84hNbtv/S5fUoTkUocA==","signatures":[{"sig":"MEUCIC/xc1Ri4mdrH4cSZC5nUR5kbFIOb5dhbGdALWKmRFrIAiEA063OKGKihBdO8wqPxtopB9BzjeB2zmFf9Xp5RxrsPsk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":336808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJixaDhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmppLhAAizyw6hcNqEdxf2nCxW+QZsvnYybTpgHilgAaQrxmDCn9z1wX\r\nFNkbi3FTLXlsHtXQ7zk8vXNXFVDYE9lccYDxaUMvKOEbsBdPqw3ZBjNFSz+P\r\n0CxdwXfwYCI81np3ld01d6cMqz621vgNoLyJW6DTM/b4J1MUrD8nafNdsele\r\nEGQHH+T9YOVqPE+Cvqqyf2pkBSvuffAwOEUadK6IXm796YdEoO0OJfW6EU1e\r\n5Hz9DAnheh41d5WSk8GsnnrXe69nT5J1XbtJZdelkPeiVBWEl60tOe9eITVZ\r\ng9NX317/B1661BIS0QrmspWl6nBEqcgvYLezw8fJzV8LOqcUMF4qaS5m1VqI\r\nXpsarENLSq2ykGKb6Q/8zVr0y50SmVwBM9DLqYXms/Xckux0vW3QSCY14DfL\r\nvPnr7TnGe27pfXOyViINMPuHV0l6X6Fz5J6CnZdCvBCMl73criC8piSJETVM\r\ndZLfUuC/rieUUspmeip5bFqj+eF6nzqf5Ah1nHaCAvw5hMbSaEEW+cm2WDtc\r\nA38RfFbAEvUHTHIwQajo7PkQ3FwHzEDfDSrX0HAuj7Z6JCKqrzua+Hdtvcd1\r\nx5MMTXQc2Xs3uKyZ2/0kjQsC11Kl+5lwzfg3y+3cUCEPT85C64Vakgp85nBm\r\n0gyFR60wNQPQjMqiy1BwZB8E99xPmiC2Gzk=\r\n=EL7H\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"be363074203da4b8d19667a73a9c358aa9d3e52b","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.14.3_1657118945501_0.4832200539184368","host":"s3://npm-registry-packages"}},"1.14.4":{"name":"node-red-contrib-hal2","version":"1.14.4","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.14.4","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"8388b735775e190b1922eef7cb607eff9afa9f88","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.14.4.tgz","fileCount":35,"integrity":"sha512-/hnH1Q99o3MrIIXKqN9cqRfHipPF3jOafGs4Qq7OsNoiQTywlL0RJYpBYjKJDeIOkfjP8OgOTNCxslt3L4V+YQ==","signatures":[{"sig":"MEYCIQDKzqWIyfycywKjLnsqiCvXiUa5z6YGCPul/Eg668R2wQIhAL/lLGpzzaMQSAghfzuxprAZRHqvX0TzBFapebjh0frw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":337532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiywaCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrE3A/+P3qkrZh/kSciBkgMz6EkICCNlHQYt6F/8BU/PPQkjlFUzbKY\r\nzI76TXoLPpA6wLvtHPzXVItVNoK8eKi93f0oaiIAS232eBMQmuQJkyMIWeFn\r\nJXBdjZEvZghKboqo9dcL/C/zxoDmmYlJK4AOKCBVrKwV5ChSNx6wmYtyIhyY\r\nO5JSH7WucaC5CS6ctVpLJuCsUBHw7YdrxdVXp7YBfP9eU+whzQWriNUSJX4w\r\nOEYzwYN4MW4f3wvvX3vTt1OR3dYucSIIaoCw+a6ByuLH9Xg8JGGHbX48Xj4Q\r\nhZLZTC3T3Vx7vlmRS7S1S2JbXhTWW/u3LaQfoiMDi2W5Aqg5ADagyCKbO9y9\r\nCem5tmsgeJXIMhbYGeFpjMVB0SEXlP4dsCGPdaa3CFxXX+pQAjBgSzcU1C25\r\njG9ZWj2MTTMqxioF80gUwdJWHuhnp6jDNCbhpQ+ivb10KKzv1RIeq+Tue8mj\r\n7dr12Doys7bpJHaE/oc4YoviGxMhMN3hKkPwiJFb9f/mRCfWtKWTguKuLGxQ\r\nNd2//b0IpXG2MYAz35L2nYsdHG0jxE+L4ZkCaSwid3QDUzNjIEgvXvUDY/ra\r\nTNABTGxPMR0+PBY6hax7bdOrYHK1eKay8XmUAGiSO4mRRMTkJ8JfZIb71Vwe\r\nmtXpAnMDb3DX2Kqx1Ka56OBOQLsNcMI4kz4=\r\n=+L5m\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"4272b4028e39793e431808eac8f260be8b3e147d","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.14.4_1657472642470_0.22680324497147142","host":"s3://npm-registry-packages"}},"1.14.5":{"name":"node-red-contrib-hal2","version":"1.14.5","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.14.5","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"ac2bfd04b94f41e89a2ecf94f84924f4c07cc35c","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.14.5.tgz","fileCount":35,"integrity":"sha512-wudQFwwNtnTFwPawptf0NoiDWFI8J4DLEmUrENR+SMTXSyq8r5eXIM5dEsZI0wLxjZ+rFxymfqIRu3PFecw7nA==","signatures":[{"sig":"MEQCIHqedUSIPeATzr2MpdmGjtBmaDWArzdYbxYhKrFknN7WAiB7ifjWd8B0jdYbcHfq/yyS7rvnj0DbAMhOxG9/8MYKBw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":338482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi9f8KACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpA+g//ZWfezV67t3Css5R5jZA3z3IA7JUcyqnuYmtfL/oeacbEQy6P\r\np3yEQ4NIfxVzo/AUR9xFoc4FrSNRh8nuknk5xo6tV1AfSMykPf69r11YWgqf\r\nSWSBxNWfh2NmdUh6xnZB9kvYiGlwTm61Si8rtIVASye0PBYYTTyj/u2y33OX\r\nCmXIhCmPbonq9A7Mpzhd7kqoKW0RsKbvfa4JeF1NqRkEX0fAL6NcZLNaV7dQ\r\n1bm3vdqNDq9J89i0/xBpRjAdq++J0KufM8BZ3DuLiX9kQvdTgRWwMI/P9ngL\r\n/bTRvrt8JcZUseiEKjklVwm4y6i2kLL+BXad2Xu3yGl95ftX2Ma/gECBuDjz\r\nuBDnWDZfktuLyIgc1dK0qbS5JIaT8m4dDqdpJv46EWBgVKY83gpznHvTug4q\r\n/JgFDnHChFx92ft9UY4iaYqDsX0LkybFOx1Lar8re9phqyzqLSsMdkc5wMJL\r\nvYgwd/CX4ROabdwuxj1EYlMBrxGJo8e/2m0tbG9z1LP54PXcyvBJu6xXLPgf\r\nRlUX3o13ecm5Hfc+iJrreViv9DaWbUv0R+EEf5pLAqLBp2EISIEQAcBYtmdQ\r\nM7JxsJYywQe4Ok7RK//HOX+t0ZCH83ZuDMv2ENLvUNw0wNPRH1JzE7ize6ti\r\nNtBidyY6Obs1E5hSv56/7DNpEfD2bVet6mk=\r\n=sCWE\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"f20891e501b74b77b93ac8b3d260d4efeb487f83","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"8.3.1","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"16.14.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.14.5_1660288777753_0.684590714262427","host":"s3://npm-registry-packages"}},"1.15.0":{"name":"node-red-contrib-hal2","version":"1.15.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.15.0","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"e0b8e74cfa99453bfa384cd2a3b8ed592ff9f9e0","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.15.0.tgz","fileCount":36,"integrity":"sha512-sDk5X5FYxsZcjFuohlyk1A6bfCBxan2PJacS6sxFLeZdBNXrica0uhW9Fj3ekknO8xGD4LXh60DxK+xy5ou6hQ==","signatures":[{"sig":"MEYCIQC18HJUJK3lfk9UmOeOBHjSnWlJ8MZUXSfheuX3FuPkowIhAKm/ReNfYAJ+uN1jOKybW8jMveScQv5BVBFLrNnKwtzV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":337587,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0saEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoWvxAAkne9AQxjsLtm9H+SLRF/DZulBdpbMSk5qFdzuZmwY1KFRfx5\r\nXrrd3OiAZXEwMIIG8ZYEw9LtUXikjFSGK5F59u80nwTgO463TJKuXEWHJpVy\r\nM9TzspF2v5QHs0Fnw7Uh9VG5+esQ+QkXhLu45Uyd5HDAHOcSe0lGilzoZKOV\r\nUtzEEbzu75rermNFetTCdzCagRfMRzmVOmb9WpKcxyDL/2C1NfK373/dKkIP\r\n9Og60uOdx32A3XwRwGxZPDBkC5B8b5rKsWYARLU7SAsztZQFT+w/+i1XYGf5\r\n75DCpkXEPQoFULBvzBPXH9Gz4A4pY0BdNnPjQiRxIGdDbKD1KKHUrjiAyvto\r\nBxStgPSzMvf/8VN35yg4EEKRQviJojhb0uPnuLUB5ho5FBlu3SwZ/XNjcouY\r\nxOCMHfzpC8ikA+MA0KMaz3rWbBpu1AScZLAkQp8XA8OIxRfdMBwM8ctTMAme\r\nu8xkQnKolrQrH12ObON/Ttg+PgWKqicgsrfhJcqFtLrY9THR0sdl1Um92yI2\r\nE6shfay+rvBl2yGndZ7CzzP9FxGDq6znXFP7S86EtMs5hahhfBkxvD/dPyOh\r\nQ9WFv3AqbIadhjL8/MU27//2TkgxNBd+VOwgm/2HO3M7KgaGhxr+6Ux8Y5Cz\r\nkoVvhg+I8sFKRbYlYb2xdaVsPwjlMPPxnV0=\r\n=ZL7O\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"d9f7d57226905e2c8a7f22765b30aa09b03a984e","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"9.2.0","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"19.4.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.15.0_1674757763956_0.06051800747485059","host":"s3://npm-registry-packages"}},"1.15.1":{"name":"node-red-contrib-hal2","version":"1.15.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.15.1","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"2e35a62a2701845d8b580363745f6ed2de9703ce","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.15.1.tgz","fileCount":36,"integrity":"sha512-GZ5F0e1gH4pCRkPQPefaYbF8YXXrrtpnbyUf/6Tq7BEjRSx9ktZ6dCz2m8Oom8zJrQVvb830IF6s+U95mL3pVQ==","signatures":[{"sig":"MEUCIDhtxj5w8394Ey9OcAdZGkracVFr4TWELjLw3fqtUA9vAiEAmztTj30rcBufQsr5SbBvB80pWz7oo+oWQ/x0LOsiAzY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":337142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj1UA6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq9dQ/+O9hO65z26EZNtaPSI8X64gKtp7quUrWAmv2E48AGArYRcBtm\r\nPN9yQpQVucMVce1iUe9bCANrkE++Bqx4M5wCg/nkVi239+vVMFqKBb84zlto\r\nKrofPJPa+j/CPHqEfPy9TGSoBNDi2PieKcxXjeJgWdWB5LBTfuAA28FjRiw3\r\nGaEgay+tbUmL41GKH9RdmWT+v2hK5+7O2sfmFP5bebeJQnBWB6AkC8uy1dPH\r\nVUMkQAtt1TFzpD1h8bUI33glvYbGhpjrQBIc7S4ePAm+DSIDZU90wmxy0YYF\r\n2bxxhAKaBw/O0R7d9kdVtDrrMiNGdq85xKAaGH0hOwkbbckWxd5cFnQ2cvUC\r\nZ5t+41Z49UbHs0ZDHWUO3oZcVtl7kv1uXMn2Vny579tegO9ROf/Jl42cGiHQ\r\nGUAXEZhaTuw/3NMbZ8pKk5rPOtxyXbcY4qAUCEKi827q21pUGSbnXHEa0CF+\r\nzeyNAczL+H5t476DWY2rKsnoN09hQOpDWyguS1iKe8nCSOeMDU3PoGuiGPgv\r\n0rKnJtBoj4SNscsxi4PCnj2fGk7ZGrxDbMVxnL7gU5jo10aychrmbLGsaDhV\r\nWRSmAOK9kVD8q4jb+O8c2rErFy/CJYPW+Zbj81KT1Kdaepy1ItzUZY+yRrgp\r\ncg6SyGCBxtJtan3jEq8unPYrU1sssvxqL98=\r\n=Vypd\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"3ecd662653b5d120ea960072dd74078db5fb14e0","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"9.2.0","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"19.4.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.15.1_1674919994664_0.8393069500328032","host":"s3://npm-registry-packages"}},"1.15.2":{"name":"node-red-contrib-hal2","version":"1.15.2","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@1.15.2","maintainers":[{"name":"frtnbach","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"b56e8270b163c54dc446c83f20153f41b669dec6","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-1.15.2.tgz","fileCount":36,"integrity":"sha512-+eSJgZBuqTxvXmm1hsWpAq2N9614Gcts/pmtHD2vz0Aw/Zjv2CtBFv9mBatQot8+gGWDz4iJO0h0RjimP2ECjA==","signatures":[{"sig":"MEUCIFjUqFRMBPJNqmczojb24Ccwrgn73zu9x8AtKAI+d7AzAiEAnl83ll78hIOuxS6OP3dQ/CiKLXjhic46NcHg+m3R9Tg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":338273,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkFui/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpAQhAAnVNmBh64cMFVC1f7QOu3kjbr/p9iAh0ke3df15ziQ6mBuBC9\r\nrnj0UHIyVXsD+wMofAbxnJZVuMRsh5aZTLlrEakpI7BhqEnhySswkMHDRRAg\r\n+KtSgaAjmVmDu6DrZzuvh2cDyUhSc+4gyj5myovbZGSGZK0X+c6DMbrxIe7n\r\nWj5gBrZB8Uh0yYHV3RpMAYSGELFpkHFKbeQvwkmbpT9hymRWL8K4RucYsUGk\r\neHLpEHBhrsp9hZqGQ2sjqrHjqzse0/76mwxjOyvwoNrB2RrfA3O7PIs+1LH2\r\nXi36xYKXhWXe0qhuagXa8lypxR2XaK+2Vrc6kq8blPy5PDFT/WpR3MkRBfiZ\r\n261kFeTwUNnC2upkhfCH+Js/miFXVTulIXaxUgHHdN0ps2OdwFy1YRZkGCVv\r\nVZCxEpEWEIguC+ALyC/oYaI+nX8wP/yDt91XzUFvM1wISlBi7EVa7+3uocUa\r\n1Gp/dktGA0u1u3kf/aEca8UfupaHNJW363Ef5VYUe/JV/Oi2aSDgCfGVqNYU\r\nu3gPlpNg/EXm8RAaCjq6g5Jj+3RemF+QgYqtaPhSzyQAVt0TknYjknBsAd1I\r\n8hIlJVnTTz3hzgzXGexs/TTSlrQrQCsfFZswNfHRUNhhvc16HABEB8C2Eacq\r\nTeQC2UZgZHO/PFbA6WFd3QDxQOobte9foHc=\r\n=WxPF\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">=14"},"gitHead":"63efc7e39e811c3886d645c1e2af4888fa57eceb","_npmUser":{"name":"frtnbach","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"9.4.0","description":"A set of nodes to help with basic home automation logic","directories":{},"_nodeVersion":"19.6.1","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_1.15.2_1679222975650_0.06458202378243394","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"node-red-contrib-hal2","version":"2.0.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@2.0.0","maintainers":[{"name":"fredrik_f","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"91bf1b4b508803f6bb8198bf0d233064fb8f9a01","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-2.0.0.tgz","fileCount":60,"integrity":"sha512-J5BqFGW1xeZvYXg4TiwAVInL5DX0OPfvX2cLlDfn6T4dCZ0TSSEaS3QgaJMfpY1kysKNER+tpROAX6/FUPScVQ==","signatures":[{"sig":"MEUCIDqRS9A5uOMjRCyrCb+64XLojeDrkGiMY1X1Qd8z0PjAAiEAs0PAzNx3uQgWUifJ8K7e0Zzu1JY2Ct5VIucQI1OcwbA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":805956},"engines":{"node":">=14"},"gitHead":"dee8973ef85927d4c1746a2495c3e168b26a514f","scripts":{"docs:api":"node scripts/gen-api-docs.js"},"_npmUser":{"name":"fredrik_f","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Api":"core/api.js","hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2MCPIn":"core/mcpin.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2MCPOut":"core/mcpout.js","hal2MCPServer":"core/mcpserver.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"11.11.1","description":"A set of nodes to help with basic home automation logic, now with MCP server support","directories":{},"_nodeVersion":"25.8.2","dependencies":{"jose":"^4.15.5"},"_hasShrinkwrap":false,"optionalDependencies":{"better-sqlite3":"^12.11.1"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_2.0.0_1782138069414_0.2925325831891903","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"node-red-contrib-hal2","version":"2.0.1","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@2.0.1","maintainers":[{"name":"fredrik_f","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"4e05c55577d48f857ca65009d1c2d59aadfc0314","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-2.0.1.tgz","fileCount":60,"integrity":"sha512-Gf/U3MF87yk+QqnfvV829r7UWu8zixAF2kPFEgWeWynBRzZNmg1XfexgX5Go4XgWsBrW1xDOpOrmK6bN0481Ag==","signatures":[{"sig":"MEQCIHYDmRcNYFQj0l4ZYZz8U1mvz6z3AwWKWUGj1h9C/QL6AiBa4r6dtyatRVaZsK6UogDkfi4wjJkreZF2SkqaINBepQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":806015},"engines":{"node":">=18"},"gitHead":"c5575686af4555634750eaadd81fffd534a65888","scripts":{"docs:api":"node scripts/gen-api-docs.js"},"_npmUser":{"name":"fredrik_f","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Api":"core/api.js","hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2MCPIn":"core/mcpin.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2MCPOut":"core/mcpout.js","hal2MCPServer":"core/mcpserver.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"11.11.1","description":"A set of nodes to help with basic home automation logic, now with MCP server support","directories":{},"_nodeVersion":"25.8.2","allowScripts":{"better-sqlite3@12.11.1":true},"dependencies":{"jose":"^6.2.3"},"_hasShrinkwrap":false,"optionalDependencies":{"better-sqlite3":"^12.11.1"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_2.0.1_1782210561954_0.37524735955478405","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"node-red-contrib-hal2","version":"2.3.0","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@2.3.0","maintainers":[{"name":"fredrik_f","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"fe067c50ca838587e2f84af3c84effb8d8f27809","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-2.3.0.tgz","fileCount":71,"integrity":"sha512-9O9IEj3jzIzyYlm7Ay3J6Vy9Oq4ac7P7d3GwZtTHau8e1cMpOHG75btB0+6d5UW7V8LvVfgdmFJ108LwYTEe/A==","signatures":[{"sig":"MEQCIFiSqFs+iLzfsd98TO5l1Qc9sT2A2LN5y4I68abb+bxFAiAVI11+P9Hz/JRP5bk+JqID9lu4FGiF3zl9OF3jYR+G4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":862272},"engines":{"node":">=20.19.0"},"gitHead":"7253055ca04e36083e7c71089c3dec55d8dcd52c","scripts":{"test":"mocha \"test/**/*.test.js\"","docs:api":"node scripts/gen-api-docs.js"},"_npmUser":{"name":"fredrik_f","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Api":"core/api.js","hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2MCPIn":"core/mcpin.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2MCPOut":"core/mcpout.js","hal2MCPServer":"core/mcpserver.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"11.11.1","description":"A set of nodes to help with basic home automation logic, now with MCP server support","directories":{},"_nodeVersion":"25.8.2","allowScripts":{"better-sqlite3@12.11.1":true},"dependencies":{"jose":"^6.2.3"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^10.7.3"},"optionalDependencies":{"better-sqlite3":"^12.11.1"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_2.3.0_1783666339328_0.9525334047414777","host":"s3://npm-registry-packages-npm-production"}},"2.4.2":{"name":"node-red-contrib-hal2","version":"2.4.2","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@2.4.2","maintainers":[{"name":"fredrik_f","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"0409fc1d610c005fbdf848752f4a5248c30ff210","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-2.4.2.tgz","fileCount":72,"integrity":"sha512-nAuRhWmkQc3TUEGCuQ7nKNSs4CELM560gph4aE0h4PlYC9q2i6o0DkuuLMP/NaWvddvJLuN6/cY9WHfkgTdRtg==","signatures":[{"sig":"MEQCID/6/P2bp2HRMXgWFG20uRF2RaTJe+LXyJ+1a/NUfc+mAiAZ0WU93XNu1hVc2Z5+hgJMPJLAi5N8hI6IbCs1WsIX9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":866857},"engines":{"node":">=20.19.0"},"gitHead":"e64e21b414e1563a1626a192f3561ff9bbea2d2e","scripts":{"test":"mocha \"test/**/*.test.js\"","docs:api":"node scripts/gen-api-docs.js","postpublish":"node --env-file=.env scripts/bsky-announce.js","test:announce":"node --env-file=.env scripts/bsky-announce.js"},"_npmUser":{"name":"fredrik_f","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Api":"core/api.js","hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2MCPIn":"core/mcpin.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2MCPOut":"core/mcpout.js","hal2MCPServer":"core/mcpserver.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"11.11.1","description":"A set of nodes to help with basic home automation logic, now with MCP server support","directories":{},"_nodeVersion":"25.8.2","allowScripts":{"better-sqlite3@12.11.1":true},"dependencies":{"jose":"^6.2.3","@atproto/api":"^0.20.34"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^10.7.3"},"optionalDependencies":{"better-sqlite3":"^12.11.1"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_2.4.2_1785245958917_0.1426242294234381","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"node-red-contrib-hal2","version":"3.0.5","keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","_id":"node-red-contrib-hal2@3.0.5","maintainers":[{"name":"fredrik_f","email":"fredrik@furtenbach.se"}],"homepage":"https://github.com/flic/node-red-contrib-hal2#readme","bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"dist":{"shasum":"ac1d3079da05bb57d9dfe596479e1f3d9bda4f88","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-3.0.5.tgz","fileCount":76,"integrity":"sha512-MonIcknsgBHZzUs2QSbjX8ZFtpxpCqAw92NUeoudfRW+hIRg/5cIGCRHED9Lcw/jdgIJ8rCa9PA3Jv3k4C12KA==","signatures":[{"sig":"MEYCIQDJl0M7du3QtC5VbS/bmcS2PAW+tl9vfxp38Fe+ma0LugIhALzRgaeHcN73VT5AZbrYKWL52+UNu7ljVgIRFjwphHhg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1244968},"engines":{"node":">=20.19.0"},"gitHead":"7c5dfa8aa4478bea2a75a32421960334624931d5","scripts":{"lint":"eslint core lib resources test scripts","test":"eslint core lib resources test scripts && mocha \"test/**/*.test.js\"","docs:api":"node scripts/gen-api-docs.js","postpublish":"node --env-file=.env scripts/bsky-announce.js","test:announce":"node --env-file=.env scripts/bsky-announce.js"},"_npmUser":{"name":"fredrik_f","email":"fredrik@furtenbach.se"},"node-red":{"nodes":{"hal2Api":"core/api.js","hal2Log":"core/log.js","hal2Gate":"core/gate.js","hal2Bayes":"core/bayes.js","hal2Event":"core/event.js","hal2Group":"core/group.js","hal2MCPIn":"core/mcpin.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Action":"core/action.js","hal2MCPOut":"core/mcpout.js","hal2MCPServer":"core/mcpserver.js","hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js"},"version":">=2.2.0"},"repository":{"url":"git+https://github.com/flic/node-red-contrib-hal2.git","type":"git"},"_npmVersion":"9.2.0","description":"A set of nodes to help with basic home automation logic, now with MCP server support","directories":{},"_nodeVersion":"20.19.2","allowScripts":{"better-sqlite3@12.11.1":true},"dependencies":{"jose":"^6.2.3","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^10.7.3","eslint":"^10.8.1","globals":"^17.11.0","@atproto/api":"^0.20.34"},"optionalDependencies":{"better-sqlite3":"^12.11.1"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-hal2_3.0.5_1788100976519_0.42286926493985666","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"node-red-contrib-hal2","version":"3.3.0","description":"A set of nodes to help with basic home automation logic, now with MCP server support","repository":{"type":"git","url":"git+https://github.com/flic/node-red-contrib-hal2.git"},"keywords":["node-red","home-automation","iot"],"author":{"name":"Fredrik Furtenbach"},"license":"ISC","scripts":{"docs:api":"node scripts/gen-api-docs.js","test":"eslint core lib resources test scripts && mocha \"test/**/*.test.js\"","postpublish":"node --env-file=.env scripts/bsky-announce.js","test:announce":"node --env-file=.env scripts/bsky-announce.js","lint":"eslint core lib resources test scripts"},"engines":{"node":">=20.19.0"},"bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"node-red":{"version":">=2.2.0","nodes":{"hal2ThingType":"core/thingtype.js","hal2EventHandler":"core/eventhandler.js","hal2Thing":"core/thing.js","hal2Value":"core/value.js","hal2Event":"core/event.js","hal2Gate":"core/gate.js","hal2Action":"core/action.js","hal2Group":"core/group.js","hal2Log":"core/log.js","hal2MCPIn":"core/mcpin.js","hal2MCPOut":"core/mcpout.js","hal2MCPServer":"core/mcpserver.js","hal2Api":"core/api.js","hal2Bayes":"core/bayes.js"}},"dependencies":{"jose":"^6.2.3","better-sqlite3":"^12.11.1"},"devDependencies":{"@atproto/api":"^0.20.34","eslint":"^10.8.1","globals":"^17.11.0","mocha":"^10.7.3"},"optionalDependencies":{"better-sqlite3":"^12.11.1"},"allowScripts":{"better-sqlite3@12.11.1":true},"gitHead":"b86c13b4badd669582c4d8c75bd6f816ee02cd75","homepage":"https://github.com/flic/node-red-contrib-hal2#readme","_id":"node-red-contrib-hal2@3.3.0","_nodeVersion":"20.19.2","_npmVersion":"9.2.0","dist":{"integrity":"sha512-fZZHNGEjuukkNjPOeM8+TashhEy/kMBfM3UTiPHZdHe8608JJMp+Xs1H6Z2epkhrs6muitbTbGvgKnSrlfX91g==","shasum":"dd76538c36c9e676e27c5c447def3f92fa42205b","tarball":"https://registry.npmjs.org/node-red-contrib-hal2/-/node-red-contrib-hal2-3.3.0.tgz","fileCount":77,"unpackedSize":1314349,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE6fNgVRPkRovU51PZ1i+icFlQoxCNXf6RHzoaxGG4yNAiEAsgeoG6sQMYytX5RkbUMiM3boJeHQGbs/MP0IBGEA9TQ="}]},"_npmUser":{"name":"fredrik_f","email":"fredrik@furtenbach.se"},"directories":{},"maintainers":[{"name":"fredrik_f","email":"fredrik@furtenbach.se"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-red-contrib-hal2_3.3.0_1788502294961_0.44899252171099313"},"_hasShrinkwrap":false}},"time":{"created":"2021-11-14T12:26:33.646Z","modified":"2026-09-04T06:11:35.303Z","1.0.0":"2021-11-14T12:26:33.826Z","1.0.1":"2021-11-14T14:24:03.530Z","1.0.2":"2021-11-19T09:31:11.229Z","1.1.0":"2021-12-23T20:11:00.750Z","1.2.0":"2021-12-25T13:18:47.941Z","1.2.1":"2021-12-28T12:58:17.457Z","1.3.0":"2021-12-28T18:04:28.449Z","1.4.0":"2021-12-29T10:23:25.429Z","1.4.1":"2022-01-01T16:17:03.917Z","1.5.0":"2022-01-02T10:44:30.151Z","1.5.1":"2022-01-02T10:54:39.906Z","1.5.2":"2022-01-03T08:01:30.917Z","1.6.0":"2022-01-04T15:14:19.011Z","1.6.1":"2022-01-05T07:40:03.362Z","1.7.0":"2022-01-06T12:24:20.225Z","1.7.1":"2022-01-07T11:43:37.268Z","1.8.0":"2022-01-08T17:14:21.523Z","1.8.1":"2022-01-09T13:10:56.645Z","1.9.0":"2022-01-09T17:19:53.520Z","1.9.1":"2022-01-09T17:33:06.788Z","1.9.2":"2022-01-12T07:40:19.430Z","1.9.3":"2022-01-14T12:22:00.860Z","1.9.4":"2022-01-22T11:54:26.230Z","1.9.5":"2022-02-03T17:50:08.957Z","1.9.6":"2022-02-03T17:56:04.545Z","1.9.7":"2022-02-03T18:15:11.285Z","1.9.8":"2022-02-05T14:55:29.808Z","1.9.9":"2022-02-10T07:48:09.987Z","1.9.10":"2022-02-20T11:42:01.034Z","1.9.11":"2022-04-13T08:05:42.546Z","1.10.0":"2022-04-16T11:11:23.987Z","1.10.1":"2022-04-16T12:04:54.969Z","1.10.2":"2022-04-16T17:52:47.189Z","1.10.3":"2022-04-17T10:30:29.666Z","1.11.0":"2022-05-16T18:45:27.196Z","1.11.1":"2022-05-16T19:19:48.514Z","1.12.0":"2022-05-25T14:47:08.018Z","1.13.0":"2022-06-12T11:48:31.267Z","1.14.0":"2022-06-26T14:36:01.215Z","1.14.1":"2022-07-02T07:59:12.394Z","1.14.2":"2022-07-03T17:16:18.943Z","1.14.3":"2022-07-06T14:49:05.733Z","1.14.4":"2022-07-10T17:04:02.695Z","1.14.5":"2022-08-12T07:19:38.093Z","1.15.0":"2023-01-26T18:29:24.095Z","1.15.1":"2023-01-28T15:33:14.848Z","1.15.2":"2023-03-19T10:49:35.791Z","2.0.0":"2026-06-22T14:21:09.597Z","2.0.1":"2026-06-23T10:29:22.163Z","2.3.0":"2026-07-10T06:52:19.566Z","2.4.2":"2026-07-28T13:39:19.079Z","3.0.5":"2026-08-30T14:42:56.738Z","3.3.0":"2026-09-04T06:11:35.110Z"},"bugs":{"url":"https://github.com/flic/node-red-contrib-hal2/issues"},"author":{"name":"Fredrik Furtenbach"},"license":"ISC","homepage":"https://github.com/flic/node-red-contrib-hal2#readme","keywords":["node-red","home-automation","iot"],"repository":{"type":"git","url":"git+https://github.com/flic/node-red-contrib-hal2.git"},"description":"A set of nodes to help with basic home automation logic, now with MCP server support","maintainers":[{"name":"fredrik_f","email":"fredrik@furtenbach.se"}],"readme":"# node-red-contrib-hal2 [![npm version](https://badge.fury.io/js/node-red-contrib-hal2.svg)](https://badge.fury.io/js/node-red-contrib-hal2)\nA set of nodes to help with basic home automation logic, with an optional MCP server so an AI\nassistant can read device state and control the house.\n\n> **Upgrading to 3.2?** `thing_id` and `thing_name` are now **`id`** and **`name`**, in parameters\n> and responses alike. Items keep `item_id` and `item_name`. This is not only the MCP tools — the\n> [JSON API](#json-api-hal2api) node calls the same tools, so your own HTTP callers need updating\n> too. A client working from an older answer will use the old names and match nothing, so start a\n> fresh conversation rather than debugging the miss. Also new: [rooms](#rooms), and a `name`\n> matching several things is refused rather than applied to all of them.\n>\n> **Upgrading to 3.1?** `set_light` no longer switches an undeclared `switch` item. A switch says\n> only that something can be turned on and off — the load could be a lamp or a coffee machine — so\n> a lamp behind a relay now needs `device_class: light` on its item, set under *Items* in the\n> Thing config. Until it has one, `set_light` answers `nothing_to_command` naming what the items\n> are, rather than reporting success and changing nothing. Items whose `ha_type` is already\n> `light`, `dimmer`, `color` or `color temperature` are unaffected, as are `control_device`,\n> `control_group` and every group you have built. See [device class](#device-class--what-an-item-drives).\n>\n> **Upgrading from 2.x?** 3.0.0 changed how the MCP server authenticates: it no longer takes part\n> in OAuth at all, and an access gate now reads the access token and nothing else. If you run the\n> MCP server, read [the breaking-change note](#mcp-server) before deploying — the gates go quiet\n> and refuse everyone if the claim they match on is missing from the token.\n\n## Install\n```bash\ncd ~/.node-red\nnpm install node-red-contrib-hal2\n```\n\n## What is it?\n**node-red-contrib-hal2** is a set of Node-RED nodes useful for creating home automation flows. The basic component is the Thing node, a virtual representation of a (usually) physical IoT device. This can then be used to trigger events, route traffic based on rules and more.\n\n![Example Items](https://user-images.githubusercontent.com/400673/168665494-db5c244e-6225-4ae0-beed-fab3131e1b0a.png)\n\n1. Store a device state in a **Thing node**\n2. Fire an event when the value changes using an **Event node**\n3. One or more rules will compare the value and that of other Items in a **Gate node**\n4. Output the value to another flow with a **Value node**\n5. Send device commands to multiple Things using an **Action node**\n6. Log changes using the **Log node**\n\n![Example automation flows](https://user-images.githubusercontent.com/400673/168665539-3984681b-5059-4ed6-b350-683a431841d8.png)\n\n**node-red-contrib-hal2** uses the Node-RED built-in context store to save device state. If you'd like for state to survive a Node-RED restart you'll need to save context data to the file system (default is memory-only). You can choose to save all Node-RED context data to disk or to create a separate context store just for your IoT devices. I would recommend a separate context store for this use. **node-red-contrib-hal2** lets you select which context store to use per thing type. Please take a look at the Node-RED documentation for [instructions on how to configure the context stores](https://nodered.org/docs/user-guide/context#context-stores).\n\n<img width=\"654\" alt=\"Screenshot 2023-03-19 11.16.03\" src=\"https://user-images.githubusercontent.com/400673/226168861-5af8042f-b8b3-4138-8996-ddb3d37f9d44.png\">\n\nTake a look at the example flows and Thing definitions in the https://github.com/flic/node-red-contrib-hal2/tree/main/examples folder for more information.\n\n![Example logging](https://user-images.githubusercontent.com/400673/168665807-aa3aba8f-8b06-4292-bcad-7374e508f59a.png)\n\n## Groups\n\nControl and observe several Things at once with **Groups**. A group's identity — name, HAType, value function and rate limit — lives in a registry on the **Event handler** (*Groups* tab), while membership is set per Item on each Thing (the *Groups* section of the Thing editor: pick an Item, pick a group). A group can then be used as a target in an **Action** node, broadcasting a command to every member paced by the rate limit. Each group in the registry has an **info button** that lists its current members.\n\n### A group's own value\n\nA group whose members carry state has a value of its own, which **Value**, **Gate**, **Event** and **Bayes** nodes can read exactly like an Item's — and **each of them chooses how**. The same members answer different questions: *any true* asks \"is a lamp on?\", *all true* asks \"did the command to turn them all on work?\", *count true* asks \"how many are on?\". Two Event nodes can therefore watch the same group for two different things, which one shared value could never do.\n\nWhat a group reports when nobody asks for anything in particular is **derived from its HAType** — a temperature group averages, a light or switch group answers *any true*. There is nothing to configure; a HAType with no natural summary (Other, the modes, colours) simply has no default, and the reading nodes each pick a function.\n\n| Function | Result |\n|---|---|\n| `latest` | the most recently updated member's value, whatever its type |\n| `min` / `max` | the lowest / highest value |\n| `average` / `median` / `sum` | the mean, the middle value, everything added up |\n| `range` | highest minus lowest — the spread across the group |\n| `any true` / `all true` | at least one / every member is `true` |\n| `any false` / `all false` | at least one member is `false` / none is `true` |\n| `count true` / `count false` | how many members are `true` / `false` — compare it in a Gate |\n| `percent true` | the share that are `true`, 0–100 |\n\nFour rules decide what goes into the calculation:\n\n- **Only members with a state.** A command-only Item has nothing to contribute; a group with none at all cannot be read.\n- **No offline members.** A device that has dropped off the network is left out rather than voting with the value it had before it went quiet — so `any true` goes false when the last reachable lamp disappears, instead of reporting a light that may well be dark.\n- **Only values of the right kind.** The numeric functions skip anything that is not a number (a boolean member never counts as 1), and the boolean functions are strict about `true` / `false` — hal2 normalises `ON`/`1` in the ThingType's ingress function, so by the time a state reaches a group it is a real boolean or it is not one at all.\n- **Nothing eligible means no value.** A group with no live member reporting reads as *undefined*, not `0` or `false`, so a silent group can never be mistaken for a real \"off\" in a Gate.\n\nA group behaves like an Item in every other respect: it emits on each member update carrying `state` and `laststate`, so an **Event** node's *only on change* filter works the same as it does for a Thing, and `msg.member` says which member moved it. A group's value is derived, so it is never written to the history database and a **Value** node can only read it — use an **Action** node to command a group.\n\nA group has a **HAType** that sets the command contract for its members, and a member has to be able to honour it: `Switch` and `Light` are interchangeable (both are boolean On/Off), but a `Dimmer` item does not join an On/Off group and a switch or light does not join a `Dimmer` group, since neither can honour the other's value. Where an Item carries a declared [device class](#device-class--what-an-item-drives), that is what the group's contract is matched against rather than its `ha_type` — a switch driving a socket is not a light however identical the two look from the protocol side. The Thing editor only offers compatible groups for each Item, and the Event handler only offers HATypes its existing members can all honour. For genuinely mixed groups there is an **Other** type that accepts any Item.\n\nA group with no stateful members stays exactly what it was: a command target, invisible to the reading nodes.\n\n### What a member can do\n\nAn Item reports a state, accepts commands, or both, and a group commonly exists for one of the two.\nNothing used to say which an Item was at the point where its groups are chosen, so a Zigbee2MQTT\nColor Light's `On` — which reports and takes no commands — could join a group built to command and\nmake up part of the member count and none of the reach. Nothing was wrong and nothing complained:\nthe group really did have one more member than it could command, and `control_group` reported\ntruthfully how many it reached.\n\nTwo things now say so. In the Thing editor, an Item that does not do both is marked **`· state\nonly`** or **`· command only`** beside its name. Doing both is the ordinary case and stays silent,\nso the row that needs a second look is the one that has something written on it. The Event\nhandler's group info button lists each member's capability in its own column, which is how to\naudit a group that is already built.\n\nA group can also refuse a kind of member outright. **Accepts** on the group — `[x] State`\n`[x] Command`, both ticked by default — says which kinds may join, and unticking one stops the\nThing editor offering that group to Items of the other kind. An Item that does both qualifies under\neither tick on its own, since it can serve as the group's reading or as its target. This is an\nadmission rule for the editor and nothing more: what a group reads and what it commands stays\nderived from the members it actually has, the runtime never consults the flags, and a membership\nthat no longer qualifies is **kept and marked**, not deleted — the group's summary counts them, and\nthe Item's row says which contract it fails. Both flags ticked is exactly the old behaviour, so\nevery group that predates the field is untouched.\n\n### Groups over MCP\n\nGroups are exposed to assistants as their own pair of tools rather than as parameters on the device\nones, because a group is not a device: it has no items, and reading it is not the inverse of writing\nit. **`get_groups`** returns every group with its value and how that value was computed;\n**`control_group`** sends one command to every member that can accept one, paced by the group's rate\nlimit. `get_all_states` carries the same group list alongside `devices`, so orientation takes one\ncall.\n\nThe asymmetry is the thing to hold on to, and the tools say it in as many words: reading a group\nuses its **state-capable** members, commanding it uses its **command-capable** ones, and either set\ncan be empty. A sensor group reads and cannot be commanded; a scene group is the reverse.\nCommanding never writes the value — the value follows from what the members report back.\n\n**The function is not fixed.** `get_groups` takes a `function` argument that computes a different\none from the same members for that call only — the same freedom the flow nodes have. The group's\nderived default is what `get_all_states` reports and what a call without a `function` returns; the\nreply names `configured_function` whenever the two differ, so an ad-hoc reading is never mistaken\nfor the group's own.\n\nA function that does not apply is **refused rather than answered**: asking a temperature group\nwhether all its members are true comes back as an error naming what the members hold and listing\nthe functions that fit. It does not come back as `false`, which is a claim about the group rather\nthan about the question. Partial coverage is a different matter and is answered: on a mixed group\n*average* uses the dimmers and ignores the on/off members, so the reply carries `used` beside\n`live` and a mean over 10 of 39 members can be read as what it is.\n\nA group is readable **as soon as it has members that carry state**. Command groups usually are:\nswitchable devices report back.\n\n**Every function is tracked, not just the default.** The engine keeps a record per function the\ngroup's HAType can serve, so `last_change` and `last_update` are that function's own — a Gate can\nask \"has *all true* been steady for ten minutes?\" and get a real answer. Deriving them from the\nmembers instead would be wrong for `min`, `max` and `any true`, where a member can change without\nmoving the value at all: on a nine-sensor group the derived answer was 26 minutes off.\n\nWhere one member owns the value — `latest`, `min`, `max` — the reply names it as `source`, so \"the\ncoldest room is the laundry\" is one read. A mean or a count belongs to nobody and carries no\n`source` rather than an arbitrary one. `last_changed_by` names the member that last moved the\nvalue, which is a different question and only the same one for `latest`.\n\nGive a group **Tags** and **Notes** on the Groups tab and both reach the assistant. This is worth\ndoing: the name is usually all it has to go on, and \"All lights\" does not say whether the outdoor\nlights are in it. A note does, and `get_groups` takes a `tag` filter so the assistant can ask for\nexactly the set it means.\n\nGroups replace the old standalone `hal2Group` node. Existing flows keep working — the Event handler folds legacy group nodes in automatically, though they are command-only until migrated — but you should run `node tools/migrate-groups.js <flows.json>` to make the move permanent and then remove the deprecated nodes. The migration preserves group ids, so existing Action/Event references keep resolving untouched.\n\n## AI & external control\n\nBeyond local automation, hal2 can expose your devices to AI assistants and external systems. The **Event handler** can run a built-in [MCP](https://modelcontextprotocol.io) server, you can define your own AI tools as flows, and the **hal2Api** node offers a plain JSON gateway. All three share one tool catalog, so there is a single source of truth.\n\n### MCP server\n\n> **Breaking change in 3.0.0 — the server reads the token, and nothing else.** hal2 no\n> longer takes part in OAuth at all: the dynamic client registration shim, the\n> authorization-server metadata routes and the `Client ID`/`Client secret` fields are gone,\n> along with the `/userinfo` call that used to fetch group membership on every request.\n> What remains is verifying the access token and reading its claims.\n>\n> **Migration.** Register each MCP client at your identity provider — or point it at a\n> Client ID Metadata Document, if the provider resolves those — instead of letting it\n> self-register here; a client that self-registered before the upgrade should be removed\n> and re-added. Then make sure the claim the access gates match on (`Access claim`, default\n> `groups`) is in the **access token** and not only in the ID token or userinfo. If your\n> provider cannot put it there — [PocketID currently\n> cannot](https://github.com/pocket-id/pocket-id/issues/1389) — leave *Read tools* and\n> *Write tools* empty and gate on [required scopes](#the-client-axis-required-scopes) plus\n> the provider's own per-client user restrictions instead. A gate whose claim never appears\n> refuses everyone, and says so in the log once per client.\n\nThe **hal2EventHandler** config node can run an embedded **MCP (Model Context Protocol) server**, letting an AI assistant such as Claude read device state and control your home in natural language. Enable it on the *MCP* tab of the Event handler. The server is **OAuth 2.0 protected and works with any standard OIDC identity provider** (its real endpoints are auto-discovered — see [Authentication & reverse proxy](#authentication--reverse-proxy)), carries a per-location identifier (e.g. \"Home\" / \"Cabin\") so an assistant connected to several homes can tell them apart, and supports a local debug token for development. Experimental.\n\nIt ships with a catalog of built-in tools:\n\n- **Read** — `get_all_states`, `get_state`, `get_history`, `get_scenes`, `get_presence`, `get_alerts`, `get_groups`, `analyze_patterns`\n- **Write** — `set_light`, `control_device`, `control_fan`, `control_cover`, `control_spa`, `control_climate`, `activate_scene`, `control_group`\n- **Admin** (opt-in) — `get_flow`, `deploy_flow`\n\nThose three classes are also the unit of [access control](#access-control): a token can be allowed to read the house without being allowed to change it.\n\nTools are exposed only when matching hardware is configured at that location — a server with no covers won't advertise `control_cover`. Things and Items can carry free-text **notes** and **tags**, and devices report derived **categories** (light, fan, cover, climate, spa, scene), all of which help the assistant pick the right device. Full parameters and examples are in **[docs/API.md](docs/API.md)**.\n\n### Access control\n\nTools are gated on the **claims in the caller's verified access token**, so one MCP endpoint can serve several people at different privilege levels. A gate is a **claim name** plus a **value list**: the values are comma-separated and matched **any-of** — an array claim must *contain* at least one of them, a scalar claim must *equal* one. An **empty list is no constraint**, which is the default everywhere, so an existing setup keeps behaving exactly as before.\n\nOn the Event handler's *MCP* tab, one **Access claim** (default `groups`) carries three lists, checked with **AND**:\n\n| Gate | Covers | Default |\n|---|---|---|\n| **Read tools** | `get_all_states`, `get_state`, `get_history`, `get_scenes`, `get_presence`, `get_alerts`, `get_groups`, `analyze_patterns` | empty — any authenticated caller |\n| **Write tools** | `set_light`, `control_device`, `control_fan`, `control_cover`, `control_spa`, `control_climate`, `activate_scene`, `control_group` | empty — same as read |\n| **Admin tools** | `get_flow`, `deploy_flow` (and only when *Enable Node-RED admin tools* is on) | `admin` |\n\nThe read list is the floor: a caller who fails it reaches nothing at all. Writes are checked **on top of** it, so `Read tools = family`, `Write tools = ops` gives the whole household visibility while only ops can switch anything. A tool that is in neither set — a future addition, or the undocumented `control_light` alias of `set_light` — is treated as a **write**, so an unclassified tool fails closed rather than slipping through.\n\n### The client axis: required scopes\n\nThe lists above answer *what may this user do*. **Read scope** and **Write scope** answer a different question — *what is this client authorized to do on the user's behalf* — and the two are checked with **AND**.\n\nThe distinction matters because they are not interchangeable. A group says who is at the keyboard; a scope says how much of that person's authority they delegated to the software holding the token. Collapse them into one field and only one gets consulted: a client granted a read-only scope, driven by someone who may write, would write. The client's grant has to bound the user's rights, not be ignored — that is what delegation means.\n\nRequired scopes are added to `scopes_supported` automatically, so there is nothing to repeat in the scopes field and no way to demand a scope that clients are never told to request; they are also named in the `WWW-Authenticate` challenge on a 401, which spec-following clients treat as authoritative.\n\nThe scope claim is read the way OAuth defines it ([RFC 6749 §3.3](https://datatracker.ietf.org/doc/html/rfc6749#section-3.3)): a space-delimited string, or an array if your provider sends one. The claim name is not configurable because it is standardised ([RFC 9068](https://datatracker.ietf.org/doc/html/rfc9068)); `scp` is read as a fallback for Microsoft Entra and Okta. The fields themselves are comma-separated any-of lists like the ones above. Empty means no constraint, so an install that never fills them in is unaffected; a configured scope the token does not carry is refused, including when the token has no scope claim at all.\n\nProviders that model APIs as resources — Pocket ID, Auth0 — are where this earns its keep: the IdP grants a client access to the MCP server's resource with a specific set of scopes, and this is where the server enforces what it was handed.\n\nTwo further gates layer on the custom-tool side:\n\n- **Standalone-server gate** (`hal2MCPServer` in *Standalone* mode, `Required claim`/`Required value`): gates a whole standalone MCP server and its own claim name, independent of the Event handler's.\n- **Per-tool gate** (`hal2MCPIn`, `Tool access`): narrows a single tool further, checked on top of its server's list.\n\nCallers who fail a gate still connect — `initialize` succeeds — but the tools they cannot use are **absent from `tools/list`**, so an assistant is never offered a tool it will then be refused. A direct call to a hidden tool comes back as an MCP tool result with `isError: true` and a human-readable reason, so the model is told *why* rather than getting a generic \"tool execution failed\".\n\n> The gates apply to the **MCP surface only**, where claims are cryptographically verified. The `hal2Api` node reads `msg.claims` off the message, which any flow can set, so gating it would be decoration rather than a boundary; it keeps its own local *Allow admin tools* checkbox instead.\n>\n> **Nested claims** are addressed with a dotted path, for providers that don't put roles at the top level of the token: `realm_access.roles` reads Keycloak's realm roles, and any depth works. A key that exists literally always wins, so PocketID's flat `groups` is unaffected. Only strings and arrays of strings match — pointing the claim at a container object grants nothing rather than matching by accident.\n\n### Hostname filtering\n\nOff by default. When **Only serve requests for this hostname** is enabled on the Event handler, its MCP routes only answer requests whose `Host` header matches the hostname in the *MCP server URL*. This lets several Event handlers share the *same* paths (e.g. `/mcp`) on one Node-RED instance, each answering only its own virtual host — useful when one backend fronts several homes on different hostnames. Standalone `hal2MCPServer` nodes inherit the setting from their Event handler. Leave it off for a single server, or when a reverse proxy rewrites the `Host` header.\n\n### Authentication & reverse proxy\n\nThe MCP server advertises itself as a **protected resource** and points clients at your identity provider. It does **not** run its own login, and since 3.0.0 it no longer pretends to be an authorization server either.\n\n**Routes to expose through your reverse proxy.** With the default (empty) *HTTP path prefix*, the Event handler registers these on the public *MCP server URL* — all must be reachable from the MCP client:\n\n| Method & path | Purpose |\n|---|---|\n| `POST /mcp` | The JSON-RPC MCP endpoint (bearer-token protected) |\n| `GET /.well-known/oauth-protected-resource` | Resource metadata (RFC 9728) — points the client at the auth server |\n| `GET /.well-known/oauth-protected-resource/mcp` | Same metadata, path-inserted form some clients probe |\n\n**This server is a resource server, and nothing else.** It runs no login, holds no client credentials and performs no OAuth flow. It publishes [RFC 9728](https://datatracker.ietf.org/doc/html/rfc9728) protected-resource metadata naming your identity provider, and clients go there directly — with a [Client ID Metadata Document](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-client-id-metadata-document-01) or a pre-registered client ID. Dynamic client registration is deprecated by MCP 2026-07-28 and, as of 3.0.0, is no longer offered here.\n\n**A request is authenticated by the access token alone.** The signature is checked against the provider's JWKS, the issuer is pinned to the discovered provider, expiry is enforced, and the audience must name this server — the MCP endpoint's URL, which is what MCP requires clients to ask for ([RFC 8707](https://www.rfc-editor.org/rfc/rfc8707.html)) and what a provider puts in `aud` for an API.\n\nThere is no second call. Nothing is fetched from `/userinfo`: that endpoint serves a client asking about its own user ([OIDC Core §5.3](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo)), not a resource server asking about a token, and a provider may refuse it once the token is bound to this server. **Everything the access gates read must therefore be in the token** — see [RFC 9068 §2.2.3.1](https://www.rfc-editor.org/rfc/rfc9068.html), which is where an authorization server is told to put `groups`, `roles` and `entitlements`. A provider that keeps them in the ID token or userinfo alone will leave the claim gate with nothing to match, and the log will say so, once per client.\n\nEach **standalone** `hal2MCPServer` node adds one more endpoint, `POST /mcp/<path>` (e.g. `/mcp/jellyfin`), sharing the same auth. Setting an *HTTP path prefix* shifts every route under it (`/prefix/mcp`, `/prefix/.well-known/…`), so update the proxy to match.\n\n> **Allowlist these paths — don't blanket-proxy everything to Node-RED.** hal2's MCP routes live on Node-RED's shared HTTP server, alongside the flow editor, admin API and any other `http in` endpoints. A catch-all proxy would put *all* of those on the public hostname; hal2 forwards anything it doesn't own to Node-RED, so you can't know what else would be exposed. Route only the specific paths below.\n\nExample with **[Caddy](https://caddyserver.com/)** via [caddy-docker-proxy](https://github.com/lucaslorentz/caddy-docker-proxy) labels (default prefix; drop the `/mcp/*` line if you run no standalone servers):\n\n```yaml\nlabels:\n  caddy_1: mcp.example.com\n  caddy_1.reverse_proxy_0: /mcp \"{{upstreams 1880}}\"\n  caddy_1.reverse_proxy_1: /mcp/* \"{{upstreams 1880}}\"\n  caddy_1.reverse_proxy_2: /.well-known/oauth-protected-resource \"{{upstreams 1880}}\"\n  caddy_1.reverse_proxy_3: /.well-known/oauth-protected-resource/mcp \"{{upstreams 1880}}\"\n```\n\n`/mcp` (exact) and `/mcp/*` are deliberately **separate** matchers — in Caddy `/mcp/*` does *not* match the bare `/mcp`. To serve several MCP servers on different hostnames from one backend, give each its own `caddy_N` site block and enable [hostname filtering](#hostname-filtering).\n\n**What hal2 expects of the identity provider:**\n\n- An **OIDC provider with discovery** — hal2 reads `‹issuer›/.well-known/openid-configuration`, and needs exactly two things from it: `jwks_uri`, to verify signatures, and `issuer`, to pin them. (It also notes `client_id_metadata_document_supported`, to decide whether a metadata-document URL may appear as a token's audience.) The authorization and token endpoints are the client's business, not hal2's. If discovery is unavailable it falls back to PocketID's path layout, so no extra config is needed for either.\n- It must issue **JWT access tokens** signed with a key published on its **JWKS** (hal2 verifies tokens locally). Providers that issue *opaque* access tokens are not supported (no introspection path yet).\n- A **public client** with **PKCE (S256)**, grant types `authorization_code` + `refresh_token`, and the MCP client's **redirect URI(s)** whitelisted (for Claude.ai: `https://claude.ai/api/mcp/auth_callback`) — or CIMD support, which supplies all of that from the client's own metadata document. Clients, redirect URIs and secrets are entirely the provider's business; hal2 has no fields for any of them and never sees a redirect.\n- The **access claim in the access token**, if you use the claim gate — the token is all hal2 reads. See [RFC 9068 §2.2.3.1](https://www.rfc-editor.org/rfc/rfc9068.html).\n\n> Tested with the combination **[Caddy](https://caddyserver.com/)** (reverse proxy) + **[PocketID](https://pocket-id.org)** (identity provider) + **Claude.ai** and **Hermes** (MCP clients). Any spec-compliant OIDC provider issuing JWT access tokens, behind any reverse proxy that forwards the paths above, should work the same way.\n\n### Rooms\n\nWhich room a device is in was carried by a naming convention — \"Vardagsrum Taklampa\" — that nothing\nenforced and nothing could read. **Rooms** are a registry on the Event handler (its own tab); a\nThing picks one, and `get_all_states` then reports `room` as a field and accepts it as an exact\nfilter. Having no room is a complete answer, not a gap: a scene is nowhere, and so is a person.\n\nThe room is a **separate parameter everywhere it is addressed**, and composed only where it is\ndisplayed. `set_light(name: \"Taklampa\", room: \"Kontor\")` — not a composed string that has to be\nparsed back, which would only be the naming convention again, generated instead of typed. In the\neditor, where a human has to pick one Thing out of a flat list, the canvas label and every Thing\ndropdown read **`[Kontor] Taklampa`**; the brackets say the string was assembled from two fields\nrather than typed by someone.\n\n> **A name that matches several things is refused, not fanned out.** `set_light(name: \"Taklampa\")`\n> used to command every ceiling lamp in the house — five devices from one substring match. It now\n> answers `ambiguous_name` listing the candidates with their rooms, so adding `room` picks one.\n> That refusal is what makes a short name safe, and it applies to `get_state`, `get_history` and\n> every `control_*` tool. A name spanning both — `\"Tvättstuga Golvspot\"`, or the bracketed form the\n> editor shows — resolves on its own, so nobody has to take the displayed name apart before using\n> it. That is a fallback tried only after the bare name finds nothing, so it can never turn a\n> refusal into a guess.\n\nA Thing's name has to be unique **within its room**, not across the house — two ceiling lamps may\nboth be `Golvspot` as long as they are in different rooms, which is the rename rooms exist to make\npossible. Two Things with no room still collide: there the name is all there is.\n\nThe room reaches flows too, not only the tools. The `thing` block a Thing puts on the bus — what a\n**Value** or **Event** node passes on, and what a group's emission names as the member that moved it\n— carries `room` alongside `name` and `id`. It is the room's **name**, not the registry id it is\nstored as, and the key is absent when the Thing has no room. Without it a flow downstream sees two\nthings called `Golvspot` and has nothing to tell them apart, which is the problem rooms exist to\nsolve.\n\n`get_presence` reports `current_room` — where a person is *now*, which is not the same thing as the\nroom a device was installed in, and no longer shares a key with it.\n\n### Device class — what an item drives\n\n`ha_type` says *how to speak to an item*: switch, dimmer, cover. An assistant reads it as *what\nthe item is*, and for most devices the two coincide — a bulb is a `light`. They come apart at a\nrelay. A Matter Metered Plug driving the coffee machine and one driving the ceiling lamp are the\nsame Thing type with the same `switch` item, so the type cannot answer the question; only the\nThing can.\n\n**Device class** is where the Thing answers it, per item, under *Items* in the Thing config —\nwhich lists **every** item of the type, always, with its group memberships collapsed beneath it.\nNothing has to be added before the list tells you something: the question it answers is \"what does\nthis item present as\", and a list you must add a row to first cannot answer it. One control per\nitem, so an item cannot be declared twice.\n\nThe control appears only on a **`switch`** item, because that is the only ha_type that leaves the\nquestion open — a `light`, `dimmer`, `cover` or `fan` item already says what it is.\n\n| class | what it buys |\n|---|---|\n| `light` | `set_light` switches it, and it answers a query for lights |\n| `fan` | `control_fan` drives it — a switch is a fan with two settings instead of four, so speed 0 is off and anything above it is on |\n| `outlet` | a socket whose load changes: a tree in December, a fan in July. Its own class because \"turn off all the outlets\" needs the set to be findable |\n| `appliance` | a fixed device that is none of the above — the coffee machine says so rather than staying silent |\n\nA class is worth offering only where something can act on it once declared, which is why\n`climate`, `spa`, `cover` and `scene` are absent: their tools dispatch on setpoint, mode, position\nand scene item types, none of which a relay has, so declaring one would advertise a capability\nnothing could honour. A radiator on a switch is an `appliance`, and `control_device` commands it.\n\n`outlet` and `appliance` are categories with no ha_type of their own — nothing about a relay says\nwhich it is — so a declared one appears in `categories` and answers `get_all_states(ha_type: …)`\nlike any other. Tool exposure follows what a tool can actually write, not the mere presence of a\nclass, so a declaration never advertises a tool that would then do nothing.\nThe vocabulary is the device categories (`light`, `fan`, `cover`, `climate`, `spa`, `scene`) plus\n`appliance` for \"explicitly none of these\" — a plug on the coffee machine says so, rather than\nstaying silent, and the difference between *unclassified* and *classified as not a light* is one\nan assistant can act on.\n\nNothing needs declaring where the `ha_type` already settles it. Each row states, read-only beside\nthe control, what the item **counts as** when the device is categorised — `counts as light` for a\n`light` or a `dimmer` — so the Thing type never has to be opened to find out, and a row that states\nnothing is exactly the gap a declaration fills. It says *counts as* rather than *drives*, because\nthat is all the rule claims: a `dimmer` is not itself a lamp, it is part of what makes the device\none. There is deliberately no Thing-type default either; a default there would be a hidden layer\nyou cannot judge from the Thing.\n\nThe class is **added to** the `ha_type`, never replacing it: `ha_type` still drives value semantics,\nso a dimmer keeps its brightness. What changes is discovery — `get_all_states` reports the derived\n`categories`, the `ha_type: \"light\"` filter matches a declared light behind a switch, and\n`set_light` is offered at a location whose only lamps sit behind relays.\n\nA declared class also decides which groups an item may join: a `switch` driving a socket looks\nidentical to one driving a lamp from the protocol side, so before this it sat in \"all lights\" and\nwas cut whenever the lights went out. Once declared, the class is what a group's contract is\nmatched against, and an existing membership it contradicts is marked in the row rather than\nremoved. The group engine itself still commands whatever is stored — a group is a curated list, and\nthe editor is where the contradiction is caught.\n\nA group's type is its command contract, and `device_class` is what let it become one. A `light`\ngroup takes a boolean and holds On/Off items; a `dimmer` group takes 0–100 and holds brightness\nitems. A dimmable lamp belongs to both — through its On item and its brightness item respectively.\nTwo older allowances are gone with this: an untyped item is no longer a wildcard that could join\nany typed group, and a dimmer can no longer join an On/Off group. Both existed only because there\nwas no way to say what an item was for. An existing membership that no longer fits is kept and\nmarked in the row rather than dropped, so tightening the rule cannot delete data quietly.\n\n> **`set_light` only switches what is a light.** An `ha_type` of `light` says so on its own; a\n> `switch` needs `device_class: light`, because a switch says only that something can be turned on\n> and off and the load could be a coffee machine. An undeclared switch is therefore not written —\n> before device_class every switch was treated as a light, since there was no way to tell them\n> apart. And a Thing that matched but took no command now answers `nothing_to_command`, listing\n> what its items are, rather than reporting success and changing nothing.\n\n### Custom MCP tools (hal2MCPIn / hal2MCPOut)\n\nYou can define your own MCP tools as Node-RED flows: a **hal2MCPIn** node registers a tool and fires a message when the assistant calls it, and a **hal2MCPOut** node returns the result. Responses can be text or image/media content, so a tool can return e.g. a camera snapshot. For a fully standalone setup there is also a **hal2MCPServer** node. See `examples/jellyfin-mcp.json` for a worked example.\n\n### JSON API (hal2Api)\n\nThe **hal2Api** node turns the same tool catalog into a simple JSON request/response gateway, so external components can query device state and control devices without speaking MCP. Wire it behind an `http in`, MQTT, or any node that produces a JSON message:\n\n```json\n// in:  msg.payload\n{ \"tool\": \"get_state\", \"args\": { \"name\": \"kitchen\" } }\n\n// out: msg.payload\n{ \"ok\": true, \"result\": { \"id\": \"…\", \"items\": [ … ] } }\n```\n\n**Which endpoint it speaks for** is set by the *Standalone* field. Left empty, the node serves the Event handler's own embedded catalog — the built-in tools plus any `hal2MCPIn` tools registered against it. Point it at a `hal2MCPServer` node instead and it serves that server's tools and nothing else, exactly as an MCP client connecting to that server's URL would see.\n\nSend `{ \"list\": true }` instead of a tool name to get the catalogue of whichever endpoint the node speaks for — `{ name, description, inputSchema }` per tool, the shape `tools/list` returns. For the built-in tools **[docs/API.md](docs/API.md)** (auto-generated, `npm run docs:api`) is the fuller reference; for your own `hal2MCPIn` tools the listing is usually the only index there is.\n\n**Access control does not apply on this path.** The claim and scope gates run on the MCP server's HTTP route, where the token behind them was verified. A flow node is already inside the trust boundary — whoever can edit flows can edit the tool — so a tool restricted to certain callers over MCP is still callable here, and the listing shows it. Don't use hal2Api to re-expose a gated tool to an outside caller; that gate is yours to reproduce. Admin tools (`get_flow`, `deploy_flow`) are the exception and keep the route's rule: enabled on the server, *Allow admin tools* enabled on this node, **and** an admin claim on `msg.claims`.\n\nSee `examples/json-api.json` for a ready-made HTTP endpoint flow.\n\n## History & pattern analysis\n\nItems can opt in to **history logging**: when enabled on the Event handler (and per Item), value changes are stored in a local **SQLite** database with a configurable retention period. History requires the optional `better-sqlite3` package — install it with `npm install better-sqlite3` in your Node-RED user directory. Without it, history simply stays off and nothing breaks.\n\nHistory powers two tools:\n\n- **`get_history`** — fetch logged values for an Item over a flexible time window: a rolling `hours` count, an explicit `from`/`to` range, or a point-in-time `at` lookup (\"what was it at 08:00?\"), with `offset`/`limit` paging.\n- **`analyze_patterns`** — scans the history to surface recurring routines, e.g. *\"Living Room Light turns on around 07:30, 85% consistent\"*, so you can spot automations worth creating.\n\n## Bayes node\n\n`hal2Bayes` estimates something you cannot measure directly — typically *\"is this person\nhome?\"* — by weighing up several unreliable sensors instead of trusting any single one. A phone\npresence sensor that already reports \"home\" from the street corner is not enough on its own;\ncombined with the front door opening and closing and movement in the hallway, it becomes\nconvincing. The node is an anonymous estimator: it knows nothing about people, it just fuses\nevidence. Use one node per hypothesis (one per person) and wire its output onward like any\nother message — e.g. into a Scene-type sensor representing the person.\n\n### Comparing against another source\n\n**in range / outside range** match while a reading sits between two bounds, or while it does not.\nAvailable in hal2Event, hal2Gate and hal2Bayes. Inclusive at both ends, so a reading exactly on a\nbound is *in* the range, and the order is not significant — 20 to 24 and 24 to 20 name the same\nband. Both bounds are typed beside the operator, which is also why they are two operators rather\nthan one with an inside/outside switch: the pair already occupies the space a switch would have\nwanted, and the operator itself says what is being asked of it.\n\nA bound left empty makes **both** operators match nothing. That takes a little care, because\n`Number('')` is `0` rather than `NaN` — read naively, an empty upper bound would turn \"in range 20\nto \\_\\_\" into the band 0–20 and match things nobody asked for. `rangeBounds()` in `lib/rules.js` is\nthe one place that reads a pair of bounds, and it treats blank as NaN so a half-filled rule stays\nquiet.\n\nPaired with hal2Event's `trigger true/false` output, *in range* expresses a comfort band directly:\n`true` on the way in, `false` on the way out, whichever side you leave by.\n\nEvery comparison in hal2Gate, hal2Event and hal2Bayes normally weighs a source against a\n**constant** — a number, a string, or a variable. Pick the **state** value type instead and the\nright-hand side is another live reading: another Thing's Item, or a Group with a function of its own.\n\nThis is worth more than the convenience. The alternative was storing one side in a flow variable\nand comparing against that, which samples the two sides at different moments: something changes,\nthe variable has not caught up, and the comparison is silently wrong until it corrects itself. With\n`state` both sides are read in the same pass, so the window does not exist. \"Is everyone who is\nhome asleep?\" becomes one rule — *people home* `count true` **==** *phones charging* `count true` —\nwith nothing stored in between.\n\nThe right-hand side is described the same way everywhere: a source, and an item or group function.\nIt is offered wherever comparing two values makes sense, so not for *is true*/*is false*, *regex*,\nor the Gate's `last_*` operators, which compare against a duration. A source that cannot be read —\na deleted Thing, a group with no live member — makes the rule not match rather than comparing\nagainst nothing.\n\n### Rules\n\nEach rule collapses to a single line stating what it says and what it does about it — the same\nphrasing `bayes-label.js` gives the snapshot on output 2, so a rule reads the same on screen as it\ndoes in the debug panel — and opens when clicked. A dozen controls per rule is unreadable as a\nlist; one sentence per rule is not.\n\nEverything is a **rule**, built from steps. Each step names a source and a condition, then says\n*when* that condition has to hold. A source is normally a **thing** item, but it can also be a\n**flow**, **global** or **env** variable — for facts that live elsewhere in the flow, such as\n\"the calendar says we are away\" or \"guest mode is on\" — or a **time** window.\n\n- **now** — a condition, true at that instant (*and…*)\n- **now or soon** — the same, but it waits for the condition until the window runs out; for\n  sensors that report late (*and…*)\n- **for a while** — a condition that must have been continuously true for its own duration\n  before it counts. This is what separates a trip to the bathroom from getting up for the day:\n  the reading is identical at the moment it happens, and only time tells them apart. The clock\n  restarts whenever the condition drops, so a string of short absences never adds up to a long\n  one, and it survives a restart because the edge is persisted with the rest of the state.\n  It has a window as well, and the window bounds when the hold is *reached* — so the condition\n  has to go true a whole hold-length before the window runs out, and the step's read-back line\n  does that subtraction (*and…*)\n- **on change** — an event: the condition must actually turn true, being already true does\n  not count (*then…*)\n- **on a full cycle** — a cycle: true and back to false within its limit, e.g. a door opening\n  and closing (*then…*)\n\nA rule whose steps are **all conditions** is not a sequence but an **AND**: its weight applies for\nas long as every one of them holds at the same time. \"While it is 09:00–10:00 *and* the terrace is\nabove 100 lux\" is one weight with two conditions. A rule that opens with a condition but waits for\nan event later cannot work — nothing completes that first step — and the editor says so on the\nrule; in the snapshot it reads as `never-fires`.\n\nTiming sits on a second line under a step, only where it applies: *within N s of the previous\nstep* is how long that step has to happen, and *stays on for at most N s* is how long a cycle may\nstay true — a door held open longer than that is not a pass-through, so the rule does not advance.\nIn an AND there is no previous step to be soon after, so no window is shown.\n\nA **time** source is a window of the day rather than a sensor: start and end in 24-hour format\nplus the weekdays it applies on. It may cross midnight (22:00–06:00), start is inclusive and end\nexclusive, and a window whose start equals its end is never active. The weekday is **the day it\nis right now** — with 22:00–06:00 on Mon–Fri, Tuesday 02:00 counts but Saturday 02:00 does not,\neven though that is Friday night. The value is simply \"inside the window or not\", so the\ncondition reads *inside* / *outside* and one window covers both \"during the night\" and \"outside\nworking hours\". Times follow the server's local clock, DST included.\n\n**flow, global, env and time can only be conditions** — *now* or *now or soon*. Only a\nthing is subscribed to, so these are read when the node evaluates rather than pushed when they\nchange; an edge qualifier on one could only be sampled on the tick and would miss anything\nfaster. The same polling means such a rule — including a time boundary — takes effect within one\ntick (30 s by default), not on the second. And `flow`/`global` survive a restart only when the\ncontext store is file-backed; the default is memory.\n\nA rule that is a single *now* step is **continuous** (*While…*): it pushes the estimate while its\ncondition holds and stops the moment it does not. Any other rule is **momentary** (*When…\nthen…*): the steps must happen in order, each event within its time window, and completing the\nlast step gives a one-off push that then fades. An event that happened while the previous step\nwas still in progress also counts, so motion while the door stood open is accepted when it\ncloses.\n\n**Put the event first and the conditions after.** Trigger on what actually happens at a point\nin time — usually the door — and use a condition step to ask what was true at that moment:\n\n> *When the front door is true, on a full cycle — and iPhone Fredrik is true, now →\n> makes it true, decisive*\n\nWritten this way the rule does not care whether the phone appeared thirty seconds or thirty\nminutes earlier, and it never fires for somebody else's arrival, because their phone is not\nhere — the identity check falls out of the condition, with no special logic. If that sensor is\nslow to report, *now or soon* makes the step wait rather than fail. Only a step that needs the\n*change* itself — leaving — uses *on change*:\n\n> *When the front door on a full cycle, then iPhone Fredrik is false, on change, within\n> 5 min → makes it false, certain*\n\n### Strengths and the share scale\n\nEach rule pushes toward true or false with a word strength — **slight** (LR 1.5), **moderate**\n(3), **strong** (10), **decisive** (30), **certain** (400). The editor shows every rule as a\n*share of the way* from the prior to the threshold the node can actually cross, and shares add\nexactly: 74 % + 35 % =\n109 % turns the output on. This is also how shared sensors are disambiguated without any\nspecial logic: give the door/motion arrival rule a share too small to cross the line alone, so\nit only matters together with the node's own strong indicator — someone else arriving contributes\n35 % to this node and nothing happens.\n\n**A prior above the on-threshold is a supported configuration, and a useful one.** The node then\nrests *on* and rules push it off, which is how you say \"assume the house is quiet until something\nsays otherwise\" — no rule has to argue the resting case, and silence is the answer rather than\nsomething to be reconstructed. Shares are then measured toward the off-threshold, since that is\nthe only line the estimate can cross, and the editor's summary says so. The constraint to keep in\nmind is that the prior must be reachable in one hop by your strongest veto: at prior 0.93 with an\noff-threshold of 0.35, one **decisive** rule is 106 % of the way and just enough, while 0.95 would\nneed **certain**.\n\nA **certain** rule overrides history: firing it clears\nopposing evidence, and a stored certain statement is cleared by any later contradicting rule.\n\n### Weights that follow the reading\n\nThe strength **scaled…** makes a rule's weight depend on the measured value rather than being\nconstant. Give two points — *value 20 or less → weight 150 %*, *value 60 or more → weight 0 %* —\nand the weight is interpolated between them, clamped outside. A rule's **weight** is its share of\nthe way to on, the same percentage the bars show: 100 % is exactly enough to flip the output when\nnothing opposes it. Soil moisture is the natural case: watering in direct sun is normally a bad\nidea, but critically dry soil should override it, which only works if the dryness rule grows\nheavier as the reading falls. This is the step from naive Bayes with binary features to logistic\nregression over a continuous one.\n\nShares may exceed 100 % and may be negative; the sign lives in the shares, so the *makes it*\ndropdown is hidden for a scaled rule and one rule can push both ways across its range. Mind the\narithmetic: 100 % reaches the threshold *exactly* from the prior, so any opposing evidence blocks\nit — overriding a moderate 35 % objection needs roughly 150 %. Single-step rules only, since with\nseveral steps there is no non-arbitrary answer to which value scales the weight.\n\nTwo caveats when using the node this way. Irrigation is a **decision, not a hidden state** — there\nis no fact about whether watering \"is needed\" independent of preference; the machinery still fits,\nbut `p` becomes a score rather than a probability. And several moisture sensors in one bed are\n**not independent evidence** — naive Bayes over-counts them and pins the estimate at the clamp, so\naggregate them (min or mean) into a `global` and use one rule.\n\n### Fading and the latch\n\nMomentary pushes fade — **quick** (5 min half-life), **normal** (20 min), **slow** (1 h),\n**never** (the push stands until something contradicts it) or **custom…** for an explicit\nhalf-life; continuous rules simply stop when their condition does. Strength buys very little\ntime here: each doubling of `ln(LR)` adds only one half-life, so if you want a push to last,\nchange the fade rather than the strength.\n\n**Refiring** decides what happens when the same momentary rule completes again while its\nprevious push is still alive. **refreshes** (the default) restates the rule: one push, its clock\nreset, at whatever weight the rule is worth now. **stacks** adds a second push to the first.\n\nStacking is the correct Bayesian reading only when the two firings are genuinely independent\nobservations — two separate arrivals, say. It is the wrong reading when one continuing fact is\nsimply being reported repeatedly, which is the usual case for a sensor that re-triggers while\nsomething keeps happening. A motion rule left to stack ran a live node to the clamp on seventeen\nfirings in twenty-three minutes, each one describing the same person still moving about. Claim\nindependence deliberately; do not let it be the default. Continuous rules have no setting here —\nthey hold one weight for as long as their conditions hold and never accumulate.\n\nBy default the output falls back to\noff as evidence disappears. The **lock** changes that: *only rules that make it false can turn\nit off* — silence, decay or a sensor dropping out will not (status shows `held`). Use it when\nthe state cannot end unnoticed: nobody leaves the house without the door opening, so a phone\nrebooting indoors must not flip the estimate. An optional hour limit turns it off anyway after\nthat long without supporting evidence. With the lock on, fading no longer makes the output fall\nback by itself — but it still decides whether a push is strong enough to turn the output *on*,\nand how long a \"makes it false\" rule stays able to turn it off: a false rule that fires while\nthe estimate is still high can fade away before the estimate drops, and is then wasted.\n\nAdvanced mode exposes the raw numbers (LR, half-life seconds, prior, thresholds, clamp) on the\nsame rules — there is one data model, the modes only differ in what is shown. The estimate is\npersisted in node context and keeps fading by wall clock across restarts.\n\nSet **Topic** to put a `msg.topic` on both outputs — output 1 gets it as written, output 2 gets\nit with `/snapshot` appended. Leave it blank and no topic is set at all, as in the Event node.\n\nOutput 1 carries the binary result (`payload`, `probability`, `changed`). By default it only\nemits when the result actually flips — a rule firing again while the node is already on sends\nnothing — but **Emit output 1** can be set to *every evaluation* when a downstream flow wants\nthe state re-asserted continuously. `msg.topic` `reset` / `evidence` (`{ lr, halfLife? }`) are\navailable as escape hatches.\n\n### Explaining the estimate\n\nOutput 2 emits a snapshot built for tuning: it says not just what the estimate is but which\nrules produced it.\n\nBoth outputs answer to the same **Emit** setting. On *only on a change* — the default — each stays\nquiet until it has something new to say: output 1 when the true/false result flips, output 2 when\nthe snapshot differs from the one it last sent. A sensor re-reporting the value it already had\nleaves the snapshot identical and sends nothing, which is where most of the traffic used to go.\nEvidence that is decaying does change the snapshot and does keep emitting on every tick, because\nthe estimate really is moving. Sending the node any message it does not otherwise understand always\nanswers with a snapshot, changed or not.\n\n```json\n{ \"p\": 0.86, \"logOdds\": 1.86, \"share\": 108.4, \"binary\": true, \"held\": false,\n  \"rules\": [\n    { \"id\": \"r1\", \"label\": \"While Hallway Sensor · Motion is true\",\n      \"status\": \"contributing\", \"share\": 73.8, \"logOdds\": 2.303, \"value\": true },\n    { \"id\": \"r2\", \"label\": \"When Front Door · Contact is true on a full cycle and Hallway Sensor · Motion is true\",\n      \"status\": \"waiting\", \"share\": 0, \"logOdds\": 0, \"step\": 2, \"steps\": 2, \"deadline\": 47 },\n    { \"id\": \"r3\", \"label\": \"While Office Sensor · Temperature > 25 and Office Window · Contact is false\",\n      \"status\": \"condition-false\", \"share\": 0, \"logOdds\": 0, \"value\": 26.1,\n      \"failedStep\": 2, \"failedValue\": true }\n  ] }\n```\n\n**Every configured rule is listed, every time** — the question while tuning is usually why a rule\nis *not* firing, and a list of the ones that are cannot answer it. `status` says which case a rule\nis in:\n\n| `status` | Meaning |\n|---|---|\n| `contributing` | a level rule whose condition holds; its weight is in the estimate now |\n| `fading` | a rule that fired earlier — `age` and `halfLife` (seconds) say how far it has decayed |\n| `waiting` | a sequence partway through: `step` of `steps`, with `deadline` seconds left |\n| `armed` | a sequence at its first step, waiting to be triggered |\n| `condition-false` | evaluated and did not match — `failedStep` is which condition broke it and `failedValue` what that step read |\n| `no-value` | the failing step had nothing to read, or the reading is unusable for a scaled weight |\n| `injected` | ad-hoc evidence from `msg.topic = \"evidence\"`, which has no rule behind it |\n| `never-fires` | the rule opens with a condition but waits for an event later, so nothing can start it |\n\n`value` is always the **first** step's reading, because that is also what a scaled weight follows.\nOn a rule with several conditions the step that failed is a different one, so `failedStep` names it\nand `failedValue` carries its reading — and `no-value` rather than `condition-false` when that step\nhad nothing to read at all.\n\n`share` is the contribution as a percentage of the way from the prior to the on-threshold — the\nsame unit the rule bars and the summary use in the editor, so what you tuned is what you read back.\nShares add, so the contributing ones sum to the top-level `share`, and anything at or above 100 %\nreaches the threshold on its own. `label` is derived from the rule's steps, phrased as the editor\nphrases them; `logOdds` is the same contribution in the estimator's own units.\n\nThe node's status line carries the same share: `on 108% (0.86)` — the share first, the probability\nafter it. Against a threshold you chose, the probability alone does not say whether a node is\nnearly there or nowhere near; the share does, in the unit the rules were tuned in.\n\n## Other recent additions\n\n- **hal2Bayes — probabilistic binary-state estimation** (see [Bayes node](#bayes-node)).\n\n- **hal2Event — a level output** (`trigger true/false`). The Event node has always reported the\n  *rising* edge: it fires when the trigger rule starts holding and says nothing when it stops, so a\n  flow that wanted to know whether a condition currently holds needed a second node with the rule\n  inverted — a second place to keep in agreement with the first.\n\n  The new output type reports the rule as a level instead: `true` when it starts holding, `false`\n  when it stops, and nothing in between however many updates arrive. A threshold whose reading\n  wanders without crossing it stays silent, where an every-evaluation output would narrate each\n  reading.\n\n  Two settings behave differently in this mode, and the editor hides or replaces them rather than\n  leaving them to surprise you. **Rate limit does not apply**: it drops messages inside its window,\n  and a dropped `false` leaves the receiver believing `true` for as long as nothing else moves — not\n  a degraded signal but a wrong one.\n\n  **Delay applies per edge**, with *Delay on true* and *Delay on false*, both on by default so that\n  a ticked *Delay event* always does something. Turn off the second for an on-delay: the rule must\n  hold before `true` is sent, while `false` goes out at once. Turn off the first instead for the\n  opposite — quick to react, slow to let go, which is what a signal that flickers off usually\n  wants. A queued edge is dropped whenever the answer moves away from it\n  again, so the node never announces a state that has already stopped being true; *Reset delay* is\n  implied and hidden.\n\n  With the **always** operator there is no level — the rule cannot stop holding — so the node keeps\n  its ordinary firing discipline and simply carries `true`, exactly as the boolean output type does.\n  It never sends `false`, and the editor says so where you choose it.\n\n- **Groups redesigned** — group identity now lives on the Event handler and membership per Item on each Thing, with HAType-aware compatibility (see [Groups](#groups)). Replaces the old `hal2Group` node, with automatic migration.\n- **Multi-filter on Things and Items** — combine several match conditions on any message field (exact string, regex, MQTT wildcard, starts/ends/contains) with AND/OR logic, replacing the old single-topic filter.\n- **Centralised ingress/egress functions** — define message-transform functions once on the Event handler and reuse them across thing types instead of copying them per type.\n- **Notes & tags** on Things and Items, plus automatically derived device **categories** — handy for organising devices and for disambiguation by the MCP and JSON API tools.\n- **Metadata** — a per-Thing, machine-managed key/value bag for facts an integration discovers about a device (see below).\n- **Metadata mappings** — declare on the Thing type which topics carry device facts, for sources that can't publish to `_meta` themselves (see [Metadata mappings](#metadata-mappings)).\n- **Function store** — persistent scratch space for a Thing's ingress/egress functions, so logic that needed a function node and `context.get`/`set` can live in the Thing type (see [The function store](#the-function-store)).\n\n## Metadata\n\nEvery Thing carries a **metadata** bag: a set of read-only key/value *facts* about the device — for example a model name, serial number or IP address. Unlike **notes** and **tags** (which you write by hand), metadata is **machine-managed**: an integration fills it in, and hal2 stores whatever arrives without interpreting it. This keeps hal2 technology-neutral — it knows nothing about Matter, Thread, Zigbee or IP; it just holds the facts a source provides.\n\nMetadata is updated over a reserved topic on the Thing's own prefix, so any upstream node can set it:\n\n- `‹prefix›/_meta/‹key›` with a value → set/update that key.\n- `‹prefix›/_meta/‹key›` with an **empty/null** payload → remove that key (and any nested branch under it).\n- `‹prefix›/_meta` with an **object** (or a JSON **string**, which hal2 parses) → **merge**: each key is set, and a key whose value is empty/null is removed. One message can update several keys at once.\n- `‹prefix›/_meta` with an **empty/null** payload → clear all metadata.\n\n**Nested objects are flattened** into dot-keys — `{ network: { wifi: { rssi: -60 } } }` is stored as `network.wifi.rssi = -60` (arrays and primitives are kept whole as leaf values). Because every leaf is its own key, partial updates merge precisely (resending `network.wifi.ssid` leaves `network.wifi.rssi` untouched), a nested `null` removes just that leaf, and an empty value on a parent removes its whole branch.\n\nValues are persisted in the Thing's context exactly like state, so they survive a restart. The current metadata is shown in the Thing's edit dialog (values are read-only, but you can delete a single key or **Clear all** — note an active source may re-publish a deleted key), and is exposed to the MCP / JSON API as a `metadata` field in the detailed views — `get_all_states` **full** mode and `get_state` (device) — always present there, as an empty object `{}` when the device has none. It's omitted from the lean `get_all_states` summary and from item-level `get_state`.\n\nFor example, the companion [`node-red-contrib-matterjs-bridge`](https://www.npmjs.com/package/node-red-contrib-matterjs-bridge) publishes each Matter device's model and IPv6 address to `matter/‹id›/_meta` — and they appear automatically as Thing metadata, with no hal2-side configuration.\n\n### Metadata mappings\n\n`_meta` requires a source that can publish where hal2 wants it. When it can't — a device whose topics are fixed by its firmware — declare a **metadata mapping** on the Thing type instead. A mapping looks like an item: topic filters plus an ingress function. The difference is where the result goes: under the mapping's **key** in the metadata bag, never into item state.\n\nAn ESPHome node publishing `esphome/‹room›/device/wifi` as `{\"ip\":\"…\",\"ssid\":\"…\",\"bssid\":\"…\",\"rssi\":-46}` needs one mapping — filter *ends with* `/device/wifi`, key `wifi`, ingress returning the three stable fields:\n\n```js\nif (!msg.payload || typeof msg.payload !== 'object') { return null; }\nreturn { ip: msg.payload.ip, ssid: msg.payload.ssid, bssid: msg.payload.bssid };\n```\n\nThat stores `wifi.ip`, `wifi.ssid` and `wifi.bssid`. `rssi` is deliberately left out — it changes constantly and belongs in an item, where it gets history. The rule of thumb: **what the device *is* goes in metadata, what the device *measures* goes in items.**\n\nReturning `null` from a mapping leaves the metadata untouched; returning an empty string deletes the key and its branch, exactly as an empty `_meta` payload does.\n\n## Writing functions in a Thing type\n\nIngress, egress, filter, metadata and *Show state* functions are built with `new Function()`, not run as Node-RED function nodes. Only these arguments exist — `context`, `flow`, `global`, `RED` and `util` are **not** in scope and referencing them throws:\n\n| Function | Arguments | Return value |\n|---|---|---|\n| Item ingress | `(msg, attribute, item, store)` | The item's new value; `null`/`undefined` leaves it unchanged |\n| Filter function | `(msg, attribute, item, store)` | `true` passes the message on; anything else drops it |\n| Metadata ingress | `(msg, attribute, item, store)` | Value or object to store; `null` changes nothing |\n| Item egress | `(msg, attribute, item, store)` | The message to send; `null` sends nothing |\n| Show state | `(item, attribute, store)` | Status text — note the different argument order |\n\n- **`attribute`** — the Thing's attribute values by name, `attribute['Room']`. Configuration, always strings.\n- **`item`** — a snapshot of every item's current value by name, `item['Temperature']`; unset items read `'no value'`. Writing to it does nothing.\n- **`store`** — scratch space that persists between messages, private to the Thing: the equivalent of `context.get`/`set` in a function node.\n\n### The function store\n\n`store.get(key)`, `store.set(key, value)`, `store.keys()`, `store.clear()`. Setting a key to `null` deletes it. Values are persisted through the Thing type's context store, so they must be JSON-serialisable — no `Date`, no `Map`, no functions; keep timestamps as numbers. The contents are visible, per key, in the Thing's edit dialog, and clearable from there when a function has stored something wrong.\n\nThe store is what lets logic that would otherwise need a function node live inside the Thing type. A presence Thing that ha","readmeFilename":"README.md"}