{"_id":"@blokcert/node-red-contrib-ocpp","_rev":"14-0aae02869a5e7de2f0994067e97c921b","name":"@blokcert/node-red-contrib-ocpp","dist-tags":{"latest":"1.8.0"},"versions":{"1.0.0":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.0.0","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.0.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"93c5e1b22a1ef7d4bbc64b0a4de3f28b7d14e4bc","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.0.0.tgz","fileCount":13,"integrity":"sha512-Wz/6PuP2MVT9lwY8PPN3e/jo017kxl3KLBVL3s8ZBVbPBbJp2MNQbBZpxbOgEPgc66VJoYRvuDVqsrUeKWS0kQ==","signatures":[{"sig":"MEUCIQDlAdJKvlG2oH+K6wIYt+sH9tjKehBTNOWBSSQifIFvoAIgL2HASNQwvCIBfdfXmuQdlNwg1OXafSYwcrKkXkEqFpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64206},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.0.0_1770878822905_0.7151756887481839","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.0.1","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.0.1","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"859bf433b8dd6ebf409d88dcc619d91aa20618b0","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.0.1.tgz","fileCount":13,"integrity":"sha512-HCMnhOZ7zHY/NMR7Mr+enw1QZLyk3f2k9uH8UGcK+YQWZwtEIOGJR+hx0RHwGlkOqGwm2tyno8PhE7avt3QZfw==","signatures":[{"sig":"MEUCIQDACl4T3wCfA6zCy8wgE9weasxAap0hz7awoD2swbN8kgIgWRFcElFeOwFKQlfOhx0RvkE2WUpnJleP0UbxwsovLpg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65141},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.0.1_1770882446029_0.39554541791587994","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.0.2","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.0.2","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"84c2e4ad5729d1018a79dbc23c464ec215f7b0f3","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.0.2.tgz","fileCount":13,"integrity":"sha512-xvE6kEHi7M9apR0omvRoO/1g+v8WeZmF6K1c6y+OkeXgjtT0/3Pvah2mutVr5A3+wKltp3iIwH/hJpX/aPIjBA==","signatures":[{"sig":"MEYCIQDon5mn1Phn3EQYUhwdoQJ1/w3+0TfPmx1ChAUknReFPgIhALsaPvF18mOipZ/iv8VJfUC7BB07A2ZSgldNRb7A8KNe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65137},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.0.2_1770882860292_0.8308519836118362","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.1.0","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.1.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"c640c4b3d9bc8eedf1360664079eb65f22a7608c","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.1.0.tgz","fileCount":16,"integrity":"sha512-JyyN43W9HBDpYJ9Y8BKDGMkCMTlM34fsiSrIxlJ0YDvrvvn9P49EEvGNFQjv9jX/34jTOTUcL/JnHVxewpY3SQ==","signatures":[{"sig":"MEQCIHJefQIVmqP33DCS7qFQ+mXS4+UEIcAkcrqxcVxP8vfoAiBsSp9ToL0j0OUCIXa5vjflI8vlY2P8a1viOrnG8L2H+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80966},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js","ocpp-response":"nodes/ocpp-response.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.1.0_1770885679704_0.08941399994379595","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.1.1","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.1.1","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"84f4294a49c975051c771d9b63b489740ec0d65c","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.1.1.tgz","fileCount":16,"integrity":"sha512-dgURL8IkmjR4ilarwUlVlM5mUGr966/0FA38NXUyF1kEKjvildI2IE+el3ykudxNyEjiOJZ2wcPYytJJsOJNbA==","signatures":[{"sig":"MEUCIH8Slq0iXbqoWAIqNXjL3spYdYXwe5OM/uUuZgiHPVEIAiEAld35BNJG8y6X3gKba7achcmPbZUsRZjrsNZGC/3WkXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81949},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js","ocpp-response":"nodes/ocpp-response.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.1.1_1770887179129_0.9761938829729784","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.2.0","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.2.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"85a76861f0d21d74cf767fceffe020930cbbbb3a","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.2.0.tgz","fileCount":16,"integrity":"sha512-AZGEGQ3ImBVe06WcUQm7DqpRG7G95rh+LD+2ynRWICr76MfNFgJpxu7dkpdRqGYmFkJMlvdlYONC95p+SE1zRg==","signatures":[{"sig":"MEYCIQC2QI7eegTnGbjDAbWWKmk0Ym6wwZQbRQGdosjuh7lHiQIhAP2CK7QcTr8IhwcrqqYkuy0sJIOL0ixnxInEPY5S67ym","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83777},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.2.0_1770887949148_0.38939484100033206","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.2.1","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.2.1","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"c186ae074d6321ee6726ac0f31bb66dc27116ac9","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.2.1.tgz","fileCount":16,"integrity":"sha512-ZpeTNbZyl2UTPBJo4kHoEB3iFtM7iQUjecrNb64G9PaYz1hqEFo3brtIrrwNTiNYKtX5CaW5QaRLU9O001Cxfw==","signatures":[{"sig":"MEQCIFlEveOSZhTSG7+BCyClFvXbeUav/Z+FBPpnlXVJlNqzAiALIDOi5b7HeYRMsjOHlVjdfJ9S022nnCepkgi8acQCSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86126},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.2.1_1770901758181_0.252715632161596","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.2.2","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.2.2","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"f3cf8bbc2e23ce8006ae5ce9fdf643f94b426170","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.2.2.tgz","fileCount":16,"integrity":"sha512-2HmaZofP9VHT1k5NQKGf7hQaENqcTZo7f+J75slxIEZLA1bN9oA2uFyvgWIpf7WUxhs6w5MDbgLLZ9XAgQQ3pA==","signatures":[{"sig":"MEUCICifgJhgj2+zAltJipHHxzntdF/S5mFabzmQdua4H/7HAiEA9JRfJ/YbZX0yZuKz8vjRk/HJtR0JJbHpzBLB3Csyz6s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84793},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.2.2_1770903531466_0.3028755447516498","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.3.0","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.3.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"a9a2a794422700f409dd038363614fb3ef5e2f1d","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.3.0.tgz","fileCount":15,"integrity":"sha512-HgLBDKyVUBK9Q+DID0rr59RY+wu4ymUGdQCBgDZLCNAs0CozO6JapC/2l+UOQApyd3qD2Iac6oyCkG4r/DzJzQ==","signatures":[{"sig":"MEQCIDAJKdFTHPQ4zxV0AHzbM9gind50zT6Wb28UOeGEm/ceAiBMVCjZXIyr8gVD54Gb9/RKGGPX/3E/GM5yIMZCtIxRFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102453},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.3.0_1770912834742_0.570432992324795","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.4.0","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.4.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"07b1fef5954fdf528e21cd037792e62449663c8a","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.4.0.tgz","fileCount":15,"integrity":"sha512-p0HLgmX8TmRC/9eAN2xIYgpTtyQD80nBNXkbOe0ig88pZp0mpZ/7v3XdbIkL4+FmCSYLruGaHT+cxo8MCvgq/Q==","signatures":[{"sig":"MEUCICcaxrDNqIm8F7rGFKF8DfPTBBUObcJk5pyIExdNWtoIAiEA3RrQAzZBXFRScjpnfquJvDiD33hREqPu/0ZHh9DQ+yI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130419},"engines":{"node":">=18.0.0"},"gitHead":"3a45f651bdb530616200df3a0df31482b4e05ecf","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.4.0_1770914477675_0.4196175758565146","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.4.1","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.4.1","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"4b41b9e1010b72eac99b91db72c35cf72a84cb08","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.4.1.tgz","fileCount":15,"integrity":"sha512-woJTtxcWgkxuOvmkDIZkNzbvUMzyZ/HyPYvmRIsWL+NIBSeTci3rMm8f1vVo9og0Jbv6lMAMHD7KWvxNVomxpA==","signatures":[{"sig":"MEYCIQCPDmSXq2XqVJAxd3Db92fOZiCOA45gEapWNGug0tHRQgIhALO4vSdZfAZcBPbDzUr+3/WGfiGJr7R81Ash7Ujlorkk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130578},"engines":{"node":">=18.0.0"},"gitHead":"8d8470042d0ae7b86953463867a561d1e2236b68","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.4.1_1770915854405_0.5119825740288391","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.4.2","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.4.2","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"f36f593845e5bf9ce52367a86d07c9cf4edc492f","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.4.2.tgz","fileCount":15,"integrity":"sha512-3C8AjY/zkgM8WUOuF+imfrEynvTrMVzo+QFJNMh/nFl49zSbh+LzSv5AUUhayesZOhRW5n1G1m54bJ3qduWp1g==","signatures":[{"sig":"MEQCICiae1PzesbVad8+xTD9MmoUgTWwmoGzn7Uj+CFgQIVTAiA+Ep16r8iRQRaEgipejg0nEeCvUkBFWP6Ib3Fz3PJkqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":133481},"engines":{"node":">=18.0.0"},"gitHead":"8d8470042d0ae7b86953463867a561d1e2236b68","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.4.2_1770916336847_0.8618632253855956","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.7.0","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","_id":"@blokcert/node-red-contrib-ocpp@1.7.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"dist":{"shasum":"5da167a7acfeccff6f8ad55a3d17c7ad92146180","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.7.0.tgz","fileCount":15,"integrity":"sha512-ge2CGF/uYvG3HSb+aG4WFwRCTDFb7HlhIcg+NzdqG/ZhtUSXjpC/Vr+18rd/TGwFEaKiR/A1NlXYQ3rvJ9F+6w==","signatures":[{"sig":"MEYCIQCFlS3yrnousyKAKR0wXceTmARVLFlUu4G6cwaxGRfToQIhALuV4/72QQXWdoMrubiTKir1F3KvgHIK1Emzyy9c7FpM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187010},"engines":{"node":">=18.0.0"},"gitHead":"8d8470042d0ae7b86953463867a561d1e2236b68","scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-config":"nodes/ocpp-config.js","ocpp-command":"nodes/ocpp-command.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git","type":"git"},"_npmVersion":"11.4.2","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","directories":{},"_nodeVersion":"24.4.1","dependencies":{"ioredis":"^5.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-ocpp_1.7.0_1770919530892_0.36234789246545196","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@blokcert/node-red-contrib-ocpp","version":"1.8.0","description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"author":{"name":"BLOKcert"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git"},"node-red":{"version":">=2.0.0","nodes":{"ocpp-in":"nodes/ocpp-in.js","ocpp-out":"nodes/ocpp-out.js","ocpp-command":"nodes/ocpp-command.js","ocpp-config":"nodes/ocpp-config.js"}},"dependencies":{"ioredis":"^5.3.2"},"devDependencies":{"node-red":"^3.0.0","node-red-node-test-helper":"^0.3.2","mocha":"^10.2.0","chai":"^4.3.7"},"scripts":{"test":"mocha 'test/**/*_spec.js' --timeout 10000"},"engines":{"node":">=18.0.0"},"_id":"@blokcert/node-red-contrib-ocpp@1.8.0","gitHead":"8d8470042d0ae7b86953463867a561d1e2236b68","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-8DRMMHhanUmgbCTYFXecErBIsAyf/Ovgt1ZU7sgdVzU+OBh6Ycyk4p4SHGLAdk4+36aT/XGUlagQtJZEDSImNA==","shasum":"9c7ede03d7cb0cbac349731d0637027611ce796d","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-ocpp/-/node-red-contrib-ocpp-1.8.0.tgz","fileCount":15,"unpackedSize":213772,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDh4V6XU4KJvbQ0zYTbDPVeDyKlkFt/tCLQNSbbfUqf/AIhAPYjd7szIMAQT2vsm4Vy4R2fAs8ykO89tp9xBzWHKWEL"}]},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"directories":{},"maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-red-contrib-ocpp_1.8.0_1770950696652_0.10811510998015517"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-12T06:47:02.813Z","modified":"2026-02-13T02:44:56.952Z","1.0.0":"2026-02-12T06:47:03.050Z","1.0.1":"2026-02-12T07:47:26.172Z","1.0.2":"2026-02-12T07:54:20.429Z","1.1.0":"2026-02-12T08:41:19.843Z","1.1.1":"2026-02-12T09:06:19.298Z","1.2.0":"2026-02-12T09:19:09.295Z","1.2.1":"2026-02-12T13:09:18.329Z","1.2.2":"2026-02-12T13:38:51.597Z","1.3.0":"2026-02-12T16:13:54.883Z","1.4.0":"2026-02-12T16:41:17.823Z","1.4.1":"2026-02-12T17:04:14.589Z","1.4.2":"2026-02-12T17:12:16.995Z","1.7.0":"2026-02-12T18:05:31.039Z","1.8.0":"2026-02-13T02:44:56.811Z"},"bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-ocpp/issues"},"author":{"name":"BLOKcert"},"license":"MIT","homepage":"https://github.com/MingShyanWei/node-red-contrib-ocpp#readme","keywords":["node-red","ocpp","ocpp1.6","ocpp2.0.1","ev-charging","redis-streams"],"repository":{"type":"git","url":"git+https://github.com/MingShyanWei/node-red-contrib-ocpp.git"},"description":"Node-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"readme":"# @blokcert/node-red-contrib-ocpp\n\nNode-RED nodes for OCPP (Open Charge Point Protocol) message handling via Redis Streams.\n\n## Features\n\n- **OCPP 1.6 & 2.0.1 Support** - Handle both protocol versions with unified message format\n- **Redis Streams Integration** - Consumer groups for scalable message processing\n- **Automatic Normalization** - Convert between OCPP versions transparently\n- **Unified Actions** - Single handler for both OCPP versions (TransactionStarted, TransactionEnded, etc.)\n- **Unified Commands** - Single command name for CSMS → Station operations (RemoteStart, GetConfig, etc.)\n- **CSMS Commands** - Send remote commands to charging stations with automatic version detection\n\n## Installation\n\n```bash\ncd ~/.node-red\nnpm install /path/to/node-red-contrib-ocpp\n```\n\nOr from npm (when published):\n```bash\nnpm install @blokcert/node-red-contrib-ocpp\n```\n\n## Nodes\n\n### ocpp-config\n\nConfiguration node for Redis connection settings. Shared by other OCPP nodes.\n\n### ocpp in\n\nReceives OCPP messages from charging stations via Redis Streams.\n\n**Features:**\n- Consumer group support for load balancing\n- Optional payload normalization (OCPP 1.6/2.0.1 → unified format)\n- Filter by action type or response type\n- Auto-acknowledge messages\n- **Unified Action routing** - Use `msg.ocpp.unifiedAction` to route both OCPP versions with a single handler\n\n**Filter Options:**\n- Empty: Receive all messages (CALL requests + responses)\n- Action name (e.g., `BootNotification`): Only CALL requests with this action\n- `_CallResult`: Only CALLRESULT responses\n- `_CallError`: Only CALLERROR responses\n- `_Response`: Both CALLRESULT and CALLERROR responses\n\n**Output:**\n```javascript\n{\n  payload: { /* Normalized OCPP message payload */ },\n  ocpp: {\n    messageId: \"abc123\",\n    action: \"StartTransaction\",       // Original OCPP action\n    unifiedAction: \"TransactionStarted\",  // Unified action for routing\n    messageType: \"call\",              // \"call\", \"result\", or \"error\"\n    ocppMessageType: 2,               // 2=CALL, 3=CALLRESULT, 4=CALLERROR\n    version: \"1.6\",\n    tenant: \"operator1\",\n    deviceId: \"charger001\",\n    identity: \"operator1:charger001\",\n    timestamp: 1699999999999,\n    streamId: \"1699999999999-0\"\n  }\n}\n```\n\n### ocpp out\n\nSends OCPP responses back to charging stations.\n\n**Features:**\n- Automatic denormalization (unified → OCPP version)\n- Error response support\n- Auto-acknowledge inbound message\n\n**Input:**\n```javascript\n// Normal response\nmsg.payload = {\n  status: \"Accepted\",\n  currentTime: new Date().toISOString(),\n  interval: 300\n};\n\n// Error response\nmsg.ocpp.error = true;\nmsg.ocpp.errorCode = \"NotImplemented\";\nmsg.ocpp.errorDescription = \"Action not supported\";\n```\n\n### ocpp command\n\nSends CSMS-initiated commands to charging stations and receives responses.\n\n**Features:**\n- **Unified Commands** - Use a single command name for both OCPP versions\n- **Automatic Version Detection** - Reads device OCPP version from Redis connection registry\n- Timeout handling with error output\n\n**Unified Commands:**\n| Unified Command | OCPP 1.6 | OCPP 2.0.1 | Description |\n|-----------------|----------|------------|-------------|\n| `RemoteStart` | RemoteStartTransaction | RequestStartTransaction | Start charging remotely |\n| `RemoteStop` | RemoteStopTransaction | RequestStopTransaction | Stop charging remotely |\n| `GetConfig` | GetConfiguration | GetVariables | Get device configuration |\n| `SetConfig` | ChangeConfiguration | SetVariables | Set device configuration |\n| `GetLog` | GetDiagnostics | GetLog | Get diagnostics/log |\n| `Trigger` | TriggerMessage | TriggerMessage | Request status update |\n| `Reset` | Reset | Reset | Reboot the charging station |\n| `Unlock` | UnlockConnector | UnlockConnector | Unlock a connector |\n| `Availability` | ChangeAvailability | ChangeAvailability | Set connector availability |\n| `ClearCache` | ClearCache | ClearCache | Clear authorization cache |\n| `Reserve` | ReserveNow | ReserveNow | Reserve a connector |\n| `CancelReserve` | CancelReservation | CancelReservation | Cancel a reservation |\n\n**Also supports version-specific commands:**\n- All native OCPP 1.6 and 2.0.1 commands can be sent directly\n\n**Response Message:**\n```javascript\n{\n  payload: { /* device response payload */ },\n  ocpp: {\n    messageId: \"abc123\",\n    action: \"GetConfiguration\",     // Version-specific action sent\n    command: \"GetConfig\",           // Original unified command\n    version: \"1.6\",                 // Device OCPP version\n    tenant: \"operator1\",\n    deviceId: \"charger001\",\n    identity: \"operator1:charger001\",\n    response: true,\n    error: false,\n    sentAt: 1699999999999,\n    receivedAt: 1699999999150,\n    latency: 150\n  }\n}\n```\n\n## Unified Action Mapping (CS → CSMS)\n\nUse `msg.ocpp.unifiedAction` to route messages from both OCPP versions with a single handler.\n\n| Unified Action | OCPP 1.6 | OCPP 2.0.1 |\n|----------------|----------|------------|\n| `TransactionStarted` | StartTransaction | TransactionEvent (eventType: Started) |\n| `TransactionEnded` | StopTransaction | TransactionEvent (eventType: Ended) |\n| `TransactionUpdated` | MeterValues (with transactionId) | TransactionEvent (eventType: Updated) |\n| `MeterValues` | MeterValues (without transactionId) | MeterValues |\n| `LogStatus` | DiagnosticsStatusNotification | LogStatusNotification |\n\n**Actions that remain the same in both versions:**\n- BootNotification, Heartbeat, StatusNotification, Authorize\n- DataTransfer, FirmwareStatusNotification\n- SecurityEventNotification, NotifyEvent, NotifyReport (2.0.1 only)\n\n## Unified Command Mapping (CSMS → CS)\n\nUse unified command names to send commands to devices regardless of their OCPP version.\n\n### RemoteStart\n\n```javascript\nmsg.ocpp = {\n  tenant: \"operator1\",\n  deviceId: \"charger001\",\n  command: \"RemoteStart\"  // Automatically converts to version-specific action\n};\nmsg.payload = {\n  idToken: \"RFID12345\",\n  connectorId: 1  // or evseId for 2.0.1\n};\n```\n\n### GetConfig\n\n```javascript\nmsg.ocpp = {\n  tenant: \"operator1\",\n  deviceId: \"charger001\",\n  command: \"GetConfig\"\n};\nmsg.payload = {\n  keys: [\"HeartbeatInterval\", \"ConnectionTimeOut\"]  // Optional, empty = get all\n};\n```\n\n### SetConfig\n\n```javascript\nmsg.ocpp = {\n  tenant: \"operator1\",\n  deviceId: \"charger001\",\n  command: \"SetConfig\"\n};\nmsg.payload = {\n  key: \"HeartbeatInterval\",\n  value: 300\n};\n```\n\n### GetLog\n\n```javascript\nmsg.ocpp = {\n  tenant: \"operator1\",\n  deviceId: \"charger001\",\n  command: \"GetLog\"\n};\nmsg.payload = {\n  location: \"ftp://logs.example.com/upload\",\n  logType: \"DiagnosticsLog\",  // 2.0.1: \"DiagnosticsLog\" or \"SecurityLog\"\n  retries: 3,\n  retryInterval: 60,\n  oldestTimestamp: \"2024-01-01T00:00:00Z\",\n  latestTimestamp: \"2024-01-02T00:00:00Z\"\n};\n```\n\n### Trigger\n\n```javascript\nmsg.ocpp = {\n  tenant: \"operator1\",\n  deviceId: \"charger001\",\n  command: \"Trigger\"\n};\nmsg.payload = {\n  requestedMessage: \"StatusNotification\",\n  connectorId: 1  // Optional, converts to evse for 2.0.1\n};\n// Auto-converts to:\n// 1.6: { requestedMessage: \"StatusNotification\", connectorId: 1 }\n// 2.0.1: { requestedMessage: \"StatusNotification\", evse: { id: 1 } }\n```\n\n### Reset\n\n```javascript\nmsg.ocpp = {\n  tenant: \"operator1\",\n  deviceId: \"charger001\",\n  command: \"Reset\"\n};\nmsg.payload = {\n  type: \"Soft\",  // \"Soft\" or \"Hard\"\n  evseId: 1      // Optional, 2.0.1 only\n};\n// Auto-converts type values:\n// 1.6: { type: \"Soft\" }\n// 2.0.1: { type: \"OnIdle\", evseId: 1 }  (Soft→OnIdle, Hard→Immediate)\n```\n\n### Availability\n\n```javascript\nmsg.ocpp = {\n  tenant: \"operator1\",\n  deviceId: \"charger001\",\n  command: \"Availability\"\n};\nmsg.payload = {\n  available: false,  // true=Operative, false=Inoperative\n  connectorId: 1\n};\n// Auto-converts to:\n// 1.6: { connectorId: 1, type: \"Inoperative\" }\n// 2.0.1: { operationalStatus: \"Inoperative\", evse: { id: 1 } }\n```\n\n### Reserve\n\n```javascript\nmsg.ocpp = {\n  tenant: \"operator1\",\n  deviceId: \"charger001\",\n  command: \"Reserve\"\n};\nmsg.payload = {\n  reservationId: 123,\n  idTag: \"RFID12345\",  // Converts to idToken object for 2.0.1\n  expiryDate: \"2024-12-31T23:59:59Z\",\n  connectorId: 1       // Optional\n};\n// Auto-converts to:\n// 1.6: { connectorId: 1, expiryDate: \"...\", idTag: \"RFID12345\", reservationId: 123 }\n// 2.0.1: { id: 123, expiryDateTime: \"...\", idToken: { idToken: \"RFID12345\", type: \"ISO14443\" }, evseId: 1 }\n```\n\n## Message Normalization\n\nThe nodes automatically normalize OCPP messages to a unified format, allowing you to handle both OCPP 1.6 and 2.0.1 with the same logic.\n\n### BootNotification\n\n| OCPP 1.6 | OCPP 2.0.1 | Unified |\n|----------|------------|---------|\n| chargePointVendor | chargingStation.vendorName | vendor |\n| chargePointModel | chargingStation.model | model |\n| chargePointSerialNumber | chargingStation.serialNumber | serialNumber |\n| firmwareVersion | chargingStation.firmwareVersion | firmwareVersion |\n\n### StatusNotification\n\n| OCPP 1.6 | OCPP 2.0.1 | Unified |\n|----------|------------|---------|\n| connectorId | evseId + connectorId | evseId, connectorId |\n| status | connectorStatus | status |\n| errorCode | (not in 2.0.1) | errorCode |\n\n### Transaction Events (Unified Format)\n\nBoth StartTransaction (1.6) and TransactionEvent:Started (2.0.1) normalize to:\n\n```javascript\n{\n  idToken: \"RFID12345\",\n  idTokenType: \"ISO14443\",\n  evseId: 1,\n  connectorId: 1,\n  meterStart: 1000,\n  timestamp: \"2024-01-01T10:00:00Z\",\n  triggerReason: \"Authorized\"\n}\n```\n\n### LogStatus (Unified Format)\n\nBoth DiagnosticsStatusNotification (1.6) and LogStatusNotification (2.0.1) normalize to:\n\n```javascript\n{\n  status: \"Uploading\",\n  requestId: 123,      // null for 1.6\n  type: \"Diagnostics\"  // \"Diagnostics\" for 1.6, \"Log\" for 2.0.1\n}\n```\n\n## Example Flow\n\n```\n[ocpp in] → [switch by unifiedAction] → [TransactionStarted handler] → [ocpp out]\n                                      → [TransactionEnded handler] → [ocpp out]\n                                      → [TransactionUpdated handler] → [ocpp out]\n                                      → [LogStatus handler] → [ocpp out]\n                                      → [default handler] → [ocpp out]\n```\n\n### Switch Node Configuration\n\nRoute by `msg.ocpp.unifiedAction`:\n- TransactionStarted\n- TransactionEnded\n- TransactionUpdated\n- LogStatus\n- BootNotification\n- Heartbeat\n- StatusNotification\n- (etc.)\n\n## Redis Data Structures\n\n| Key | Type | Description |\n|-----|------|-------------|\n| `ws:inbound` | Stream | Messages from devices (consumer group: biz-workers) |\n| `ws:out:{tenant}:{deviceId}` | Stream | Messages to specific device |\n| `ws:conn:{tenant}:{deviceId}` | Hash | Connection registry (includes OCPP version) |\n| `ws:pending:{tenant}:{deviceId}` | Hash | Pending command tracking |\n\n## Requirements\n\n- Node-RED >= 2.0.0\n- Node.js >= 18.0.0\n- Redis >= 6.0 (for Streams support)\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for version history.\n\n## License\n\nMIT\n\n## Related\n\n- [OCPP WebSocket Server](https://github.com/MingShyanWei/node-red-contrib-ocpp) - The WebSocket server that works with these nodes\n","readmeFilename":"README.md"}