UNPKG

knxultimate

Version:

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

177 lines (167 loc) 4.72 kB
/** * Validates KNX Data Point Type 22 conversions. * * 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. */ import { describe, test } from 'node:test' import assert from 'node:assert/strict' import DPT22 from '../../src/dptlib/dpt22' describe('DPT22 (2-byte RHCC status)', () => { describe('formatAPDU', () => { test('should correctly format all flags set to false', () => { const value = { Fault: false, StatusEcoH: false, TempFlowLimit: false, TempReturnLimit: false, StatusMorningBoostH: false, StatusStartOptim: false, StatusStopOptim: false, HeatingDisabled: false, HeatCoolMode: false, StatusEcoC: false, StatusPreCool: false, CoolingDisabled: false, DewPointStatus: false, FrostAlarm: false, OverheatAlarm: false, reserved: false, } const result = DPT22.formatAPDU(value) assert.deepEqual(result, Buffer.from([0x00, 0x00])) }) test('should correctly format all flags set to true', () => { const value = { Fault: true, StatusEcoH: true, TempFlowLimit: true, TempReturnLimit: true, StatusMorningBoostH: true, StatusStartOptim: true, StatusStopOptim: true, HeatingDisabled: true, HeatCoolMode: true, StatusEcoC: true, StatusPreCool: true, CoolingDisabled: true, DewPointStatus: true, FrostAlarm: true, OverheatAlarm: true, reserved: true, } const result = DPT22.formatAPDU(value) assert.deepEqual(result, Buffer.from([0xff, 0xff])) }) test('should correctly format mixed flags', () => { const value = { Fault: true, StatusEcoH: false, TempFlowLimit: true, TempReturnLimit: false, StatusMorningBoostH: true, StatusStartOptim: false, StatusStopOptim: true, HeatingDisabled: false, HeatCoolMode: true, StatusEcoC: false, StatusPreCool: true, CoolingDisabled: false, DewPointStatus: true, FrostAlarm: false, OverheatAlarm: true, reserved: false, } const result = DPT22.formatAPDU(value) assert.deepEqual(result, Buffer.from([0x55, 0x55])) }) test('should handle partial object with missing properties', () => { const partialValue = { Fault: true, HeatingDisabled: true, // All other properties missing } const result = DPT22.formatAPDU(partialValue) // Missing properties should default to false, except reserved which defaults to true assert.deepEqual(result, Buffer.from([0x80, 0x81])) }) }) describe('fromBuffer', () => { test('should correctly parse buffer with all flags false', () => { const result = DPT22.fromBuffer(Buffer.from([0x00, 0x00])) const expected = { Fault: false, StatusEcoH: false, TempFlowLimit: false, TempReturnLimit: false, StatusMorningBoostH: false, StatusStartOptim: false, StatusStopOptim: false, HeatingDisabled: false, HeatCoolMode: false, StatusEcoC: false, StatusPreCool: false, CoolingDisabled: false, DewPointStatus: false, FrostAlarm: false, OverheatAlarm: false, reserved: false, } assert.deepEqual(result, expected) }) test('should correctly parse buffer with all flags true', () => { const result = DPT22.fromBuffer(Buffer.from([0xff, 0xff])) const expected = { Fault: true, StatusEcoH: true, TempFlowLimit: true, TempReturnLimit: true, StatusMorningBoostH: true, StatusStartOptim: true, StatusStopOptim: true, HeatingDisabled: true, HeatCoolMode: true, StatusEcoC: true, StatusPreCool: true, CoolingDisabled: true, DewPointStatus: true, FrostAlarm: true, OverheatAlarm: true, reserved: true, } assert.deepEqual(result, expected) }) test('should correctly parse buffer with alternating flags', () => { const result = DPT22.fromBuffer(Buffer.from([0x55, 0x55])) const expected = { Fault: true, StatusEcoH: false, TempFlowLimit: true, TempReturnLimit: false, StatusMorningBoostH: true, StatusStartOptim: false, StatusStopOptim: true, HeatingDisabled: false, HeatCoolMode: true, StatusEcoC: false, StatusPreCool: true, CoolingDisabled: false, DewPointStatus: true, FrostAlarm: false, OverheatAlarm: true, reserved: false, } assert.deepEqual(result, expected) }) test('should handle invalid buffer lengths', () => { assert.equal(DPT22.fromBuffer(Buffer.from([])), null) assert.equal(DPT22.fromBuffer(Buffer.from([0x00])), null) assert.equal( DPT22.fromBuffer(Buffer.from([0x00, 0x00, 0x00])), null, ) }) }) })