jooby-codec 1.6.0 → 1.8.0

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 (150) hide show
  1. package/dist/Command.d.ts +1 -0
  2. package/dist/Command.js +3 -2
  3. package/dist/Command.js.map +1 -1
  4. package/dist/CommandBinaryBuffer.d.ts +190 -32
  5. package/dist/CommandBinaryBuffer.js +301 -2
  6. package/dist/CommandBinaryBuffer.js.map +1 -1
  7. package/dist/commands/downlink/CorrectTime2000.d.ts +1 -6
  8. package/dist/commands/downlink/CorrectTime2000.js +2 -8
  9. package/dist/commands/downlink/CorrectTime2000.js.map +1 -1
  10. package/dist/commands/downlink/ExAbsArchiveDaysMC.d.ts +5 -10
  11. package/dist/commands/downlink/ExAbsArchiveDaysMC.js +3 -9
  12. package/dist/commands/downlink/ExAbsArchiveDaysMC.js.map +1 -1
  13. package/dist/commands/downlink/ExAbsArchiveHoursMC.d.ts +5 -10
  14. package/dist/commands/downlink/ExAbsArchiveHoursMC.js +3 -9
  15. package/dist/commands/downlink/ExAbsArchiveHoursMC.js.map +1 -1
  16. package/dist/commands/downlink/ExAbsCurrentMC.d.ts +1 -6
  17. package/dist/commands/downlink/ExAbsCurrentMC.js +3 -8
  18. package/dist/commands/downlink/ExAbsCurrentMC.js.map +1 -1
  19. package/dist/commands/downlink/GetArchiveDaysMC.d.ts +5 -5
  20. package/dist/commands/downlink/GetArchiveDaysMC.js +3 -4
  21. package/dist/commands/downlink/GetArchiveDaysMC.js.map +1 -1
  22. package/dist/commands/downlink/GetArchiveEvents.d.ts +39 -0
  23. package/dist/commands/downlink/GetArchiveEvents.js +58 -0
  24. package/dist/commands/downlink/GetArchiveEvents.js.map +1 -0
  25. package/dist/commands/downlink/GetArchiveHoursMC.d.ts +5 -10
  26. package/dist/commands/downlink/GetArchiveHoursMC.js +3 -9
  27. package/dist/commands/downlink/GetArchiveHoursMC.js.map +1 -1
  28. package/dist/commands/downlink/GetCurrentMC.d.ts +1 -1
  29. package/dist/commands/downlink/GetCurrentMC.js +3 -3
  30. package/dist/commands/downlink/GetCurrentMC.js.map +1 -1
  31. package/dist/commands/downlink/GetLmicVersion.d.ts +25 -0
  32. package/dist/commands/downlink/GetLmicVersion.js +41 -0
  33. package/dist/commands/downlink/GetLmicVersion.js.map +1 -0
  34. package/dist/commands/downlink/GetParameter.d.ts +37 -0
  35. package/dist/commands/downlink/GetParameter.js +64 -0
  36. package/dist/commands/downlink/GetParameter.js.map +1 -0
  37. package/dist/commands/downlink/GetStatus.d.ts +26 -0
  38. package/dist/commands/downlink/GetStatus.js +45 -0
  39. package/dist/commands/downlink/GetStatus.js.map +1 -0
  40. package/dist/commands/downlink/SetParameter.d.ts +6 -56
  41. package/dist/commands/downlink/SetParameter.js +45 -105
  42. package/dist/commands/downlink/SetParameter.js.map +1 -1
  43. package/dist/commands/downlink/SetTime2000.d.ts +1 -6
  44. package/dist/commands/downlink/SetTime2000.js +2 -8
  45. package/dist/commands/downlink/SetTime2000.js.map +1 -1
  46. package/dist/commands/downlink/SoftRestart.d.ts +1 -1
  47. package/dist/commands/downlink/SoftRestart.js +3 -3
  48. package/dist/commands/downlink/SoftRestart.js.map +1 -1
  49. package/dist/commands/downlink/index.d.ts +4 -1
  50. package/dist/commands/downlink/index.js +4 -1
  51. package/dist/commands/downlink/index.js.map +1 -1
  52. package/dist/commands/uplink/CorrectTime2000.d.ts +1 -1
  53. package/dist/commands/uplink/CorrectTime2000.js +3 -3
  54. package/dist/commands/uplink/CorrectTime2000.js.map +1 -1
  55. package/dist/commands/uplink/DataDayMC.d.ts +3 -5
  56. package/dist/commands/uplink/DataDayMC.js +4 -3
  57. package/dist/commands/uplink/DataDayMC.js.map +1 -1
  58. package/dist/commands/uplink/DataHourMC.d.ts +3 -2
  59. package/dist/commands/uplink/DataHourMC.js +4 -3
  60. package/dist/commands/uplink/DataHourMC.js.map +1 -1
  61. package/dist/commands/uplink/ExAbsArchiveDaysMC.d.ts +3 -2
  62. package/dist/commands/uplink/ExAbsArchiveDaysMC.js +4 -3
  63. package/dist/commands/uplink/ExAbsArchiveDaysMC.js.map +1 -1
  64. package/dist/commands/uplink/ExAbsArchiveHoursMC.d.ts +3 -2
  65. package/dist/commands/uplink/ExAbsArchiveHoursMC.js +4 -3
  66. package/dist/commands/uplink/ExAbsArchiveHoursMC.js.map +1 -1
  67. package/dist/commands/uplink/ExAbsCurrentMC.d.ts +1 -1
  68. package/dist/commands/uplink/ExAbsCurrentMC.js +4 -3
  69. package/dist/commands/uplink/ExAbsCurrentMC.js.map +1 -1
  70. package/dist/commands/uplink/ExAbsDayMC.d.ts +3 -2
  71. package/dist/commands/uplink/ExAbsDayMC.js +4 -3
  72. package/dist/commands/uplink/ExAbsDayMC.js.map +1 -1
  73. package/dist/commands/uplink/ExAbsHourMC.d.ts +3 -2
  74. package/dist/commands/uplink/ExAbsHourMC.js +4 -3
  75. package/dist/commands/uplink/ExAbsHourMC.js.map +1 -1
  76. package/dist/commands/uplink/GetArchiveDaysMC.d.ts +3 -2
  77. package/dist/commands/uplink/GetArchiveDaysMC.js +4 -3
  78. package/dist/commands/uplink/GetArchiveDaysMC.js.map +1 -1
  79. package/dist/commands/uplink/GetArchiveEvents.d.ts +48 -0
  80. package/dist/commands/uplink/GetArchiveEvents.js +105 -0
  81. package/dist/commands/uplink/GetArchiveEvents.js.map +1 -0
  82. package/dist/commands/uplink/GetArchiveHoursMC.d.ts +3 -2
  83. package/dist/commands/uplink/GetArchiveHoursMC.js +4 -3
  84. package/dist/commands/uplink/GetArchiveHoursMC.js.map +1 -1
  85. package/dist/commands/uplink/GetCurrentMC.d.ts +1 -1
  86. package/dist/commands/uplink/GetCurrentMC.js +4 -3
  87. package/dist/commands/uplink/GetCurrentMC.js.map +1 -1
  88. package/dist/commands/uplink/GetLmicVersion.d.ts +46 -0
  89. package/dist/commands/uplink/GetLmicVersion.js +90 -0
  90. package/dist/commands/uplink/GetLmicVersion.js.map +1 -0
  91. package/dist/commands/uplink/GetParameter.d.ts +30 -0
  92. package/dist/commands/uplink/GetParameter.js +91 -0
  93. package/dist/commands/uplink/GetParameter.js.map +1 -0
  94. package/dist/commands/uplink/GetStatus.d.ts +57 -0
  95. package/dist/commands/uplink/{NewStatus.js → GetStatus.js} +56 -37
  96. package/dist/commands/uplink/GetStatus.js.map +1 -0
  97. package/dist/commands/uplink/LastEvent.d.ts +5 -76
  98. package/dist/commands/uplink/LastEvent.js +67 -115
  99. package/dist/commands/uplink/LastEvent.js.map +1 -1
  100. package/dist/commands/uplink/NewEvent.d.ts +35 -7
  101. package/dist/commands/uplink/NewEvent.js +96 -20
  102. package/dist/commands/uplink/NewEvent.js.map +1 -1
  103. package/dist/commands/uplink/SetTime2000.d.ts +1 -1
  104. package/dist/commands/uplink/SetTime2000.js +3 -3
  105. package/dist/commands/uplink/SetTime2000.js.map +1 -1
  106. package/dist/commands/uplink/SoftRestart.d.ts +1 -1
  107. package/dist/commands/uplink/SoftRestart.js +3 -3
  108. package/dist/commands/uplink/SoftRestart.js.map +1 -1
  109. package/dist/commands/uplink/Time2000.d.ts +5 -5
  110. package/dist/commands/uplink/Time2000.js +6 -7
  111. package/dist/commands/uplink/Time2000.js.map +1 -1
  112. package/dist/commands/uplink/index.d.ts +5 -2
  113. package/dist/commands/uplink/index.js +5 -2
  114. package/dist/commands/uplink/index.js.map +1 -1
  115. package/dist/constants/deviceParameters.d.ts +12 -12
  116. package/dist/constants/deviceParameters.js +12 -12
  117. package/dist/constants/deviceParameters.js.map +1 -1
  118. package/dist/constants/{directionTypes.js → directions.js} +1 -1
  119. package/dist/constants/directions.js.map +1 -0
  120. package/dist/constants/events.d.ts +30 -4
  121. package/dist/constants/events.js +30 -4
  122. package/dist/constants/events.js.map +1 -1
  123. package/dist/constants/hardwareTypes.d.ts +2 -2
  124. package/dist/constants/hardwareTypes.js +2 -2
  125. package/dist/constants/index.d.ts +1 -1
  126. package/dist/constants/index.js +1 -1
  127. package/dist/constants/index.js.map +1 -1
  128. package/dist/utils/message.js +2 -2
  129. package/dist/utils/message.js.map +1 -1
  130. package/dist/utils/time.d.ts +20 -3
  131. package/dist/utils/time.js +2 -2
  132. package/dist/utils/time.js.map +1 -1
  133. package/package.json +2 -1
  134. package/readme.md +33 -16
  135. package/dist/commands/downlink/NewStatus.d.ts +0 -25
  136. package/dist/commands/downlink/NewStatus.js +0 -37
  137. package/dist/commands/downlink/NewStatus.js.map +0 -1
  138. package/dist/commands/uplink/NewStatus.d.ts +0 -56
  139. package/dist/commands/uplink/NewStatus.js.map +0 -1
  140. package/dist/constants/directionTypes.js.map +0 -1
  141. package/dist/constants/general.d.ts +0 -1
  142. package/dist/constants/general.js +0 -2
  143. package/dist/constants/general.js.map +0 -1
  144. package/dist/utils/getBitArrayFromNumber.d.ts +0 -14
  145. package/dist/utils/getBitArrayFromNumber.js +0 -15
  146. package/dist/utils/getBitArrayFromNumber.js.map +0 -1
  147. package/dist/utils/getIntFromBitString.d.ts +0 -6
  148. package/dist/utils/getIntFromBitString.js +0 -6
  149. package/dist/utils/getIntFromBitString.js.map +0 -1
  150. /package/dist/constants/{directionTypes.d.ts → directions.d.ts} +0 -0
package/dist/Command.d.ts CHANGED
@@ -17,6 +17,7 @@ declare abstract class Command {
17
17
  static directionType: unknown;
18
18
  static title: string;
19
19
  static examples: TCommandExampleList;
20
+ static hasParameters: boolean;
20
21
  parameters: unknown;
21
22
  /** Get command ID in hex format. */
22
23
  static getId(): string;
package/dist/Command.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as header from './utils/header.js';
2
2
  import getHexFromBytes from './utils/getHexFromBytes.js';
3
- import { UPLINK } from './constants/directionTypes.js';
3
+ import { UPLINK } from './constants/directions.js';
4
4
  /**
5
5
  * private
6
6
  */
@@ -12,7 +12,7 @@ class Command {
12
12
  /** Get command ID and title. */
13
13
  static getName() {
14
14
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
15
- return `${this.directionType === UPLINK ? 'uplink' : 'downlink'} command ${this.getId()}:${this.title}`;
15
+ return `${this.directionType === UPLINK ? 'uplink' : 'downlink'} command ${this.getId()}:${this.name}`;
16
16
  }
17
17
  /**
18
18
  * Parse body without header.
@@ -84,5 +84,6 @@ class Command {
84
84
  return JSON.stringify(this.getParameters());
85
85
  }
86
86
  }
87
+ Command.hasParameters = false;
87
88
  export default Command;
88
89
  //# sourceMappingURL=Command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Command.js","sourceRoot":"","sources":["../src/Command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,eAAoC,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAC,MAAM,EAAC,MAAM,+BAA+B,CAAC;AAiBrD;;GAEG;AACH,MAAe,OAAO;IAWlB,oCAAoC;IACpC,MAAM,CAAC,KAAK;QACR,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,OAAO;QACV,uEAAuE;QACvE,OAAO,GAAG,IAAI,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,YAAY,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IAC5G,CAAC;IAGD;;;;;;OAMG;IACH,mDAAmD;IACnD,2CAA2C;IAC3C,IAAI;IAEJ,6CAA6C;IAC7C,oDAAoD;IACpD,IAAI;IAEJ,kEAAkE;IAClE,iDAAiD;IAEjD,4EAA4E;IAC5E,2BAA2B;IAC3B,2IAA2I;IAC3I,aAAa;IACb,QAAQ;IAER,0DAA0D;IAE1D,wBAAwB;IACxB,2BAA2B;IAC3B,sEAAsE;IACtE,aAAa;IACb,QAAQ;IAER,oEAAoE;IACpE,gCAAgC;IAChC,4FAA4F;IAC5F,SAAS;IACT,IAAI;IAGJ;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAG,EAAU,EAAE,WAAwB;QACjD,MAAM,aAAa,GAAG,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAErD,IAAK,WAAW,IAAI,aAAa,EAAG;YAChC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;YAErE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAE/C,OAAO,UAAU,CAAC;SACrB;QAED,8BAA8B;QAC9B,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,8BAA8B;IAC9B,aAAa;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,kDAAkD;IAClD,OAAO;QACH,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAG,UAA6B,EAAE;QACnC,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,MAAM;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,CAAC;CACJ;AAGD,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Command.js","sourceRoot":"","sources":["../src/Command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,eAAoC,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAiBjD;;GAEG;AACH,MAAe,OAAO;IAelB,oCAAoC;IACpC,MAAM,CAAC,KAAK;QACR,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,OAAO;QACV,uEAAuE;QACvE,OAAO,GAAG,IAAI,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,YAAY,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3G,CAAC;IAED;;;;;;OAMG;IACH,mDAAmD;IACnD,2CAA2C;IAC3C,IAAI;IAEJ,6CAA6C;IAC7C,oDAAoD;IACpD,IAAI;IAEJ,kEAAkE;IAClE,iDAAiD;IAEjD,4EAA4E;IAC5E,2BAA2B;IAC3B,2IAA2I;IAC3I,aAAa;IACb,QAAQ;IAER,0DAA0D;IAE1D,wBAAwB;IACxB,2BAA2B;IAC3B,sEAAsE;IACtE,aAAa;IACb,QAAQ;IAER,oEAAoE;IACpE,gCAAgC;IAChC,4FAA4F;IAC5F,SAAS;IACT,IAAI;IAEJ;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAG,EAAU,EAAE,WAAwB;QACjD,MAAM,aAAa,GAAG,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAErD,IAAK,WAAW,IAAI,aAAa,EAAG;YAChC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;YAErE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAE/C,OAAO,UAAU,CAAC;SACrB;QAED,8BAA8B;QAC9B,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,8BAA8B;IAC9B,aAAa;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,kDAAkD;IAClD,OAAO;QACH,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAG,UAA6B,EAAE;QACnC,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,MAAM;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,CAAC;;AApGM,qBAAa,GAAG,KAAK,CAAC;AAwGjC,eAAe,OAAO,CAAC"}
@@ -1,67 +1,203 @@
1
1
  import BinaryBuffer from './BinaryBuffer.js';
2
+ import { TTime2000 } from './utils/time.js';
2
3
  export interface IBatteryVoltage {
3
4
  /**
4
- * battery voltage value at low consumption, in mV;
5
+ * battery voltage value at low consumption, in mV
5
6
  *
6
- * 4095 === undefined
7
+ * `4095` - unknown value and becomes `undefined`
7
8
  */
8
9
  low: number | undefined;
9
10
  /**
10
- * battery voltage value at hight consumption, in mV;
11
+ * battery voltage value at hight consumption, in mV
11
12
  *
12
- * 4095 === undefined
13
+ * `4095` - unknown value and becomes `undefined`
13
14
  */
14
15
  high: number | undefined;
15
16
  }
16
17
  export interface IChannel {
17
- /**
18
- * Channel number.
19
- */
18
+ /** channel number */
20
19
  index: number;
21
20
  }
22
21
  export interface IChannelValue extends IChannel {
23
- /**
24
- * Pulse counter or absolute value of device channel.
25
- */
22
+ /** pulse counter or absolute value of device channel */
26
23
  value: number;
27
24
  }
28
25
  export interface IChannelHours extends IChannelValue {
29
- /**
30
- * values differences between hours
31
- */
26
+ /** values differences between hours */
32
27
  diff: Array<number>;
33
28
  }
34
29
  export interface IChannelHourAbsoluteValue extends IChannelHours {
35
- /**
36
- * Channel pulse coefficient - IPK in bytes.
37
- */
30
+ /** channel pulse coefficient - IPK in bytes */
38
31
  pulseCoefficient: number;
39
32
  }
40
33
  export interface IChannelDays extends IChannel {
41
34
  dayList: Array<number>;
42
35
  }
43
36
  export interface IChannelAbsoluteValue extends IChannelValue {
44
- /**
45
- * Channel pulse coefficient - IPK in bytes.
46
- */
37
+ /** channel pulse coefficient - IPK in bytes */
47
38
  pulseCoefficient: number;
48
39
  }
49
40
  export interface IChannelArchiveDaysAbsolute extends IChannel {
41
+ /** values by days */
42
+ dayList: Array<number>;
43
+ /** Channel pulse coefficient - IPK in bytes */
44
+ pulseCoefficient: number;
45
+ }
46
+ export interface IChannelArchiveDays extends IChannel {
47
+ /** values by days */
48
+ dayList: Array<number>;
49
+ }
50
+ export interface IEventGasStatus {
51
+ /** the battery voltage has dropped below the set threshold */
52
+ isBatteryLow?: boolean;
53
+ /** there is a magnetic field influence */
54
+ isMagneticInfluence?: boolean;
55
+ /** button is release (device is unmounted) */
56
+ isButtonReleased?: boolean;
57
+ /** the device has detected a loss of connection to the server */
58
+ isConnectionLost?: boolean;
59
+ }
60
+ export interface IEvent2ChannelStatus {
61
+ /** the battery voltage has dropped below the set threshold */
62
+ isBatteryLow?: boolean;
63
+ /** the device has detected a loss of connection to the server */
64
+ isConnectionLost?: boolean;
65
+ /** the first channel is not active */
66
+ isFirstChannelInactive?: boolean;
67
+ /** the second channel is not active */
68
+ isSecondChannelInactive?: boolean;
69
+ }
70
+ export interface IEventElimpStatus {
71
+ /** the device has detected a loss of connection to the server */
72
+ isConnectionLost?: boolean;
73
+ }
74
+ export interface IEventWaterStatus {
75
+ /** the battery voltage has dropped below the set threshold */
76
+ isBatteryLow?: boolean;
77
+ /** the device has detected a loss of connection to the server */
78
+ isConnectionLost?: boolean;
79
+ }
80
+ export interface IEvent4ChannelStatus {
81
+ /** the battery voltage has dropped below the set threshold */
82
+ isBatteryLow?: boolean;
83
+ /** the device has detected a loss of connection to the server */
84
+ isConnectionLost?: boolean;
85
+ /** the first channel is not active */
86
+ isFirstChannelInactive?: boolean;
87
+ /** the second channel is not active */
88
+ isSecondChannelInactive?: boolean;
89
+ /** the third channel is not active */
90
+ isThirdChannelInactive?: boolean;
91
+ /** the forth channel is not active */
92
+ isForthChannelInactive?: boolean;
93
+ }
94
+ export interface IEventMtxStatus {
95
+ /** meter case is open */
96
+ isMeterCaseOpen?: boolean;
97
+ /** there is a magnetic field influence */
98
+ isMagneticInfluence?: boolean;
99
+ /** parameters set remotely */
100
+ isParametersSetRemotely?: boolean;
101
+ /** parameters set locally */
102
+ isParametersSetLocally?: boolean;
103
+ /** meter program restart */
104
+ isMeterProgramRestarted?: boolean;
105
+ /** incorrect password and lockout */
106
+ isLockedOut?: boolean;
107
+ /** time set */
108
+ isTimeSet?: boolean;
109
+ /** time correction */
110
+ isTimeCorrected?: boolean;
111
+ /** meter failure */
112
+ isMeterFailure?: boolean;
113
+ /** meter terminal box is open */
114
+ isMeterTerminalBoxOpen?: boolean;
115
+ /** meter module compartment is open */
116
+ isModuleCompartmentOpen?: boolean;
117
+ /** tariff plan changed */
118
+ isTariffPlanChanged?: boolean;
119
+ /** new tariff plan received */
120
+ isNewTariffPlanReceived?: boolean;
121
+ }
122
+ /**
123
+ * Device send data periodically using this interval.
124
+ * TODO:
125
+ */
126
+ /**
127
+ * The parameter defines the hour of the day by which the daily consumption is calculated.
128
+ * deviceParameters.DAY_CHECKOUT_HOUR = `4`.
129
+ */
130
+ interface IParameterDayCheckoutHour {
131
+ value: number;
132
+ }
133
+ /**
134
+ * Type of data from device.
135
+ * deviceParameters.OUTPUT_DATA_TYPE = `5`.
136
+ */
137
+ interface IParameterOutputDataType {
50
138
  /**
51
- * values by days
139
+ * `0` - hour, by default
140
+ * `1` - day
141
+ * `2` - current
142
+ * `3` - hour + day
52
143
  */
53
- dayList: Array<number>;
144
+ type: number;
145
+ }
146
+ /**
147
+ * Device activation method in LoRaWAN network.
148
+ * deviceParameters.ACTIVATION_METHOD = `9`.
149
+ */
150
+ interface IParameterActivationMethod {
54
151
  /**
55
- * Channel pulse coefficient - IPK in bytes.
152
+ * `0` - OTAA, by default
153
+ * `1` - ABP
56
154
  */
155
+ type: number;
156
+ }
157
+ /**
158
+ * Initial values for pulse devices.
159
+ * deviceParameters.INITIAL_DATA = `23`.
160
+ */
161
+ interface IParameterInitialData {
162
+ /** 4 byte int BE */
163
+ value: number;
164
+ /** 4 byte int BE */
165
+ meterValue: number;
57
166
  pulseCoefficient: number;
58
167
  }
59
- export interface IChannelArchiveDays extends IChannel {
168
+ /**
169
+ * Data type sending from device - absolute or not.
170
+ * deviceParameters.ABSOLUTE_DATA_STATUS = `24`
171
+ */
172
+ interface IParameterAbsoluteDataStatus {
60
173
  /**
61
- * values by days
174
+ * `1` - absolute data sending enabled
175
+ * `0` - disabled, device send pulse counter
62
176
  */
63
- dayList: Array<number>;
177
+ status: number;
178
+ }
179
+ /**
180
+ * Initial values for multi-channel devices.
181
+ * deviceParameters.INITIAL_DATA_MULTI_CHANNEL = `29`.
182
+ */
183
+ interface IParameterInitialDataMC extends IParameterInitialData {
184
+ /** channel that accept initial values */
185
+ channel: number;
186
+ }
187
+ /**
188
+ * Data type sending from device - absolute or not, multi-channel devices.
189
+ * deviceParameters.ABSOLUTE_DATA_STATUS_MULTI_CHANNEL = `30`
190
+ */
191
+ interface IParameterAbsoluteDataStatusMC extends IParameterAbsoluteDataStatus {
192
+ /** channel that accept status changing */
193
+ channel: number;
194
+ }
195
+ export interface IParameter {
196
+ id: number;
197
+ data: TParameterData;
64
198
  }
199
+ export type TEventStatus = IEventGasStatus | IEvent2ChannelStatus | IEventElimpStatus | IEventWaterStatus | IEvent4ChannelStatus | IEventMtxStatus;
200
+ type TParameterData = IParameterOutputDataType | IParameterDayCheckoutHour | IParameterActivationMethod | IParameterInitialData | IParameterAbsoluteDataStatus | IParameterInitialDataMC | IParameterAbsoluteDataStatusMC;
65
201
  /**
66
202
  * Command specific byte array manipulation.
67
203
  */
@@ -79,6 +215,7 @@ declare class CommandBinaryBuffer extends BinaryBuffer {
79
215
  * ```
80
216
  */
81
217
  static getExtendedValueSize(bits: number): number;
218
+ static getParameterSize(parameter: IParameter): number;
82
219
  getExtendedValue(): number;
83
220
  setExtendedValue(value: number): void;
84
221
  /**
@@ -102,7 +239,7 @@ declare class CommandBinaryBuffer extends BinaryBuffer {
102
239
  * Convert date or seconds to bytes.
103
240
  * '2023-12-23' will be 0010111-1100-10111, so bytes: ['00101111', '10010111'] -> [47, 151]
104
241
  */
105
- setDate(dateOrTime: Date | number): void;
242
+ setDate(dateOrTime: Date | TTime2000): void;
106
243
  /**
107
244
  * Retrieve device time from byte array.
108
245
  *
@@ -114,17 +251,38 @@ declare class CommandBinaryBuffer extends BinaryBuffer {
114
251
  hour: number;
115
252
  };
116
253
  setHours(hour: number, hours: number): void;
117
- getTime(): number;
118
- setTime(value: number): void;
119
- getBatterVoltage(): IBatteryVoltage;
120
- setBatterVoltage(batteryVoltage: IBatteryVoltage): void;
254
+ getTime(): TTime2000;
255
+ setTime(value: TTime2000): void;
256
+ getBatteryVoltage(): IBatteryVoltage;
257
+ setBatteryVoltage(batteryVoltage: IBatteryVoltage): void;
121
258
  getChannelsValuesWithHourDiff(): {
122
259
  hours: number;
123
- startTime: number;
260
+ startTime: TTime2000;
124
261
  channelList: Array<IChannelHours>;
125
262
  };
126
- setChannelsValuesWithHourDiff(hours: number, startTime: number, channelList: Array<IChannelHours>): void;
263
+ setChannelsValuesWithHourDiff(hours: number, startTime: TTime2000, channelList: Array<IChannelHours>): void;
127
264
  getChannelsWithAbsoluteValues(): Array<IChannelAbsoluteValue>;
128
265
  setChannelsWithAbsoluteValues(channelList: Array<IChannelAbsoluteValue>): void;
266
+ static getEventStatusSize(hardwareType: number): number;
267
+ getEventStatus(hardwareType: number): TEventStatus;
268
+ setEventStatus(hardwareType: number, status: TEventStatus): void;
269
+ private getPulseCoefficient;
270
+ private setPulseCoefficient;
271
+ private getParameterInitialData;
272
+ private setParameterInitialData;
273
+ private getParameterInitialDataMC;
274
+ private setParameterInitialDataMC;
275
+ private getParameterAbsoluteDataStatus;
276
+ private setParameterAbsoluteDataStatus;
277
+ private getParameterAbsoluteDataStatusMC;
278
+ private setParameterAbsoluteDataStatusMC;
279
+ private getParameterActivationMethod;
280
+ private setParameterActivationMethod;
281
+ private getOutputDataType;
282
+ private setOutputDataType;
283
+ private getParameterDayCheckoutHour;
284
+ private setParameterDayCheckoutHour;
285
+ getParameter(): IParameter;
286
+ setParameter(parameter: IParameter): void;
129
287
  }
130
288
  export default CommandBinaryBuffer;
@@ -1,5 +1,8 @@
1
1
  import BinaryBuffer from './BinaryBuffer.js';
2
+ import * as bitSet from './utils/bitSet.js';
2
3
  import { getDateFromSeconds, getSecondsFromDate } from './utils/time.js';
4
+ import * as hardwareTypes from './constants/hardwareTypes.js';
5
+ import * as deviceParameters from './constants/deviceParameters.js';
3
6
  const INITIAL_YEAR = 2000;
4
7
  const MONTH_BIT_SIZE = 4;
5
8
  const DATE_BIT_SIZE = 5;
@@ -7,6 +10,94 @@ const YEAR_START_INDEX = 1;
7
10
  const UNKNOWN_BATTERY_VOLTAGE = 4095;
8
11
  const EXTEND_BIT_MASK = 0x80;
9
12
  const LAST_BIT_INDEX = 7;
13
+ const GAS_HARDWARE_TYPES = [
14
+ hardwareTypes.GAZM0,
15
+ hardwareTypes.GAZM0NEW,
16
+ hardwareTypes.GAZM3,
17
+ hardwareTypes.GAZWLE
18
+ ];
19
+ const TWO_CHANNELS_HARDWARE_TYPES = [
20
+ hardwareTypes.IMP2AS,
21
+ hardwareTypes.IMP2EU,
22
+ hardwareTypes.IMP2IN,
23
+ hardwareTypes.NOVATOR
24
+ ];
25
+ const ELIMP_HARDWARE_TYPES = [
26
+ hardwareTypes.ELIMP
27
+ ];
28
+ const WATER_HARDWARE_TYPES = [
29
+ hardwareTypes.WATER
30
+ ];
31
+ const FOUR_CHANNELS_HARDWARE_TYPES = [
32
+ hardwareTypes.IMP4EU,
33
+ hardwareTypes.IMP4IN
34
+ ];
35
+ const MTX_HARDWARE_TYPES = [
36
+ hardwareTypes.MTXLORA
37
+ ];
38
+ const TWO_BYTES_HARDWARE_TYPES = [...FOUR_CHANNELS_HARDWARE_TYPES, ...MTX_HARDWARE_TYPES];
39
+ const gasBitMask = {
40
+ isBatteryLow: 2 ** 0,
41
+ isMagneticInfluence: 2 ** 1,
42
+ isButtonReleased: 2 ** 2,
43
+ isConnectionLost: 2 ** 3
44
+ };
45
+ const twoChannelBitMask = {
46
+ isBatteryLow: 2 ** 0,
47
+ isConnectionLost: 2 ** 3,
48
+ isFirstChannelInactive: 2 ** 4,
49
+ isSecondChannelInactive: 2 ** 5
50
+ };
51
+ const elimpBitMask = {
52
+ isConnectionLost: 2 ** 3
53
+ };
54
+ const waterBitMask = {
55
+ isBatteryLow: 2 ** 0,
56
+ isConnectionLost: 2 ** 3
57
+ };
58
+ const fourChannelBitMask = {
59
+ isBatteryLow: 2 ** 0,
60
+ isConnectionLost: 2 ** 3,
61
+ isFirstChannelInactive: 2 ** 4,
62
+ isSecondChannelInactive: 2 ** 5,
63
+ isThirdChannelInactive: 2 ** 6,
64
+ isForthChannelInactive: 2 ** 7
65
+ };
66
+ const mtxBitMask = {
67
+ isMeterCaseOpen: 2 ** 0,
68
+ isMagneticInfluence: 2 ** 1,
69
+ isParametersSetRemotely: 2 ** 2,
70
+ isParametersSetLocally: 2 ** 3,
71
+ isMeterProgramRestarted: 2 ** 4,
72
+ isLockedOut: 2 ** 5,
73
+ isTimeSet: 2 ** 6,
74
+ isTimeCorrected: 2 ** 7,
75
+ isMeterFailure: 2 ** 8,
76
+ isMeterTerminalBoxOpen: 2 ** 9,
77
+ isModuleCompartmentOpen: 2 ** 10,
78
+ isTariffPlanChanged: 2 ** 11,
79
+ isNewTariffPlanReceived: 2 ** 12
80
+ };
81
+ /**
82
+ * device parameter data size + byte for parameter id
83
+ */
84
+ const parametersSizeMap = new Map([
85
+ [deviceParameters.INITIAL_DATA, 9 + 1],
86
+ [deviceParameters.ABSOLUTE_DATA_STATUS, 1 + 1],
87
+ [deviceParameters.INITIAL_DATA_MULTI_CHANNEL, 10 + 1],
88
+ [deviceParameters.ABSOLUTE_DATA_STATUS_MULTI_CHANNEL, 2 + 1]
89
+ ]);
90
+ const byteToPulseCoefficientMap = new Map([
91
+ [0x80, 1000],
92
+ [0x81, 5000],
93
+ [0x82, 100],
94
+ [0x83, 10],
95
+ [0x84, 1],
96
+ [0x85, 0.1],
97
+ [0x86, 0.01]
98
+ ]);
99
+ const pulseCoefficientToByteMap = new Map([...byteToPulseCoefficientMap.entries()].map(([key, value]) => [value, key]));
100
+ const isMSBSet = (value) => !!(value & 0x80);
10
101
  /**
11
102
  * Command specific byte array manipulation.
12
103
  */
@@ -29,6 +120,13 @@ class CommandBinaryBuffer extends BinaryBuffer {
29
120
  const extBytes = Math.ceil(totalBits / 8);
30
121
  return extBytes;
31
122
  }
123
+ static getParameterSize(parameter) {
124
+ const size = parametersSizeMap.get(parameter.id);
125
+ if (size === undefined) {
126
+ throw new Error('unknown parameter id');
127
+ }
128
+ return size;
129
+ }
32
130
  getExtendedValue() {
33
131
  let value = 0;
34
132
  let isByteExtended = true;
@@ -186,7 +284,7 @@ class CommandBinaryBuffer extends BinaryBuffer {
186
284
  setTime(value) {
187
285
  return this.setUint32(value, false);
188
286
  }
189
- getBatterVoltage() {
287
+ getBatteryVoltage() {
190
288
  let high;
191
289
  let low;
192
290
  const lowVoltageByte = this.getUint8();
@@ -203,7 +301,7 @@ class CommandBinaryBuffer extends BinaryBuffer {
203
301
  }
204
302
  return { low, high };
205
303
  }
206
- setBatterVoltage(batteryVoltage) {
304
+ setBatteryVoltage(batteryVoltage) {
207
305
  let { low, high } = batteryVoltage;
208
306
  if (low === undefined) {
209
307
  low = UNKNOWN_BATTERY_VOLTAGE;
@@ -269,6 +367,207 @@ class CommandBinaryBuffer extends BinaryBuffer {
269
367
  this.setExtendedValue(value);
270
368
  }
271
369
  }
370
+ static getEventStatusSize(hardwareType) {
371
+ return TWO_BYTES_HARDWARE_TYPES.includes(hardwareType) ? 2 : 1;
372
+ }
373
+ getEventStatus(hardwareType) {
374
+ let status;
375
+ if (GAS_HARDWARE_TYPES.includes(hardwareType)) {
376
+ status = bitSet.toObject(gasBitMask, this.getUint8());
377
+ }
378
+ else if (TWO_CHANNELS_HARDWARE_TYPES.includes(hardwareType)) {
379
+ status = bitSet.toObject(twoChannelBitMask, this.getUint8());
380
+ }
381
+ else if (ELIMP_HARDWARE_TYPES.includes(hardwareType)) {
382
+ status = bitSet.toObject(elimpBitMask, this.getUint8());
383
+ }
384
+ else if (WATER_HARDWARE_TYPES.includes(hardwareType)) {
385
+ status = bitSet.toObject(waterBitMask, this.getUint8());
386
+ }
387
+ else if (FOUR_CHANNELS_HARDWARE_TYPES.includes(hardwareType)) {
388
+ status = bitSet.toObject(fourChannelBitMask, this.getExtendedValue());
389
+ }
390
+ else if (MTX_HARDWARE_TYPES.includes(hardwareType)) {
391
+ status = bitSet.toObject(mtxBitMask, this.getUint16());
392
+ }
393
+ else {
394
+ throw new Error('wrong hardwareType');
395
+ }
396
+ return status;
397
+ }
398
+ setEventStatus(hardwareType, status) {
399
+ if (GAS_HARDWARE_TYPES.includes(hardwareType)) {
400
+ this.setUint8(bitSet.fromObject(gasBitMask, status));
401
+ }
402
+ else if (TWO_CHANNELS_HARDWARE_TYPES.includes(hardwareType)) {
403
+ this.setUint8(bitSet.fromObject(twoChannelBitMask, status));
404
+ }
405
+ else if (ELIMP_HARDWARE_TYPES.includes(hardwareType)) {
406
+ this.setUint8(bitSet.fromObject(elimpBitMask, status));
407
+ }
408
+ else if (WATER_HARDWARE_TYPES.includes(hardwareType)) {
409
+ this.setUint8(bitSet.fromObject(waterBitMask, status));
410
+ }
411
+ else if (FOUR_CHANNELS_HARDWARE_TYPES.includes(hardwareType)) {
412
+ this.setExtendedValue(bitSet.fromObject(fourChannelBitMask, status));
413
+ }
414
+ else if (MTX_HARDWARE_TYPES.includes(hardwareType)) {
415
+ this.setUint16(bitSet.fromObject(mtxBitMask, status));
416
+ }
417
+ else {
418
+ throw new Error('wrong hardwareType');
419
+ }
420
+ }
421
+ getPulseCoefficient() {
422
+ const pulseCoefficient = this.getUint8();
423
+ if (isMSBSet(pulseCoefficient)) {
424
+ const value = byteToPulseCoefficientMap.get(pulseCoefficient);
425
+ if (value) {
426
+ return value;
427
+ }
428
+ throw new Error('pulseCoefficient MSB is set, but value unknown');
429
+ }
430
+ return pulseCoefficient;
431
+ }
432
+ setPulseCoefficient(value) {
433
+ if (pulseCoefficientToByteMap.has(value)) {
434
+ const byte = pulseCoefficientToByteMap.get(value);
435
+ if (byte) {
436
+ this.setUint8(byte);
437
+ }
438
+ else {
439
+ throw new Error('pulseCoefficient MSB is set, but value unknown');
440
+ }
441
+ }
442
+ else {
443
+ this.setUint8(value);
444
+ }
445
+ }
446
+ getParameterInitialData() {
447
+ return {
448
+ meterValue: this.getUint32(false),
449
+ pulseCoefficient: this.getPulseCoefficient(),
450
+ value: this.getUint32(false)
451
+ };
452
+ }
453
+ setParameterInitialData(parameter) {
454
+ this.setUint32(parameter.meterValue, false);
455
+ this.setPulseCoefficient(parameter.pulseCoefficient);
456
+ this.setUint32(parameter.value, false);
457
+ }
458
+ getParameterInitialDataMC() {
459
+ return {
460
+ channel: this.getUint8(),
461
+ meterValue: this.getUint32(false),
462
+ pulseCoefficient: this.getPulseCoefficient(),
463
+ value: this.getUint32(false)
464
+ };
465
+ }
466
+ setParameterInitialDataMC(parameter) {
467
+ this.setUint8(parameter.channel);
468
+ this.setUint32(parameter.meterValue, false);
469
+ this.setPulseCoefficient(parameter.pulseCoefficient);
470
+ this.setUint32(parameter.value, false);
471
+ }
472
+ getParameterAbsoluteDataStatus() {
473
+ return { status: this.getUint8() };
474
+ }
475
+ setParameterAbsoluteDataStatus(parameter) {
476
+ this.setUint8(parameter.status);
477
+ }
478
+ getParameterAbsoluteDataStatusMC() {
479
+ return {
480
+ channel: this.getUint8(),
481
+ status: this.getUint8()
482
+ };
483
+ }
484
+ setParameterAbsoluteDataStatusMC(parameter) {
485
+ this.setUint8(parameter.channel);
486
+ this.setUint8(parameter.status);
487
+ }
488
+ getParameterActivationMethod() {
489
+ return {
490
+ type: this.getUint8()
491
+ };
492
+ }
493
+ setParameterActivationMethod(parameter) {
494
+ this.setUint8(parameter.type);
495
+ }
496
+ getOutputDataType() {
497
+ return {
498
+ type: this.getUint8()
499
+ };
500
+ }
501
+ setOutputDataType(parameter) {
502
+ this.setUint8(parameter.type);
503
+ }
504
+ getParameterDayCheckoutHour() {
505
+ return {
506
+ value: this.getUint8()
507
+ };
508
+ }
509
+ setParameterDayCheckoutHour(parameter) {
510
+ this.setUint8(parameter.value);
511
+ }
512
+ getParameter() {
513
+ const id = this.getUint8();
514
+ let data;
515
+ switch (id) {
516
+ case deviceParameters.OUTPUT_DATA_TYPE:
517
+ data = this.getOutputDataType();
518
+ break;
519
+ case deviceParameters.DAY_CHECKOUT_HOUR:
520
+ data = this.getParameterDayCheckoutHour();
521
+ break;
522
+ case deviceParameters.ACTIVATION_METHOD:
523
+ data = this.getParameterActivationMethod();
524
+ break;
525
+ case deviceParameters.INITIAL_DATA:
526
+ data = this.getParameterInitialData();
527
+ break;
528
+ case deviceParameters.INITIAL_DATA_MULTI_CHANNEL:
529
+ data = this.getParameterInitialDataMC();
530
+ break;
531
+ case deviceParameters.ABSOLUTE_DATA_STATUS:
532
+ data = this.getParameterAbsoluteDataStatus();
533
+ break;
534
+ case deviceParameters.ABSOLUTE_DATA_STATUS_MULTI_CHANNEL:
535
+ data = this.getParameterAbsoluteDataStatusMC();
536
+ break;
537
+ default:
538
+ throw new Error(`parameter ${id} is not supported`);
539
+ }
540
+ return { id, data };
541
+ }
542
+ setParameter(parameter) {
543
+ const { id, data } = parameter;
544
+ this.setUint8(id);
545
+ switch (id) {
546
+ case deviceParameters.OUTPUT_DATA_TYPE:
547
+ this.setOutputDataType(data);
548
+ break;
549
+ case deviceParameters.DAY_CHECKOUT_HOUR:
550
+ this.setParameterDayCheckoutHour(data);
551
+ break;
552
+ case deviceParameters.ACTIVATION_METHOD:
553
+ this.setParameterActivationMethod(data);
554
+ break;
555
+ case deviceParameters.INITIAL_DATA:
556
+ this.setParameterInitialData(data);
557
+ break;
558
+ case deviceParameters.INITIAL_DATA_MULTI_CHANNEL:
559
+ this.setParameterInitialDataMC(data);
560
+ break;
561
+ case deviceParameters.ABSOLUTE_DATA_STATUS:
562
+ this.setParameterAbsoluteDataStatus(data);
563
+ break;
564
+ case deviceParameters.ABSOLUTE_DATA_STATUS_MULTI_CHANNEL:
565
+ this.setParameterAbsoluteDataStatusMC(data);
566
+ break;
567
+ default:
568
+ throw new Error(`parameter ${id} is not supported`);
569
+ }
570
+ }
272
571
  }
273
572
  export default CommandBinaryBuffer;
274
573
  //# sourceMappingURL=CommandBinaryBuffer.js.map