homebridge-midea-platform 1.1.2-beta.2 → 1.1.2-beta.4
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.
- package/.husky/pre-commit +0 -0
- package/CHANGELOG.md +6 -1
- package/config.schema.json +20 -56
- package/dist/accessory/AccessoryFactory.d.ts +12 -12
- package/dist/accessory/AccessoryFactory.js +31 -31
- package/dist/accessory/AirConditionerAccessory.d.ts +86 -86
- package/dist/accessory/AirConditionerAccessory.js +560 -560
- package/dist/accessory/AirConditionerAccessory.js.map +1 -1
- package/dist/accessory/BaseAccessory.d.ts +11 -11
- package/dist/accessory/BaseAccessory.js +21 -21
- package/dist/accessory/DehumidifierAccessory.d.ts +45 -45
- package/dist/accessory/DehumidifierAccessory.d.ts.map +1 -1
- package/dist/accessory/DehumidifierAccessory.js +345 -343
- package/dist/accessory/DehumidifierAccessory.js.map +1 -1
- package/dist/accessory/ElectricWaterHeaterAccessory.d.ts +44 -44
- package/dist/accessory/ElectricWaterHeaterAccessory.js +176 -176
- package/dist/accessory/FanAccessory.d.ts +39 -39
- package/dist/accessory/FanAccessory.js +123 -123
- package/dist/accessory/FrontLoadWasherAccessory.d.ts +30 -30
- package/dist/accessory/FrontLoadWasherAccessory.js +60 -60
- package/dist/accessory/GasWaterHeaterAccessory.d.ts +51 -51
- package/dist/accessory/GasWaterHeaterAccessory.js +216 -216
- package/dist/core/MideaCloud.d.ts +35 -35
- package/dist/core/MideaCloud.js +350 -350
- package/dist/core/MideaConstants.d.ts +49 -49
- package/dist/core/MideaConstants.js +57 -57
- package/dist/core/MideaDevice.d.ts +76 -76
- package/dist/core/MideaDevice.js +409 -409
- package/dist/core/MideaDiscover.d.ts +35 -35
- package/dist/core/MideaDiscover.js +212 -212
- package/dist/core/MideaMessage.d.ts +75 -75
- package/dist/core/MideaMessage.js +184 -184
- package/dist/core/MideaPacketBuilder.d.ts +10 -10
- package/dist/core/MideaPacketBuilder.js +60 -60
- package/dist/core/MideaSecurity.d.ts +63 -63
- package/dist/core/MideaSecurity.js +242 -242
- package/dist/core/MideaUtils.d.ts +32 -32
- package/dist/core/MideaUtils.js +181 -181
- package/dist/devices/DeviceFactory.d.ts +12 -12
- package/dist/devices/DeviceFactory.js +33 -33
- package/dist/devices/a1/MideaA1Device.d.ts +76 -76
- package/dist/devices/a1/MideaA1Device.js +136 -136
- package/dist/devices/a1/MideaA1Message.d.ts +40 -40
- package/dist/devices/a1/MideaA1Message.js +198 -198
- package/dist/devices/ac/MideaACDevice.d.ts +100 -100
- package/dist/devices/ac/MideaACDevice.js +370 -370
- package/dist/devices/ac/MideaACMessage.d.ts +92 -92
- package/dist/devices/ac/MideaACMessage.js +589 -589
- package/dist/devices/db/MideaDBDevice.d.ts +29 -29
- package/dist/devices/db/MideaDBDevice.js +88 -88
- package/dist/devices/db/MideaDBMessage.d.ts +32 -32
- package/dist/devices/db/MideaDBMessage.js +101 -101
- package/dist/devices/e2/MideaE2Device.d.ts +44 -44
- package/dist/devices/e2/MideaE2Device.js +119 -119
- package/dist/devices/e2/MideaE2Message.d.ts +33 -33
- package/dist/devices/e2/MideaE2Message.js +132 -132
- package/dist/devices/e3/MideaE3Device.d.ts +43 -43
- package/dist/devices/e3/MideaE3Device.js +125 -125
- package/dist/devices/e3/MideaE3Message.d.ts +51 -51
- package/dist/devices/e3/MideaE3Message.js +136 -136
- package/dist/devices/fa/MideaFADevice.d.ts +36 -36
- package/dist/devices/fa/MideaFADevice.js +92 -92
- package/dist/devices/fa/MideaFAMessage.d.ts +38 -38
- package/dist/devices/fa/MideaFAMessage.js +98 -98
- package/dist/index.d.ts +6 -6
- package/dist/index.js +6 -6
- package/dist/platform.d.ts +60 -60
- package/dist/platform.js +213 -213
- package/dist/platformUtils.d.ts +98 -97
- package/dist/platformUtils.d.ts.map +1 -1
- package/dist/platformUtils.js +96 -95
- package/dist/platformUtils.js.map +1 -1
- package/dist/settings.d.ts +8 -8
- package/dist/settings.js +11 -11
- package/docs/db.md +3 -0
- package/package.json +1 -1
|
@@ -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
|