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) • 5.81 kB
JavaScript
module.exports=function(s){require("source-map-support").install();var d=require("./modbus-basics"),u=require("./core/modbus-core"),l=require("./core/modbus-io-core"),e=require("debug")("contribModbus:read");s.nodes.registerType("modbus-read",function(i){s.nodes.createNode(this,i),this.name=i.name,this.topic=i.topic,this.unitid=i.unitid,this.dataType=i.dataType,this.adr=i.adr,this.quantity=i.quantity||1,this.rate=i.rate,this.rateUnit=i.rateUnit,this.delayOnStart=i.delayOnStart,this.startDelayTime=parseInt(i.startDelayTime)||10,this.showStatusActivities=i.showStatusActivities,this.showErrors=i.showErrors,this.showWarnings=i.showWarnings,this.connection=null,this.useIOFile=i.useIOFile,this.ioFile=s.nodes.getNode(i.ioFile),this.useIOForPayload=i.useIOForPayload,this.logIOActivities=i.logIOActivities,this.emptyMsgOnFail=i.emptyMsgOnFail,this.internalDebugLog=e,this.verboseLogging=s.settings.verbose;var r=this,n=!1;function t(e){r.verboseLogging&&r.showWarnings&&r.warn("Read -> "+e+" address: "+r.adr)}r.INPUT_TIMEOUT_MILLISECONDS=1e3,r.statusText="waiting",r.delayTimerReading=!1,r.intervalTimerIdReading=!1,a(r.statusText),t("open node "+r.id);var o=s.nodes.getNode(i.server);function a(e){var i,t;"polling"===e&&n||(i=d.setNodeStatusProperties(e,r.showStatusActivities),t=r.statusText,-1!==e.search("active")||"polling"===e?(e=i.status+(" ( "+r.rate+" "+d.get_timeUnit_name(r.rateUnit))+" ) ",n=!1,e!==t&&r.status({fill:i.fill,shape:i.shape,text:e})):(e=i.status)!==t&&r.status({fill:i.fill,shape:i.shape,text:e}))}o&&(r.onModbusInit=function(){a("initialized")},r.onModbusConnect=function(){a("connected"),r.resetAllReadingTimer(),r.initializeReadingTimer()},r.onModbusRegister=function(){r.showStatusActivities&&a("registered"),o.serialSendingAllowed&&(r.resetAllReadingTimer(),r.initializeReadingTimer(),a("connected"))},r.onModbusActive=function(){a("active")},r.onModbusQueue=function(){a("queue")},r.onModbusError=function(e){a("failure"),o.reconnectOnTimeout&&r.resetAllReadingTimer(),r.showErrors&&r.warn(e)},r.onModbusClose=function(){a("closed"),r.resetAllReadingTimer()},r.onModbusBroken=function(){a("broken"),o.reconnectOnTimeout&&(a("reconnecting after "+o.reconnectTimeout+" msec."),r.resetAllReadingTimer())},r.onModbusReadDone=function(e,i){r.showStatusActivities&&a("reading done");var t,n,o=e.data,s=i.topic||r.topic;r.useIOFile&&r.ioFile.lastUpdatedAt?(r.logIOActivities&&l.internalDebug("node.adr:"+r.adr+" node.quantity:"+r.quantity),t=l.nameValuesFromIOFile(r,i,o,e,r.adr),t=l.filterValueNames(r,t,u.functionCodeModbusRead(r.dataType),r.adr,r.quantity),n={topic:s,responseBuffer:e,input:i,sendingNodeId:r.id},r.useIOForPayload?(n.payload=t,n.values=o):(n.payload=o,n.valueNames=t),r.send([n,{topic:s,payload:e,values:o,input:i,valueNames:t,sendingNodeId:r.id}])):r.send([{topic:s,payload:o,responseBuffer:e,input:i,sendingNodeId:r.id},{topic:s,payload:e,values:o,input:i,sendingNodeId:r.id}])},r.errorProtocolMsg=function(e,i){r.showErrors&&d.logMsgError(r,e,i)},r.onModbusReadError=function(e,i){r.internalDebugLog(e.message),r.errorProtocolMsg(e,i),d.sendEmptyMsgOnFail(r,e,i),d.setModbusError(r,o,e,i)},r.modbusPollingRead=function(){var e;o.client?(r.showWarnings&&i.enableDeformedMessages&&t("Deformed Message support is enabled"),e={topic:r.topic||"polling",from:r.name,payload:{unitid:r.unitid,fc:u.functionCodeModbusRead(r.dataType),address:r.adr,quantity:r.quantity,enableDeformedMessages:i.enableDeformedMessages,messageId:u.getObjectId()}},r.showStatusActivities&&a("polling"),o.emit("readModbus",e,r.onModbusReadDone,r.onModbusReadError)):a("waiting")},r.resetDelayTimerToRead=function(e){e.delayTimerReading&&(t("resetDelayTimerToRead node "+e.id),clearTimeout(e.delayTimerReading)),e.delayTimerReading=null},r.resetIntervalToRead=function(e){e.intervalTimerIdReading&&(t("resetIntervalToRead node "+e.id),clearInterval(e.intervalTimerIdReading)),e.intervalTimerIdReading=null},r.resetAllReadingTimer=function(){r.resetDelayTimerToRead(r),r.resetIntervalToRead(r)},r.resetAllReadingTimer(),r.startIntervalReading=function(){r.intervalTimerIdReading||(t("startIntervalReading node "+r.id),r.intervalTimerIdReading=setInterval(r.modbusPollingRead,d.calc_rateByUnit(r.rate,r.rateUnit)))},r.initializeReadingTimer=function(){r.resetAllReadingTimer(),r.delayOnStart?(t("initializeReadingTimer delay timer node "+r.id),r.delayTimerReading=setTimeout(r.startIntervalReading,r.INPUT_TIMEOUT_MILLISECONDS*r.startDelayTime)):r.startIntervalReading()},r.removeNodeListenerFromModbusClient=function(){o.removeListener("mbinit",r.onModbusInit),o.removeListener("mbqueue",r.onModbusQueue),o.removeListener("mbconnected",r.onModbusConnect),o.removeListener("mbactive",r.onModbusActive),o.removeListener("mberror",r.onModbusError),o.removeListener("mbclosed",r.onModbusClose),o.removeListener("mbbroken",r.onModbusBroken),o.removeListener("mbregister",r.onModbusRegister),o.removeListener("mbderegister",r.onModbusClose)},this.on("close",function(e){r.resetAllReadingTimer(),r.removeNodeListenerFromModbusClient(),a("closed"),t("close node "+r.id),o.deregisterForModbus(r.id,e)}),r.showStatusActivities&&(o.on("mbinit",r.onModbusInit),o.on("mbqueue",r.onModbusQueue)),o.on("mbconnected",r.onModbusConnect),o.on("mbactive",r.onModbusActive),o.on("mberror",r.onModbusError),o.on("mbclosed",r.onModbusClose),o.on("mbbroken",r.onModbusBroken),o.on("mbregister",r.onModbusRegister),o.on("mbderegister",r.onModbusClose),o.registerForModbus(r))}),s.httpAdmin.post("/modbus/read/inject/:id",s.auth.needsPermission("modbus.inject.write"),function(i,t){i=s.nodes.getNode(i.params.id);if(i)try{i.modbusPollingRead(),t.sendStatus(200)}catch(e){t.sendStatus(500),i.error(s._("modbusinject.failed",{error:e.toString()}))}else t.sendStatus(404)})};
//# sourceMappingURL=maps/modbus-read.js.map