mclimate-payload-helper 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/decoders/commandsReadingHelper.d.ts.map +1 -1
  2. package/dist/decoders/commandsReadingHelper.js +153 -121
  3. package/dist/decoders/commandsReadingHelper.js.map +1 -1
  4. package/dist/encoders/Co2DisplayCommonCommands.d.ts +4 -0
  5. package/dist/encoders/Co2DisplayCommonCommands.d.ts.map +1 -1
  6. package/dist/encoders/Co2DisplayCommonCommands.js +38 -0
  7. package/dist/encoders/Co2DisplayCommonCommands.js.map +1 -1
  8. package/package.json +1 -1
  9. package/src/decoders/commandsReadingHelper.ts +142 -122
  10. package/dist/encoders/FanCoilThermostat.d.ts +0 -61
  11. package/dist/encoders/FanCoilThermostat.d.ts.map +0 -1
  12. package/dist/encoders/FanCoilThermostat.js +0 -719
  13. package/dist/encoders/FanCoilThermostat.js.map +0 -1
  14. package/dist/encoders/SetAqiLed.d.ts +0 -6
  15. package/dist/encoders/SetAqiLed.d.ts.map +0 -1
  16. package/dist/encoders/SetAqiLed.js +0 -46
  17. package/dist/encoders/SetAqiLed.js.map +0 -1
  18. package/dist/encoders/types/enumValidation.d.ts +0 -6
  19. package/dist/encoders/types/enumValidation.d.ts.map +0 -1
  20. package/dist/encoders/types/enumValidation.js +0 -50
  21. package/dist/encoders/types/enumValidation.js.map +0 -1
  22. package/dist/encoders/types/schemaValidatedEnums.d.ts +0 -40
  23. package/dist/encoders/types/schemaValidatedEnums.d.ts.map +0 -1
  24. package/dist/encoders/types/schemaValidatedEnums.js +0 -181
  25. package/dist/encoders/types/schemaValidatedEnums.js.map +0 -1
  26. package/dist/types/deviceTypes.d.ts +0 -19
  27. package/dist/types/deviceTypes.d.ts.map +0 -1
  28. package/dist/types/deviceTypes.js +0 -23
  29. package/dist/types/deviceTypes.js.map +0 -1
  30. package/dist/types/index.d.ts +0 -2
  31. package/dist/types/index.d.ts.map +0 -1
  32. package/dist/types/index.js +0 -18
  33. package/dist/types/index.js.map +0 -1
  34. package/dist/types/types.d.ts +0 -13
  35. package/dist/types/types.d.ts.map +0 -1
  36. package/dist/types/types.js +0 -9
  37. package/dist/types/types.js.map +0 -1
  38. package/dist/validation.d.ts +0 -3
  39. package/dist/validation.d.ts.map +0 -1
  40. package/dist/validation.js +0 -8
  41. package/dist/validation.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"commandsReadingHelper.d.ts","sourceRoot":"","sources":["../../src/decoders/commandsReadingHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAG5D,eAAO,MAAM,qBAAqB,YAAa,MAAM,iBAAiB,MAAM,cAAc,UAAU,mBA6jFnG,CAAA"}
1
+ {"version":3,"file":"commandsReadingHelper.d.ts","sourceRoot":"","sources":["../../src/decoders/commandsReadingHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAG5D,eAAO,MAAM,qBAAqB,YAAa,MAAM,iBAAiB,MAAM,cAAc,UAAU,mBAilFnG,CAAA"}
@@ -1679,10 +1679,25 @@ const commandsReadingHelper = (hexData, payloadLength, deviceType) => {
1679
1679
  {
1680
1680
  try {
1681
1681
  let data;
1682
- command_len = 3;
1683
- let state = parseInt(commands[i + 1], 16);
1684
- let time = (parseInt(commands[i + 2], 16) << 8) | parseInt(commands[i + 3], 16);
1685
- data = { relayTimerInSeconds: { state, time } };
1682
+ if (deviceType === types_1.DeviceType.Vicki) {
1683
+ command_len = 2;
1684
+ let notificationByte = parseInt(commands[i + 1], 16);
1685
+ // Extract notification flags from bits
1686
+ let temperatureRestoredAfterManualBoost = !!(notificationByte & 0x01); // Bit 0
1687
+ let temperatureChangedByHeatingSchedule = !!(notificationByte & 0x02); // Bit 1
1688
+ data = {
1689
+ notifications: {
1690
+ temperatureRestoredAfterManualBoost: temperatureRestoredAfterManualBoost,
1691
+ temperatureChangedByHeatingSchedule: temperatureChangedByHeatingSchedule
1692
+ }
1693
+ };
1694
+ }
1695
+ else {
1696
+ command_len = 3;
1697
+ let state = parseInt(commands[i + 1], 16);
1698
+ let time = (parseInt(commands[i + 2], 16) << 8) | parseInt(commands[i + 3], 16);
1699
+ data = { relayTimerInSeconds: { state, time } };
1700
+ }
1686
1701
  Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
1687
1702
  }
1688
1703
  catch (e) {
@@ -1751,6 +1766,10 @@ const commandsReadingHelper = (hexData, payloadLength, deviceType) => {
1751
1766
  command_len = 1;
1752
1767
  data = { fanSpeedNotOccupied: parseInt(commands[i + 1], 16) };
1753
1768
  }
1769
+ else {
1770
+ command_len = 1;
1771
+ data = { manualChangeRelayState: parseInt(commands[i + 1], 16) };
1772
+ }
1754
1773
  Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
1755
1774
  }
1756
1775
  catch (e) {
@@ -1799,6 +1818,12 @@ const commandsReadingHelper = (hexData, payloadLength, deviceType) => {
1799
1818
  overheatingEvents: { events: parseInt(commands[i + 1], 16), temperature: parseInt(commands[i + 2], 16) },
1800
1819
  };
1801
1820
  }
1821
+ else if (deviceType === types_1.DeviceType.Vicki) {
1822
+ command_len = 1;
1823
+ let offsetByte = parseInt(commands[i + 1], 16);
1824
+ let offsetHours = (offsetByte & 0x80) ? (offsetByte - 256) : offsetByte;
1825
+ data = { deviceTimeZone: offsetHours };
1826
+ }
1802
1827
  Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
1803
1828
  }
1804
1829
  catch (e) {
@@ -1855,6 +1880,11 @@ const commandsReadingHelper = (hexData, payloadLength, deviceType) => {
1855
1880
  },
1856
1881
  };
1857
1882
  }
1883
+ else {
1884
+ command_len = 1;
1885
+ let timeValue = parseInt(commands[i + 1], 16);
1886
+ data = { autoSetpointRestoreStatus: timeValue === 0 ? 0 : timeValue * 10 };
1887
+ }
1858
1888
  Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
1859
1889
  }
1860
1890
  catch (e) {
@@ -2000,6 +2030,10 @@ const commandsReadingHelper = (hexData, payloadLength, deviceType) => {
2000
2030
  command_len = 1;
2001
2031
  data = { frostProtectionStatus: parseInt(commands[i + 1], 16) };
2002
2032
  }
2033
+ else {
2034
+ command_len = 1;
2035
+ data = { timeRequestByMACcommand: parseInt(commands[i + 1], 16) };
2036
+ }
2003
2037
  Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2004
2038
  }
2005
2039
  catch (e) {
@@ -2435,22 +2469,6 @@ const commandsReadingHelper = (hexData, payloadLength, deviceType) => {
2435
2469
  }
2436
2470
  }
2437
2471
  break;
2438
- case '58':
2439
- {
2440
- command_len = 1;
2441
- let notificationByte = parseInt(commands[i + 1], 16);
2442
- // Extract notification flags from bits
2443
- let temperatureRestoredAfterManualBoost = !!(notificationByte & 0x01); // Bit 0
2444
- let temperatureChangedByHeatingSchedule = !!(notificationByte & 0x02); // Bit 1
2445
- let data = {
2446
- notifications: {
2447
- temperatureRestoredAfterManualBoost: temperatureRestoredAfterManualBoost,
2448
- temperatureChangedByHeatingSchedule: temperatureChangedByHeatingSchedule
2449
- }
2450
- };
2451
- Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2452
- }
2453
- break;
2454
2472
  case '5a':
2455
2473
  {
2456
2474
  try {
@@ -2564,24 +2582,6 @@ const commandsReadingHelper = (hexData, payloadLength, deviceType) => {
2564
2582
  }
2565
2583
  }
2566
2584
  break;
2567
- case '5d':
2568
- {
2569
- try {
2570
- command_len = 1;
2571
- let data = { manualChangeRelayState: parseInt(commands[i + 1], 16) };
2572
- Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2573
- }
2574
- catch (e) {
2575
- throw new utils_1.CustomError({
2576
- message: `Failed to process command '5d'`,
2577
- hexData,
2578
- command,
2579
- deviceType,
2580
- originalError: e,
2581
- });
2582
- }
2583
- }
2584
- break;
2585
2585
  case '5e':
2586
2586
  {
2587
2587
  try {
@@ -2611,108 +2611,140 @@ const commandsReadingHelper = (hexData, payloadLength, deviceType) => {
2611
2611
  }
2612
2612
  }
2613
2613
  break;
2614
- case '60':
2615
- {
2616
- command_len = 1;
2617
- let offsetByte = parseInt(commands[i + 1], 16);
2618
- let offsetHours = (offsetByte & 0x80) ? (offsetByte - 256) : offsetByte;
2619
- let data = { deviceTimeZone: offsetHours };
2620
- Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2621
- }
2622
- break;
2623
- case '62':
2624
- {
2625
- command_len = 1;
2626
- let timeValue = parseInt(commands[i + 1], 16);
2627
- let data = { autoSetpointRestoreStatus: timeValue === 0 ? 0 : timeValue * 10 };
2628
- Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2629
- }
2630
- break;
2631
2614
  case '64':
2632
2615
  {
2633
- command_len = 1;
2634
- let ledDurationValue = parseInt(commands[i + 1], 16);
2635
- let durationInSeconds = ledDurationValue / 2; // As per the docs, value is divided by 2 to get seconds
2636
- let data = {
2637
- ledIndicationDuration: durationInSeconds
2638
- };
2639
- Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2616
+ try {
2617
+ command_len = 1;
2618
+ let ledDurationValue = parseInt(commands[i + 1], 16);
2619
+ let durationInSeconds = ledDurationValue / 2; // As per the docs, value is divided by 2 to get seconds
2620
+ let data = {
2621
+ ledIndicationDuration: durationInSeconds
2622
+ };
2623
+ Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2624
+ }
2625
+ catch (e) {
2626
+ throw new utils_1.CustomError({
2627
+ message: `Failed to process command '64'`,
2628
+ hexData,
2629
+ command,
2630
+ deviceType,
2631
+ originalError: e,
2632
+ });
2633
+ }
2640
2634
  }
2641
2635
  break;
2642
2636
  case '66':
2643
2637
  {
2644
- command_len = 2;
2645
- let tempHigh = parseInt(commands[i + 1], 16);
2646
- let tempLow = parseInt(commands[i + 2], 16);
2647
- let targetTemp = (tempHigh << 8) | tempLow;
2648
- let data = {
2649
- offlineTargetTemperature: targetTemp === 0 ? 0 : targetTemp / 10
2650
- };
2651
- Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2638
+ try {
2639
+ command_len = 2;
2640
+ let tempHigh = parseInt(commands[i + 1], 16);
2641
+ let tempLow = parseInt(commands[i + 2], 16);
2642
+ let targetTemp = (tempHigh << 8) | tempLow;
2643
+ let data = {
2644
+ offlineTargetTemperature: targetTemp === 0 ? 0 : targetTemp / 10
2645
+ };
2646
+ Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2647
+ }
2648
+ catch (e) {
2649
+ throw new utils_1.CustomError({
2650
+ message: `Failed to process command '66'`,
2651
+ hexData,
2652
+ command,
2653
+ deviceType,
2654
+ originalError: e,
2655
+ });
2656
+ }
2652
2657
  }
2653
2658
  break;
2654
2659
  case '68':
2655
2660
  {
2656
- command_len = 1;
2657
- let data = { internalAlgoTemporaryState: parseInt(commands[i + 1], 16) === 0 ? true : false };
2658
- Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2661
+ try {
2662
+ command_len = 1;
2663
+ let data = { internalAlgoTemporaryState: parseInt(commands[i + 1], 16) === 0 ? true : false };
2664
+ Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2665
+ }
2666
+ catch (e) {
2667
+ throw new utils_1.CustomError({
2668
+ message: `Failed to process command '68'`,
2669
+ hexData,
2670
+ command,
2671
+ deviceType,
2672
+ originalError: e,
2673
+ });
2674
+ }
2659
2675
  }
2660
2676
  break;
2661
2677
  case '6a':
2662
2678
  {
2663
- command_len = 12;
2664
- let temperatureLevels = {};
2665
- // Process 6 scale levels (0-5), each with a 2-byte temperature value
2666
- for (let level = 0; level < 6; level++) {
2667
- let tempHighByte = parseInt(commands[i + 1 + (level * 2)], 16);
2668
- let tempLowByte = parseInt(commands[i + 2 + (level * 2)], 16);
2669
- let tempValue = (tempHighByte << 8) | tempLowByte;
2670
- // The temperature values are pre-multiplied by 10
2671
- temperatureLevels['level' + level] = tempValue / 10;
2679
+ try {
2680
+ command_len = 12;
2681
+ let temperatureLevels = {};
2682
+ // Process 6 scale levels (0-5), each with a 2-byte temperature value
2683
+ for (let level = 0; level < 6; level++) {
2684
+ let tempHighByte = parseInt(commands[i + 1 + (level * 2)], 16);
2685
+ let tempLowByte = parseInt(commands[i + 2 + (level * 2)], 16);
2686
+ let tempValue = (tempHighByte << 8) | tempLowByte;
2687
+ // The temperature values are pre-multiplied by 10
2688
+ temperatureLevels['level' + level] = tempValue / 10;
2689
+ }
2690
+ let data = {
2691
+ temperatureLevels: temperatureLevels
2692
+ };
2693
+ Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2694
+ }
2695
+ catch (e) {
2696
+ throw new utils_1.CustomError({
2697
+ message: `Failed to process command '6a'`,
2698
+ hexData,
2699
+ command,
2700
+ deviceType,
2701
+ originalError: e,
2702
+ });
2703
+ }
2704
+ }
2705
+ break;
2706
+ case '6c': {
2707
+ try {
2708
+ command_len = 4;
2709
+ let eventsHighByte = parseInt(commands[i + 2], 16); // Events 19-16
2710
+ let eventsMidByte = parseInt(commands[i + 3], 16); // Events 15-8
2711
+ let eventsLowByte = parseInt(commands[i + 4], 16); // Events 7-0
2712
+ // Create a more structured and readable format for heating events
2713
+ let heatingEventStates = {};
2714
+ // Process all 20 events (0-19) in a single loop
2715
+ for (let eventIdx = 0; eventIdx < 20; eventIdx++) {
2716
+ // Calculate which bit to check
2717
+ let bitPosition;
2718
+ if (eventIdx >= 16) {
2719
+ // Events 16-19 in high byte
2720
+ bitPosition = eventIdx - 16;
2721
+ heatingEventStates[eventIdx] = !!(eventsHighByte & (1 << bitPosition));
2722
+ }
2723
+ else if (eventIdx >= 8) {
2724
+ // Events 8-15 in mid byte
2725
+ bitPosition = eventIdx - 8;
2726
+ heatingEventStates[eventIdx] = !!(eventsMidByte & (1 << bitPosition));
2727
+ }
2728
+ else {
2729
+ // Events 0-7 in low byte
2730
+ bitPosition = eventIdx;
2731
+ heatingEventStates[eventIdx] = !!(eventsLowByte & (1 << bitPosition));
2732
+ }
2672
2733
  }
2673
2734
  let data = {
2674
- temperatureLevels: temperatureLevels
2735
+ heatingEventStates: heatingEventStates
2675
2736
  };
2676
2737
  Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2677
2738
  }
2678
- break;
2679
- case '6c': {
2680
- command_len = 4;
2681
- let eventsHighByte = parseInt(commands[i + 2], 16); // Events 19-16
2682
- let eventsMidByte = parseInt(commands[i + 3], 16); // Events 15-8
2683
- let eventsLowByte = parseInt(commands[i + 4], 16); // Events 7-0
2684
- // Create a more structured and readable format for heating events
2685
- let heatingEventStates = {};
2686
- // Process all 20 events (0-19) in a single loop
2687
- for (let eventIdx = 0; eventIdx < 20; eventIdx++) {
2688
- // Calculate which bit to check
2689
- let bitPosition;
2690
- if (eventIdx >= 16) {
2691
- // Events 16-19 in high byte
2692
- bitPosition = eventIdx - 16;
2693
- heatingEventStates[eventIdx] = !!(eventsHighByte & (1 << bitPosition));
2694
- }
2695
- else if (eventIdx >= 8) {
2696
- // Events 8-15 in mid byte
2697
- bitPosition = eventIdx - 8;
2698
- heatingEventStates[eventIdx] = !!(eventsMidByte & (1 << bitPosition));
2699
- }
2700
- else {
2701
- // Events 0-7 in low byte
2702
- bitPosition = eventIdx;
2703
- heatingEventStates[eventIdx] = !!(eventsLowByte & (1 << bitPosition));
2704
- }
2705
- }
2706
- let data = {
2707
- heatingEventStates: heatingEventStates
2708
- };
2709
- Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2710
- break;
2711
- }
2712
- case '6e': {
2713
- command_len = 1;
2714
- let data = { timeRequestByMACcommand: parseInt(commands[i + 1], 16) };
2715
- Object.assign(resultToPass, Object.assign({}, resultToPass), Object.assign({}, data));
2739
+ catch (e) {
2740
+ throw new utils_1.CustomError({
2741
+ message: `Failed to process command '6c'`,
2742
+ hexData,
2743
+ command,
2744
+ deviceType,
2745
+ originalError: e,
2746
+ });
2747
+ }
2716
2748
  break;
2717
2749
  }
2718
2750
  case '9b':