UNPKG

knxultimate

Version:

KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.

94 lines 4.43 kB
"use strict"; 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