knxultimate
Version:
KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.
94 lines • 4.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const KnxLog_1 = require("../KnxLog");
const utils_1 = require("../utils");
const logger = (0, KnxLog_1.module)('DPT249');
const config = {
id: 'DPT249',
formatAPDU(value) {
if (!value) {
logger.error('cannot write null value');
return null;
}
if (typeof value === 'object' &&
(0, utils_1.hasProp)(value, 'isTimePeriodValid') &&
(0, utils_1.hasProp)(value, 'isAbsoluteColourTemperatureValid') &&
(0, utils_1.hasProp)(value, 'isAbsoluteBrightnessValid') &&
(0, utils_1.hasProp)(value, 'transitionTime') &&
(0, utils_1.hasProp)(value, 'colourTemperature') &&
value.colourTemperature >= 0 &&
value.colourTemperature <= 65535 &&
(0, utils_1.hasProp)(value, 'absoluteBrightness') &&
value.absoluteBrightness >= 0 &&
value.absoluteBrightness <= 100) {
}
else {
logger.error('Must supply an value, for example {transitionTime:100, colourTemperature:1000, absoluteBrightness:80, isTimePeriodValid:true, isAbsoluteColourTemperatureValid:true, isAbsoluteBrightnessValid:true}');
return null;
}
const bufferTotal = Buffer.alloc(6);
const transitionTime = Buffer.alloc(2);
const colourTemperature = Buffer.alloc(2);
const absoluteBrightness = Buffer.alloc(2);
const isTimePeriodValid = value.isTimePeriodValid ? '1' : '0';
const isAbsoluteColourTemperatureValid = value.isAbsoluteColourTemperatureValid ? '1' : '0';
const isAbsoluteBrightnessValid = value.isAbsoluteBrightnessValid
? '1'
: '0';
transitionTime.writeUInt16BE(value.transitionTime);
colourTemperature.writeUInt16BE(value.colourTemperature);
absoluteBrightness.writeUInt16BE(value.absoluteBrightness);
absoluteBrightness[0] = parseInt(`00000${isTimePeriodValid}${isAbsoluteColourTemperatureValid}${isAbsoluteBrightnessValid}`, 2);
bufferTotal[0] = transitionTime[0];
bufferTotal[1] = transitionTime[1];
bufferTotal[2] = colourTemperature[0];
bufferTotal[3] = colourTemperature[1];
bufferTotal[4] = absoluteBrightness[1];
bufferTotal[5] = absoluteBrightness[0];
return bufferTotal;
},
fromBuffer(buf) {
if (buf.length !== 6) {
logger.error('Buffer should be 6 bytes long, got', buf.length);
return null;
}
const bufTotale = buf.toString('hex');
const transitionTime = bufTotale.substring(0, 4);
const colourTemperature = bufTotale.substring(4, 8);
const absoluteBrightness = bufTotale.substring(8, 10);
const CB = bufTotale.substring(10, 12);
const isTimePeriodValid = (0, utils_1.hex2bin)(CB).substring(5, 6) === '1';
const isAbsoluteColourTemperatureValid = (0, utils_1.hex2bin)(CB).substring(6, 7) === '1';
const isAbsoluteBrightnessValid = (0, utils_1.hex2bin)(CB).substring(7, 8) === '1';
const ret = {
transitionTime: parseInt(transitionTime, 16),
colourTemperature: parseInt(colourTemperature, 16),
absoluteBrightness: parseInt(absoluteBrightness, 16),
isTimePeriodValid,
isAbsoluteColourTemperatureValid,
isAbsoluteBrightnessValid,
};
return ret;
},
basetype: {
bitlength: 2 * 16 + 2 * 8,
valuetype: 'basic',
desc: 'PDT_GENERIC_06',
help: `// Brightness Colour Temperature Transition.
// Properties: transitionTime is in milliseconds, colourTemperature is Kelvin (0-65535 with resolution of 1K)
// absoluteBrightness (0-255), isTimePeriodValid (true/false), isAbsoluteColourTemperatureValid (true/false), isAbsoluteBrightnessValid (true/false)
msg.payload={transitionTime:100, colourTemperature:1000, absoluteBrightness:80, isTimePeriodValid:true, isAbsoluteColourTemperatureValid:true, isAbsoluteBrightnessValid:true};
return msg;`,
},
subtypes: {
600: {
desc: 'DPT_Brightness_Colour_Temperature_Transition',
name: 'Brightness Colour Temperature Transition',
unit: '',
scalar_range: [,],
range: [,],
},
},
};
exports.default = config;
//# sourceMappingURL=dpt249.js.map