UNPKG

prisme-flow

Version:

prisme platform flow engine

107 lines (88 loc) 2.54 kB
/** * Created by prisme.io on 09/06/2017. */ /** * Modbus Response node. * @module NodeRedModbusResponse * * @param RED */ module.exports = function (RED) { 'use strict' let util = require('util') let mbBasics = require('./modbus-basics') let internalDebugLog = require('debug')('node_red_contrib_modbus') function ModbusResponse (config) { RED.nodes.createNode(this, config) this.registerShowMax = config.registerShowMax let node = this setNodeStatusTo('initialized') function verboseLog (logMessage) { if (RED.settings.verbose) { internalDebugLog(logMessage) } } function setNodeStatusTo (statusValue, response) { if (mbBasics.statusLog) { verboseLog('response status: ' + statusValue) } let fillValue = 'red' let shapeValue = 'dot' switch (statusValue) { case 'initialized': fillValue = 'green' shapeValue = 'ring' break case 'active': fillValue = 'green' shapeValue = 'dot' break default: if (!statusValue || statusValue === 'waiting') { fillValue = 'blue' statusValue = 'waiting ...' } break } node.status({fill: fillValue, shape: shapeValue, text: util.inspect(response, false, null)}) } function setNodeStatusResponse (length) { node.status({ fill: 'green', shape: 'dot', text: 'active got length: ' + length }) } node.on('input', function (msg) { let inputType = 'default' if (msg.payload.hasOwnProperty('data')) { inputType = 'data' } if (msg.payload.hasOwnProperty('address')) { inputType = 'address' } switch (inputType) { case 'data': if (msg.payload.data.length > node.registerShowMax) { setNodeStatusResponse(msg.payload.data.length) } else { setNodeStatusTo('active', msg.payload) } break case 'address': if (msg.payload.length && msg.payload.length > node.registerShowMax) { setNodeStatusResponse(msg.payload.length) } else { setNodeStatusTo('active', msg.payload) } break default: setNodeStatusTo('active', JSON.stringify(msg.payload)) } }) node.on('close', function () { setNodeStatusTo('closed') }) } RED.nodes.registerType('modbus-response', ModbusResponse) }