node-red-contrib-knx-ultimate
Version:
Control your KNX and KNX Secure intallation via Node-Red! A bunch of KNX nodes, with integrated Philips HUE control, ETS group address importer, KNX AI for diagnosticsand KNX routing between interfaces. Easy to use and highly configurable.
87 lines (82 loc) • 3.47 kB
JavaScript
/**
* @param {object} [_oNode]
* @param {any} [jsValue]
*/
exports.Manipulate = function roundPayload (_oNode, jsValue) {
// 19/01/2023 FORMATTING THE OUTPUT PAYLOAD BASED ON SINGLE NODE SETUP
//* ********************************************************
// Formatting the msg output value
try {
if (_oNode !== null && jsValue !== null) {
if (typeof jsValue === 'number' && _oNode.formatmultiplyvalue !== undefined && _oNode.formatdecimalsvalue !== undefined && _oNode.formatnegativevalue !== undefined) {
// multiplier
jsValue = jsValue * _oNode.formatmultiplyvalue
// Number of decimals
if (_oNode.formatdecimalsvalue == 999) {
// Leave as is
} else {
// Round
// jsValue = +(Math.round(jsValue + "e+" + _oNode.formatdecimalsvalue) + "e-" + _oNode.formatdecimalsvalue);
const iMigliaia = parseInt('1' + '0'.repeat(_oNode.formatdecimalsvalue))
jsValue = Math.round(jsValue * iMigliaia) / iMigliaia
}
// leave, zero or abs
if (jsValue < 0) {
if (_oNode.formatnegativevalue == 'zero') {
jsValue = 0
} else if (_oNode.formatnegativevalue == 'abs') {
jsValue = Math.abs(jsValue)
}
}
}
return jsValue
} else {
return jsValue
}
} catch (error) {
return jsValue
}
//* ********************************************************
}
// KNXULtimate nodes
module.exports.KNXULtimateChangeConfigByInputMSG = function KNXULtimateChangeConfigByInputMSG (msg, node, config) {
if (!msg.setConfig.hasOwnProperty('setGroupAddress') || !msg.setConfig.hasOwnProperty('setDPT')) {
node.setNodeStatus({
fill: 'red', shape: 'ring', text: 'setGroupAddress and setDPT are mandatory', payload: '', GA: '', dpt: '', devicename: ''
})
return
}
// Set DPT
node.dpt = msg.setConfig.setDPT
config.dpt = msg.setConfig.setDPT
// SET GORUP ADDRESS
node.topic = msg.setConfig.setGroupAddress
config.topic = msg.setConfig.setGroupAddress
node.outputtopic = (config.outputtopic === undefined || config.outputtopic === '') ? msg.setConfig.setGroupAddress : config.outputtopic // 07/02/2020 Importante, per retrocompatibilitÃ
config.outputtopic = node.outputtopic
// Read from the ETS file, the missing props
if (node.serverKNX.csv !== undefined && node.serverKNX.csv !== null) {
// Read it from ETS File
const found = node.serverKNX.csv.find(item => item.ga === msg.setConfig.setGroupAddress)
if (found !== undefined) {
if (msg.setConfig.setDPT === 'auto') {
node.dpt = found.dpt // SET THE DPT
config.dpt = found.dpt
}
node.name = found.devicename
config.name = found.devicename
}
}
// If DPT is still "auto", something has going wrong
if (node.dpt === 'auto') {
// Unable to retrieve the datapoint
node.setNodeStatus({
fill: 'red', shape: 'ring', text: 'Unable to retrieve the datapoint from the ETS file', payload: '', GA: '', dpt: '', devicename: ''
})
if (node.sysLogger !== undefined && node.sysLogger !== null) node.sysLogger.error(`knxUltimate: setConfig: Node.id: ${node.id} error: Unable to retrieve the datapoint from the ETS file`)
} else {
node.setNodeStatus({
fill: 'blue', shape: 'ring', text: `Config changed. Current GA: ${node.topic} DPT: ${node.dpt}`, payload: '', GA: '', dpt: '', devicename: node.name
})
}
}