{"_id":"@circutor/node-red-contrib-emod-grpc","_rev":"8-15d981bb9a868cc409506a485769a5a7","name":"@circutor/node-red-contrib-emod-grpc","dist-tags":{"latest":"1.1.2"},"versions":{"1.0.0":{"name":"@circutor/node-red-contrib-emod-grpc","version":"1.0.0","author":{"name":"Circutor"},"license":"ISC","_id":"@circutor/node-red-contrib-emod-grpc@1.0.0","maintainers":[{"name":"circutordev","email":"development@circutor.com"},{"name":"cirdmedina","email":"dmedina@circutor.com"},{"name":"cirdfrestrepo","email":"dfrestrepo@circutor.com"},{"name":"creyes_circutor","email":"creyes@circutor.com"},{"name":"apinto-circutor","email":"apinto@circutor.com"},{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},{"name":"devops_cicd","email":"devops_cicd+ui@circontrol.com"},{"name":"bescorsell_circutor","email":"bescorsell@circutor.com"}],"dist":{"shasum":"780bc7580f212ae53c23ddcae889c148df45fbda","tarball":"https://registry.npmjs.org/@circutor/node-red-contrib-emod-grpc/-/node-red-contrib-emod-grpc-1.0.0.tgz","fileCount":49,"integrity":"sha512-0IFl4BsLivYkMfispqJr7bM49ZYVShTp1fgkFJx7D6R1gQg85A5KxhkUC9TW23YxO8EAgSVNHbAj7H0O9w5MIA==","signatures":[{"sig":"MEQCICqoJDbIsQ5F8WAeqRProBVQ903/ECITr6c/4JdQ99H8AiAExUDILuahlweVoK2NSftduODk0Z/qgxM8corbtHrfPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222164},"main":"index.js","gitHead":"5bfefd73dc81d57a9751455c2f7792b3ba743f8a","scripts":{"lint":"prettier --check \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","test":"mocha \"test/**/*.js\"","format":"prettier --write \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","coverage":"nyc --reporter=lcov --reporter=text mocha \"test/**/*.js\""},"_npmUser":{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},"node-red":{"nodes":{"em3":"src/emod-em3.js","5di2pr":"src/emod-5di2pr.js","7ai2pr":"src/emod-7ai2pr.js","supercap":"src/emod-supercap.js","3di2ai1t2r":"src/emod-3di2ai1t2r.js","em3-config":"src/emod-em3-config.js","5di2pr-config":"src/emod-5di2pr-config.js","7ai2pr-config":"src/emod-7ai2pr-config.js","emod-grpc-server":"src/emod-grpc-server.js","3di2ai1t2r-config":"src/emod-3di2ai1t2r-config.js"}},"_npmVersion":"10.8.2","description":"A gRPC client for emod grpc","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@grpc/grpc-js":"^1.14.3"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","chai":"^4.5.0","mocha":"^7.2.0","sinon":"^21.0.2","node-red":"^4.1.7","prettier":"^3.8.1","proxyquire":"^2.1.3","node-red-node-test-helper":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-emod-grpc_1.0.0_1776251420844_0.3937047632650217","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@circutor/node-red-contrib-emod-grpc","version":"1.0.1","keywords":["node-red","iiot","iot","plc","monitoring","control","automation","modbus","industry4.0","industrial","dashboard","edge","edge-computing"],"author":{"name":"Circutor"},"license":"ISC","_id":"@circutor/node-red-contrib-emod-grpc@1.0.1","maintainers":[{"name":"circutordev","email":"development@circutor.com"},{"name":"cirdmedina","email":"dmedina@circutor.com"},{"name":"cirdfrestrepo","email":"dfrestrepo@circutor.com"},{"name":"creyes_circutor","email":"creyes@circutor.com"},{"name":"apinto-circutor","email":"apinto@circutor.com"},{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},{"name":"devops_cicd","email":"devops_cicd+ui@circontrol.com"},{"name":"bescorsell_circutor","email":"bescorsell@circutor.com"}],"dist":{"shasum":"622db20ba69b7fd7105e32a6008e6d481d90240f","tarball":"https://registry.npmjs.org/@circutor/node-red-contrib-emod-grpc/-/node-red-contrib-emod-grpc-1.0.1.tgz","fileCount":49,"integrity":"sha512-zBZ3KWVkaoctJAHmgZjcDh2Yo7wkYzmU3fABLu3xzCPd2nGfzg3nLn0PNxXI2Up/G16kSoH1VF6rRgX3c9mEgg==","signatures":[{"sig":"MEYCIQDatvgcHimAzLiUMqc6/AhdqNu9sx9B6pEfA7JgsFCnSgIhAMAAT5QAnoLrRzwkXfmspwhEbkPVtVFaO7QwYvPv8teE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222387},"main":"index.js","gitHead":"33a4e34a91d8163e355d1da7d98c9cb307719f2a","scripts":{"lint":"prettier --check \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","test":"mocha \"test/**/*.js\"","format":"prettier --write \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","coverage":"nyc --reporter=lcov --reporter=text mocha \"test/**/*.js\""},"_npmUser":{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},"node-red":{"nodes":{"em3":"src/emod-em3.js","5di2pr":"src/emod-5di2pr.js","7ai2pr":"src/emod-7ai2pr.js","supercap":"src/emod-supercap.js","3di2ai1t2r":"src/emod-3di2ai1t2r.js","em3-config":"src/emod-em3-config.js","5di2pr-config":"src/emod-5di2pr-config.js","7ai2pr-config":"src/emod-7ai2pr-config.js","emod-grpc-server":"src/emod-grpc-server.js","3di2ai1t2r-config":"src/emod-3di2ai1t2r-config.js"}},"_npmVersion":"10.8.2","description":"A gRPC client for emod grpc","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@grpc/grpc-js":"^1.14.3"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","chai":"^4.5.0","mocha":"^7.2.0","sinon":"^21.0.2","node-red":"^4.1.7","prettier":"^3.8.1","proxyquire":"^2.1.3","node-red-node-test-helper":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-emod-grpc_1.0.1_1776252753950_0.9861126110788911","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@circutor/node-red-contrib-emod-grpc","version":"1.0.2","keywords":["node-red","iiot","iot","plc","monitoring","control","automation","modbus","industry4.0","industrial","dashboard","edge","edge-computing"],"author":{"name":"Circutor"},"license":"ISC","_id":"@circutor/node-red-contrib-emod-grpc@1.0.2","maintainers":[{"name":"circutordev","email":"development@circutor.com"},{"name":"cirdmedina","email":"dmedina@circutor.com"},{"name":"cirdfrestrepo","email":"dfrestrepo@circutor.com"},{"name":"creyes_circutor","email":"creyes@circutor.com"},{"name":"apinto-circutor","email":"apinto@circutor.com"},{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},{"name":"devops_cicd","email":"devops_cicd+ui@circontrol.com"},{"name":"bescorsell_circutor","email":"bescorsell@circutor.com"}],"dist":{"shasum":"cdea2e01140e41d450647203e9052119cd249398","tarball":"https://registry.npmjs.org/@circutor/node-red-contrib-emod-grpc/-/node-red-contrib-emod-grpc-1.0.2.tgz","fileCount":49,"integrity":"sha512-q0x6BzqYep8px/Jo3P20uTq9Oe8pTtnuZJfoeF8jrv60tmeLjElPoxvwEd4xFfG4Yu9sxTp+bVra1uKCYMYWXw==","signatures":[{"sig":"MEYCIQDmB4ELOADBiUNzx0z0PBzcvFGmXsqUKTDi8kc3s/21oAIhAKNYGBY1S0RnHvafh/I2lJXVPSKzTb5vpese0OvdPsIf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222387},"main":"index.js","gitHead":"0fa1ef66bd9e60b97b3b122a9e9372c7937ff1b3","scripts":{"lint":"prettier --check \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","test":"mocha \"test/**/*.js\"","format":"prettier --write \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","coverage":"nyc --reporter=lcov --reporter=text mocha \"test/**/*.js\""},"_npmUser":{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},"node-red":{"nodes":{"em3":"src/emod-em3.js","5di2pr":"src/emod-5di2pr.js","7ai2pr":"src/emod-7ai2pr.js","supercap":"src/emod-supercap.js","3di2ai1t2r":"src/emod-3di2ai1t2r.js","em3-config":"src/emod-em3-config.js","5di2pr-config":"src/emod-5di2pr-config.js","7ai2pr-config":"src/emod-7ai2pr-config.js","emod-grpc-server":"src/emod-grpc-server.js","3di2ai1t2r-config":"src/emod-3di2ai1t2r-config.js"}},"_npmVersion":"10.8.2","description":"A gRPC client for emod grpc","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@grpc/grpc-js":"^1.14.3"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","chai":"^4.5.0","mocha":"^7.2.0","sinon":"^21.0.2","node-red":"^4.1.7","prettier":"^3.8.1","proxyquire":"^2.1.3","node-red-node-test-helper":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-emod-grpc_1.0.2_1776342975886_0.4912837870259743","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@circutor/node-red-contrib-emod-grpc","version":"1.0.3","keywords":["node-red","iiot","iot","plc","monitoring","control","automation","modbus","industry4.0","industrial","dashboard","edge","edge-computing"],"author":{"name":"Circutor"},"license":"ISC","_id":"@circutor/node-red-contrib-emod-grpc@1.0.3","maintainers":[{"name":"circutordev","email":"development@circutor.com"},{"name":"cirdmedina","email":"dmedina@circutor.com"},{"name":"cirdfrestrepo","email":"dfrestrepo@circutor.com"},{"name":"creyes_circutor","email":"creyes@circutor.com"},{"name":"apinto-circutor","email":"apinto@circutor.com"},{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},{"name":"devops_cicd","email":"devops_cicd+ui@circontrol.com"},{"name":"bescorsell_circutor","email":"bescorsell@circutor.com"}],"dist":{"shasum":"45c18daa48074af4329a8893e2ea24e4ffe5522f","tarball":"https://registry.npmjs.org/@circutor/node-red-contrib-emod-grpc/-/node-red-contrib-emod-grpc-1.0.3.tgz","fileCount":49,"integrity":"sha512-E9PiwOnAME7eN3P32b3nUNndeuV7o+/BL5uY06PwU3VvR+ON12Ccp1o99VZQXtu3yIz/tLpAGvjpAlUykj570w==","signatures":[{"sig":"MEUCIDgMsYm2KRJzV6EryZ2/y+rC4sa6Ft59F9taIxnm8Q/aAiEA1ZW1AMTfFqLYfs4xuh/pa3JEyTe3L3mJ+uNOy7ksOyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222387},"main":"index.js","gitHead":"e5c1663411aa4a15a2c143d99986093fdaaae5dc","scripts":{"lint":"prettier --check \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","test":"mocha \"test/**/*.js\"","format":"prettier --write \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","coverage":"nyc --reporter=lcov --reporter=text mocha \"test/**/*.js\""},"_npmUser":{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},"node-red":{"nodes":{"em3":"src/emod-em3.js","5di2pr":"src/emod-5di2pr.js","7ai2pr":"src/emod-7ai2pr.js","supercap":"src/emod-supercap.js","3di2ai1t2r":"src/emod-3di2ai1t2r.js","em3-config":"src/emod-em3-config.js","5di2pr-config":"src/emod-5di2pr-config.js","7ai2pr-config":"src/emod-7ai2pr-config.js","emod-grpc-server":"src/emod-grpc-server.js","3di2ai1t2r-config":"src/emod-3di2ai1t2r-config.js"}},"_npmVersion":"10.8.2","description":"A gRPC client for emod grpc","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@grpc/grpc-js":"^1.14.3"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","chai":"^4.5.0","mocha":"^7.2.0","sinon":"^21.0.2","node-red":"^4.1.7","prettier":"^3.8.1","proxyquire":"^2.1.3","node-red-node-test-helper":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-emod-grpc_1.0.3_1776343614425_0.1663694256222359","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@circutor/node-red-contrib-emod-grpc","version":"1.0.4","keywords":["node-red","iiot","iot","plc","monitoring","control","automation","modbus","industry4.0","industrial","dashboard","edge","edge-computing"],"author":{"name":"Circutor"},"license":"ISC","_id":"@circutor/node-red-contrib-emod-grpc@1.0.4","maintainers":[{"name":"circutordev","email":"development@circutor.com"},{"name":"cirdmedina","email":"dmedina@circutor.com"},{"name":"cirdfrestrepo","email":"dfrestrepo@circutor.com"},{"name":"creyes_circutor","email":"creyes@circutor.com"},{"name":"apinto-circutor","email":"apinto@circutor.com"},{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},{"name":"devops_cicd","email":"devops_cicd+ui@circontrol.com"},{"name":"bescorsell_circutor","email":"bescorsell@circutor.com"}],"dist":{"shasum":"92c5912a040b3e007b83e92afe68257b3cdfa6cd","tarball":"https://registry.npmjs.org/@circutor/node-red-contrib-emod-grpc/-/node-red-contrib-emod-grpc-1.0.4.tgz","fileCount":49,"integrity":"sha512-EF83bhEuKMn8PmPtDdBDWJgHkmeXV5eZslfT6vKTPHDbTZa7B1AUy9h0XH0Cvd98Uw147yicJxMnp1s2mBV1OA==","signatures":[{"sig":"MEYCIQCy2/jhsWpPo4a9l9viJiqmcJqZmbPhf9Xi6Of70l4hewIhAIDFE1HksXu3XpYiFYkRlt+3zXeFNRXDPPLYANLuXx0j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222387},"main":"index.js","gitHead":"304ea39a35ce5b4db8aba05fbfe0da8779a7289f","scripts":{"lint":"prettier --check \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","test":"mocha \"test/**/*.js\"","format":"prettier --write \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","coverage":"nyc --reporter=lcov --reporter=text mocha \"test/**/*.js\""},"_npmUser":{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},"node-red":{"nodes":{"em3":"src/emod-em3.js","5di2pr":"src/emod-5di2pr.js","7ai2pr":"src/emod-7ai2pr.js","supercap":"src/emod-supercap.js","3di2ai1t2r":"src/emod-3di2ai1t2r.js","em3-config":"src/emod-em3-config.js","5di2pr-config":"src/emod-5di2pr-config.js","7ai2pr-config":"src/emod-7ai2pr-config.js","emod-grpc-server":"src/emod-grpc-server.js","3di2ai1t2r-config":"src/emod-3di2ai1t2r-config.js"}},"_npmVersion":"10.8.2","description":"A gRPC client for emod grpc","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@grpc/grpc-js":"^1.14.3"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","chai":"^4.5.0","mocha":"^7.2.0","sinon":"^21.0.2","node-red":"^4.1.7","prettier":"^3.8.1","proxyquire":"^2.1.3","node-red-node-test-helper":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-emod-grpc_1.0.4_1777537652839_0.26139438315708197","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@circutor/node-red-contrib-emod-grpc","version":"1.0.5","keywords":["node-red","iiot","iot","plc","monitoring","control","automation","modbus","industry4.0","industrial","dashboard","edge","edge-computing"],"author":{"name":"Circutor"},"license":"ISC","_id":"@circutor/node-red-contrib-emod-grpc@1.0.5","maintainers":[{"name":"circutordev","email":"development@circutor.com"},{"name":"cirdmedina","email":"dmedina@circutor.com"},{"name":"cirdfrestrepo","email":"dfrestrepo@circutor.com"},{"name":"creyes_circutor","email":"creyes@circutor.com"},{"name":"apinto-circutor","email":"apinto@circutor.com"},{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},{"name":"devops_cicd","email":"devops_cicd+ui@circontrol.com"},{"name":"bescorsell_circutor","email":"bescorsell@circutor.com"}],"dist":{"shasum":"b6a9859b326c42a1c304125a446fde80ba6a5023","tarball":"https://registry.npmjs.org/@circutor/node-red-contrib-emod-grpc/-/node-red-contrib-emod-grpc-1.0.5.tgz","fileCount":49,"integrity":"sha512-l+FsvCj3aVBzvGvtco7gzGjPbXAEJvW5buoFEeOJ0iY3j73RvhqJBNwvDr/K7dhS8uDaTK26VK23mJFPjcAePw==","signatures":[{"sig":"MEYCIQCFud4YSJrIu7fhV8mr6ZOMeaD9Qzc+/fUSSbD7ZdAMvwIhAI/M2WmIosVVHDRpGSpioTRRQV8hNdc5eAy99JScEIHz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222387},"main":"index.js","gitHead":"ac42ebebf2fdf885d3b08fb89bb04d20009183d5","scripts":{"lint":"prettier --check \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","test":"mocha \"test/**/*.js\"","format":"prettier --write \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","coverage":"nyc --reporter=lcov --reporter=text mocha \"test/**/*.js\""},"_npmUser":{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},"node-red":{"nodes":{"em3":"src/emod-em3.js","5di2pr":"src/emod-5di2pr.js","7ai2pr":"src/emod-7ai2pr.js","supercap":"src/emod-supercap.js","3di2ai1t2r":"src/emod-3di2ai1t2r.js","em3-config":"src/emod-em3-config.js","5di2pr-config":"src/emod-5di2pr-config.js","7ai2pr-config":"src/emod-7ai2pr-config.js","emod-grpc-server":"src/emod-grpc-server.js","3di2ai1t2r-config":"src/emod-3di2ai1t2r-config.js"}},"_npmVersion":"10.8.2","description":"A gRPC client for emod grpc","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@grpc/grpc-js":"^1.14.3"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","chai":"^4.5.0","mocha":"^7.2.0","sinon":"^21.0.2","node-red":"^4.1.7","prettier":"^3.8.1","proxyquire":"^2.1.3","node-red-node-test-helper":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-emod-grpc_1.0.5_1777539986200_0.021105642247327472","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@circutor/node-red-contrib-emod-grpc","version":"1.1.0","keywords":["node-red","iiot","iot","plc","monitoring","control","automation","modbus","industry4.0","industrial","dashboard","edge","edge-computing"],"author":{"name":"Circutor"},"license":"ISC","_id":"@circutor/node-red-contrib-emod-grpc@1.1.0","maintainers":[{"name":"circutordev","email":"development@circutor.com"},{"name":"cirdmedina","email":"dmedina@circutor.com"},{"name":"cirdfrestrepo","email":"dfrestrepo@circutor.com"},{"name":"creyes_circutor","email":"creyes@circutor.com"},{"name":"apinto-circutor","email":"apinto@circutor.com"},{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},{"name":"devops_cicd","email":"devops_cicd+ui@circontrol.com"},{"name":"bescorsell_circutor","email":"bescorsell@circutor.com"}],"dist":{"shasum":"6357805e4dd435b777df65630a4bd790b912a75f","tarball":"https://registry.npmjs.org/@circutor/node-red-contrib-emod-grpc/-/node-red-contrib-emod-grpc-1.1.0.tgz","fileCount":49,"integrity":"sha512-FmtS2TQOZ4mhe7tzs+4xQ/C1/jIA+7JQ4q+h4V9wfkTT29+0rtxu73BrKTNtVWgs5Ffz/9YlKQR9UAVEQc81aA==","signatures":[{"sig":"MEQCIFSfxRpNRlMeXmkqLSIAYVpbU0V+HpDeGl21C8IqW9TJAiBHNxXPOqh09KIX6ftbbJiLU0xT1EO47otw2F6PAxg7TQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226272},"main":"index.js","gitHead":"42451b94fd38e411eaaea1638ea945cc063ff112","scripts":{"lint":"prettier --check \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","test":"mocha \"test/**/*.js\"","format":"prettier --write \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","coverage":"nyc --reporter=lcov --reporter=text mocha \"test/**/*.js\""},"_npmUser":{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},"node-red":{"nodes":{"em3":"src/emod-em3.js","5di2pr":"src/emod-5di2pr.js","7ai2pr":"src/emod-7ai2pr.js","supercap":"src/emod-supercap.js","3di2ai1t2r":"src/emod-3di2ai1t2r.js","em3-config":"src/emod-em3-config.js","5di2pr-config":"src/emod-5di2pr-config.js","7ai2pr-config":"src/emod-7ai2pr-config.js","emod-grpc-server":"src/emod-grpc-server.js","3di2ai1t2r-config":"src/emod-3di2ai1t2r-config.js"}},"_npmVersion":"10.8.2","description":"A gRPC client for emod grpc","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@grpc/grpc-js":"^1.14.3"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","chai":"^4.5.0","mocha":"^7.2.0","sinon":"^21.0.2","node-red":"^4.1.7","prettier":"^3.8.1","proxyquire":"^2.1.3","node-red-node-test-helper":"^0.3.6"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-emod-grpc_1.1.0_1778162864787_0.1891635213176246","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@circutor/node-red-contrib-emod-grpc","version":"1.1.2","description":"A gRPC client for emod grpc","main":"index.js","keywords":["node-red","iiot","iot","plc","monitoring","control","automation","modbus","industry4.0","industrial","dashboard","edge","edge-computing"],"scripts":{"lint":"prettier --check \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","format":"prettier --write \"src/**/*.{js,html}\" \"package.json\" \".prettierrc\"","test":"mocha \"test/**/*.js\"","coverage":"nyc --reporter=lcov --reporter=text mocha \"test/**/*.js\""},"author":{"name":"Circutor"},"license":"ISC","node-red":{"nodes":{"7ai2pr":"src/emod-7ai2pr.js","7ai2pr-config":"src/emod-7ai2pr-config.js","5di2pr":"src/emod-5di2pr.js","5di2pr-config":"src/emod-5di2pr-config.js","3di2ai1t2r":"src/emod-3di2ai1t2r.js","3di2ai1t2r-config":"src/emod-3di2ai1t2r-config.js","em3":"src/emod-em3.js","em3-config":"src/emod-em3-config.js","supercap":"src/emod-supercap.js","emod-grpc-server":"src/emod-grpc-server.js"}},"dependencies":{"@grpc/grpc-js":"^1.14.3"},"devDependencies":{"chai":"^4.5.0","mocha":"^7.2.0","node-red":"^4.1.7","node-red-node-test-helper":"^0.3.6","nyc":"^18.0.0","prettier":"^3.8.1","proxyquire":"^2.1.3","sinon":"^21.0.2"},"_id":"@circutor/node-red-contrib-emod-grpc@1.1.2","gitHead":"5df880eb111e55b72a2e29b07c5b7703034a04dc","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-nI9npxq0vbf3LX6FzNynICtZR8QtYxy7CZYXGVUtYc+oIkufZ4FRBgyKc3wLuaWTTICCieWjhfq2q6kRiMueMw==","shasum":"fe847f8c1c7dc297c580b917726a3d4ac4ef353d","tarball":"https://registry.npmjs.org/@circutor/node-red-contrib-emod-grpc/-/node-red-contrib-emod-grpc-1.1.2.tgz","fileCount":49,"unpackedSize":226921,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAtuLrTUJXiXKDLWOiKfigbzZ0T9jxuHgv0lplsA+ct6AiEA2Qp1vQ6vJ5CxoauTdgRooi0qzjXbp5QJ/SedshuyQx0="}]},"_npmUser":{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},"directories":{},"maintainers":[{"name":"circutordev","email":"development@circutor.com"},{"name":"cirdmedina","email":"dmedina@circutor.com"},{"name":"cirdfrestrepo","email":"dfrestrepo@circutor.com"},{"name":"creyes_circutor","email":"creyes@circutor.com"},{"name":"apinto-circutor","email":"apinto@circutor.com"},{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},{"name":"devops_cicd","email":"devops_cicd+ui@circontrol.com"},{"name":"bescorsell_circutor","email":"bescorsell@circutor.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-red-contrib-emod-grpc_1.1.2_1785423867491_0.21784519043970296"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-15T11:10:20.763Z","modified":"2026-07-30T15:04:28.911Z","1.0.0":"2026-04-15T11:10:20.980Z","1.0.1":"2026-04-15T11:32:34.082Z","1.0.2":"2026-04-16T12:36:16.016Z","1.0.3":"2026-04-16T12:46:54.606Z","1.0.4":"2026-04-30T08:27:32.982Z","1.0.5":"2026-04-30T09:06:26.354Z","1.1.0":"2026-05-07T14:07:44.927Z","1.1.2":"2026-07-30T15:04:27.674Z"},"author":{"name":"Circutor"},"license":"ISC","keywords":["node-red","iiot","iot","plc","monitoring","control","automation","modbus","industry4.0","industrial","dashboard","edge","edge-computing"],"description":"A gRPC client for emod grpc","maintainers":[{"name":"circutordev","email":"development@circutor.com"},{"name":"cirdmedina","email":"dmedina@circutor.com"},{"name":"cirdfrestrepo","email":"dfrestrepo@circutor.com"},{"name":"creyes_circutor","email":"creyes@circutor.com"},{"name":"apinto-circutor","email":"apinto@circutor.com"},{"name":"jgisbert_at_circutor","email":"jgisbert@circutor.com"},{"name":"devops_cicd","email":"devops_cicd+ui@circontrol.com"},{"name":"bescorsell_circutor","email":"bescorsell@circutor.com"}],"readme":"# node-red-contrib-emod-grpc\n\n[![Platform](https://img.shields.io/badge/platform-Node--RED-red)](https://nodered.org)\n\n[Node-RED][1] package to integrate [eManager][2] expansion modules over gRPC to monitor and control digital & analogue inputs, relays, energy meters, temperature sensors and more. eManager is an OEM industrial controller built with [eMOD, the industrial modular hardware technology][3].\n\nThe eManager Platform is an open source embedded platform, built on Linux and designed for easy develop industrial and edge computing applications. It's ready to run, build, and IoT connect out-of-the-box.\n\n# Installation\n\nYou can install the nodes using node-red's \"Manage palette\" in the side bar.\n\nOr run the following command in the root directory of your Node-RED installation\n\n    npm install node-red-contrib-emod-grpc --save\n\n# Usage\n\nAll module nodes require a **eMod-gRPC-Server** configuration node that defines the gRPC server address and port. The server node manages the connection, keepalive, and automatic reconnection — dependent nodes receive `server-up` / `server-down` messages when the connection state changes.\n\n### eMod-gRPC-Server configuration\n\nThe **eMod-gRPC-Server** config node supports two server types:\n\n- **TCP**: connect to a remote or local gRPC endpoint using host/address and port.\n  - **Server type**: `TCP`\n  - **Server**: host name or IP address, for example `localhost`, `192.168.1.10`, or `emod.local`\n  - **Port**: TCP port, for example `50051`\n\n  Example:\n\n  ```json\n  {\n    \"brokerType\": \"tcp\",\n    \"broker\": \"localhost\",\n    \"port\": 50051\n  }\n  ```\n\n- **Unix**: connect through a Unix domain socket.\n  - **Server type**: `Unix`\n  - **Server**: absolute socket path, for example `/run/emod.sock`\n  - **Port**: not used\n\n  Example:\n\n  ```json\n  {\n    \"brokerType\": \"unix\",\n    \"broker\": \"/run/emod.sock\"\n  }\n  ```\n\nIn the editor, the **Port** field is only shown for **TCP** connections. For **Unix** connections, only the socket path is required.\n\nEach module node can operate in **Poll mode** (request data on demand via input messages) or in **Event mode** (the module pushes data when a configured condition is met). The available event modes vary per module type.\n\n&nbsp;\n\n## Supercap\n\nConnects to a Supercap eMOD module to monitor the external power source status and to trigger a controlled power-off.\n\nThis node has 1 output: **Power source change**.\n\n### Working modes\n\n- **Event**: the module streams a notification whenever the external power state changes.\n\n### Available functions\n\n- **power_off**: triggers a controlled power-off of the system. Only executes when the value is truthy.\n\n  Example:\n\n  ```json\n  {\"power_off\": true}\n  ```\n\n&nbsp;\n\n## 5DI+2PR (5 Digital Inputs + 2 Power Relays)\n\nConnects to a 5DI+2PR eMOD module to manage 5 digital inputs and 2 relays individually or jointly.\n\nThis node has 2 outputs: **Digital inputs** and **Relays**.\n\n### Working modes\n\n- Poll\n- [Event] Time interval: module reports all input statuses at a fixed time interval\n- [Event] Input value change: module notifies when a digital input changes\n- [Event] Pulse count change: module notifies when the pulse counter surpasses the threshold from last notification\n\n### Available functions for digital inputs\n\n- **di_get_one** (Poll mode only): obtains the status or pulse count of a single digital input.\n\n  Examples:\n\n  To obtain the status of a single digital input:\n\n  ```json\n  {\"di_get_one\": {\"index\": 3, \"mode\": \"status\"}}\n  ```\n\n  Response:\n\n  ```json\n  {\"status\": {\"index\": 3, \"value\": true}}\n  ```\n\n  To obtain the pulse count:\n\n  ```json\n  {\"di_get_one\": {\"index\": 3, \"mode\": \"pulse_count\"}}\n  ```\n\n  Response:\n\n  ```json\n  {\"counter\": {\"index\": 3, \"value\": 15}}\n  ```\n\n- **di_get_all** (Poll mode only): obtains the status or pulse count of all digital inputs.\n\n  Examples:\n\n  To obtain the status of all digital inputs:\n\n  ```json\n  {\"di_get_all\": \"status\"}\n  ```\n\n  Response:\n\n  ```json\n  {\"all_status\": [false, false, false, true, false]}\n  ```\n\n  To obtain the pulse count of all digital inputs:\n\n  ```json\n  {\"di_get_all\": \"pulse_count\"}\n  ```\n\n  Response:\n\n  ```json\n  {\"all_counters\": [0, 5, 10, 2, 23]}\n  ```\n\n- **reset_pulse_count**: resets one or all pulse counters.\n\n  Examples:\n\n  Reset the third input:\n\n  ```json\n  {\"reset_pulse_count\": 2}\n  ```\n\n  Reset all inputs:\n\n  ```json\n  {\"reset_pulse_count\": \"all\"}\n  ```\n\n### Available functions for relays\n\n- **relay_get_one**: obtains the status of a single relay.\n\n  ```json\n  {\"relay_get_one\": 0}\n  ```\n\n  Response:\n\n  ```json\n  {\"status\": {\"index\": 0, \"value\": false}}\n  ```\n\n- **relay_get_all**: obtains the status of all relays.\n\n  ```json\n  {\"relay_get_all\": \"status\"}\n  ```\n\n  Response:\n\n  ```json\n  {\"all_status\": [true, false]}\n  ```\n\n- **relay_set_one**: activates or deactivates a single relay.\n\n  ```json\n  {\"relay_set_one\": {\"index\": 0, \"value\": true}}\n  ```\n\n  Response:\n\n  ```json\n  {\"status\": {\"index\": 0, \"value\": true}}\n  ```\n\n- **relay_set**: activates or deactivates some relays. Use `true` to activate, `false` to deactivate, or `null` to leave unchanged.\n\n  ```json\n  {\"relay_set\": [true, false]}\n  ```\n\n  Response:\n\n  ```json\n  {\"all_status\": [true, false]}\n  ```\n\n- **relay_set_all**: activates or deactivates all relays.\n\n  ```json\n  {\"relay_set_all\": true}\n  ```\n\n  Response:\n\n  ```json\n  {\"all_status\": [true, true]}\n  ```\n\n&nbsp;\n\n## 7AI+2PR (7 Analog Inputs + 2 Power Relays)\n\nConnects to a 7AI+2PR eMOD module to manage 7 analog inputs and 2 relays individually or jointly.\n\nEach analog input can be configured as voltage or current mode. Relay pulse width is configurable.\n\nThis node has 2 outputs: **Analog inputs** and **Relays**.\n\n### Working modes\n\nAnalog inputs:\n- Poll\n- [Event] Time interval: module keeps notifying values of all inputs at a fixed time interval\n- [Event] Value threshold: module notifies when the measured value in any input surpasses the threshold from last notification\n- [Event] Value within range: module notifies when the measured value in any input enters within a value range\n- [Event] Value out of range: module notifies when the measured value in any input falls out of a value range\n\nRelays operate in Poll mode only.\n\n### Available functions for analog inputs\n\n- **ai_get_one** (Poll mode only): obtains the value of a single analog input.\n\n  ```json\n  {\"ai_get_one\": 3}\n  ```\n\n  Response (when configured as voltage):\n\n  ```json\n  {\"voltage\": {\"index\": 3, \"value\": 3.1}}\n  ```\n\n  Response (when configured as current):\n\n  ```json\n  {\"current\": {\"index\": 3, \"value\": 0.3}}\n  ```\n\n- **ai_get_all** (Poll mode only): obtains the value of all analog inputs.\n\n  ```json\n  {\"ai_get_all\": \"status\"}\n  ```\n\n  Response:\n\n  ```json\n  {\"values\": [{\"voltage\": {\"index\": 0, \"value\": 5.2}}, {\"voltage\": {\"index\": 1, \"value\": 3.2}}, {\"voltage\": {\"index\": 2, \"value\": 4.8}}, {\"current\": {\"index\": 3, \"value\": 0.3}}, {\"current\": {\"index\": 4, \"value\": 0.2}}, {\"current\": {\"index\": 5, \"value\": 0.4}}, {\"current\": {\"index\": 6, \"value\": 0.3}}]}\n  ```\n\n### Available functions for relays\n\nSame as [5DI+2PR relay functions](#available-functions-for-relays) (2 relays).\n\n&nbsp;\n\n## 3DI+2AI+1T+2SR (3 Digital Inputs + 2 Analog Inputs + 1 Temperature Sensor + 2 Signal Relays)\n\nConnects to a 3DI+2AI+1T+2SR eMOD module to manage 3 digital inputs, 2 analog inputs, 1 temperature sensor and 2 relays.\n\nThis node has 4 outputs: **Digital inputs**, **Analog inputs**, **Thermometers** and **Relays**.\n\n### Working modes\n\nDigital inputs, analog inputs, and the temperature sensor each have independent event mode configuration:\n\nDigital inputs:\n- Poll\n- [Event] Time interval\n- [Event] Input value change\n- [Event] Pulse count change\n\nAnalog inputs:\n- Poll\n- [Event] Time interval\n- [Event] Value threshold\n- [Event] Value within range\n- [Event] Value out of range\n\nTemperature sensor:\n- Poll\n- [Event] Time interval\n- [Event] Value threshold\n- [Event] Value within range\n- [Event] Value out of range\n\nRelays operate in Poll mode only.\n\n### Available functions\n\nDigital input functions (`di_get_one`, `di_get_all`, `reset_pulse_count`) and relay functions (`relay_get_one`, `relay_get_all`, `relay_set_one`, `relay_set`, `relay_set_all`) work the same as in the 5DI+2PR module, adjusted for 3 digital inputs and 2 relays.\n\nAnalog input functions (`ai_get_one`, `ai_get_all`) work the same as in the 7AI+2PR module, adjusted for 2 analog inputs.\n\n#### Temperature sensor functions\n\n- **temp_get_one** (Poll mode only): obtains the temperature reading from the sensor.\n\n  ```json\n  {\"temp_get_one\": {\"index\": 0}}\n  ```\n\n  Response:\n\n  ```json\n  {\"status\": {\"index\": 0, \"value\": 23.45, \"error\": \"NONE\"}}\n  ```\n\n  If the sensor is unplugged:\n\n  ```json\n  {\"index\": 0, \"value\": 0, \"status\": \"UNPLUGGED\"}\n  ```\n\n  If the sensor is wrongly configured:\n\n  ```json\n  {\"index\": 0, \"value\": 0, \"status\": \"WRONG_CONFIGURATION\"}\n  ```\n\n&nbsp;\n\n## EM3 (3-Phase Energy Meter)\n\nConnects to an EM3 eMOD module to read power and energy parameters from a 3-phase energy meter.\n\nThis node has 1 output.\n\n### Working modes\n\n- Poll\n- [Event] Time interval: module streams all meter readings at a fixed time interval (minimum 1000 ms)\n\n### Configuration\n\nThe EM3 configuration node allows setting:\n- Work mode and metering standard\n- Current full scale and secondary current full scale per phase (L1, L2, L3)\n- Voltage full scale and secondary voltage full scale per phase\n- Current direction per phase\n\n### Available functions (Poll mode only)\n\n- **power_get_one**: obtains power parameters for a single phase.\n\n  ```json\n  {\"power_get_one\": {\"phase\": 1}}\n  ```\n\n  Response includes: voltage, current, frequency, cosine, angle, active/apparent/reactive power (imported and exported), and maximeter.\n\n- **power_get_combined**: obtains combined power parameters across all phases.\n\n  ```json\n  {\"power_get_combined\": true}\n  ```\n\n  Response includes: neutral current, power factor, neutral angle, phase rotation, active/apparent/reactive power (imported and exported), and maximeter.\n\n- **power_get_all**: obtains power parameters for all 3 phases plus the combined values in a single call.\n\n  ```json\n  {\"power_get_all\": true}\n  ```\n\n- **energy_get_one**: obtains energy parameters for a single phase.\n\n  ```json\n  {\"energy_get_one\": {\"phase\": 1}}\n  ```\n\n  Response includes: active/apparent/inductive/capacitive energy (imported and exported).\n\n- **energy_get_combined**: obtains combined energy parameters across all phases.\n\n  ```json\n  {\"energy_get_combined\": true}\n  ```\n\n- **energy_get_all**: obtains energy parameters for all 3 phases plus the combined values in a single call.\n\n  ```json\n  {\"energy_get_all\": true}\n  ```\n\n- **reset**: resets all energy meters. After resetting, automatically returns the energy values for all phases.\n\n  ```json\n  {\"reset\": true}\n  ```\n\n[1]:https://nodered.org\n[2]:https://www.pickdata.net/emanager-iiot-modular-controller\n[3]:https://www.pickdata.net/emod-oem-iot-modular-device\n","readmeFilename":"README.md"}