node-red-contrib-modbus
Version:
The all in one Modbus TCP, UDP and Serial contribution long term supported package for Node-RED.
3 lines (2 loc) • 4.82 kB
JavaScript
module.exports=function(o){require("source-map-support").install();var r=require("./modbus-basics"),d=require("./core/modbus-core"),a=require("debug")("contribModbus:read");o.nodes.registerType("modbus-flex-fc",function(e){o.nodes.createNode(this,e),this.name=e.name,this.topic=e.topic,this.unitid=e.unitid,this.showStatusActivities=e.showStatusActivities,this.showErrors=e.showErrors,this.showWarnings=e.showWarnings,this.connection=null,this.emptyMsgOnFail=e.emptyMsgOnFail,this.internalDebugLog=a,this.verboseLogging=o.settings.verbose,this.fc=e.fc,this.requestCard=e.requestCard,this.responseCard=e.responseCard,this.environmentVerbosity=o.settings.verbose;var t=this;function s(e){t.environmentVerbosity&&t.showWarnings&&t.warn("Read -> "+e+" address: "+t.adr)}t.statusText="waiting",i(t.statusText),s("open node "+t.id);var n=o.nodes.getNode(e.server);function i(e){var e=r.setNodeStatusProperties(e,t.showStatusActivities),o=t.statusText,s=e.status;s!==o&&(t.statusText=s,t.status({fill:e.fill,shape:e.shape,text:s}))}n&&(t.isReadyForInput=function(){return n.client&&n.isActive()},t.isNotReadyForInput=function(){return!t.isReadyForInput()},t.onModbusInit=function(){i("initialized")},t.onModbusConnect=function(){i("connected"),t.modbusRead()},t.onModbusRegister=function(){t.showStatusActivities&&i("registered"),n.serialSendingAllowed&&i("connected")},t.onModbusActive=function(){i("active")},t.onModbusQueue=function(){i("queue")},t.onModbusError=function(e){i("failure"),t.showErrors&&t.warn(e)},t.onModbusClose=function(){i("closed")},t.onModbusBroken=function(){i("broken")},t.onModbusReadDone=function(e,o){var s;t.showStatusActivities&&i("reading done"),e.data,s=o.topic||t.topic,t.send({topic:s,payload:e,input:o,sendingNodeId:t.id})},t.errorProtocolMsg=function(e,o){t.showErrors&&r.logMsgError(t,e,o)},t.onModbusReadError=function(e,o){t.internalDebugLog(e.message),t.errorProtocolMsg(e,o),r.sendEmptyMsgOnFail(t,e,o),r.setModbusError(t,n,e,o)},t.modbusRead=function(){var e;n.client?(e={topic:"customFc",from:t.name,payload:{unitid:parseInt(t.unitid),fc:parseInt(t.fc,16),requestCard:t.requestCard,responseCard:t.responseCard,messageId:d.getObjectId()}},t.showStatusActivities&&i("reading"),n.emit("customModbusMessage",e,t.onModbusReadDone,t.onModbusReadError)):i("waiting")},t.removeNodeListenerFromModbusClient=function(){n.removeListener("mbinit",t.onModbusInit),n.removeListener("mbqueue",t.onModbusQueue),n.removeListener("mbconnected",t.onModbusConnect),n.removeListener("mbactive",t.onModbusActive),n.removeListener("mberror",t.onModbusError),n.removeListener("mbclosed",t.onModbusClose),n.removeListener("mbbroken",t.onModbusBroken),n.removeListener("mbregister",t.onModbusRegister),n.removeListener("mbderegister",t.onModbusClose)},t.isValidCustomFc=function(e){return e.payload&&"customFc"===e.topic&&e.payload.unitid&&e.payload.fc&&e.payload.requestCard&&e.payload.responseCard},t.buildNewMessageObject=function(e){return t.isValidCustomFc(e)?e:{topic:"customFc",payload:{unitid:parseInt(t.unitid),fc:parseInt(t.fc,16),requestCard:t.requestCard,responseCard:t.responseCard,from:t.name}}},t.on("input",function(o){if(r.invalidPayloadIn(o))s("Invalid message on input.");else if(t.isNotReadyForInput())s("Inject while node is not ready for input.");else if(n.isInactive())s("You sent an input to inactive client. Please use initial delay on start or send data more slowly.");else{o=Object.assign({},o);try{var e=t.buildNewMessageObject(o);e.payload.messageId=d.getObjectId(),n.emit("customModbusMessage",e,t.onModbusReadDone,t.onModbusReadError),t.showStatusActivities&&r.setNodeStatusTo(n.actualServiceState,t)}catch(e){t.errorProtocolMsg(e,o),r.sendEmptyMsgOnFail(t,e,o)}}}),this.on("close",function(e){t.removeNodeListenerFromModbusClient(),i("closed"),s("close node "+t.id),n.deregisterForModbus(t.id,e)}),t.showStatusActivities&&(n.on("mbinit",t.onModbusInit),n.on("mbqueue",t.onModbusQueue)),n.on("mbconnected",t.onModbusConnect),n.on("mbactive",t.onModbusActive),n.on("mberror",t.onModbusError),n.on("mbclosed",t.onModbusClose),n.on("mbbroken",t.onModbusBroken),n.on("mbregister",t.onModbusRegister),n.on("mbderegister",t.onModbusClose),n.registerForModbus(t))}),o.httpAdmin.post("/modbus/fc/:id",o.auth.needsPermission("modbus.read"),function(e,t){var o=require("fs"),s=require("node:path"),n=e.body.mapPath;e.body.mapPath&&!1===e.body.mapPath.endsWith(".json")?t.status(400).json({code:400,message:"ERROR: Invalid file extension"}):(e=s.resolve(n||"./extras/argumentMaps/defaults/codes.json"),o.readFile(e,function(e,o){var s={};if(e)s={code:404,message:"ERROR: File not found"};else try{s.message=JSON.parse(o),s.code=200}catch(e){s={code:500,message:"ERROR: File contains invalid JSON"}}t.status(s.code).json(s.message)}))})};
//# sourceMappingURL=maps/modbus-flex-fc.js.map