{"_id":"@bluedynamic/node-red-contrib-geyser-modular","_rev":"30-ca00f41403d7f560bd00d4e8a24d1700","name":"@bluedynamic/node-red-contrib-geyser-modular","dist-tags":{"latest":"0.0.47"},"versions":{"0.0.10":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.10","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.10","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"726bb0f85c9a829c668c1e7b0e36ce27024add55","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.10.tgz","fileCount":9,"integrity":"sha512-mPI1EFl2xqcZHKS1ecjlWl40tqI/VrCz8TOUez4P3cd/zGPykJPh0eU+S86zZR9TbeiRiUCxuotp7ppaUUtECg==","signatures":[{"sig":"MEUCIGAseS8Ycf8iCzsYxOyamC64ju3sb5i3rPExZFV9ivNxAiEApdC3a6cF4v9xcwa9fnNWn3vswFrvN7O1bRD7Q1ENCZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13023},"gitHead":"ab626151fd53480be3e4d590c229dc5f8aae15df","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.10_1773496881658_0.041927640736425076","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.11","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.11","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"6aba0b89fc596688da90fdde2f1760ef2f873bc9","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.11.tgz","fileCount":9,"integrity":"sha512-0s8mtlA7V2NDqV56HwnrQUa67rXGU/ZSYeE5k7YgB57BWYZlivmikIonGYqx8akvgGyIHQU12j60WeevyrmAGw==","signatures":[{"sig":"MEYCIQCWnEPA9M2TYqdrH+46UWNzbbwhkC0NrkbgjDfY/wIvQwIhAKeOg5/swnTPwW3YRrW6PBWg9LoW44ZfyF2gYmUesPMJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14174},"gitHead":"e8f83b97ec32b77ea0828dd35e58b92d2f34becd","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.11_1773500029997_0.9741700976099539","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.12","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.12","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"70182e1bc9dd11e9e40e0a5602846712794668a0","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.12.tgz","fileCount":9,"integrity":"sha512-62eTnqxWXTZWJay6g6KaLzXhNstKBHGNPSG17eTBWw0f3DQBwdVwppy1DSWjjvGzKbIdydu2ON1uyH9LEcYLfQ==","signatures":[{"sig":"MEUCIGPD2citBK/gKQAwsY46cDRX8R+aObcoaTJzbFTlcbNhAiEA3EiFZX0whNsO+plT6aj0sU6c8VoaYZh0P/51OcXOMrA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12962},"gitHead":"50f49c37080f46d738a9a059c50c5f2b6705c4ac","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.12_1773500385925_0.6759708033535881","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.13","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.13","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"940d1a2f92f3b2816f34a18ec7e5abab8f804fff","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.13.tgz","fileCount":9,"integrity":"sha512-qyEh1eMcDBxgRQoiW4WdojBm+p/L6ww9iC9EQb7MApA4bRV1+wlmKjqfu0QLgDaYyU0LD7k3/Xeh8Y+/Kz7MMA==","signatures":[{"sig":"MEUCIQCogVOq6mdwcVSZLP8zoIXxhJQ0JMter5PENyKpeCksYAIgbusOTeoR+bZPyhSBZ0Lndt3XYa/a66SxpTC0cnff2ng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13262},"gitHead":"495cd17d7470715d16544bbb9cad25739a0d0d72","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.13_1773500789139_0.6716944905856612","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.14","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.14","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"3bc7b24dd2203248d35300ba0d69fc1e6bab41ae","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.14.tgz","fileCount":9,"integrity":"sha512-09Yyw9GGijyUOW2aXYwL33u3FfxTg7pwA2hq80BQtLHdNdWl3mTJj4kgJgx2yDl79lDHNzfTjr2jjk9fG+JbqQ==","signatures":[{"sig":"MEUCIGHov283fKDavGpftutuH8p1xIAUe5WIJZsnr684uUXhAiEArw+mBKGtS/RbGmKtIRnL0N03zbhRrcW+Wo3W7uwnF6o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13868},"gitHead":"2489c5726c87e094319adae1fec1630c2b8f773e","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.14_1773501287718_0.7311856860658545","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.15","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.15","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"90867c534a554fd233b4e8af8a219baa85a1c66b","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.15.tgz","fileCount":11,"integrity":"sha512-xrWWdMC2znzRlH47iiBsEdNr7twPETt6vBIElyf+CHKdZglC/cVn+SSfCHkcoOc3q3MqyRC/w1xyFeRV8MKirw==","signatures":[{"sig":"MEUCIQC/CB+G/4YemNGp8r1lBQ9MNBG5TpPV4NjIp6Fw0HkyEgIgVMQqwnGeHlU5wgu8hFvwf9xl50pCbmtnKqWZgYWN0Js=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16357},"gitHead":"5c79608e5c9e5be912ffe42856bd3b76bd6843f7","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.15_1773501792376_0.4500584377725836","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.16","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.16","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"e94e24e6211462225532c9773498ed41f0095f93","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.16.tgz","fileCount":11,"integrity":"sha512-moguYSU1MyiFD5WDEDzny6t6Rhq3tLhh9azUtn3VV4tGcfCDRyS2lusEDpmFI2UAYjmeqBC5Q9MsFD+ZC2KiGQ==","signatures":[{"sig":"MEUCIQD5xt1H5x2hgnb+L24oOiWaRL4lrs/x3em0frPwnc0iBAIgWK6ZiJgvEFtmg28vbGHQ70dn4kD6FUpFeWfkTg/NaqY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16418},"gitHead":"6d7c4627643a4c106fcb05afbba5f728d52fe9c6","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.16_1773502064704_0.6628295749244035","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.17","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.17","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"d27db322f8e62a1b202492b08d83b573b3b69bf2","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.17.tgz","fileCount":11,"integrity":"sha512-Xgd8r1WoJAR0UFmUZnWSiqzxMo7wubX9uJ88E5clYxgwknuOytEJI22A5Y/3kxFMyHUJyd2/ES6znmPN+UsEVw==","signatures":[{"sig":"MEUCID/95XT3APeaMwvCNNCjhJ3TIL1T2MScTuz3Hld/tmXfAiEA/tGPgeEQQ0sqjCkhSm8+VHnM+8xbTtGz02bzmwTdQrU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16399},"gitHead":"6b67a8e99aef7c10c4ca3fa7f7d62a133adf2fd7","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.17_1773502468150_0.1180154609634152","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.18","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.18","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"2739c559fc5ef23f76b561b76cb8f741419c4e2c","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.18.tgz","fileCount":11,"integrity":"sha512-5rGa2KiEzgjYzr1VBV42NcHgKB0dsx2qcT1OywMzgjUt2g2/XqNWZ//imIvM8k7oqYuiXnjp/GxRwmOgl8vQMA==","signatures":[{"sig":"MEUCIQCRLgDDESrEMKDHVN+tnPWB5CQC7J7u6PPbCHk2/PJ+swIgQS2e+kZvAAIKOs8LQSJN2CwNd2e+Rja7tMrqGUBWFGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16357},"gitHead":"a171c9283054976174de71aee3edfd78e10b6296","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.18_1773502837889_0.3170887029886824","host":"s3://npm-registry-packages-npm-production"}},"0.0.19":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.19","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.19","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"e266ff7017bbe1b6e40ce57a01ec30f2d8015cac","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.19.tgz","fileCount":11,"integrity":"sha512-2snKPLEOLBH7+LlYars6BfzRMLgGV06F1qI4LaBzsx1RucgnGcQVMn6EDvkru+4uV+D5RgXUXlMUDIWo4Jb3wA==","signatures":[{"sig":"MEYCIQD4wODPmAdRFwmp5/USEEzt2XwRp1YlVLu/gy34FR1VXAIhAJjARmYDI8r9WIRubqobv4SW8gAd95cWOqrKov8UQVbm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17298},"gitHead":"037f5f4515f884b8609fc41cafb99542a34aca58","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.19_1773503237734_0.5192621938439874","host":"s3://npm-registry-packages-npm-production"}},"0.0.20":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.20","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.20","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"be18694d698a9a19a7029e66b4698b76d6d46e2f","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.20.tgz","fileCount":11,"integrity":"sha512-FA8NQERaFHu2SCyuVHdCc43yxjaVPKan5uGIz4llfH4Lv1X9u1Z3QeO3qEC0EK9WnegU6jhL5dt1N/nhffnGXg==","signatures":[{"sig":"MEQCIBsoSRNlbIVV0no8jxXaustQB/W7W2bNMjyTeMKjozZ+AiAdJzn0112yV912OmP+j/Tf8feRg9XPmjoSJRSDNYXclw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17342},"gitHead":"86874be2662c1cbbb73bd5005f5faa18407451a5","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.20_1773503787086_0.7798581160451625","host":"s3://npm-registry-packages-npm-production"}},"0.0.21":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.21","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.21","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"9a9f73cf309d09168b49fcf64cd2d2dd265ac7a4","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.21.tgz","fileCount":11,"integrity":"sha512-zeYqcSk9qC4TjPp3ki5/CpNYPnJQv6Qs0OAssneIM34zz9dYtKwfbWuXkXceyPDCOks/OpUUX7uWm865Mhff2A==","signatures":[{"sig":"MEYCIQDiVotN4KYm1ItYXLYK4qbzcviOKjOyZj8NzefYQxvCigIhAKsFfc8aW94jiZ2GzSJURpsmApSuaJpk701WQn8RSjLG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17671},"gitHead":"15a72c48aab118adc70d6f15e0e7d62e18aa9767","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.21_1773504028005_0.6286858216268882","host":"s3://npm-registry-packages-npm-production"}},"0.0.22":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.22","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.22","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"e36e7c4d31dc5f6e9447b85aec7aba3981a314bc","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.22.tgz","fileCount":14,"integrity":"sha512-URtxYLL7fiNZMwqyCWHi9qN1f8Kgiw2PoNU5yD4+6JkUAlGrFFsi7zuE40bG/NGL9y2FmG6lr7IxkRHInSbndg==","signatures":[{"sig":"MEUCIQCLwIhQCpaxng8YV+v+n6Nay7q1Vpa++1lScS/dXSsRdgIgRa8BhuqxwTTADuXvoW4BRI53OB6i5zalFlxZh1L2kYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47674},"gitHead":"b02ad9dba5ea0ed7eb7ac6702c56cdf32ef071c2","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.22_1774080329731_0.5007784455367992","host":"s3://npm-registry-packages-npm-production"}},"0.0.25":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.25","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.25","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"ab626f610aa746b15ccc6dfd2c4ae6c5d8e92f51","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.25.tgz","fileCount":18,"integrity":"sha512-Al88VqTJsbqC1oUnKspPRP0tyYGxmG6hGgO90pTGGs01nzxzT5XU7DlEN/gOTfLtn4NFWosoAymwtflGZll6LA==","signatures":[{"sig":"MEUCIQCE6eZZsK1SoXz/PSjMnZDdpCyjtKbp9lHIq9B8o1ewvAIgVSyxPRyhlhbBq8XI/ApShcVU2ZzmRQ5zI78zv452t14=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67374},"gitHead":"fd8bd6bbb3564e419600fbf37b5fb9cde9e71bf0","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.25_1774083867573_0.018445875864342876","host":"s3://npm-registry-packages-npm-production"}},"0.0.28":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.28","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.28","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"840a281f9c79469748f58a9ccc33c5e80851b597","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.28.tgz","fileCount":16,"integrity":"sha512-WOFCtXtOgF545SixkyebC1cAYUXz7D1ZiU+85PQLcJ1gVdTBJJOpuSUzBocY4EW587wKfdwnUMEut+rI+A5UQA==","signatures":[{"sig":"MEYCIQCe0Tt17so+UVUfZCtJAfLfHdWmLxS9c9rWJ/92qTDtowIhAJ53ueG2WvO1tTaaUELhS3w4PWQ9wKg+Q9XnwpMMwmla","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69009},"gitHead":"35e6778f68f023ed160a689afcbb47e3213b424f","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.28_1774085219014_0.4307637727152571","host":"s3://npm-registry-packages-npm-production"}},"0.0.29":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.29","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.29","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"128f9488509026bb4fa0d8611c46e0de889e8439","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.29.tgz","fileCount":16,"integrity":"sha512-BU7SSX5za8opBBIvKM3xLwE5b04rn7JGZd7aDVIDFuvXttuHKJIDVa3oouvNcT1vfeKEcQ1Wa9G8JifeMhdvLg==","signatures":[{"sig":"MEYCIQCMqa25c9P7+BsYUPKpzSm/ekjRoZlGOjATl+LzARaoHgIhAKh45q0RtuD6k3+O0uVhARKFPRDS3tOs59K/Gi6InNA3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70080},"gitHead":"6fec0481605f68549c98c8af76b43d38a0d6fc81","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.29_1774086021781_0.2832540590167012","host":"s3://npm-registry-packages-npm-production"}},"0.0.31":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.31","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.31","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"e99fa3cc1f482d413943bdaafa5f2d5e15795152","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.31.tgz","fileCount":16,"integrity":"sha512-wgrx+1xIoFljJjgtHtGh8AguL2QPe1vGTFSOmOcf3M6lgRhiTrPBS2PVNwVwhu7a32hQmUFWUs1MlWaKY4ifrg==","signatures":[{"sig":"MEQCIC4C8p1WHb8dNuurMZYPSXBURHHazbwAWsEgVfPPd4dPAiA7ypvy30Zsq+2wZkyr24QfJXRFmyForcBWTPmLJ5a/lg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68988},"gitHead":"85b871044a67a7a611bcfb5ff3f5690a49f790a5","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.31_1774086543656_0.17178797452644967","host":"s3://npm-registry-packages-npm-production"}},"0.0.32":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.32","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.32","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"2fa8753aa8902cdceb7f0db8b1829b6274eb282f","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.32.tgz","fileCount":16,"integrity":"sha512-NqWLSIlmfv65VMirRJQ2jIzmzavcOvAlF6onuTNLSwi3mO6PzZY+KWpAiiKaEUp5NOVxgiQPPNKCkXGX6kvoTw==","signatures":[{"sig":"MEUCIQDEaNRHNb+68hxjwmW7PA6rI0loUy4VChFhxM7TsRLVvgIgKcy+GLUhEh9ks6sHaa2PZxK4iLDMbbor+jNbvwjXx2A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68988},"gitHead":"bdcb41c1a1a39c9b5c589268394222d6e2051161","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.32_1774087256130_0.28272357963084693","host":"s3://npm-registry-packages-npm-production"}},"0.0.33":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.33","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.33","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"27feba886378c2bdafd05daa2c8d56d65d2e0e6a","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.33.tgz","fileCount":16,"integrity":"sha512-yrEKiLgNUwL4Z/zgepI69pS6kydQHWIDS5q4mEGdumGpmHhBPxFarjuQoiYNB7V0VblhThD3MXIbrkt3hiWSSg==","signatures":[{"sig":"MEYCIQDVIYTQ+Yb2K6zfOe/3TFDVrVSP9BIu5JMCGuDlsK13IQIhAMMOGu7mvunT4gJX44KXsMi14e+xrbh4Kn85PaYVxYy7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77847},"gitHead":"801a55374dd1e5d738f0adbd8d061daca64561b2","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.33_1774094982661_0.07577769019794922","host":"s3://npm-registry-packages-npm-production"}},"0.0.34":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.34","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.34","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"587ca20e45847205bb95caca1ef6f09e7df7189d","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.34.tgz","fileCount":16,"integrity":"sha512-q6ID3K+ofGHlJLO3IgKAb1XGwq1sqliWW378BRB/fEVluGqsnJEPHgG7n1AJO45Qj3GO0RvTJxTkyebgi4zx5A==","signatures":[{"sig":"MEYCIQDBRNbPaLiH1B04gEZvMuacN/nF+jQZbAI3IrgCyk9iRwIhAP0RhNsxOUQAMeKw4AmYTnH8/mhQ18+m1cxWQWD079z1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83043},"gitHead":"9645ab5ad088e4685a4e0324b397fc840108d066","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.34_1774096503352_0.9484445249577054","host":"s3://npm-registry-packages-npm-production"}},"0.0.35":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.35","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.35","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"ee1e0ef4a8bd78585869a02126eedff782fc70bf","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.35.tgz","fileCount":16,"integrity":"sha512-w3IAVaymKt8+1AmF4Qi6bsoK39DhCoF9Nk8K6FgfGuSMzlZPsEec2yhsDnq5wfeTtk8vnVkdPgdtUfg3VOdRGQ==","signatures":[{"sig":"MEQCIDKHX6laF1dukwDUb+5DrJ/g6JVgcA2yclwmWWrhS9iGAiBzheH8mE9qsuAGK9LtFkHtBfCLXtvVardoID6KaAVKDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80252},"gitHead":"e120aae5ab5d71023fe8dcf77c5a119eab310b3d","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.35_1774097372889_0.7993276412533707","host":"s3://npm-registry-packages-npm-production"}},"0.0.36":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.36","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.36","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"f814992dcb7f447dba63cdb54a58f5c140fae0df","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.36.tgz","fileCount":16,"integrity":"sha512-U+zaXqz/1yRHWkMSOTSfsOLlzPysnc378kpd3dI0LJbm3g/AipAf7CHwwvqUpCSE4V38uNbccw4D0MoFDB5v/w==","signatures":[{"sig":"MEQCIFbcW3bYqvnpciXKpCyK3wf21pn3fFExuepgwWor6OwEAiAeaTnlPBH3nzzHDknS54QAaCOEA+9VknE8pHig0OMhSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81925},"gitHead":"45df485c4a076ef2fcf1a71b231531ccf9459abd","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.36_1774098494675_0.25361485495203717","host":"s3://npm-registry-packages-npm-production"}},"0.0.38":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.38","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.38","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"fb0b2e57e1d7b204e0be6adb6672d1ce13baf097","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.38.tgz","fileCount":20,"integrity":"sha512-GvZnj15I4rB4TmKtbjCYGcbfBX1X0dZZk5aBG+m/iHEwQa6+KtyDb9+R9OkVSj4w1iDKPiZZ1fWagMPJuTnWxg==","signatures":[{"sig":"MEUCIETBwsvg0nwNa/t3TCY32Rd/g4xvMqe2pcoESsYhope7AiEAit5YuieVSvfPrttm8kWsIRft9v582c20CE91ONreBLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105679},"gitHead":"b760e8c0b9e20f6715b7618da0212c5a8115b39e","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","coordinator":"./src/nodes/coordinator.js","device-logic":"./src/nodes/device-logic.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.38_1774109427505_0.5633137252144167","host":"s3://npm-registry-packages-npm-production"}},"0.0.40":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.40","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.40","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"c15b06d9f2e3b4f42993426abe1abb7384a08e0b","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.40.tgz","fileCount":22,"integrity":"sha512-+2ORqKkiOItkGaAcTpi/W1+kke7ZIEMsN5sZJCapnSA1UsDakixkm5bIdvT5tZTH1ww7MM1SHmaR6a6ezr/91Q==","signatures":[{"sig":"MEYCIQDmzDck0DD5++KhHBLzgZ6G+dCqa1w2noSSIJjpyd6W2wIhAJRkgtuyXXZB0hi69nMhR5emu+2d92lEWYf5Ku/pjDGD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109378},"gitHead":"39a06a85b175acf71ab73dbc344e78f28c0c4499","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","coordinator":"./src/nodes/coordinator.js","device-logic":"./src/nodes/device-logic.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js","coordinator-set-batt-soc":"./src/nodes/coordinator-shims.js","coordinator-set-consumption":"./src/nodes/coordinator-shims.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.40_1774110651078_0.16579340959131672","host":"s3://npm-registry-packages-npm-production"}},"0.0.41":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.41","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.41","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"13ef6743073fccb3f454f176e9d7591d444ab1b5","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.41.tgz","fileCount":20,"integrity":"sha512-4OiG2DSP6t2zwUycFE0IwIg88oBsV7+LQmtdLGOXqvp4xcf+Fj3ujWpz+fmMI9FET9m9wy/Sxu7PNkSpTj43+g==","signatures":[{"sig":"MEQCIEfPl5D+rZ28p36bzWboyPxLKjYa/9HmDs3KLRZOvZORAiBDSnKVY0/nDLnFrEyxA02bLX7Q51ylk3MyJnVmcbrHMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106737},"gitHead":"792eb71eaa5f75612bc5b75aa6488af97e02c406","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","coordinator":"./src/nodes/coordinator.js","device-logic":"./src/nodes/device-logic.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.41_1774111007870_0.9220035833412834","host":"s3://npm-registry-packages-npm-production"}},"0.0.43":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.43","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.43","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"6578475c8215c8ae1ef9f3acca6ea3210ca7d9f0","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.43.tgz","fileCount":22,"integrity":"sha512-tFv+I6jeCnjjerHLgAbSYAJhhtjzaNr4adr/MaH0Ct1066FB8JA7Pz3mZHRWwOF3wbbheA2lM7fuRsUbQ3hOSw==","signatures":[{"sig":"MEYCIQDD34W/dXj7r3P7dhCZ/HQzLK7FLX7JjHocWNy/wrf7TAIhAPXcqToOY0Io564Fcvm82uvTmyapReD4Of8gqnu5NVzG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118562},"gitHead":"8a828bb705042da230ae9ca837ec58b45b7530b9","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","coordinator":"./src/nodes/coordinator.js","device-logic":"./src/nodes/device-logic.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js","device-home-assistant":"./src/nodes/device-home-assistant.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.43_1774116895589_0.850035678904584","host":"s3://npm-registry-packages-npm-production"}},"0.0.44":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.44","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.44","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"45aa5aa1a6f0593ccb10eed0e5cb1d64210237bb","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.44.tgz","fileCount":22,"integrity":"sha512-INXv0cNKTGT3MnThMlXDn7y+ScbTsD8oDVZfaRAWC//I5zv3neSxnSn9Oec3yFU5+bEDgCNoYv37JqKuUgMxuw==","signatures":[{"sig":"MEQCIEopbsY4Cg2fBGjINpoXwGyvVST/STPJGtS5lv3QdKXwAiAmb8bF6MMlrqaeIImbDnYgIxLCLOOl1ilGqsKGw/LIyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126018},"gitHead":"e95dce71eea51dd462ed9b21488ba8ea6af38f55","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","coordinator":"./src/nodes/coordinator.js","device-logic":"./src/nodes/device-logic.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js","device-home-assistant":"./src/nodes/device-home-assistant.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.44_1774173392051_0.8123763753091655","host":"s3://npm-registry-packages-npm-production"}},"0.0.45":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.45","keywords":["node-red","geyser","geyser-modular","geyserwise","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.45","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"82b6973b9e7dabdc686a566423113809ce9e2ee8","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.45.tgz","fileCount":22,"integrity":"sha512-0j1u5OyKts8Jmg0YKyStEgw8ZfVup6Vji3RW7UjLHahVhq2fBcSOTQoANeC6wKgCPQtSS89Mkxce6bvzd2FbEg==","signatures":[{"sig":"MEUCIA7sxII8IvFAASaLAkSlXe9W3guC2Qk3Ht4KeW9LpIYqAiEAxljL3oWhCVxUilNzU0B3tM0GsRtsJTwWifIzdsUOgGI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126437},"gitHead":"f6229819b975a849bb6c482777aff32cf44a9b60","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","coordinator":"./src/nodes/coordinator.js","device-logic":"./src/nodes/device-logic.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwise":"./src/nodes/device-geyserwise.js","device-home-assistant":"./src/nodes/device-home-assistant.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.45_1774174537378_0.18552410340336256","host":"s3://npm-registry-packages-npm-production"}},"0.0.46":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.46","keywords":["node-red","geyser","geyser-modular","geyserwise","geyserwiseESP","home-assistant","victron","automation"],"author":{"name":"Blue Dynamic"},"license":"MIT","_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.46","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"dist":{"shasum":"02e695ead75e273331db1d6ebaf135a0772ecda5","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.46.tgz","fileCount":22,"integrity":"sha512-bVGP4NMX5Ck6i5o1DPcztYtTLHmaNlKd8U3aq1uS+ciDGhZjmowG1k+jUpCdIowderATRCvsC0idbQTjek4I1A==","signatures":[{"sig":"MEUCIQCdqV07U4/YzVkg3HnYHKDb1YYsFWIzvenBxPL5hWpVygIgR0F+VciKryC+fuRZpL2o0xKFZIKFGnvG/Dg4OnI0zns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130497},"gitHead":"622a1a628b169b861a283fee22381415170d41c9","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"node-red":{"nodes":{"test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","coordinator":"./src/nodes/coordinator.js","device-logic":"./src/nodes/device-logic.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js","device-geyserwiseESP":"./src/nodes/device-geyserwiseESP.js","device-home-assistant":"./src/nodes/device-home-assistant.js"},"version":">=3.0.2"},"_npmVersion":"10.9.4","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"node-red":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-geyser-modular_0.0.46_1774245815756_0.18998399238050867","host":"s3://npm-registry-packages-npm-production"}},"0.0.47":{"name":"@bluedynamic/node-red-contrib-geyser-modular","version":"0.0.47","description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"npm pack"},"keywords":["node-red","geyser","geyser-modular","geyserwise","geyserwiseESP","home-assistant","victron","automation"],"node-red":{"nodes":{"device-geyserwiseESP":"./src/nodes/device-geyserwiseESP.js","device-logic":"./src/nodes/device-logic.js","coordinator":"./src/nodes/coordinator.js","device-home-assistant":"./src/nodes/device-home-assistant.js","test-gwise":"./src/nodes/test-gwise.js","bluedyn-var":"./src/nodes/bluedyn-var.js","bluedyn-mqtt-sync":"./src/nodes/bluedyn-mqtt-sync.js"},"version":">=3.0.2"},"author":{"name":"Blue Dynamic"},"license":"MIT","dependencies":{},"devDependencies":{"node-red":"^3.0.2"},"_id":"@bluedynamic/node-red-contrib-geyser-modular@0.0.47","gitHead":"cf4a716d7bdb00617bf9e3122419d68016547356","_nodeVersion":"22.22.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-oyj3ftDjE7RQeBVVjtdRE6uY+vn4ZFUVel3TCcrSRYKvzJC6h7+WOnbQjXFYa5OOdz6Fo0Ckarb0wh9z+w37nQ==","shasum":"3c4ea7b22852ce8ab1ae2e30245896518e83d593","tarball":"https://registry.npmjs.org/@bluedynamic/node-red-contrib-geyser-modular/-/node-red-contrib-geyser-modular-0.0.47.tgz","fileCount":22,"unpackedSize":130497,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDJZM1yonfVi1jCLQcAULjafvL8DDknn0qdDYRei6/LXwIhAIZmTkaKBotDC3tStwybzuSENvE0AMMnqQrPSLXE7W4x"}]},"_npmUser":{"name":"swvdmerwe","email":"schalk@baysolar.co.za"},"directories":{},"maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-red-contrib-geyser-modular_0.0.47_1774263539339_0.6718121712993486"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-14T14:01:21.539Z","modified":"2026-03-23T10:58:59.611Z","0.0.10":"2026-03-14T14:01:21.803Z","0.0.11":"2026-03-14T14:53:50.142Z","0.0.12":"2026-03-14T14:59:46.065Z","0.0.13":"2026-03-14T15:06:29.292Z","0.0.14":"2026-03-14T15:14:47.857Z","0.0.15":"2026-03-14T15:23:12.535Z","0.0.16":"2026-03-14T15:27:44.861Z","0.0.17":"2026-03-14T15:34:28.305Z","0.0.18":"2026-03-14T15:40:38.067Z","0.0.19":"2026-03-14T15:47:17.885Z","0.0.20":"2026-03-14T15:56:27.237Z","0.0.21":"2026-03-14T16:00:28.148Z","0.0.22":"2026-03-21T08:05:29.889Z","0.0.25":"2026-03-21T09:04:27.719Z","0.0.28":"2026-03-21T09:26:59.175Z","0.0.29":"2026-03-21T09:40:21.939Z","0.0.31":"2026-03-21T09:49:03.792Z","0.0.32":"2026-03-21T10:00:56.271Z","0.0.33":"2026-03-21T12:09:42.832Z","0.0.34":"2026-03-21T12:35:03.587Z","0.0.35":"2026-03-21T12:49:33.032Z","0.0.36":"2026-03-21T13:08:14.832Z","0.0.38":"2026-03-21T16:10:27.658Z","0.0.40":"2026-03-21T16:30:51.222Z","0.0.41":"2026-03-21T16:36:48.032Z","0.0.43":"2026-03-21T18:14:55.757Z","0.0.44":"2026-03-22T09:56:32.189Z","0.0.45":"2026-03-22T10:15:37.549Z","0.0.46":"2026-03-23T06:03:35.906Z","0.0.47":"2026-03-23T10:58:59.484Z"},"author":{"name":"Blue Dynamic"},"license":"MIT","keywords":["node-red","geyser","geyser-modular","geyserwise","geyserwiseESP","home-assistant","victron","automation"],"description":"Geyser Modular Palette - Device → Logic → Functions nodes for Node-RED","maintainers":[{"name":"swvdmerwe","email":"schalk@baysolar.co.za"}],"readme":"# @bluedynamic/node-red-contrib-geyser-modular\r\n\r\nGeyser Modular Palette – Device → Logic → Functions nodes for Node-RED.\r\n\r\n**Disclaimer:** This is a personal / pet project. Not officially supported. Use at your own risk. No warranty; use of this software is entirely at the user’s responsibility.\r\n\r\nThis folder (and its contents) is the palette package. It is published to Git and, optionally, to npm.\r\n\r\n**Docs layout:** Behaviour, MQTT layout, and message contracts are documented here (**Node properties** below) and in **`VARIABLE-MAP.md`**. In Node-RED, each node’s edit dialog only shows **short tips** so the UI stays readable; open this README on Git (palette repo) for the full reference.\r\n\r\n---\r\n\r\n## Installation\r\n\r\n**From npm (if published):** In Node-RED → **Manage palette** → **Install** → search for `@bluedynamic/node-red-contrib-geyser-modular`.\r\n\r\n**From a `.tgz` file:** In Node-RED → **Manage palette** → **Install** → **Install from file** and select the `.tgz`. You can build the `.tgz` yourself with `npm pack` in this folder, or use a built file from the NodeRED-palettes share.\r\n\r\n---\r\n\r\n## How \"Update\" works in Manage palette\r\n\r\nNode-RED checks the **npm registry**. So:\r\n\r\n1. Publish this package to npm (see **Releases** below).\r\n2. Users install once via Manage palette → Install → search for `@bluedynamic/node-red-contrib-geyser-modular`.\r\n3. When a new version is published to npm, users open **Manage palette**, find the package, and click **Update**.\r\n\r\n---\r\n\r\n## Releases (GitHub + npm)\r\n\r\n- **GitHub:** Create a **tag** (e.g. `v0.0.2`) and push. The repo’s workflow builds the palette and attaches the `.tgz` to a GitHub Release.\r\n- **npm (for Update):** In the repo **Settings → Secrets**, add `NPM_TOKEN` (from [npm access tokens](https://www.npmjs.com/settings/~/tokens)). Then each tag push can publish to npm so \"Manage palette → Update\" sees new versions.\r\n- Bump `version` in `package.json` before tagging (e.g. `0.0.2` then tag `v0.0.2`).\r\n\r\n---\r\n\r\n## Nodes\r\n\r\n**Stable (intended long-term)**\r\n\r\n> **Rename:** The hardware node was **`device-geyserwise`**; it is now **`device-geyserwiseESP`** (Geyserwise-on-ESP). Existing flows will show an **unknown node** until you **delete the old node**, add **device-geyserwiseESP**, and re-wire (same properties: Name, Device ID, MQTT, GW ID, load, priority).\r\n\r\n- **device-geyserwiseESP** – Normalizes Geyserwise-on-ESP MQTT data (**3 outputs**: `device_id`, full event, spare).\r\n- **device-logic** – Single-node port of **G1-Logic110**: reads/writes `global.bluedyn[device_id]` (min temp, boost, solar, timer, load request, heating method, boost reset, `set_power` from `load_allow`). Trigger from **output 1** of **device-geyserwiseESP** (`msg.payload = device_id`).\r\n- **coordinator** – Multi-device load allocator: **1 input**, **3 outputs**. Routes by `msg.topic` (`device_id`, `batt_soc`, `consumption`); writes `settings.load_allow` per device.\r\n- **device-home-assistant** – **1 in / 3 out.** **Device ID** in config (recommended), **12** entity helpers, optional **MQTT broker**. **O2** = timer snapshot (debug). Writes `logic.timer1_* … timer3_*` and **`logic.timer_status`**.\r\n- **bluedyn-mqtt-sync** – MQTT `prefix/#` ↔ `global.bluedyn` (same broker config as core **mqtt in/out** / **device-geyserwiseESP**). **QoS 1**; leaf publishes **retained** (MQTT has no bulk read — retain is how late subscribers catch last values); inbound **`{ v, t }`**, JSON, or plain strings; optional **Clock check** on `prefix/_mqtt/time`.\r\n\r\n**Temporary / scaffolding (remove or replace later)**\r\n\r\n- **bluedyn-get** / **bluedyn-set** – Thin read/write helpers for `global.bluedyn` (GGV / SGV). **Provisional:** once the **final** logic/device node exists, this behaviour is expected to move **inside** that node (e.g. shared helpers / internal code paths), not stay as separate palette nodes.\r\n- **test-gwise** – Hard-coded MQTT subscription for bench/debug only; **delete when no longer needed**.\r\n\r\n**Palette look:** All nodes use the same fill **`#3936e0`** (default Node-RED label contrast, no custom editor CSS). **device-geyserwiseESP** / **test-gwise** use **`geyserwise.svg`**; **bluedyn-mqtt-sync** uses **`font-awesome/fa-exchange`**.\r\n\r\n---\r\n\r\n## Node properties\r\n\r\nConfigurable fields in the editor, plus runtime behaviour (messages, MQTT). Internal constants (QoS, retain, TZ label, skew threshold) are described where they apply.\r\n\r\n**Temporary nodes** (`bluedyn-get`, `bluedyn-set`, `test-gwise`) are documented below for current flows, but are **not** the long-term shape of the palette—see the **Nodes** list above.\r\n\r\n### `device-geyserwiseESP`\r\n\r\nEditor order: **Name** → **Device ID** → **MQTT broker** → **GW ID** → **Load size** → **Load priority** → output tips (each output on its own line in the dialog).\r\n\r\n| Property | Description |\r\n|----------|-------------|\r\n| **Name** | Display name; also written to `bluedyn[<device_id>].settings.device_name` when set. |\r\n| **Device ID** | Logical id (e.g. `geyser1`). Key under `global.bluedyn[<device_id>]`. Required. |\r\n| **MQTT broker** | Same shared MQTT config type as core **mqtt in** / **mqtt out** (and **bluedyn-mqtt-sync**). |\r\n| **GW ID** | Geyserwise-on-ESP MQTT topic prefix (e.g. `geyserwise-tse-f6ee1a`). Subscribes to `GW_ID/#`. Required. |\r\n| **Load size (W)** | Optional; pushed into `settings.load_size`. |\r\n| **Load priority** | Optional; pushed into `settings.load_priority`. |\r\n\r\n**Flows:** MQTT subscription only (no node input). On each inbound hardware event it updates `global.bluedyn` (hardware bucket `GeyserwiseESP` + logic/system) and sends **3 outputs**: **O1** = **`msg.payload`** + **`msg.device_id`** = device id; **O2** = full normalized object (`device_id`, `device_type` = `geyserwiseESP`, `type`, `payload`, `mqtt_topic`, …); **O3** = unused.\r\n\r\n---\r\n\r\n### `device-logic`\r\n\r\n| Property | Description |\r\n|----------|-------------|\r\n| **Name** | Display label. |\r\n| **solar_soc_start** | SoC (%) to assert solar SoC gate (default `98`). Clamped **0–100**. |\r\n| **solar_soc_hysteresis** | SoC hysteresis for solar gate; clear threshold is `solar_soc_start - solar_soc_hysteresis` (default `5`). Clamped **0–100** and **capped at `solar_soc_start`** so the stop threshold never goes below 0%. |\r\n| **water_temp_variance** | Shared water-temp hysteresis delta used in min/boost/solar switch logic (default `5`). Clamped **≥ 0**. |\r\n\r\n**Behaviour (G1-Logic110):** Reads `logic.*` / `settings.load_allow` / `power.batt_soc` under `global.bluedyn[device_id]`. Applies hysteresis: min temp (`min_temp` / `min_temp+water_temp_variance`), boost tank band (`boost_temp-water_temp_variance` / `boost_temp`), solar SoC (`solar_soc_start` / `solar_soc_start-solar_soc_hysteresis`) and tank vs `max_temp` (`max_temp-water_temp_variance` / `max_temp`). Computes `force_heat_status` (boost temp OK ∧ `boost_state === heat`), `solar_heat_status`, and **4-way AND** → `settings.load_request`. Writes `logic.heating_*`, `logic.heating_method` (priority: Solar Dump → Boost Heat → Timer → Min Temp → Idle), optional **boost reset** (`boost_state` / `climate_mode` → `auto`), and `logic.set_power` from `settings.load_allow`.\r\n\r\n**Outputs:** **O1** = **`msg.payload` = device_id** on **every** evaluation (route/trigger pulse). **O2** / **O3** only when **`load_request` or `heating_method` changes** (RBE); `global.bluedyn` is updated on every evaluation regardless.\r\n\r\n---\r\n\r\n### `coordinator`\r\n\r\n| Property | Description |\r\n|----------|-------------|\r\n| **Name** | Display label (default `coordinator`). |\r\n| **max_load** | Max allocatable load budget (W). |\r\n| **reserve** | Reserved headroom subtracted from max load (W). Default **500**. |\r\n| **enabled** | Master enable/disable for allocations. |\r\n| **delay** | Debounce delay before applying logic (**seconds**). Default **30** in the editor. |\r\n\r\n**Input (single):** Route with **`msg.topic`** — **`device_id`** + string `payload` registers a device (or **empty topic** + string `payload`, or `msg.device_id`, for direct wire from hardware O1). **`batt_soc`** + numeric `payload` = SoC %. **`consumption`** + numeric `payload` = consumption (W). Use a core **Change** node (or Function) upstream to set `msg.topic` for Victron/HA feeds. Any other message is ignored (no outputs fired for that message).\r\n\r\n**Defaults:** Until first valid telemetry is received, coordinator uses `batt_soc = 50` and `consumption = 0`. Status shows a default-warning suffix (`default soc`, `default cons`, or `default soc+cons`).\r\n\r\n**Outputs:** **O1** devices/check summary, **O2** logic summary, **O3** per-device output list (`load_request`, `load_size`, `load_allow`). Node status shows `CHECK ... | LOGIC ...`.\r\n\r\n---\r\n\r\n### `device-home-assistant`\r\n\r\n| Property | Description |\r\n|----------|-------------|\r\n| **Name** | Display label. |\r\n| **Device ID** | e.g. `geyser1` — target `global.bluedyn[<device_id>].logic`. Recommended so HA works before **device-logic** runs. |\r\n| **MQTT broker (Home Assistant)** | Optional. Same broker config type as **device-geyserwiseESP** / core **mqtt**. If set, subscribes to **Subscribe topic** (default `homeassistant/#`, QoS 1). If empty, use the **input** only (e.g. **server-state-changed**). |\r\n| **Subscribe topic** | MQTT wildcard for HA state topics. Payload + topic are converted to `entity_id` (e.g. `homeassistant/input_datetime/foo/state` → `input_datetime.foo`). |\r\n| **Timer 1–3: start, end, temp, status** | Optional full HA `entity_id` each (exact string). Empty = that slot ignored. |\r\n\r\n**Resolve order for device id:** config **Device ID** → **`msg.device_id`** → **stashed** id from **device-logic** / **device-geyserwiseESP** O1 (`msg.payload` string). If still empty, entity updates warn and skip.\r\n\r\n**Status:** HA MQTT line (subscribed / connected when exposed by broker) + count of **matched timer-helper** messages.\r\n\r\n**Slot → `logic` mapping (fixed):**\r\n\r\n| Config field | Writes to | Coercion |\r\n|--------------|-----------|----------|\r\n| `entity_timer1_start` … `entity_timer3_start` | `logic.timer1_start` … `logic.timer3_start` | string (e.g. `05:00:00`) |\r\n| `entity_timer1_end` … `entity_timer3_end` | `logic.timer1_end` … `logic.timer3_end` | string |\r\n| `entity_timer1_temp` … `entity_timer3_temp` | `logic.timer1_temp` … `logic.timer3_temp` | number |\r\n| `entity_timer1_status` … `entity_timer3_status` | `logic.timer1_status` … `logic.timer3_status` | bool (`on`/`off`, etc.) |\r\n\r\nAfter every successful write, **`logic.timer_status`** is set to **`true`** if any of `timer1_status`, `timer2_status`, or `timer3_status` is on, else **`false`** — so **device-logic** can keep using a single aggregate timer gate.\r\n\r\n**Input:** **events: state** / **server-state-changed** / Link-in, or **MQTT** subscription. **`msg.entity_id`** must **exactly** equal the configured string.\r\n\r\n**Value:** Uses `msg.payload`, else `msg.data.new_state.state`, else `msg.new_state.state`.\r\n\r\n**Outputs:** **O1** — **`msg.payload`** + **`msg.device_id`** = device id (after each successful helper write). **O2** — timer snapshot (`entity_id`, `field`, `value`, nested `payload` with all timers + `timer_status`, `mqtt_topic` if from MQTT). **O3** reserved. **Debug** must use the **middle** output. No O2 until a configured entity matches and device id is resolved — reinstall palette + deploy if you added O2 recently.\r\n\r\n---\r\n\r\n### `bluedyn-mqtt-sync`\r\n\r\n| Property | Description |\r\n|----------|-------------|\r\n| **Name** | Optional label. |\r\n| **MQTT broker** | Shared broker config; must support subscribe + publish like the standard MQTT broker node. |\r\n| **Topic prefix** | Base MQTT topic (default `bluedyn`). Subscribe: `prefix/#`. Publishes under `prefix/...`. |\r\n| **Sync interval (s)** | Periodic outbound scan. **`0`** = timer off; use the node **input** (e.g. inject) to trigger a push. |\r\n| **Suppress TX after RX (ms)** | After an inbound message on a path, skip outbound publish on that path for this many ms (reduces echo loops). |\r\n| **Clock check** | **Off** — does **not** use `prefix/_mqtt/time` at all; MQTT ↔ `bluedyn` sync works as usual (typical for a single machine or when you don’t care about clock sanity). **Host** — periodically **publishes** `{ epochMs, tz }` to `prefix/_mqtt/time` (TZ is fixed in code). **Client** — **subscribes** to that topic and compares host `epochMs` to `Date.now()`; if skew **> 10 s**, `node.error` + red status (NTP issue). |\r\n| **Time publish interval (s)** | Host only: how often to publish `prefix/_mqtt/time` (minimum 10 s in the UI). |\r\n| **Retain sync publishes** | If enabled, each leaf publish uses MQTT **retain**. **New subscribers** (e.g. GX client after deploy) then receive the **last** value per topic as soon as they subscribe — no need to wait for the next live change. Trade-off: broker holds last message per topic (usually what you want for state mirrors). |\r\n| **Full push after deploy** | **Use on the machine that is source-of-truth for `global.bluedyn` (host).** Once ~2 s after deploy, republishes **every** leaf, ignoring the change-only cache, so all current values hit the broker in one burst. |\r\n| **Full push every (s)** | **Host only.** If &gt; 0, repeats a full republish on that interval so clients that connected earlier can still receive a refresh without waiting for each key to change. **`0`** = off. |\r\n| **Input `msg.republishFull`** | Send **`msg.republishFull = true`** into the node (e.g. inject) to run one **full** push on demand (same as deploy option, without waiting). |\r\n\r\n**Fixed in code (not in editor):** sync uses **QoS 1**. Clock-check time topic uses **retain off**. Optional **retain** applies only to normal sync leaf payloads when the checkbox is on. Time JSON `tz` is **`Africa/Johannesburg`**. Client clock skew **> 10 s** → `node.error` + red status.\r\n\r\n**MQTT reality (no “download all topics”):** Standard MQTT has **no** request for “everything on `prefix/#`”. A subscriber only gets (a) **live** publishes after it subscribes, and (b) **retained** messages the broker stored per topic. So **cold start** on a client needs either **retain** on those publishes, or the **host** to **republish the full state** (deploy push, interval, or inject). After that, **change-only** sync is fine.\r\n\r\n**MQTT:** Inbound: **`{ v, t }`**, JSON, or **plain string/number**; merged into `global.bluedyn` and `bluedyn._updated[path]`. Topics under `_mqtt/` (except `_mqtt/time` for clock check), `snapshot`, and leading `_` are ignored for normal sync. Outbound: one topic per leaf; by default **change-only** vs last sent value — **`tx 0` is normal** on a client that only receives and doesn’t alter `bluedyn`. Time topic: `{ epochMs, tz }`, not stored in `bluedyn`.\r\n\r\n**Status line:** **`MQTT disconnected`** (red) if the broker config is not connected; otherwise **`MQTT OK · …`** with subscribe / `rx …` / `tx N` / clock skew text. When there is nothing to publish, the node **does not** keep resetting the line to grey **`tx 0`** (that hid the last `rx …` and looked like a drop-out). **One message at a time** on the status is normal: MQTT delivers topics individually, and each inbound update applies to `global.bluedyn` as it arrives — not a batch snapshot.\r\n\r\n**Troubleshooting**\r\n\r\n- **Old editor fields (QoS, Retain, TZ, skew ms):** Not in the current node template. If they still appear, Node-RED is loading an **older copy** of the package — reinstall from a **fresh build** of this repo, restart Node-RED, redeploy.\r\n- **Client `global.bluedyn` almost empty but MQTT Explorer shows data:** Use a build with **plain-string inbound** support; verify **topic prefix** and broker. Explorer can show traffic that was **never retained** and happened **before** the client subscribed — MQTT won’t replay that. This node **retains** what **it** publishes; if HA (or another writer) publishes the same tree **without** retain, fix retain on that side or ensure a live republish after the client connects.\r\n- **Client on LAN / clock check:** On the **host** set **Clock check → Host**; on the **client** → **Client**; **same broker** and **prefix**. Not required for sync itself — only for detecting clock skew. Red skew status is not overwritten by routine `tx`/`rx` lines.\r\n- **`MQTT disconnected` unless an `mqtt in` is also on the flow:** Node-RED’s mqtt-broker only **opens the TCP connection** when at least one node calls **`register()`** (as **mqtt in** / **mqtt out** do). Palette nodes now **register** the same way, so **bluedyn-mqtt-sync** / **device-geyserwiseESP** can connect without a dummy **mqtt in**.\r\n\r\n---\r\n\r\n### `bluedyn-set` (Set Global Var) — **TEMPORARY**\r\n\r\n> **Provisional node.** Exposes SGV-style writes for early flows. When the final node is implemented, this logic should live **inside** that node (or shared module), and this palette node may be removed.\r\n\r\n| Property | Description |\r\n|----------|-------------|\r\n| **Name** | Optional label. |\r\n\r\n**Input:** `msg.type` (string key) and `msg.payload` (required; must not be `undefined`). Optional `msg.device_id` overrides flow context.\r\n\r\n**Outputs:** **1** = success (original msg forwarded), **2** = error (`msg.error` set).\r\n\r\n**Writes:** If `msg.type === flow.hardware` (flow context `hardware`), writes `bluedyn[device_id][hardwareKey] = payload` (hardware blob). Otherwise `msg.type` must be a known key: writes to `bluedyn.power[key]` or `bluedyn[device_id][folder][key]` according to the internal key→folder map (see `bluedyn-var.js` / `VARIABLE-MAP.md`). Requires `flow.device_id` for non-power keys.\r\n\r\n---\r\n\r\n### `bluedyn-get` (Get Global Var) — **TEMPORARY**\r\n\r\n> **Provisional node.** Exposes GGV-style reads for early flows. When the final node is implemented, this logic should live **inside** that node (or shared module), and this palette node may be removed.\r\n\r\n| Property | Description |\r\n|----------|-------------|\r\n| **Name** | Optional label. |\r\n\r\n**Input:** `msg.type` = key to read.\r\n\r\n**Read order:** `bluedyn.power[key]` first (shared). Else, with `flow.device_id`, search `settings` → `system` → `logic` under that device. If the key contains **`/`**, only `bluedyn[device_id][flow.hardware][key]` is used (no folder fallback). Uses `flow.device_id` and `flow.hardware` from flow context.\r\n\r\n**Not found:** Red status; **no output message** (same idea as `return null` in a function node).\r\n\r\n---\r\n\r\n### `test-gwise` — **TEMPORARY**\r\n\r\n> **Bench / debug only.** Not part of the final product; safe to drop from the palette once you no longer need a fixed-topic MQTT sniffer.\r\n\r\n| Property | Description |\r\n|----------|-------------|\r\n| **Name** | Label. |\r\n| **MQTT broker** | Broker for a single hard-coded test subscription. |\r\n\r\nSubscribes to **`geyserwise-tse-f6ee1a/sensor/water_temperature/state`** and shows payload in status.\r\n\r\n---\r\n\r\n## Choosing icons (official references)\r\n\r\n1. **Font Awesome 4.7** (names like `fa-exchange`, `fa-refresh`): [fontawesome.com/v4.7.0/icons](https://fontawesome.com/v4.7.0/icons/) — in code: `icon: \"font-awesome/fa-exchange\"`.\r\n2. **Stock Node-RED SVGs** (e.g. `bridge.svg`, `arrow-in.svg`): [Creating nodes → Appearance](https://nodered.org/docs/creating-nodes/appearance) — use `icon: \"arrow-in.svg\"` etc.\r\n3. **Custom SVG:** white on transparent, ~2:3, min ~40×60 — place under `src/icons/` or next to the node; `icon: \"yourfile.svg\"`.\r\n\r\n---\r\n\r\n## Architecture\r\n\r\nDevice Nodes → Logic Nodes → Function Nodes.\r\n\r\nSee `docs/ARCHITECTURE.md` in the parent folder for the full design.\r\n","readmeFilename":"README.md"}