knx
Version:
KNXnet/IP protocol implementation for Node(>=6.x)
166 lines (138 loc) • 2.88 kB
JavaScript
/**
* knx.js - a KNX protocol stack in pure Javascript
* (C) 2016-2018 Elias Karakoulakis
*/
const log = require('log-driver').logger;
//
// DPT14.*: 4-byte floating point value
//
/* In sharp contrast to DPT9 (16-bit floating point - JS spec does not support),
* the case for 32-bit floating point is simple...
*/
exports.formatAPDU = (value) => {
if (value == null || typeof value != 'number')
log.error('DPT14: Must supply a number value');
const apdu_data = Buffer.alloc(4);
apdu_data.writeFloatBE(value, 0);
return apdu_data;
};
exports.fromBuffer = (buf) => {
if (buf.length != 4) log.warn('DPT14: Buffer should be 4 bytes long');
return buf.readFloatBE(0);
};
// DPT14 base type info
exports.basetype = {
bitlength: 32,
valuetype: 'basic',
range: [0, Math.pow(2, 32)],
desc: '32-bit floating point value',
};
// DPT14 subtypes info
exports.subtypes = {
// TODO
'007': {
name: 'DPT_Value_AngleDeg°',
desc: 'angle, degree',
unit: '°',
},
'019': {
name: 'DPT_Value_Electric_Current',
desc: 'electric current',
unit: 'A',
},
'027': {
name: 'DPT_Value_Electric_Potential',
desc: 'electric potential',
unit: 'V',
},
'028': {
name: 'DPT_Value_Electric_PotentialDifference',
desc: 'electric potential difference',
unit: 'V',
},
'031': {
name: 'DPT_Value_Energ',
desc: 'energy',
unit: 'J',
},
'032': {
name: 'DPT_Value_Force',
desc: 'force',
unit: 'N',
},
'033': {
name: 'DPT_Value_Frequency',
desc: 'frequency',
unit: 'Hz',
},
'036': {
name: 'DPT_Value_Heat_FlowRate',
desc: 'heat flow rate',
unit: 'W',
},
'037': {
name: 'DPT_Value_Heat_Quantity',
desc: 'heat, quantity of',
unit: 'J',
},
'038': {
name: 'DPT_Value_Impedance',
desc: 'impedance',
unit: 'Ω',
},
'039': {
name: 'DPT_Value_Length',
desc: 'length',
unit: 'm',
},
'051': {
name: 'DPT_Value_Mass',
desc: 'mass',
unit: 'kg',
},
'056': {
name: 'DPT_Value_Power',
desc: 'power',
unit: 'W',
},
'065': {
name: 'DPT_Value_Speed',
desc: 'speed',
unit: 'm/s',
},
'066': {
name: 'DPT_Value_Stress',
desc: 'stress',
unit: 'Pa',
},
'067': {
name: 'DPT_Value_Surface_Tension',
desc: 'surface tension',
unit: '1/Nm',
},
'068': {
name: 'DPT_Value_Common_Temperature',
desc: 'temperature, common',
unit: '°C',
},
'069': {
name: 'DPT_Value_Absolute_Temperature',
desc: 'temperature (absolute)',
unit: 'K',
},
'070': {
name: 'DPT_Value_TemperatureDifference',
desc: 'temperature difference',
unit: 'K',
},
'078': {
name: 'DPT_Value_Weight',
desc: 'weight',
unit: 'N',
},
'079': {
name: 'DPT_Value_Work',
desc: 'work',
unit: 'J',
},
};