knxultimate
Version:
KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.
155 lines • 5.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const KnxLog_1 = require("../KnxLog");
const utils_1 = require("../utils");
function reverseString(str) {
let newString = '';
for (let i = str.length - 1; i >= 0; i--) {
newString += str[i];
}
return newString;
}
const logger = (0, KnxLog_1.module)('DPT22');
const config = {
id: 'DPT22',
formatAPDU: (value) => {
const apdu_data = Buffer.alloc(2);
if (!value) {
logger.error('cannot write null value');
return null;
}
if (typeof value === 'object') {
if (!(0, utils_1.hasProp)(value, 'Fault'))
value.Fault = false;
if (!(0, utils_1.hasProp)(value, 'StatusEcoH'))
value.StatusEcoH = false;
if (!(0, utils_1.hasProp)(value, 'TempFlowLimit'))
value.TempFlowLimit = false;
if (!(0, utils_1.hasProp)(value, 'TempReturnLimit'))
value.TempReturnLimit = false;
if (!(0, utils_1.hasProp)(value, 'StatusMorningBoostH'))
value.StatusMorningBoostH = false;
if (!(0, utils_1.hasProp)(value, 'StatusStartOptim'))
value.StatusStartOptim = false;
if (!(0, utils_1.hasProp)(value, 'StatusStopOptim'))
value.StatusStopOptim = false;
if (!(0, utils_1.hasProp)(value, 'HeatingDisabled'))
value.HeatingDisabled = false;
if (!(0, utils_1.hasProp)(value, 'HeatCoolMode'))
value.HeatCoolMode = false;
if (!(0, utils_1.hasProp)(value, 'StatusEcoC'))
value.StatusEcoC = false;
if (!(0, utils_1.hasProp)(value, 'StatusPreCool'))
value.StatusPreCool = false;
if (!(0, utils_1.hasProp)(value, 'CoolingDisabled'))
value.CoolingDisabled = false;
if (!(0, utils_1.hasProp)(value, 'DewPointStatus'))
value.DewPointStatus = false;
if (!(0, utils_1.hasProp)(value, 'FrostAlarm'))
value.FrostAlarm = false;
if (!(0, utils_1.hasProp)(value, 'OverheatAlarm'))
value.OverheatAlarm = false;
if (!(0, utils_1.hasProp)(value, 'reserved'))
value.reserved = true;
}
else {
logger.error('Must supply a correct payload. See wiki.');
return null;
}
let firstHex = '';
let secondHex = '';
firstHex = firstHex.concat(...[
value.Fault,
value.StatusEcoH,
value.TempFlowLimit,
value.TempReturnLimit,
value.StatusMorningBoostH,
value.StatusStartOptim,
value.StatusStopOptim,
value.HeatingDisabled,
].map((v) => {
return Number(v).toString();
}));
secondHex = secondHex.concat(...[
value.HeatCoolMode,
value.StatusEcoC,
value.StatusPreCool,
value.CoolingDisabled,
value.DewPointStatus,
value.FrostAlarm,
value.OverheatAlarm,
value.reserved,
].map((v) => {
return Number(v).toString();
}));
apdu_data[0] = parseInt(reverseString(secondHex), 2);
apdu_data[1] = parseInt(reverseString(firstHex), 2);
return apdu_data;
},
fromBuffer: (buf) => {
if (buf.length !== 2) {
logger.warn('Buffer should be 2 bytes long, got', buf.length);
return null;
}
const byte1 = reverseString(buf[1].toString(2).padStart(8, '0')).split('');
const byte2 = reverseString(buf[0].toString(2).padStart(8, '0')).split('');
const value = {
Fault: byte1[0] === '1',
StatusEcoH: byte1[1] === '1',
TempFlowLimit: byte1[2] === '1',
TempReturnLimit: byte1[3] === '1',
StatusMorningBoostH: byte1[4] === '1',
StatusStartOptim: byte1[5] === '1',
StatusStopOptim: byte1[6] === '1',
HeatingDisabled: byte1[7] === '1',
HeatCoolMode: byte2[0] === '1',
StatusEcoC: byte2[1] === '1',
StatusPreCool: byte2[2] === '1',
CoolingDisabled: byte2[3] === '1',
DewPointStatus: byte2[4] === '1',
FrostAlarm: byte2[5] === '1',
OverheatAlarm: byte2[6] === '1',
reserved: byte2[7] === '1',
};
return value;
},
basetype: {
bitlength: 16,
range: [,],
valuetype: 'basic',
desc: '2-byte',
help: `// You can set all parameters you want.
// Every parameter is optional.
// Please respect the upper and lowercase letters.
// For help about meaning of each parameter, please see the sample in the Wiki
var s1={};
s1.Fault = true;
s1.StatusEcoH = false;
s1.TempFlowLimit = false;
s1.TempReturnLimit = false;
s1.StatusMorningBoostH = false;
s1.StatusStartOptim = false;
s1.StatusStopOptim = false;
s1.HeatingDisabled = true;
s1.HeatCoolMode = true;
s1.StatusEcoC = false;
s1.StatusPreCool = false;
s1.CoolingDisabled = true;
s1.DewPointStatus = false;
s1.FrostAlarm = false;
s1.OverheatAlarm = true;
return {payload:s1};`,
helplink: '',
},
subtypes: {
101: {
name: 'RHCC Status',
desc: 'RHCC Status',
unit: '',
scalar_range: [,],
range: [,],
},
},
};
exports.default = config;
//# sourceMappingURL=dpt22.js.map