homebridge-midea-platform 1.2.0-beta.1 → 1.2.0-beta.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 (94) hide show
  1. package/.husky/pre-commit +0 -0
  2. package/config.schema.json +6 -0
  3. package/dist/accessory/AccessoryFactory.d.ts +12 -12
  4. package/dist/accessory/AccessoryFactory.js +31 -31
  5. package/dist/accessory/AirConditionerAccessory.d.ts +92 -89
  6. package/dist/accessory/AirConditionerAccessory.d.ts.map +1 -1
  7. package/dist/accessory/AirConditionerAccessory.js +607 -584
  8. package/dist/accessory/AirConditionerAccessory.js.map +1 -1
  9. package/dist/accessory/BaseAccessory.d.ts +11 -11
  10. package/dist/accessory/BaseAccessory.js +21 -21
  11. package/dist/accessory/DehumidifierAccessory.d.ts +45 -45
  12. package/dist/accessory/DehumidifierAccessory.js +344 -344
  13. package/dist/accessory/DishwasherAccessory.d.ts +30 -28
  14. package/dist/accessory/DishwasherAccessory.d.ts.map +1 -1
  15. package/dist/accessory/DishwasherAccessory.js +63 -62
  16. package/dist/accessory/DishwasherAccessory.js.map +1 -1
  17. package/dist/accessory/ElectricWaterHeaterAccessory.d.ts +44 -44
  18. package/dist/accessory/ElectricWaterHeaterAccessory.js +176 -176
  19. package/dist/accessory/FanAccessory.d.ts +39 -39
  20. package/dist/accessory/FanAccessory.js +123 -123
  21. package/dist/accessory/FrontLoadWasherAccessory.d.ts +30 -30
  22. package/dist/accessory/FrontLoadWasherAccessory.d.ts.map +1 -1
  23. package/dist/accessory/FrontLoadWasherAccessory.js +66 -60
  24. package/dist/accessory/FrontLoadWasherAccessory.js.map +1 -1
  25. package/dist/accessory/GasWaterHeaterAccessory.d.ts +51 -51
  26. package/dist/accessory/GasWaterHeaterAccessory.js +216 -216
  27. package/dist/core/MideaCloud.d.ts +35 -35
  28. package/dist/core/MideaCloud.js +350 -350
  29. package/dist/core/MideaConstants.d.ts +50 -50
  30. package/dist/core/MideaConstants.js +58 -58
  31. package/dist/core/MideaDevice.d.ts +76 -76
  32. package/dist/core/MideaDevice.js +409 -409
  33. package/dist/core/MideaDiscover.d.ts +35 -35
  34. package/dist/core/MideaDiscover.js +212 -212
  35. package/dist/core/MideaMessage.d.ts +75 -75
  36. package/dist/core/MideaMessage.js +184 -184
  37. package/dist/core/MideaPacketBuilder.d.ts +10 -10
  38. package/dist/core/MideaPacketBuilder.js +60 -60
  39. package/dist/core/MideaSecurity.d.ts +63 -63
  40. package/dist/core/MideaSecurity.js +251 -251
  41. package/dist/core/MideaUtils.d.ts +32 -32
  42. package/dist/core/MideaUtils.js +181 -181
  43. package/dist/devices/DeviceFactory.d.ts +13 -13
  44. package/dist/devices/DeviceFactory.js +36 -36
  45. package/dist/devices/a1/MideaA1Device.d.ts +76 -76
  46. package/dist/devices/a1/MideaA1Device.js +145 -145
  47. package/dist/devices/a1/MideaA1Device.js.map +1 -1
  48. package/dist/devices/a1/MideaA1Message.d.ts +40 -40
  49. package/dist/devices/a1/MideaA1Message.js +198 -198
  50. package/dist/devices/ac/MideaACDevice.d.ts +104 -100
  51. package/dist/devices/ac/MideaACDevice.d.ts.map +1 -1
  52. package/dist/devices/ac/MideaACDevice.js +384 -367
  53. package/dist/devices/ac/MideaACDevice.js.map +1 -1
  54. package/dist/devices/ac/MideaACMessage.d.ts +94 -92
  55. package/dist/devices/ac/MideaACMessage.d.ts.map +1 -1
  56. package/dist/devices/ac/MideaACMessage.js +611 -589
  57. package/dist/devices/ac/MideaACMessage.js.map +1 -1
  58. package/dist/devices/db/MideaDBDevice.d.ts +29 -29
  59. package/dist/devices/db/MideaDBDevice.js +100 -100
  60. package/dist/devices/db/MideaDBDevice.js.map +1 -1
  61. package/dist/devices/db/MideaDBMessage.d.ts +32 -32
  62. package/dist/devices/db/MideaDBMessage.js +101 -101
  63. package/dist/devices/e1/MideaE1Device.d.ts +56 -56
  64. package/dist/devices/e1/MideaE1Device.js +128 -128
  65. package/dist/devices/e1/MideaE1Device.js.map +1 -1
  66. package/dist/devices/e1/MideaE1Message.d.ts +28 -28
  67. package/dist/devices/e1/MideaE1Message.js +107 -107
  68. package/dist/devices/e2/MideaE2Device.d.ts +44 -44
  69. package/dist/devices/e2/MideaE2Device.js +129 -129
  70. package/dist/devices/e2/MideaE2Device.js.map +1 -1
  71. package/dist/devices/e2/MideaE2Message.d.ts +33 -33
  72. package/dist/devices/e2/MideaE2Message.js +132 -132
  73. package/dist/devices/e3/MideaE3Device.d.ts +43 -43
  74. package/dist/devices/e3/MideaE3Device.js +137 -137
  75. package/dist/devices/e3/MideaE3Device.js.map +1 -1
  76. package/dist/devices/e3/MideaE3Message.d.ts +51 -51
  77. package/dist/devices/e3/MideaE3Message.js +136 -136
  78. package/dist/devices/fa/MideaFADevice.d.ts +36 -36
  79. package/dist/devices/fa/MideaFADevice.js +106 -106
  80. package/dist/devices/fa/MideaFADevice.js.map +1 -1
  81. package/dist/devices/fa/MideaFAMessage.d.ts +38 -38
  82. package/dist/devices/fa/MideaFAMessage.js +98 -98
  83. package/dist/index.d.ts +6 -6
  84. package/dist/index.js +6 -6
  85. package/dist/platform.d.ts +60 -60
  86. package/dist/platform.js +212 -212
  87. package/dist/platformUtils.d.ts +106 -105
  88. package/dist/platformUtils.d.ts.map +1 -1
  89. package/dist/platformUtils.js +101 -100
  90. package/dist/platformUtils.js.map +1 -1
  91. package/dist/settings.d.ts +8 -8
  92. package/dist/settings.js +11 -11
  93. package/package.json +1 -1
  94. package/AC_ori.lua +0 -5150
@@ -1,185 +1,185 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MessageSubtypeResponse = exports.MessageResponse = exports.NewProtocolMessageBody = exports.MessageBody = exports.MessageQuestCustom = exports.MessageQuerySubtype = exports.MessageRequest = exports.MessageType = void 0;
4
- var MessageType;
5
- (function (MessageType) {
6
- MessageType[MessageType["UNKNOWN"] = 0] = "UNKNOWN";
7
- MessageType[MessageType["SET"] = 2] = "SET";
8
- MessageType[MessageType["QUERY"] = 3] = "QUERY";
9
- MessageType[MessageType["NOTIFY1"] = 4] = "NOTIFY1";
10
- MessageType[MessageType["NOTIFY2"] = 5] = "NOTIFY2";
11
- MessageType[MessageType["EXCEPTION"] = 6] = "EXCEPTION";
12
- MessageType[MessageType["QUERY_SN"] = 7] = "QUERY_SN";
13
- MessageType[MessageType["EXCEPTION2"] = 10] = "EXCEPTION2";
14
- MessageType[MessageType["QUERY_SUBTYPE"] = 160] = "QUERY_SUBTYPE";
15
- })(MessageType = exports.MessageType || (exports.MessageType = {}));
16
- class MessageBase {
17
- constructor() {
18
- this.HEADER_LENGTH = 10;
19
- }
20
- checksum(data) {
21
- let sum = 0;
22
- for (let i = 0; i < data.length; i++) {
23
- sum += data[i];
24
- }
25
- return (~sum + 1) & 0xff;
26
- }
27
- }
28
- class MessageRequest extends MessageBase {
29
- constructor(device_type, message_type, body_type, device_protocol_version) {
30
- super();
31
- this.device_type = device_type;
32
- this.message_type = message_type;
33
- this.body_type = body_type;
34
- this.device_protocol_version = device_protocol_version;
35
- }
36
- get body() {
37
- return Buffer.from(this.body_type && this._body ? [this.body_type, ...this._body] : this.body_type ? [this.body_type] : this._body ? this._body : []);
38
- }
39
- get header() {
40
- const length = this.HEADER_LENGTH + this.body.length;
41
- return Buffer.from([
42
- // flag
43
- 0xaa,
44
- // length
45
- length,
46
- // device type
47
- this.device_type,
48
- // frame checksum
49
- 0x00,
50
- // unused
51
- 0x00,
52
- 0x00,
53
- // frame ID
54
- 0x00,
55
- // frame protocol version
56
- 0x00,
57
- // device protocol version
58
- this.device_protocol_version,
59
- // frame type
60
- this.message_type,
61
- ]);
62
- }
63
- serialize() {
64
- let stream = Buffer.concat([this.header, this.body]);
65
- stream = Buffer.concat([stream, Buffer.from([this.checksum(stream.subarray(1, stream.length))])]);
66
- return stream;
67
- }
68
- }
69
- exports.MessageRequest = MessageRequest;
70
- class MessageQuerySubtype extends MessageRequest {
71
- constructor(device_type) {
72
- super(device_type, MessageType.QUERY_SUBTYPE, 0x00, 0);
73
- this._body = Buffer.alloc(18);
74
- }
75
- }
76
- exports.MessageQuerySubtype = MessageQuerySubtype;
77
- class MessageQuestCustom extends MessageRequest {
78
- constructor(device_type, message_type, cmd_body) {
79
- super(device_type, message_type, 0x00, 0);
80
- this._body = Buffer.alloc(0);
81
- this.cmd_body = cmd_body;
82
- }
83
- get body() {
84
- return this.cmd_body;
85
- }
86
- }
87
- exports.MessageQuestCustom = MessageQuestCustom;
88
- class MessageBody {
89
- constructor(data) {
90
- this.data = data;
91
- }
92
- get body_type() {
93
- return this.data[0];
94
- }
95
- static read_byte(data, offset, default_value) {
96
- return data.length > offset ? data[offset] : default_value;
97
- }
98
- }
99
- exports.MessageBody = MessageBody;
100
- class NewProtocolMessageBody extends MessageBody {
101
- constructor(body, body_type) {
102
- super(body);
103
- if (body_type === 0xb5) {
104
- this.packet_length = 4;
105
- }
106
- else {
107
- this.packet_length = 5;
108
- }
109
- }
110
- static packet(param, value, packet_length = 4) {
111
- const length = value.length;
112
- if (packet_length === 4) {
113
- return Buffer.concat([Buffer.from([param & 0xff, param >> 8, length]), value]);
114
- }
115
- else {
116
- return Buffer.concat([Buffer.from([param & 0xff, param >> 8, 0x00, length]), value]);
117
- }
118
- }
119
- parse() {
120
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
121
- const result = {};
122
- let offset = 2;
123
- try {
124
- while (offset < this.data.length) {
125
- const param = this.data[offset] + (this.data[offset + 1] << 8);
126
- if (this.packet_length === 5) {
127
- offset++;
128
- }
129
- const length = this.data[offset + 2];
130
- if (length > 0) {
131
- const value = this.data.subarray(offset + 3, offset + 3 + length);
132
- result[param] = value;
133
- }
134
- offset += 3 + length;
135
- }
136
- }
137
- catch (e) {
138
- // eslint-disable-next-line no-console
139
- console.error(e);
140
- }
141
- return result;
142
- }
143
- }
144
- exports.NewProtocolMessageBody = NewProtocolMessageBody;
145
- class MessageResponse extends MessageBase {
146
- constructor(message) {
147
- super();
148
- if (message === null || message === undefined || message.length < this.HEADER_LENGTH + 1) {
149
- throw new Error('Invalid message length');
150
- }
151
- this.header = message.subarray(0, this.HEADER_LENGTH);
152
- this.device_protocol_version = this.header[8];
153
- this.message_type = this.header[this.header.length - 1];
154
- this.device_type = this.header[2];
155
- this._body = new MessageBody(message.subarray(this.HEADER_LENGTH, -1));
156
- this.body_type = this._body.body_type;
157
- }
158
- get body() {
159
- return this._body.data;
160
- }
161
- set_body(body) {
162
- this._body = body;
163
- }
164
- get_body_type() {
165
- return this._body.constructor.name;
166
- }
167
- get_body_attribute(name) {
168
- return this._body[name];
169
- }
170
- }
171
- exports.MessageResponse = MessageResponse;
172
- class MessageSubtypeResponse extends MessageResponse {
173
- constructor(message) {
174
- super(message);
175
- if (this.message_type === MessageType.QUERY_SUBTYPE) {
176
- const body = message.subarray(this.HEADER_LENGTH, -1);
177
- this.sub_type = (body.length > 2 ? body[2] : 0) + (body.length > 3 ? body[3] << 8 : 0);
178
- }
179
- else {
180
- throw new Error('Invalid message type');
181
- }
182
- }
183
- }
184
- exports.MessageSubtypeResponse = MessageSubtypeResponse;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageSubtypeResponse = exports.MessageResponse = exports.NewProtocolMessageBody = exports.MessageBody = exports.MessageQuestCustom = exports.MessageQuerySubtype = exports.MessageRequest = exports.MessageType = void 0;
4
+ var MessageType;
5
+ (function (MessageType) {
6
+ MessageType[MessageType["UNKNOWN"] = 0] = "UNKNOWN";
7
+ MessageType[MessageType["SET"] = 2] = "SET";
8
+ MessageType[MessageType["QUERY"] = 3] = "QUERY";
9
+ MessageType[MessageType["NOTIFY1"] = 4] = "NOTIFY1";
10
+ MessageType[MessageType["NOTIFY2"] = 5] = "NOTIFY2";
11
+ MessageType[MessageType["EXCEPTION"] = 6] = "EXCEPTION";
12
+ MessageType[MessageType["QUERY_SN"] = 7] = "QUERY_SN";
13
+ MessageType[MessageType["EXCEPTION2"] = 10] = "EXCEPTION2";
14
+ MessageType[MessageType["QUERY_SUBTYPE"] = 160] = "QUERY_SUBTYPE";
15
+ })(MessageType = exports.MessageType || (exports.MessageType = {}));
16
+ class MessageBase {
17
+ constructor() {
18
+ this.HEADER_LENGTH = 10;
19
+ }
20
+ checksum(data) {
21
+ let sum = 0;
22
+ for (let i = 0; i < data.length; i++) {
23
+ sum += data[i];
24
+ }
25
+ return (~sum + 1) & 0xff;
26
+ }
27
+ }
28
+ class MessageRequest extends MessageBase {
29
+ constructor(device_type, message_type, body_type, device_protocol_version) {
30
+ super();
31
+ this.device_type = device_type;
32
+ this.message_type = message_type;
33
+ this.body_type = body_type;
34
+ this.device_protocol_version = device_protocol_version;
35
+ }
36
+ get body() {
37
+ return Buffer.from(this.body_type && this._body ? [this.body_type, ...this._body] : this.body_type ? [this.body_type] : this._body ? this._body : []);
38
+ }
39
+ get header() {
40
+ const length = this.HEADER_LENGTH + this.body.length;
41
+ return Buffer.from([
42
+ // flag
43
+ 0xaa,
44
+ // length
45
+ length,
46
+ // device type
47
+ this.device_type,
48
+ // frame checksum
49
+ 0x00,
50
+ // unused
51
+ 0x00,
52
+ 0x00,
53
+ // frame ID
54
+ 0x00,
55
+ // frame protocol version
56
+ 0x00,
57
+ // device protocol version
58
+ this.device_protocol_version,
59
+ // frame type
60
+ this.message_type,
61
+ ]);
62
+ }
63
+ serialize() {
64
+ let stream = Buffer.concat([this.header, this.body]);
65
+ stream = Buffer.concat([stream, Buffer.from([this.checksum(stream.subarray(1, stream.length))])]);
66
+ return stream;
67
+ }
68
+ }
69
+ exports.MessageRequest = MessageRequest;
70
+ class MessageQuerySubtype extends MessageRequest {
71
+ constructor(device_type) {
72
+ super(device_type, MessageType.QUERY_SUBTYPE, 0x00, 0);
73
+ this._body = Buffer.alloc(18);
74
+ }
75
+ }
76
+ exports.MessageQuerySubtype = MessageQuerySubtype;
77
+ class MessageQuestCustom extends MessageRequest {
78
+ constructor(device_type, message_type, cmd_body) {
79
+ super(device_type, message_type, 0x00, 0);
80
+ this._body = Buffer.alloc(0);
81
+ this.cmd_body = cmd_body;
82
+ }
83
+ get body() {
84
+ return this.cmd_body;
85
+ }
86
+ }
87
+ exports.MessageQuestCustom = MessageQuestCustom;
88
+ class MessageBody {
89
+ constructor(data) {
90
+ this.data = data;
91
+ }
92
+ get body_type() {
93
+ return this.data[0];
94
+ }
95
+ static read_byte(data, offset, default_value) {
96
+ return data.length > offset ? data[offset] : default_value;
97
+ }
98
+ }
99
+ exports.MessageBody = MessageBody;
100
+ class NewProtocolMessageBody extends MessageBody {
101
+ constructor(body, body_type) {
102
+ super(body);
103
+ if (body_type === 0xb5) {
104
+ this.packet_length = 4;
105
+ }
106
+ else {
107
+ this.packet_length = 5;
108
+ }
109
+ }
110
+ static packet(param, value, packet_length = 4) {
111
+ const length = value.length;
112
+ if (packet_length === 4) {
113
+ return Buffer.concat([Buffer.from([param & 0xff, param >> 8, length]), value]);
114
+ }
115
+ else {
116
+ return Buffer.concat([Buffer.from([param & 0xff, param >> 8, 0x00, length]), value]);
117
+ }
118
+ }
119
+ parse() {
120
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
121
+ const result = {};
122
+ let offset = 2;
123
+ try {
124
+ while (offset < this.data.length) {
125
+ const param = this.data[offset] + (this.data[offset + 1] << 8);
126
+ if (this.packet_length === 5) {
127
+ offset++;
128
+ }
129
+ const length = this.data[offset + 2];
130
+ if (length > 0) {
131
+ const value = this.data.subarray(offset + 3, offset + 3 + length);
132
+ result[param] = value;
133
+ }
134
+ offset += 3 + length;
135
+ }
136
+ }
137
+ catch (e) {
138
+ // eslint-disable-next-line no-console
139
+ console.error(e);
140
+ }
141
+ return result;
142
+ }
143
+ }
144
+ exports.NewProtocolMessageBody = NewProtocolMessageBody;
145
+ class MessageResponse extends MessageBase {
146
+ constructor(message) {
147
+ super();
148
+ if (message === null || message === undefined || message.length < this.HEADER_LENGTH + 1) {
149
+ throw new Error('Invalid message length');
150
+ }
151
+ this.header = message.subarray(0, this.HEADER_LENGTH);
152
+ this.device_protocol_version = this.header[8];
153
+ this.message_type = this.header[this.header.length - 1];
154
+ this.device_type = this.header[2];
155
+ this._body = new MessageBody(message.subarray(this.HEADER_LENGTH, -1));
156
+ this.body_type = this._body.body_type;
157
+ }
158
+ get body() {
159
+ return this._body.data;
160
+ }
161
+ set_body(body) {
162
+ this._body = body;
163
+ }
164
+ get_body_type() {
165
+ return this._body.constructor.name;
166
+ }
167
+ get_body_attribute(name) {
168
+ return this._body[name];
169
+ }
170
+ }
171
+ exports.MessageResponse = MessageResponse;
172
+ class MessageSubtypeResponse extends MessageResponse {
173
+ constructor(message) {
174
+ super(message);
175
+ if (this.message_type === MessageType.QUERY_SUBTYPE) {
176
+ const body = message.subarray(this.HEADER_LENGTH, -1);
177
+ this.sub_type = (body.length > 2 ? body[2] : 0) + (body.length > 3 ? body[3] << 8 : 0);
178
+ }
179
+ else {
180
+ throw new Error('Invalid message type');
181
+ }
182
+ }
183
+ }
184
+ exports.MessageSubtypeResponse = MessageSubtypeResponse;
185
185
  //# sourceMappingURL=MideaMessage.js.map
@@ -1,11 +1,11 @@
1
- /// <reference types="node" />
2
- export default class PacketBuilder {
3
- private readonly command;
4
- private readonly security;
5
- private packet;
6
- constructor(device_id: number, command: Buffer);
7
- finalize(message_type?: number): Buffer;
8
- static packet_time(): Buffer;
9
- static checksum(data: Buffer): number;
10
- }
1
+ /// <reference types="node" />
2
+ export default class PacketBuilder {
3
+ private readonly command;
4
+ private readonly security;
5
+ private packet;
6
+ constructor(device_id: number, command: Buffer);
7
+ finalize(message_type?: number): Buffer;
8
+ static packet_time(): Buffer;
9
+ static checksum(data: Buffer): number;
10
+ }
11
11
  //# sourceMappingURL=MideaPacketBuilder.d.ts.map
@@ -1,61 +1,61 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const MideaSecurity_1 = require("./MideaSecurity");
4
- const luxon_1 = require("luxon");
5
- const MideaUtils_1 = require("./MideaUtils");
6
- const MideaConstants_1 = require("./MideaConstants");
7
- class PacketBuilder {
8
- constructor(device_id, command) {
9
- this.command = command;
10
- this.security = new MideaSecurity_1.LocalSecurity();
11
- this.packet = Buffer.from([
12
- // 2 bytes - StaicHeader
13
- 0x5a, 0x5a,
14
- // 2 bytes - mMessageType
15
- 0x01, 0x11,
16
- // 2 bytes - PacketLenght
17
- 0x00, 0x00,
18
- // 2 bytes
19
- 0x20, 0x00,
20
- // 4 bytes - MessageId
21
- 0x00, 0x00, 0x00, 0x00,
22
- // 8 bytes - Date&Time
23
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
24
- // 6 bytes - mDeviceID
25
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26
- // 12 bytes
27
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
28
- ]);
29
- this.packet.subarray(12, 20).set(PacketBuilder.packet_time());
30
- this.packet.subarray(20, 28).set((0, MideaUtils_1.numberToUint8Array)(device_id, 8, MideaConstants_1.Endianness.Little));
31
- }
32
- finalize(message_type = 1) {
33
- if (message_type !== 1) {
34
- this.packet[3] = 0x10;
35
- this.packet[6] = 0x7b;
36
- }
37
- else {
38
- this.packet = Buffer.concat([this.packet, this.security.aes_encrypt(this.command)]);
39
- }
40
- this.packet.subarray(4, 6).set((0, MideaUtils_1.numberToUint8Array)(this.packet.length + 16, 2, MideaConstants_1.Endianness.Little));
41
- this.packet = Buffer.concat([this.packet, this.security.encode32_data(this.packet)]);
42
- return this.packet;
43
- }
44
- static packet_time() {
45
- const t = luxon_1.DateTime.utc().toFormat('yyyyMMddHHmmssuu');
46
- const b = Buffer.alloc(8);
47
- for (let i = 0; i < t.length; i += 2) {
48
- b[8 - i - 1] = parseInt(t.substring(i, i + 2));
49
- }
50
- return b;
51
- }
52
- static checksum(data) {
53
- let sum = 0;
54
- for (let i = 0; i < data.length; i++) {
55
- sum += data[i];
56
- }
57
- return (~sum + 1) & 0xff;
58
- }
59
- }
60
- exports.default = PacketBuilder;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const MideaSecurity_1 = require("./MideaSecurity");
4
+ const luxon_1 = require("luxon");
5
+ const MideaUtils_1 = require("./MideaUtils");
6
+ const MideaConstants_1 = require("./MideaConstants");
7
+ class PacketBuilder {
8
+ constructor(device_id, command) {
9
+ this.command = command;
10
+ this.security = new MideaSecurity_1.LocalSecurity();
11
+ this.packet = Buffer.from([
12
+ // 2 bytes - StaicHeader
13
+ 0x5a, 0x5a,
14
+ // 2 bytes - mMessageType
15
+ 0x01, 0x11,
16
+ // 2 bytes - PacketLenght
17
+ 0x00, 0x00,
18
+ // 2 bytes
19
+ 0x20, 0x00,
20
+ // 4 bytes - MessageId
21
+ 0x00, 0x00, 0x00, 0x00,
22
+ // 8 bytes - Date&Time
23
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
24
+ // 6 bytes - mDeviceID
25
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26
+ // 12 bytes
27
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
28
+ ]);
29
+ this.packet.subarray(12, 20).set(PacketBuilder.packet_time());
30
+ this.packet.subarray(20, 28).set((0, MideaUtils_1.numberToUint8Array)(device_id, 8, MideaConstants_1.Endianness.Little));
31
+ }
32
+ finalize(message_type = 1) {
33
+ if (message_type !== 1) {
34
+ this.packet[3] = 0x10;
35
+ this.packet[6] = 0x7b;
36
+ }
37
+ else {
38
+ this.packet = Buffer.concat([this.packet, this.security.aes_encrypt(this.command)]);
39
+ }
40
+ this.packet.subarray(4, 6).set((0, MideaUtils_1.numberToUint8Array)(this.packet.length + 16, 2, MideaConstants_1.Endianness.Little));
41
+ this.packet = Buffer.concat([this.packet, this.security.encode32_data(this.packet)]);
42
+ return this.packet;
43
+ }
44
+ static packet_time() {
45
+ const t = luxon_1.DateTime.utc().toFormat('yyyyMMddHHmmssuu');
46
+ const b = Buffer.alloc(8);
47
+ for (let i = 0; i < t.length; i += 2) {
48
+ b[8 - i - 1] = parseInt(t.substring(i, i + 2));
49
+ }
50
+ return b;
51
+ }
52
+ static checksum(data) {
53
+ let sum = 0;
54
+ for (let i = 0; i < data.length; i++) {
55
+ sum += data[i];
56
+ }
57
+ return (~sum + 1) & 0xff;
58
+ }
59
+ }
60
+ exports.default = PacketBuilder;
61
61
  //# sourceMappingURL=MideaPacketBuilder.js.map
@@ -1,64 +1,64 @@
1
- /// <reference types="node" />
2
- import { TCPMessageType } from './MideaConstants';
3
- export type KeyToken = Buffer | undefined;
4
- export declare abstract class CloudSecurity {
5
- protected readonly LOGIN_KEY: string;
6
- readonly IOT_KEY?: string;
7
- readonly HMAC_KEY?: string;
8
- constructor(login_key: string, iot_key?: bigint, hmac_key?: bigint);
9
- sign(data: string, random: string): string;
10
- encrpytPassword(loginId: string, password: string): string;
11
- static getUDPID(device_id_buf: Uint8Array): string;
12
- }
13
- export declare abstract class ProxiedSecurity extends CloudSecurity {
14
- abstract readonly APP_KEY: string;
15
- abstract encrpytIAMPassword(loginId: string, password: string): string;
16
- getAppKeyAndIv(): {
17
- appKey: Buffer;
18
- iv: Buffer;
19
- };
20
- encryptAESAppKey(data: Buffer): Buffer;
21
- decryptAESAppKey(data: Buffer): Buffer;
22
- }
23
- export declare class MSmartHomeCloudSecurity extends ProxiedSecurity {
24
- static readonly _LOGIN_KEY = "ac21b9f9cbfe4ca5a88562ef25e2b768";
25
- readonly APP_KEY = "ac21b9f9cbfe4ca5a88562ef25e2b768";
26
- constructor();
27
- encrpytIAMPassword(loginId: string, password: string): string;
28
- }
29
- export declare class MeijuCloudSecurity extends ProxiedSecurity {
30
- static readonly _LOGIN_KEY = "ad0ee21d48a64bf49f4fb583ab76e799";
31
- readonly APP_KEY = "ac21b9f9cbfe4ca5a88562ef25e2b768";
32
- constructor();
33
- encrpytIAMPassword(_loginId: string, password: string): string;
34
- }
35
- export declare class SimpleSecurity extends CloudSecurity {
36
- constructor(login_key: string);
37
- encrpytIAMPassword(): string;
38
- sign(url: string, query: string): string;
39
- }
40
- export declare class NetHomePlusSecurity extends SimpleSecurity {
41
- static readonly _LOGIN_KEY = "3742e9e5842d4ad59c2db887e12449f9";
42
- constructor();
43
- }
44
- export declare class ArtisonClimaSecurity extends SimpleSecurity {
45
- static readonly _LOGIN_KEY = "434a209a5ce141c3b726de067835d7f0";
46
- constructor();
47
- }
48
- export declare class LocalSecurity {
49
- private readonly aes_key;
50
- private readonly salt;
51
- private readonly iv;
52
- private request_count;
53
- private response_count;
54
- private tcp_key;
55
- private aes_cbc_encrpyt;
56
- private aes_cbc_decrypt;
57
- aes_encrypt(data: Buffer): Buffer;
58
- aes_decrypt(data: Buffer): Buffer;
59
- encode32_data(raw: Buffer): Buffer;
60
- tcp_key_from_resp(response: Buffer, key: Buffer): Buffer;
61
- encode_8370(data: Buffer, message_type: TCPMessageType): Buffer;
62
- decode_8370(data: Buffer): any;
63
- }
1
+ /// <reference types="node" />
2
+ import { TCPMessageType } from './MideaConstants';
3
+ export type KeyToken = Buffer | undefined;
4
+ export declare abstract class CloudSecurity {
5
+ protected readonly LOGIN_KEY: string;
6
+ readonly IOT_KEY?: string;
7
+ readonly HMAC_KEY?: string;
8
+ constructor(login_key: string, iot_key?: bigint, hmac_key?: bigint);
9
+ sign(data: string, random: string): string;
10
+ encrpytPassword(loginId: string, password: string): string;
11
+ static getUDPID(device_id_buf: Uint8Array): string;
12
+ }
13
+ export declare abstract class ProxiedSecurity extends CloudSecurity {
14
+ abstract readonly APP_KEY: string;
15
+ abstract encrpytIAMPassword(loginId: string, password: string): string;
16
+ getAppKeyAndIv(): {
17
+ appKey: Buffer;
18
+ iv: Buffer;
19
+ };
20
+ encryptAESAppKey(data: Buffer): Buffer;
21
+ decryptAESAppKey(data: Buffer): Buffer;
22
+ }
23
+ export declare class MSmartHomeCloudSecurity extends ProxiedSecurity {
24
+ static readonly _LOGIN_KEY = "ac21b9f9cbfe4ca5a88562ef25e2b768";
25
+ readonly APP_KEY = "ac21b9f9cbfe4ca5a88562ef25e2b768";
26
+ constructor();
27
+ encrpytIAMPassword(loginId: string, password: string): string;
28
+ }
29
+ export declare class MeijuCloudSecurity extends ProxiedSecurity {
30
+ static readonly _LOGIN_KEY = "ad0ee21d48a64bf49f4fb583ab76e799";
31
+ readonly APP_KEY = "ac21b9f9cbfe4ca5a88562ef25e2b768";
32
+ constructor();
33
+ encrpytIAMPassword(_loginId: string, password: string): string;
34
+ }
35
+ export declare class SimpleSecurity extends CloudSecurity {
36
+ constructor(login_key: string);
37
+ encrpytIAMPassword(): string;
38
+ sign(url: string, query: string): string;
39
+ }
40
+ export declare class NetHomePlusSecurity extends SimpleSecurity {
41
+ static readonly _LOGIN_KEY = "3742e9e5842d4ad59c2db887e12449f9";
42
+ constructor();
43
+ }
44
+ export declare class ArtisonClimaSecurity extends SimpleSecurity {
45
+ static readonly _LOGIN_KEY = "434a209a5ce141c3b726de067835d7f0";
46
+ constructor();
47
+ }
48
+ export declare class LocalSecurity {
49
+ private readonly aes_key;
50
+ private readonly salt;
51
+ private readonly iv;
52
+ private request_count;
53
+ private response_count;
54
+ private tcp_key;
55
+ private aes_cbc_encrpyt;
56
+ private aes_cbc_decrypt;
57
+ aes_encrypt(data: Buffer): Buffer;
58
+ aes_decrypt(data: Buffer): Buffer;
59
+ encode32_data(raw: Buffer): Buffer;
60
+ tcp_key_from_resp(response: Buffer, key: Buffer): Buffer;
61
+ encode_8370(data: Buffer, message_type: TCPMessageType): Buffer;
62
+ decode_8370(data: Buffer): any;
63
+ }
64
64
  //# sourceMappingURL=MideaSecurity.d.ts.map