knxultimate
Version:
KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.
186 lines (158 loc) • 3.88 kB
text/typescript
/**
* Provides KNX Data Point Type 20 encoding and decoding helpers.
*
* Written in Italy with love, sun and passion, by Massimo Saccani.
*
* Released under the MIT License.
* Use at your own risk; the author assumes no liability for damages.
*/
/**
* KNXEngine - a KNX protocol stack in Javascript
* (C) 2020-2022 Supergiovane
*/
import type { DatapointConfig } from '.'
import { module } from '../KnxLog'
//
// DPT20: 1-byte HVAC
//
const logger = module('DPT20')
const config: DatapointConfig = {
id: 'DPT20',
formatAPDU: (value) => {
const apdu_data = Buffer.alloc(1)
apdu_data[0] = value
logger.debug(
`./knx/src/dpt20.js : input value = ${value} apdu_data = ${apdu_data}`,
)
return apdu_data
},
fromBuffer: (buf) => {
if (buf.length !== 1) {
logger.warn('Buffer should be 1 byte long, got', buf.length)
return null
}
const ret = buf.readUInt8(0)
return ret
},
basetype: {
bitlength: 8,
range: [,],
valuetype: 'basic',
desc: '1-byte',
help: `// Send Value. Examples for DPT20 (1-byte HVAC):
// DPT20.102 - HVAC Mode: 0 = Auto, 1 = Comfort, 2 = Standby, 3 = Economy, 4 = Building protection
msg.payload = 1; // Set to Comfort
return msg;
// DPT20.103 - HVAC Control Mode: 0 = Auto, 1 = Heat, 2 = Cool, 3 = Fan only, 4 = Dry
msg.payload = 2; // Set to Cool
return msg;
// DPT20.104 - HVAC Emergency Mode: 0 = Normal, 1 = Emergency
msg.payload = 1; // Set to Emergency
return msg;
// DPT20.105 - HVAC Changeover Mode: 0 = Auto, 1 = Heating, 2 = Cooling
msg.payload = 1; // Set to Heating
return msg;
// DPT20.106 - HVAC Valve Mode: 0 = Auto, 1 = Open, 2 = Closed
msg.payload = 2; // Set to Closed
return msg;
// DPT20.107 - HVAC Damper Mode: 0 = Auto, 1 = Open, 2 = Closed
msg.payload = 1; // Set to Open
return msg;
// DPT20.108 - HVAC Heater Mode: 0 = Auto, 1 = On, 2 = Off
msg.payload = 1; // Set to On
return msg;
// DPT20.109 - HVAC Fan Mode: 0 = Auto, 1 = Low, 2 = Medium, 3 = High
msg.payload = 3; // Set to High
return msg;
// DPT20.110 - HVAC Master/Slave Mode: 0 = Master, 1 = Slave
msg.payload = 0; // Set to Master
return msg;
// DPT20.111 - HVAC Room Temperature Setpoint: Value in °C (e.g., 22 for 22°C)
msg.payload = 22; // Set to 22°C
return msg;`,
helplink: '',
},
subtypes: {
// 20.102 HVAC mode
102: {
name: 'HVAC Mode',
desc: 'HVAC mode control',
unit: '',
scalar_range: [,],
range: [,],
},
// 20.103 HVAC Control Mode
103: {
name: 'HVAC Control Mode',
desc: 'HVAC control mode',
unit: '',
scalar_range: [,],
range: [,],
},
// 20.104 HVAC Emergency Mode
104: {
name: 'HVAC Emergency Mode',
desc: 'HVAC emergency mode',
unit: '',
scalar_range: [,],
range: [,],
},
// 20.105 HVAC Changeover Mode
105: {
name: 'HVAC Changeover Mode',
desc: 'HVAC changeover mode',
unit: '',
scalar_range: [,],
range: [,],
},
// 20.106 HVAC Valve Mode
106: {
name: 'HVAC Valve Mode',
desc: 'HVAC valve mode',
unit: '',
scalar_range: [,],
range: [,],
},
// 20.107 HVAC Damper Mode
107: {
name: 'HVAC Damper Mode',
desc: 'HVAC damper mode',
unit: '',
scalar_range: [,],
range: [,],
},
// 20.108 HVAC Heater Mode
108: {
name: 'HVAC Heater Mode',
desc: 'HVAC heater mode',
unit: '',
scalar_range: [,],
range: [,],
},
// 20.109 HVAC Fan Mode
109: {
name: 'HVAC Fan Mode',
desc: 'HVAC fan mode',
unit: '',
scalar_range: [,],
range: [,],
},
// 20.110 HVAC Master/Slave Mode
110: {
name: 'HVAC Master/Slave Mode',
desc: 'HVAC master/slave mode',
unit: '',
scalar_range: [,],
range: [,],
},
// 20.111 HVAC Room Temperature Setpoint
111: {
name: 'HVAC Room Temperature Setpoint',
desc: 'HVAC room temperature setpoint',
unit: '°C',
scalar_range: [,],
range: [,],
},
},
}
export default config