jooby-codec 1.2.0 → 1.4.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 (86) hide show
  1. package/dist/CommandBinaryBuffer.d.ts +9 -13
  2. package/dist/CommandBinaryBuffer.js +27 -22
  3. package/dist/CommandBinaryBuffer.js.map +1 -1
  4. package/dist/commands/downlink/CorrectTime2000.d.ts +3 -3
  5. package/dist/commands/downlink/CorrectTime2000.js +4 -4
  6. package/dist/commands/downlink/CorrectTime2000.js.map +1 -1
  7. package/dist/commands/downlink/ExAbsArchiveDaysMC.d.ts +47 -0
  8. package/dist/commands/downlink/ExAbsArchiveDaysMC.js +65 -0
  9. package/dist/commands/downlink/ExAbsArchiveDaysMC.js.map +1 -0
  10. package/dist/commands/downlink/ExAbsArchiveHoursMC.d.ts +47 -0
  11. package/dist/commands/downlink/ExAbsArchiveHoursMC.js +67 -0
  12. package/dist/commands/downlink/ExAbsArchiveHoursMC.js.map +1 -0
  13. package/dist/commands/downlink/GetArchiveDaysMC.d.ts +47 -0
  14. package/dist/commands/downlink/GetArchiveDaysMC.js +64 -0
  15. package/dist/commands/downlink/GetArchiveDaysMC.js.map +1 -0
  16. package/dist/commands/downlink/GetArchiveHoursMC.d.ts +47 -0
  17. package/dist/commands/downlink/{GetArchiveHoursMul.js → GetArchiveHoursMC.js} +20 -20
  18. package/dist/commands/downlink/GetArchiveHoursMC.js.map +1 -0
  19. package/dist/commands/downlink/SetParameter.d.ts +73 -0
  20. package/dist/commands/downlink/SetParameter.js +136 -0
  21. package/dist/commands/downlink/SetParameter.js.map +1 -0
  22. package/dist/commands/downlink/SetTime2000.d.ts +3 -3
  23. package/dist/commands/downlink/SetTime2000.js +4 -4
  24. package/dist/commands/downlink/SetTime2000.js.map +1 -1
  25. package/dist/commands/downlink/index.d.ts +5 -1
  26. package/dist/commands/downlink/index.js +5 -1
  27. package/dist/commands/downlink/index.js.map +1 -1
  28. package/dist/commands/uplink/DataDayMC.d.ts +20 -0
  29. package/dist/commands/uplink/{DataDayMul.js → DataDayMC.js} +15 -15
  30. package/dist/commands/uplink/DataDayMC.js.map +1 -0
  31. package/dist/commands/uplink/{DataHourMul.d.ts → DataHourMC.d.ts} +3 -3
  32. package/dist/commands/uplink/{DataHourMul.js → DataHourMC.js} +24 -24
  33. package/dist/commands/uplink/DataHourMC.js.map +1 -0
  34. package/dist/commands/uplink/ExAbsArchiveDaysMC.d.ts +46 -0
  35. package/dist/commands/uplink/ExAbsArchiveDaysMC.js +72 -0
  36. package/dist/commands/uplink/ExAbsArchiveDaysMC.js.map +1 -0
  37. package/dist/commands/uplink/ExAbsArchiveHoursMC.d.ts +11 -0
  38. package/dist/commands/uplink/ExAbsArchiveHoursMC.js +93 -0
  39. package/dist/commands/uplink/ExAbsArchiveHoursMC.js.map +1 -0
  40. package/dist/commands/uplink/{ExAbsDayMul.d.ts → ExAbsDayMC.d.ts} +3 -3
  41. package/dist/commands/uplink/{ExAbsDayMul.js → ExAbsDayMC.js} +18 -18
  42. package/dist/commands/uplink/ExAbsDayMC.js.map +1 -0
  43. package/dist/commands/uplink/{ExAbsHourMul.d.ts → ExAbsHourMC.d.ts} +3 -3
  44. package/dist/commands/uplink/{ExAbsHourMul.js → ExAbsHourMC.js} +24 -24
  45. package/dist/commands/uplink/ExAbsHourMC.js.map +1 -0
  46. package/dist/commands/uplink/GetArchiveDaysMC.d.ts +73 -0
  47. package/dist/commands/uplink/GetArchiveDaysMC.js +97 -0
  48. package/dist/commands/uplink/GetArchiveDaysMC.js.map +1 -0
  49. package/dist/commands/uplink/GetArchiveHoursMC.d.ts +28 -0
  50. package/dist/commands/uplink/{GetArchiveHoursMul.js → GetArchiveHoursMC.js} +20 -20
  51. package/dist/commands/uplink/GetArchiveHoursMC.js.map +1 -0
  52. package/dist/commands/uplink/GetCurrentMC.d.ts +24 -0
  53. package/dist/commands/uplink/GetCurrentMC.js +36 -0
  54. package/dist/commands/uplink/GetCurrentMC.js.map +1 -0
  55. package/dist/commands/uplink/NewEvent.d.ts +2 -2
  56. package/dist/commands/uplink/NewEvent.js +5 -5
  57. package/dist/commands/uplink/NewEvent.js.map +1 -1
  58. package/dist/commands/uplink/Time2000.d.ts +3 -3
  59. package/dist/commands/uplink/Time2000.js +4 -4
  60. package/dist/commands/uplink/Time2000.js.map +1 -1
  61. package/dist/commands/uplink/index.d.ts +9 -6
  62. package/dist/commands/uplink/index.js +9 -6
  63. package/dist/commands/uplink/index.js.map +1 -1
  64. package/dist/constants/deviceParameters.d.ts +15 -0
  65. package/dist/constants/deviceParameters.js +16 -0
  66. package/dist/constants/deviceParameters.js.map +1 -0
  67. package/dist/utils/bitSet.d.ts +2 -2
  68. package/dist/utils/bitSet.js +2 -3
  69. package/dist/utils/bitSet.js.map +1 -1
  70. package/dist/utils/time.d.ts +2 -2
  71. package/dist/utils/time.js +2 -2
  72. package/dist/utils/time.js.map +1 -1
  73. package/package.json +1 -1
  74. package/readme.md +3 -3
  75. package/dist/commands/downlink/GetArchiveHoursMul.d.ts +0 -47
  76. package/dist/commands/downlink/GetArchiveHoursMul.js.map +0 -1
  77. package/dist/commands/uplink/DataDayMul.d.ts +0 -20
  78. package/dist/commands/uplink/DataDayMul.js.map +0 -1
  79. package/dist/commands/uplink/DataHourMul.js.map +0 -1
  80. package/dist/commands/uplink/ExAbsDayMul.js.map +0 -1
  81. package/dist/commands/uplink/ExAbsHourMul.js.map +0 -1
  82. package/dist/commands/uplink/GetArchiveHoursMul.d.ts +0 -28
  83. package/dist/commands/uplink/GetArchiveHoursMul.js.map +0 -1
  84. package/dist/commands/uplink/GetCurrentMul.d.ts +0 -24
  85. package/dist/commands/uplink/GetCurrentMul.js +0 -36
  86. package/dist/commands/uplink/GetCurrentMul.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataHourMC.js","sourceRoot":"","sources":["../../../src/commands/uplink/DataHourMC.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import Command from '../../Command.js';
2
+ /**
3
+ * Channel absolute value by day.
4
+ */
5
+ interface IArchiveChannelDayAbsoluteValue {
6
+ value: number;
7
+ meterValue: number;
8
+ day: number;
9
+ seconds: number;
10
+ date: Date;
11
+ }
12
+ interface IArchiveChannelDayAbsolute {
13
+ /**
14
+ * channel number
15
+ */
16
+ index: number;
17
+ /**
18
+ * values by days
19
+ */
20
+ dayList: Array<IArchiveChannelDayAbsoluteValue>;
21
+ /**
22
+ * Channel pulse coefficient - IPK in bytes.
23
+ */
24
+ pulseCoefficient: number;
25
+ /** time */
26
+ seconds: number;
27
+ /**
28
+ * Normal date in UTC.
29
+ */
30
+ date: Date;
31
+ }
32
+ interface IUplinkExAbsArchiveDayMCParameters {
33
+ channelList: Array<IArchiveChannelDayAbsolute>;
34
+ date: Date;
35
+ days: number;
36
+ }
37
+ declare class ExAbsArchiveDayMC extends Command {
38
+ parameters: IUplinkExAbsArchiveDayMCParameters;
39
+ constructor(parameters: IUplinkExAbsArchiveDayMCParameters);
40
+ static id: number;
41
+ static readonly directionType = 2;
42
+ static title: string;
43
+ static fromBytes(data: Uint8Array): ExAbsArchiveDayMC;
44
+ toBytes(): Uint8Array;
45
+ }
46
+ export default ExAbsArchiveDayMC;
@@ -0,0 +1,72 @@
1
+ import Command from '../../Command.js';
2
+ import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
3
+ import roundNumber from '../../utils/roundNumber.js';
4
+ import { getSecondsFromDate } from '../../utils/time.js';
5
+ import { UPLINK } from '../../constants/directionTypes.js';
6
+ const COMMAND_ID = 0x0d1f;
7
+ const COMMAND_TITLE = 'EX_ABS_ARCH_DAYS_MUL';
8
+ // date 2 bytes, channelList 1 byte (max channelList: 4), days 1 byte (max days - 255)
9
+ // 4 + (4 channelList * (1 byte pulse coefficient + 5 bytes of day values) * 255 max days)
10
+ const COMMAND_BODY_MAX_SIZE = 6124;
11
+ class ExAbsArchiveDayMC extends Command {
12
+ constructor(parameters) {
13
+ super();
14
+ this.parameters = parameters;
15
+ this.parameters.channelList = this.parameters.channelList.sort((a, b) => a.index - b.index);
16
+ }
17
+ static fromBytes(data) {
18
+ const buffer = new CommandBinaryBuffer(data);
19
+ const date = buffer.getDate();
20
+ const channelArray = buffer.getChannels(true);
21
+ const days = buffer.getUint8();
22
+ const maxChannel = Math.max.apply(null, channelArray);
23
+ const counterDate = new Date(date);
24
+ let value;
25
+ const channelList = [];
26
+ for (let channelIndex = 0; channelIndex <= maxChannel; ++channelIndex) {
27
+ // IPK_${channelIndex}
28
+ const pulseCoefficient = buffer.getUint8();
29
+ const dayList = [];
30
+ counterDate.setTime(date.getTime());
31
+ channelList.push({
32
+ dayList,
33
+ pulseCoefficient,
34
+ index: channelIndex,
35
+ seconds: getSecondsFromDate(counterDate),
36
+ date: new Date(counterDate)
37
+ });
38
+ for (let day = 0; day < days; ++day) {
39
+ value = buffer.getExtendedValue();
40
+ counterDate.setTime(date.getTime());
41
+ counterDate.setUTCHours(counterDate.getUTCHours() + (day * 24));
42
+ dayList.push({
43
+ value,
44
+ day,
45
+ meterValue: roundNumber(value / pulseCoefficient),
46
+ date: new Date(counterDate),
47
+ seconds: getSecondsFromDate(counterDate)
48
+ });
49
+ }
50
+ }
51
+ return new ExAbsArchiveDayMC({ channelList, date, days });
52
+ }
53
+ toBytes() {
54
+ const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE);
55
+ const { channelList, date, days } = this.parameters;
56
+ buffer.setDate(date);
57
+ buffer.setChannels(channelList);
58
+ buffer.setUint8(days);
59
+ channelList.forEach(({ dayList, pulseCoefficient }) => {
60
+ buffer.setUint8(pulseCoefficient);
61
+ dayList.forEach(({ value }) => {
62
+ buffer.setExtendedValue(value);
63
+ });
64
+ });
65
+ return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
66
+ }
67
+ }
68
+ ExAbsArchiveDayMC.id = COMMAND_ID;
69
+ ExAbsArchiveDayMC.directionType = UPLINK;
70
+ ExAbsArchiveDayMC.title = COMMAND_TITLE;
71
+ export default ExAbsArchiveDayMC;
72
+ //# sourceMappingURL=ExAbsArchiveDaysMC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExAbsArchiveDaysMC.js","sourceRoot":"","sources":["../../../src/commands/uplink/ExAbsArchiveDaysMC.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import GetCurrentMC from './GetCurrentMC.js';
2
+ declare class ExAbsArchiveHourMC extends GetCurrentMC {
3
+ parameters: any;
4
+ constructor(parameters: any);
5
+ static readonly id = 3103;
6
+ static readonly directionType = 2;
7
+ static readonly title = "EX_ABS_ARCH_HOUR_MUL";
8
+ static fromBytes(data: Uint8Array): any;
9
+ toBytes(): Uint8Array;
10
+ }
11
+ export default ExAbsArchiveHourMC;
@@ -0,0 +1,93 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
3
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
4
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
5
+ import Command from '../../Command.js';
6
+ import GetCurrentMC from './GetCurrentMC.js';
7
+ import { getSecondsFromDate, getDateFromSeconds } from '../../utils/time.js';
8
+ import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
9
+ import roundNumber from '../../utils/roundNumber.js';
10
+ import { UPLINK } from '../../constants/directionTypes.js';
11
+ // TODO: rework extended headers detection
12
+ const COMMAND_ID = 0x0c1f;
13
+ const COMMAND_TITLE = 'EX_ABS_ARCH_HOUR_MUL';
14
+ // date 2 bytes, hour 1 byte (max hours: 7), channelList 1 byte (max channelList: 4)
15
+ // 4 + (4 channelList * 1 byte pulse coefficient) + (4 channelList * 5 bytes of hour values) + (4 * 5 bytes of diff * 7 max hours diff)
16
+ const COMMAND_BODY_MAX_SIZE = 168;
17
+ class ExAbsArchiveHourMC extends GetCurrentMC {
18
+ // TODO: add interface for parameters
19
+ constructor(parameters) {
20
+ super(parameters);
21
+ this.parameters = parameters;
22
+ }
23
+ static fromBytes(data) {
24
+ const buffer = new CommandBinaryBuffer(data);
25
+ const date = buffer.getDate();
26
+ const { hour, hours } = buffer.getHours();
27
+ const channelArray = buffer.getChannels(true);
28
+ const maxChannel = Math.max.apply(null, channelArray);
29
+ date.setUTCHours(hour);
30
+ const counterDate = new Date(date);
31
+ let hourAmount = hours;
32
+ const channelList = [];
33
+ if (hourAmount === 0) {
34
+ // one hour
35
+ hourAmount = 1;
36
+ }
37
+ for (let channelIndex = 0; channelIndex <= maxChannel; ++channelIndex) {
38
+ // IPK_${channelIndex}
39
+ const pulseCoefficient = buffer.getUint8();
40
+ // decode hour value for channel
41
+ const pulseValue = buffer.getExtendedValue();
42
+ const diff = [];
43
+ counterDate.setTime(date.getTime());
44
+ for (let hourIndex = 0; hourIndex < hourAmount; ++hourIndex) {
45
+ const value = buffer.getExtendedValue();
46
+ counterDate.setUTCHours(counterDate.getUTCHours() + hourIndex);
47
+ diff.push({
48
+ value,
49
+ pulseCoefficient,
50
+ seconds: getSecondsFromDate(counterDate),
51
+ meterValue: roundNumber((value + pulseValue) / pulseCoefficient)
52
+ });
53
+ }
54
+ channelList.push({
55
+ diff,
56
+ pulseCoefficient,
57
+ index: channelIndex,
58
+ value: pulseValue,
59
+ seconds: getSecondsFromDate(date),
60
+ meterValue: roundNumber(pulseValue / pulseCoefficient)
61
+ });
62
+ }
63
+ return new ExAbsArchiveHourMC({ channelList, date });
64
+ }
65
+ toBytes() {
66
+ const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE);
67
+ const { channelList } = this.parameters;
68
+ const { seconds } = channelList[0];
69
+ const realDate = getDateFromSeconds(seconds);
70
+ const hour = realDate.getUTCHours();
71
+ let hours = channelList[0].diff.length;
72
+ // TODO: add link to doc
73
+ if (hours === 1) {
74
+ hours = 0;
75
+ }
76
+ buffer.setDate(seconds);
77
+ buffer.setHours(hour, hours);
78
+ buffer.setChannels(channelList);
79
+ for (const { value, diff, pulseCoefficient } of channelList) {
80
+ buffer.setUint8(pulseCoefficient);
81
+ buffer.setExtendedValue(value);
82
+ for (const { value: diffValue } of diff) {
83
+ buffer.setExtendedValue(diffValue);
84
+ }
85
+ }
86
+ return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
87
+ }
88
+ }
89
+ ExAbsArchiveHourMC.id = COMMAND_ID;
90
+ ExAbsArchiveHourMC.directionType = UPLINK;
91
+ ExAbsArchiveHourMC.title = COMMAND_TITLE;
92
+ export default ExAbsArchiveHourMC;
93
+ //# sourceMappingURL=ExAbsArchiveHoursMC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExAbsArchiveHoursMC.js","sourceRoot":"","sources":["../../../src/commands/uplink/ExAbsArchiveHoursMC.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import GetCurrentMul from './GetCurrentMul.js';
2
- declare class ExAbsDayMul extends GetCurrentMul {
1
+ import GetCurrentMC from './GetCurrentMC.js';
2
+ declare class ExAbsDayMC extends GetCurrentMC {
3
3
  parameters: any;
4
4
  constructor(parameters: any);
5
5
  static id: number;
@@ -8,4 +8,4 @@ declare class ExAbsDayMul extends GetCurrentMul {
8
8
  static fromBytes(data: Uint8Array): any;
9
9
  toBytes(): Uint8Array;
10
10
  }
11
- export default ExAbsDayMul;
11
+ export default ExAbsDayMC;
@@ -3,17 +3,17 @@
3
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
4
4
  /* eslint-disable @typescript-eslint/no-unsafe-argument */
5
5
  import Command from '../../Command.js';
6
- import GetCurrentMul from './GetCurrentMul.js';
6
+ import GetCurrentMC from './GetCurrentMC.js';
7
7
  import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
8
8
  import roundNumber from '../../utils/roundNumber.js';
9
9
  import { getSecondsFromDate } from '../../utils/time.js';
10
10
  import { UPLINK } from '../../constants/directionTypes.js';
11
11
  const COMMAND_ID = 0x0b1f;
12
12
  const COMMAND_TITLE = 'EX_ABS_DAY_MUL';
13
- // date 2 bytes, channels - 1 byte (max channels: 4)
14
- // 3 + (4 channels * (1 byte IPK + 5 bytes of day values))
13
+ // date 2 bytes, channelList - 1 byte (max channelList: 4)
14
+ // 3 + (4 channelList * (1 byte IPK + 5 bytes of day values))
15
15
  const COMMAND_BODY_MAX_SIZE = 27;
16
- class ExAbsDayMul extends GetCurrentMul {
16
+ class ExAbsDayMC extends GetCurrentMC {
17
17
  constructor(parameters) {
18
18
  super(parameters);
19
19
  this.parameters = parameters;
@@ -24,37 +24,37 @@ class ExAbsDayMul extends GetCurrentMul {
24
24
  const channelArray = buffer.getChannels(true);
25
25
  const maxChannel = Math.max.apply(null, channelArray);
26
26
  let value;
27
- const channels = [];
27
+ const channelList = [];
28
28
  for (let channelIndex = 0; channelIndex <= maxChannel; ++channelIndex) {
29
29
  // IPK_${channelIndex}
30
30
  const pulseCoefficient = buffer.getUint8();
31
31
  // day value
32
32
  value = buffer.getExtendedValue();
33
- channels.push({
33
+ channelList.push({
34
34
  value,
35
35
  pulseCoefficient,
36
36
  index: channelIndex,
37
- time: getSecondsFromDate(date),
37
+ seconds: getSecondsFromDate(date),
38
38
  meterValue: roundNumber(value / pulseCoefficient)
39
39
  });
40
40
  }
41
- return new ExAbsDayMul({ channels, date });
41
+ return new ExAbsDayMC({ channelList, date });
42
42
  }
43
43
  toBytes() {
44
44
  const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE);
45
- const { channels } = this.parameters;
46
- const { time } = channels[0];
47
- buffer.setDate(time);
48
- buffer.setChannels(channels);
49
- for (const { value, pulseCoefficient } of channels) {
45
+ const { channelList } = this.parameters;
46
+ const { seconds } = channelList[0];
47
+ buffer.setDate(seconds);
48
+ buffer.setChannels(channelList);
49
+ for (const { value, pulseCoefficient } of channelList) {
50
50
  buffer.setUint8(pulseCoefficient);
51
51
  buffer.setExtendedValue(value);
52
52
  }
53
53
  return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
54
54
  }
55
55
  }
56
- ExAbsDayMul.id = COMMAND_ID;
57
- ExAbsDayMul.directionType = UPLINK;
58
- ExAbsDayMul.title = COMMAND_TITLE;
59
- export default ExAbsDayMul;
60
- //# sourceMappingURL=ExAbsDayMul.js.map
56
+ ExAbsDayMC.id = COMMAND_ID;
57
+ ExAbsDayMC.directionType = UPLINK;
58
+ ExAbsDayMC.title = COMMAND_TITLE;
59
+ export default ExAbsDayMC;
60
+ //# sourceMappingURL=ExAbsDayMC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExAbsDayMC.js","sourceRoot":"","sources":["../../../src/commands/uplink/ExAbsDayMC.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,4DAA4D;AAC5D,uDAAuD;AACvD,0DAA0D;AAE1D,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAC/D,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAGzD,MAAM,UAAU,GAAG,MAAM,CAAC;AAC1B,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAEvC,0DAA0D;AAC1D,6DAA6D;AAC7D,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAGjC,MAAM,UAAW,SAAQ,YAAY;IACjC,YAAqB,UAAe;QAChC,KAAK,CAAC,UAAU,CAAC,CAAC;QADD,eAAU,GAAV,UAAU,CAAK;IAEpC,CAAC;IAQD,MAAM,CAAC,SAAS,CAAG,IAAgB;QAC/B,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEtD,IAAI,KAAK,CAAC;QAEV,MAAM,WAAW,GAAe,EAAE,CAAC;QAEnC,KAAM,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,IAAI,UAAU,EAAE,EAAE,YAAY,EAAG;YACrE,sBAAsB;YACtB,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3C,YAAY;YACZ,KAAK,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAClC,WAAW,CAAC,IAAI,CAAC;gBACb,KAAK;gBACL,gBAAgB;gBAChB,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC;gBACjC,UAAU,EAAE,WAAW,CAAC,KAAK,GAAG,gBAAgB,CAAC;aACpD,CAAC,CAAC;SACN;QAED,OAAO,IAAI,UAAU,CAAC,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACH,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;QAC9D,MAAM,EAAC,WAAW,EAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAEtC,MAAM,EAAC,OAAO,EAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAEjC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxB,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEhC,KAAM,MAAM,EAAC,KAAK,EAAE,gBAAgB,EAAC,IAAI,WAAW,EAAG;YACnD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAClC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAClC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAClE,CAAC;;AAjDM,aAAE,GAAG,UAAU,CAAC;AAEP,wBAAa,GAAG,MAAM,CAAC;AAEhC,gBAAK,GAAG,aAAa,CAAC;AAiDjC,eAAe,UAAU,CAAC"}
@@ -1,5 +1,5 @@
1
- import GetCurrentMul from './GetCurrentMul.js';
2
- declare class ExAbsHourMul extends GetCurrentMul {
1
+ import GetCurrentMC from './GetCurrentMC.js';
2
+ declare class ExAbsHourMC extends GetCurrentMC {
3
3
  parameters: any;
4
4
  constructor(parameters: any);
5
5
  static readonly id = 2591;
@@ -8,4 +8,4 @@ declare class ExAbsHourMul extends GetCurrentMul {
8
8
  static fromBytes(data: Uint8Array): any;
9
9
  toBytes(): Uint8Array;
10
10
  }
11
- export default ExAbsHourMul;
11
+ export default ExAbsHourMC;
@@ -3,18 +3,18 @@
3
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
4
4
  /* eslint-disable @typescript-eslint/no-unsafe-argument */
5
5
  import Command from '../../Command.js';
6
- import GetCurrentMul from './GetCurrentMul.js';
6
+ import GetCurrentMC from './GetCurrentMC.js';
7
7
  import { getSecondsFromDate, getDateFromSeconds } from '../../utils/time.js';
8
8
  import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
9
9
  import roundNumber from '../../utils/roundNumber.js';
10
10
  import { UPLINK } from '../../constants/directionTypes.js';
11
11
  const COMMAND_ID = 0x0a1f;
12
12
  const COMMAND_TITLE = 'EX_ABS_HOUR_MUL';
13
- // date 2 bytes, hour 1 byte, channels - 1 byte (max channels: 4)
13
+ // date 2 bytes, hour 1 byte, channelList - 1 byte (max channelList: 4)
14
14
  // max hours diff - 7 (3 bit value)
15
- // 4 + (4 channels * (1 byte IPK + 5 bytes of hour value)) + (4 * 2 bytes of diff * 7 max hours diff)
15
+ // 4 + (4 channelList * (1 byte IPK + 5 bytes of hour value)) + (4 * 2 bytes of diff * 7 max hours diff)
16
16
  const COMMAND_BODY_MAX_SIZE = 84;
17
- class ExAbsHourMul extends GetCurrentMul {
17
+ class ExAbsHourMC extends GetCurrentMC {
18
18
  constructor(parameters) {
19
19
  super(parameters);
20
20
  this.parameters = parameters;
@@ -28,7 +28,7 @@ class ExAbsHourMul extends GetCurrentMul {
28
28
  date.setUTCHours(hour);
29
29
  const counterDate = new Date(date);
30
30
  let hourAmount = hours;
31
- const channels = [];
31
+ const channelList = [];
32
32
  if (hourAmount === 0) {
33
33
  // one hour
34
34
  hourAmount = 1;
@@ -46,36 +46,36 @@ class ExAbsHourMul extends GetCurrentMul {
46
46
  diff.push({
47
47
  value,
48
48
  pulseCoefficient,
49
- time: getSecondsFromDate(counterDate),
49
+ seconds: getSecondsFromDate(counterDate),
50
50
  meterValue: roundNumber((value + pulseValue) / pulseCoefficient)
51
51
  });
52
52
  }
53
- channels.push({
53
+ channelList.push({
54
54
  diff,
55
55
  pulseCoefficient,
56
56
  index: channelIndex,
57
57
  value: pulseValue,
58
- time: getSecondsFromDate(date),
58
+ seconds: getSecondsFromDate(date),
59
59
  meterValue: roundNumber(pulseValue / pulseCoefficient)
60
60
  });
61
61
  }
62
- return new ExAbsHourMul({ channels, date });
62
+ return new ExAbsHourMC({ channelList, date });
63
63
  }
64
64
  toBytes() {
65
65
  const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE);
66
- const { channels } = this.parameters;
67
- const { time } = channels[0];
68
- const realDate = getDateFromSeconds(time);
66
+ const { channelList } = this.parameters;
67
+ const { seconds } = channelList[0];
68
+ const realDate = getDateFromSeconds(seconds);
69
69
  const hour = realDate.getUTCHours();
70
- let hourAmount = channels[0].diff.length;
70
+ let hours = channelList[0].diff.length;
71
71
  // TODO: add link to doc
72
- if (hourAmount === 1) {
73
- hourAmount = 0;
72
+ if (hours === 1) {
73
+ hours = 0;
74
74
  }
75
- buffer.setDate(time);
76
- buffer.setHours(hour, hourAmount);
77
- buffer.setChannels(channels);
78
- for (const { value, diff, pulseCoefficient } of channels) {
75
+ buffer.setDate(seconds);
76
+ buffer.setHours(hour, hours);
77
+ buffer.setChannels(channelList);
78
+ for (const { value, diff, pulseCoefficient } of channelList) {
79
79
  buffer.setUint8(pulseCoefficient);
80
80
  buffer.setExtendedValue(value);
81
81
  for (const { value: diffValue } of diff) {
@@ -85,8 +85,8 @@ class ExAbsHourMul extends GetCurrentMul {
85
85
  return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
86
86
  }
87
87
  }
88
- ExAbsHourMul.id = COMMAND_ID;
89
- ExAbsHourMul.directionType = UPLINK;
90
- ExAbsHourMul.title = COMMAND_TITLE;
91
- export default ExAbsHourMul;
92
- //# sourceMappingURL=ExAbsHourMul.js.map
88
+ ExAbsHourMC.id = COMMAND_ID;
89
+ ExAbsHourMC.directionType = UPLINK;
90
+ ExAbsHourMC.title = COMMAND_TITLE;
91
+ export default ExAbsHourMC;
92
+ //# sourceMappingURL=ExAbsHourMC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExAbsHourMC.js","sourceRoot":"","sources":["../../../src/commands/uplink/ExAbsHourMC.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import Command from '../../Command.js';
2
+ /**
3
+ * GetArchiveDaysMC command parameters
4
+ *
5
+ * @example
6
+ * // archive 2 days values from 2001-03-10T00:00:00.000Z
7
+ * {
8
+ * channelList: [{index: 0, days: [{value: 234, day: 0}, {value: 332, day: 1}]}],
9
+ * date: '2001-03-10T12:00:00.000Z',
10
+ * days: 2
11
+ * }
12
+ */
13
+ interface IUplinkGetArchiveDaysMCParameters {
14
+ channelList: Array<IArchiveChannel>;
15
+ date: Date | undefined | string;
16
+ days: number | undefined;
17
+ }
18
+ /**
19
+ * channel value by day
20
+ */
21
+ export interface IArchiveDayValue {
22
+ value: number;
23
+ day: number;
24
+ seconds: number;
25
+ date: Date;
26
+ }
27
+ interface IArchiveChannel {
28
+ /**
29
+ * channel number
30
+ */
31
+ index: number;
32
+ /**
33
+ * values by days
34
+ */
35
+ dayList: Array<IArchiveDayValue>;
36
+ /** time */
37
+ seconds: number;
38
+ /**
39
+ * Normal date in UTC.
40
+ */
41
+ date: Date;
42
+ }
43
+ /**
44
+ * Uplink command
45
+ *
46
+ * @example
47
+ * ```js
48
+ * import GetArchiveDaysMC from 'jooby-codec/commands/uplink/GetArchiveDaysMC';
49
+ *
50
+ * const parameters = {
51
+ * channelList: [{index: 0, days: [{value: 234, day: 0}, {value: 332, day: 1}]}],
52
+ * date: '2001-03-10T12:00:00.000Z',
53
+ * days: 2
54
+ * };
55
+ *
56
+ * const command = new GetArchiveDaysMC(parameters);
57
+ *
58
+ * // output command binary in hex representation
59
+ * console.log(command.toHex());
60
+ * // 1b 04 2f 97 0c 01
61
+ * ```
62
+ * [Command format documentation](https://github.com/jooby-dev/jooby-docs/blob/main/docs/commands/GetArchiveDaysMC.md#response)
63
+ */
64
+ declare class GetArchiveDaysMC extends Command {
65
+ parameters: IUplinkGetArchiveDaysMCParameters;
66
+ constructor(parameters: IUplinkGetArchiveDaysMCParameters);
67
+ static readonly id = 27;
68
+ static readonly directionType = 2;
69
+ static readonly title = "GET_ARCHIVE_DAYS_MUL";
70
+ static fromBytes(data: Uint8Array): GetArchiveDaysMC;
71
+ toBytes(): Uint8Array;
72
+ }
73
+ export default GetArchiveDaysMC;
@@ -0,0 +1,97 @@
1
+ import Command from '../../Command.js';
2
+ import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
3
+ import { UPLINK } from '../../constants/directionTypes.js';
4
+ import { getDateFromSeconds, getSecondsFromDate } from '../../utils/time.js';
5
+ const COMMAND_ID = 0x1b;
6
+ const COMMAND_TITLE = 'GET_ARCHIVE_DAYS_MUL';
7
+ // date 2 bytes, channelList 1 byte (max channelList: 4), days 1 byte (max days - 255)
8
+ // 4 + (4 channelList * 5 bytes of day values * 255 max days)
9
+ const COMMAND_BODY_MAX_SIZE = 5104;
10
+ /**
11
+ * Uplink command
12
+ *
13
+ * @example
14
+ * ```js
15
+ * import GetArchiveDaysMC from 'jooby-codec/commands/uplink/GetArchiveDaysMC';
16
+ *
17
+ * const parameters = {
18
+ * channelList: [{index: 0, days: [{value: 234, day: 0}, {value: 332, day: 1}]}],
19
+ * date: '2001-03-10T12:00:00.000Z',
20
+ * days: 2
21
+ * };
22
+ *
23
+ * const command = new GetArchiveDaysMC(parameters);
24
+ *
25
+ * // output command binary in hex representation
26
+ * console.log(command.toHex());
27
+ * // 1b 04 2f 97 0c 01
28
+ * ```
29
+ * [Command format documentation](https://github.com/jooby-dev/jooby-docs/blob/main/docs/commands/GetArchiveDaysMC.md#response)
30
+ */
31
+ class GetArchiveDaysMC extends Command {
32
+ constructor(parameters) {
33
+ super();
34
+ this.parameters = parameters;
35
+ this.parameters.channelList = this.parameters.channelList.sort((a, b) => a.index - b.index);
36
+ const { date, days, channelList } = this.parameters;
37
+ if (date === undefined) {
38
+ const [{ seconds }] = channelList;
39
+ if (seconds) {
40
+ this.parameters.date = getDateFromSeconds(seconds);
41
+ }
42
+ else {
43
+ throw new Error(`${GetArchiveDaysMC.getName()} can't recognize time`);
44
+ }
45
+ }
46
+ else if (typeof date === 'string') {
47
+ this.parameters.date = new Date(date);
48
+ }
49
+ if (days === undefined) {
50
+ this.parameters.days = channelList[0].dayList.length;
51
+ }
52
+ }
53
+ static fromBytes(data) {
54
+ const buffer = new CommandBinaryBuffer(data);
55
+ const date = buffer.getDate();
56
+ const channelArray = buffer.getChannels(true);
57
+ const days = buffer.getUint8();
58
+ const maxChannel = Math.max.apply(null, channelArray);
59
+ const channelList = [];
60
+ const counterDate = new Date(date);
61
+ let value;
62
+ for (let channelIndex = 0; channelIndex <= maxChannel; ++channelIndex) {
63
+ const dayList = [];
64
+ counterDate.setTime(date.getTime());
65
+ channelList.push({
66
+ dayList,
67
+ index: channelIndex,
68
+ seconds: getSecondsFromDate(counterDate),
69
+ date: new Date(counterDate)
70
+ });
71
+ for (let day = 0; day < days; ++day) {
72
+ value = buffer.getExtendedValue();
73
+ counterDate.setTime(date.getTime());
74
+ counterDate.setUTCHours(counterDate.getUTCHours() + (day * 24));
75
+ dayList.push({ value, day, date: new Date(counterDate), seconds: getSecondsFromDate(counterDate) });
76
+ }
77
+ }
78
+ return new GetArchiveDaysMC({ channelList, date, days });
79
+ }
80
+ toBytes() {
81
+ const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE);
82
+ const { days, date, channelList } = this.parameters;
83
+ buffer.setDate(date);
84
+ buffer.setChannels(channelList);
85
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
86
+ buffer.setUint8(days);
87
+ channelList.forEach(({ dayList }) => {
88
+ dayList.forEach(({ value }) => buffer.setExtendedValue(value));
89
+ });
90
+ return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
91
+ }
92
+ }
93
+ GetArchiveDaysMC.id = COMMAND_ID;
94
+ GetArchiveDaysMC.directionType = UPLINK;
95
+ GetArchiveDaysMC.title = COMMAND_TITLE;
96
+ export default GetArchiveDaysMC;
97
+ //# sourceMappingURL=GetArchiveDaysMC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetArchiveDaysMC.js","sourceRoot":"","sources":["../../../src/commands/uplink/GetArchiveDaysMC.ts"],"names":[],"mappings":"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"}