homebridge-midea-platform 1.2.0-beta.7 → 1.2.1

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 (168) hide show
  1. package/CHANGELOG.md +7 -2
  2. package/README.md +2 -2
  3. package/config.schema.json +1 -1
  4. package/dist/accessory/AccessoryFactory.d.ts +14 -15
  5. package/dist/accessory/AccessoryFactory.js +34 -40
  6. package/dist/accessory/AccessoryFactory.js.map +1 -1
  7. package/dist/accessory/AirConditionerAccessory.d.ts +98 -99
  8. package/dist/accessory/AirConditionerAccessory.js +666 -662
  9. package/dist/accessory/AirConditionerAccessory.js.map +1 -1
  10. package/dist/accessory/BaseAccessory.d.ts +11 -12
  11. package/dist/accessory/BaseAccessory.js +21 -21
  12. package/dist/accessory/BaseAccessory.js.map +1 -1
  13. package/dist/accessory/DehumidifierAccessory.d.ts +45 -46
  14. package/dist/accessory/DehumidifierAccessory.js +343 -344
  15. package/dist/accessory/DehumidifierAccessory.js.map +1 -1
  16. package/dist/accessory/DishwasherAccessory.d.ts +30 -31
  17. package/dist/accessory/DishwasherAccessory.js +59 -63
  18. package/dist/accessory/DishwasherAccessory.js.map +1 -1
  19. package/dist/accessory/ElectricWaterHeaterAccessory.d.ts +44 -45
  20. package/dist/accessory/ElectricWaterHeaterAccessory.js +172 -176
  21. package/dist/accessory/ElectricWaterHeaterAccessory.js.map +1 -1
  22. package/dist/accessory/FanAccessory.d.ts +39 -40
  23. package/dist/accessory/FanAccessory.js +120 -123
  24. package/dist/accessory/FanAccessory.js.map +1 -1
  25. package/dist/accessory/FrontLoadWasherAccessory.d.ts +30 -31
  26. package/dist/accessory/FrontLoadWasherAccessory.js +63 -66
  27. package/dist/accessory/FrontLoadWasherAccessory.js.map +1 -1
  28. package/dist/accessory/GasWaterHeaterAccessory.d.ts +51 -52
  29. package/dist/accessory/GasWaterHeaterAccessory.js +217 -216
  30. package/dist/accessory/GasWaterHeaterAccessory.js.map +1 -1
  31. package/dist/accessory/{HeatPumpWifiControllerAccessory.d.ts → HeatPumpWiFiControllerAccessory.d.ts} +34 -35
  32. package/dist/accessory/{HeatPumpWifiControllerAccessory.js → HeatPumpWiFiControllerAccessory.js} +55 -36
  33. package/dist/accessory/HeatPumpWiFiControllerAccessory.js.map +1 -0
  34. package/dist/core/MideaCloud.d.ts +34 -36
  35. package/dist/core/MideaCloud.js +349 -350
  36. package/dist/core/MideaCloud.js.map +1 -1
  37. package/dist/core/MideaConstants.d.ts +51 -52
  38. package/dist/core/MideaConstants.js +56 -59
  39. package/dist/core/MideaConstants.js.map +1 -1
  40. package/dist/core/MideaDevice.d.ts +75 -78
  41. package/dist/core/MideaDevice.js +430 -420
  42. package/dist/core/MideaDevice.js.map +1 -1
  43. package/dist/core/MideaDiscover.d.ts +34 -36
  44. package/dist/core/MideaDiscover.js +208 -212
  45. package/dist/core/MideaDiscover.js.map +1 -1
  46. package/dist/core/MideaMessage.d.ts +75 -76
  47. package/dist/core/MideaMessage.js +185 -184
  48. package/dist/core/MideaMessage.js.map +1 -1
  49. package/dist/core/MideaPacketBuilder.d.ts +9 -11
  50. package/dist/core/MideaPacketBuilder.js +60 -60
  51. package/dist/core/MideaPacketBuilder.js.map +1 -1
  52. package/dist/core/MideaSecurity.d.ts +62 -64
  53. package/dist/core/MideaSecurity.js +241 -251
  54. package/dist/core/MideaSecurity.js.map +1 -1
  55. package/dist/core/MideaUtils.d.ts +31 -33
  56. package/dist/core/MideaUtils.js +178 -181
  57. package/dist/core/MideaUtils.js.map +1 -1
  58. package/dist/devices/DeviceFactory.d.ts +14 -15
  59. package/dist/devices/DeviceFactory.js +34 -40
  60. package/dist/devices/DeviceFactory.js.map +1 -1
  61. package/dist/devices/a1/MideaA1Device.d.ts +75 -77
  62. package/dist/devices/a1/MideaA1Device.js +142 -145
  63. package/dist/devices/a1/MideaA1Device.js.map +1 -1
  64. package/dist/devices/a1/MideaA1Message.d.ts +39 -41
  65. package/dist/devices/a1/MideaA1Message.js +219 -198
  66. package/dist/devices/a1/MideaA1Message.js.map +1 -1
  67. package/dist/devices/ac/MideaACDevice.d.ts +105 -107
  68. package/dist/devices/ac/MideaACDevice.js +417 -400
  69. package/dist/devices/ac/MideaACDevice.js.map +1 -1
  70. package/dist/devices/ac/MideaACMessage.d.ts +97 -96
  71. package/dist/devices/ac/MideaACMessage.js +724 -621
  72. package/dist/devices/ac/MideaACMessage.js.map +1 -1
  73. package/dist/devices/c3/MideaC3Device.d.ts +73 -75
  74. package/dist/devices/c3/MideaC3Device.js +249 -255
  75. package/dist/devices/c3/MideaC3Device.js.map +1 -1
  76. package/dist/devices/c3/MideaC3Message.d.ts +81 -80
  77. package/dist/devices/c3/MideaC3Message.js +190 -152
  78. package/dist/devices/c3/MideaC3Message.js.map +1 -1
  79. package/dist/devices/db/MideaDBDevice.d.ts +28 -30
  80. package/dist/devices/db/MideaDBDevice.js +94 -100
  81. package/dist/devices/db/MideaDBDevice.js.map +1 -1
  82. package/dist/devices/db/MideaDBMessage.d.ts +31 -33
  83. package/dist/devices/db/MideaDBMessage.js +101 -101
  84. package/dist/devices/db/MideaDBMessage.js.map +1 -1
  85. package/dist/devices/e1/MideaE1Device.d.ts +55 -57
  86. package/dist/devices/e1/MideaE1Device.js +122 -128
  87. package/dist/devices/e1/MideaE1Device.js.map +1 -1
  88. package/dist/devices/e1/MideaE1Message.d.ts +27 -29
  89. package/dist/devices/e1/MideaE1Message.js +128 -107
  90. package/dist/devices/e1/MideaE1Message.js.map +1 -1
  91. package/dist/devices/e2/MideaE2Device.d.ts +43 -45
  92. package/dist/devices/e2/MideaE2Device.js +124 -129
  93. package/dist/devices/e2/MideaE2Device.js.map +1 -1
  94. package/dist/devices/e2/MideaE2Message.d.ts +34 -34
  95. package/dist/devices/e2/MideaE2Message.js +143 -132
  96. package/dist/devices/e2/MideaE2Message.js.map +1 -1
  97. package/dist/devices/e3/MideaE3Device.d.ts +42 -44
  98. package/dist/devices/e3/MideaE3Device.js +132 -137
  99. package/dist/devices/e3/MideaE3Device.js.map +1 -1
  100. package/dist/devices/e3/MideaE3Message.d.ts +51 -52
  101. package/dist/devices/e3/MideaE3Message.js +144 -136
  102. package/dist/devices/e3/MideaE3Message.js.map +1 -1
  103. package/dist/devices/fa/MideaFADevice.d.ts +35 -37
  104. package/dist/devices/fa/MideaFADevice.js +102 -106
  105. package/dist/devices/fa/MideaFADevice.js.map +1 -1
  106. package/dist/devices/fa/MideaFAMessage.d.ts +38 -39
  107. package/dist/devices/fa/MideaFAMessage.js +108 -98
  108. package/dist/devices/fa/MideaFAMessage.js.map +1 -1
  109. package/dist/index.d.ts +6 -7
  110. package/dist/index.js +8 -6
  111. package/dist/index.js.map +1 -1
  112. package/dist/platform.d.ts +61 -61
  113. package/dist/platform.js +232 -212
  114. package/dist/platform.js.map +1 -1
  115. package/dist/platformUtils.d.ts +116 -117
  116. package/dist/platformUtils.js +107 -110
  117. package/dist/platformUtils.js.map +1 -1
  118. package/dist/settings.d.ts +8 -9
  119. package/dist/settings.js +8 -11
  120. package/dist/settings.js.map +1 -1
  121. package/docs/download_lua.md +9 -0
  122. package/eslint.config.js +43 -0
  123. package/homebridge-ui/public/js/bootstrap.min.js +1179 -1
  124. package/homebridge-ui/{server.js → server.cjs} +30 -30
  125. package/package.json +21 -31
  126. package/.eslintignore +0 -3
  127. package/.husky/pre-commit +0 -5
  128. package/.prettierrc +0 -19
  129. package/dist/accessory/AccessoryFactory.d.ts.map +0 -1
  130. package/dist/accessory/AirConditionerAccessory.d.ts.map +0 -1
  131. package/dist/accessory/BaseAccessory.d.ts.map +0 -1
  132. package/dist/accessory/DehumidifierAccessory.d.ts.map +0 -1
  133. package/dist/accessory/DishwasherAccessory.d.ts.map +0 -1
  134. package/dist/accessory/ElectricWaterHeaterAccessory.d.ts.map +0 -1
  135. package/dist/accessory/FanAccessory.d.ts.map +0 -1
  136. package/dist/accessory/FrontLoadWasherAccessory.d.ts.map +0 -1
  137. package/dist/accessory/GasWaterHeaterAccessory.d.ts.map +0 -1
  138. package/dist/accessory/HeatPumpWifiControllerAccessory.d.ts.map +0 -1
  139. package/dist/accessory/HeatPumpWifiControllerAccessory.js.map +0 -1
  140. package/dist/core/MideaCloud.d.ts.map +0 -1
  141. package/dist/core/MideaConstants.d.ts.map +0 -1
  142. package/dist/core/MideaDevice.d.ts.map +0 -1
  143. package/dist/core/MideaDiscover.d.ts.map +0 -1
  144. package/dist/core/MideaMessage.d.ts.map +0 -1
  145. package/dist/core/MideaPacketBuilder.d.ts.map +0 -1
  146. package/dist/core/MideaSecurity.d.ts.map +0 -1
  147. package/dist/core/MideaUtils.d.ts.map +0 -1
  148. package/dist/devices/DeviceFactory.d.ts.map +0 -1
  149. package/dist/devices/a1/MideaA1Device.d.ts.map +0 -1
  150. package/dist/devices/a1/MideaA1Message.d.ts.map +0 -1
  151. package/dist/devices/ac/MideaACDevice.d.ts.map +0 -1
  152. package/dist/devices/ac/MideaACMessage.d.ts.map +0 -1
  153. package/dist/devices/c3/MideaC3Device.d.ts.map +0 -1
  154. package/dist/devices/c3/MideaC3Message.d.ts.map +0 -1
  155. package/dist/devices/db/MideaDBDevice.d.ts.map +0 -1
  156. package/dist/devices/db/MideaDBMessage.d.ts.map +0 -1
  157. package/dist/devices/e1/MideaE1Device.d.ts.map +0 -1
  158. package/dist/devices/e1/MideaE1Message.d.ts.map +0 -1
  159. package/dist/devices/e2/MideaE2Device.d.ts.map +0 -1
  160. package/dist/devices/e2/MideaE2Message.d.ts.map +0 -1
  161. package/dist/devices/e3/MideaE3Device.d.ts.map +0 -1
  162. package/dist/devices/e3/MideaE3Message.d.ts.map +0 -1
  163. package/dist/devices/fa/MideaFADevice.d.ts.map +0 -1
  164. package/dist/devices/fa/MideaFAMessage.d.ts.map +0 -1
  165. package/dist/index.d.ts.map +0 -1
  166. package/dist/platform.d.ts.map +0 -1
  167. package/dist/platformUtils.d.ts.map +0 -1
  168. package/dist/settings.d.ts.map +0 -1
@@ -1,199 +1,220 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MessageA1Response = exports.MessageNewProtocolSet = exports.MessageSet = exports.MessageNewProtocolQuery = exports.MessageQuery = void 0;
4
- /***********************************************************************
5
- * Midea Dehumidifier Device message handler class
6
- *
7
- * Copyright (c) 2023 David Kerr, https://github.com/dkerr64
8
- *
9
- * With thanks to https://github.com/kovapatrik/homebridge-midea-platform
10
- * And https://github.com/georgezhao2010/midea_ac_lan
11
- *
12
- */
13
- const MideaConstants_1 = require("../../core/MideaConstants");
14
- const MideaMessage_1 = require("../../core/MideaMessage");
15
- const MideaUtils_1 = require("../../core/MideaUtils");
16
- var NewProtocolTags;
17
- (function (NewProtocolTags) {
18
- NewProtocolTags[NewProtocolTags["LIGHT"] = 91] = "LIGHT";
19
- })(NewProtocolTags || (NewProtocolTags = {}));
20
- class MessageA1Base extends MideaMessage_1.MessageRequest {
21
- constructor(device_protocol_version, message_type, body_type) {
22
- super(MideaConstants_1.DeviceType.DEHUMIDIFIER, message_type, body_type, device_protocol_version);
23
- MessageA1Base.message_serial += 1;
24
- // I don't know why dehumidifier wraps at 100, air conditioner wraps at 254
25
- if (MessageA1Base.message_serial >= 100) {
26
- MessageA1Base.message_serial = 1;
27
- }
28
- this.message_id = MessageA1Base.message_serial;
29
- }
30
- get body() {
31
- let body = Buffer.concat([Buffer.from([this.body_type]), this._body, Buffer.from([this.message_id])]);
32
- body = Buffer.concat([body, Buffer.from([(0, MideaUtils_1.calculate)(body)])]);
33
- return body;
34
- }
35
- }
36
- MessageA1Base.message_serial = 0;
37
- class MessageQuery extends MessageA1Base {
38
- constructor(device_protocol_version) {
39
- super(device_protocol_version, MideaMessage_1.MessageType.QUERY, 0x41);
40
- }
41
- get _body() {
42
- return Buffer.from([0x81, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
43
- }
44
- }
45
- exports.MessageQuery = MessageQuery;
46
- class MessageNewProtocolQuery extends MessageA1Base {
47
- constructor(device_protocol_version, alternate_display = false) {
48
- super(device_protocol_version, MideaMessage_1.MessageType.QUERY, 0xb1);
49
- this.alternate_display = alternate_display;
50
- }
51
- get _body() {
52
- const query_params = [NewProtocolTags.LIGHT];
53
- let body = Buffer.from([query_params.length]);
54
- for (const param of query_params) {
55
- if (param) {
56
- body = Buffer.concat([body, Buffer.from([param & 0xff, param >> 8])]);
57
- }
58
- }
59
- return body;
60
- }
61
- }
62
- exports.MessageNewProtocolQuery = MessageNewProtocolQuery;
63
- class MessageSet extends MessageA1Base {
64
- constructor(device_protocol_version) {
65
- super(device_protocol_version, MideaMessage_1.MessageType.SET, 0x48);
66
- this.power = false;
67
- this.prompt_tone = true;
68
- this.mode = 1;
69
- this.fan_speed = 40;
70
- this.child_lock = false;
71
- this.target_humidity = 40;
72
- this.swing = false;
73
- this.anion = false;
74
- this.water_level_set = 50;
75
- }
76
- get _body() {
77
- // byte1, power, prompt_tone
78
- const power = this.power ? 0x01 : 0x00;
79
- const prompt_tone = this.prompt_tone ? 0x40 : 0x00;
80
- // byte2 mode
81
- const mode = this.mode;
82
- // byte3 fan_speed
83
- const fan_speed = this.fan_speed;
84
- // byte7 target_humidity
85
- const target_humidity = this.target_humidity;
86
- // byte8 child_lock
87
- const child_lock = this.child_lock ? 0x80 : 0x00;
88
- // byte9 anion
89
- const anion = this.anion ? 0x40 : 0x00;
90
- // byte10 swing
91
- const swing = this.swing ? 0x08 : 0x00;
92
- // byte 13 water_level_set
93
- const water_level_set = this.water_level_set;
94
- return Buffer.from([
95
- power | prompt_tone | 0x02,
96
- mode,
97
- fan_speed,
98
- 0x00,
99
- 0x00,
100
- 0x00,
101
- target_humidity,
102
- child_lock,
103
- anion,
104
- swing,
105
- 0x00,
106
- 0x00,
107
- water_level_set,
108
- 0x00,
109
- 0x00,
110
- 0x00,
111
- 0x00,
112
- 0x00,
113
- 0x00,
114
- 0x00,
115
- ]);
116
- }
117
- }
118
- exports.MessageSet = MessageSet;
119
- class MessageNewProtocolSet extends MessageA1Base {
120
- constructor(device_protocol_version) {
121
- super(device_protocol_version, MideaMessage_1.MessageType.SET, 0xb0);
122
- this.light = false;
123
- }
124
- get _body() {
125
- let pack_count = 0;
126
- let payload = Buffer.from([0x00]);
127
- if (this.light !== undefined) {
128
- pack_count += 1;
129
- payload = Buffer.concat([
130
- payload,
131
- // original python code at:
132
- // https://github.com/georgezhao2010/midea_ac_lan/blob/master/custom_components/midea_ac_lan/midea/devices/a1/message.py
133
- // used "NewProtocolTags.INDIRECT_WIND" but that is/was not defined so assumed to be a bug and should be LIGHT
134
- MideaMessage_1.NewProtocolMessageBody.packet(NewProtocolTags.LIGHT, Buffer.from([this.light ? 0x01 : 0x00])),
135
- ]);
136
- }
137
- payload[0] = pack_count;
138
- return payload;
139
- }
140
- }
141
- exports.MessageNewProtocolSet = MessageNewProtocolSet;
142
- class A1GeneralMessageBody extends MideaMessage_1.MessageBody {
143
- constructor(body) {
144
- super(body);
145
- this.power = (body[1] & 0x01) > 0;
146
- this.mode = body[2] & 0x0f;
147
- this.fan_speed = body[3] & 0x7f;
148
- // Target humidity between 35% and 85%
149
- this.target_humidity = body[7] < 35 ? 35 : body[7] > 85 ? 85 : body[7];
150
- this.child_lock = (body[8] & 0x80) > 0;
151
- this.filter_indicator = (body[9] & 0x80) > 0;
152
- this.anion = (body[9] & 0x40) > 0;
153
- this.sleep_mode = (body[9] & 0x20) > 0;
154
- this.pump_switch_flag = (body[9] & 0x10) > 0;
155
- this.pump = (body[9] & 0x08) > 0;
156
- this.defrosting = (body[10] & 0x80) > 0;
157
- this.tank_level = body[10] & 0x7f;
158
- this.tank_full = this.tank_level >= 100;
159
- this.water_level_set = body[15];
160
- this.current_humidity = body[16];
161
- this.current_temperature = (body[17] - 50) / 2;
162
- // vertical swing or horizontal swing
163
- this.swing = (body[19] & 0x20) > 0 || (body[19] & 0x10) > 0;
164
- // Not sure the purpose of thisfan speed check, but it is part of the original python code at
165
- // https://github.com/georgezhao2010/midea_ac_lan/blob/master/custom_components/midea_ac_lan/midea/devices/a1/message.py
166
- if (this.fan_speed < 5) {
167
- this.fan_speed = 1;
168
- }
169
- }
170
- }
171
- class A1NewProtocolMessageBody extends MideaMessage_1.NewProtocolMessageBody {
172
- constructor(body, body_type) {
173
- super(body, body_type);
174
- this.light = false;
175
- const params = this.parse();
176
- if (NewProtocolTags.LIGHT in params) {
177
- this.light = params[NewProtocolTags.LIGHT][0] > 0;
178
- }
179
- }
180
- }
181
- class MessageA1Response extends MideaMessage_1.MessageResponse {
182
- constructor(message) {
183
- super(message);
184
- this.message = message;
185
- if ([MideaMessage_1.MessageType.QUERY, MideaMessage_1.MessageType.SET, MideaMessage_1.MessageType.NOTIFY2].includes(this.message_type)) {
186
- if ([0xb0, 0xb1, 0xb5].includes(this.body_type)) {
187
- this.set_body(new A1NewProtocolMessageBody(this.body, this.body_type));
188
- }
189
- else {
190
- this.set_body(new A1GeneralMessageBody(this.body));
191
- }
192
- }
193
- else if (this.message_type === MideaMessage_1.MessageType.NOTIFY2 && this.body_type === 0xa0) {
194
- this.set_body(new A1GeneralMessageBody(this.body));
195
- }
196
- }
197
- }
198
- exports.MessageA1Response = MessageA1Response;
1
+ /***********************************************************************
2
+ * Midea Dehumidifier Device message handler class
3
+ *
4
+ * Copyright (c) 2023 David Kerr, https://github.com/dkerr64
5
+ *
6
+ * With thanks to https://github.com/kovapatrik/homebridge-midea-platform
7
+ * And https://github.com/georgezhao2010/midea_ac_lan
8
+ *
9
+ */
10
+ import { DeviceType } from '../../core/MideaConstants.js';
11
+ import { MessageBody, MessageRequest, MessageResponse, MessageType, NewProtocolMessageBody } from '../../core/MideaMessage.js';
12
+ import { calculate } from '../../core/MideaUtils.js';
13
+ var NewProtocolTags;
14
+ (function (NewProtocolTags) {
15
+ NewProtocolTags[NewProtocolTags["LIGHT"] = 91] = "LIGHT";
16
+ })(NewProtocolTags || (NewProtocolTags = {}));
17
+ class MessageA1Base extends MessageRequest {
18
+ static message_serial = 0;
19
+ message_id;
20
+ constructor(device_protocol_version, message_type, body_type) {
21
+ super(DeviceType.DEHUMIDIFIER, message_type, body_type, device_protocol_version);
22
+ MessageA1Base.message_serial += 1;
23
+ // I don't know why dehumidifier wraps at 100, air conditioner wraps at 254
24
+ if (MessageA1Base.message_serial >= 100) {
25
+ MessageA1Base.message_serial = 1;
26
+ }
27
+ this.message_id = MessageA1Base.message_serial;
28
+ }
29
+ get body() {
30
+ let body = Buffer.concat([Buffer.from([this.body_type]), this._body, Buffer.from([this.message_id])]);
31
+ body = Buffer.concat([body, Buffer.from([calculate(body)])]);
32
+ return body;
33
+ }
34
+ }
35
+ export class MessageQuery extends MessageA1Base {
36
+ constructor(device_protocol_version) {
37
+ super(device_protocol_version, MessageType.QUERY, 0x41);
38
+ }
39
+ get _body() {
40
+ return Buffer.from([0x81, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
41
+ }
42
+ }
43
+ export class MessageNewProtocolQuery extends MessageA1Base {
44
+ alternate_display;
45
+ constructor(device_protocol_version, alternate_display = false) {
46
+ super(device_protocol_version, MessageType.QUERY, 0xb1);
47
+ this.alternate_display = alternate_display;
48
+ }
49
+ get _body() {
50
+ const query_params = [NewProtocolTags.LIGHT];
51
+ let body = Buffer.from([query_params.length]);
52
+ for (const param of query_params) {
53
+ if (param) {
54
+ body = Buffer.concat([body, Buffer.from([param & 0xff, param >> 8])]);
55
+ }
56
+ }
57
+ return body;
58
+ }
59
+ }
60
+ export class MessageSet extends MessageA1Base {
61
+ power;
62
+ prompt_tone;
63
+ mode;
64
+ fan_speed;
65
+ child_lock;
66
+ target_humidity;
67
+ swing;
68
+ anion;
69
+ water_level_set;
70
+ constructor(device_protocol_version) {
71
+ super(device_protocol_version, MessageType.SET, 0x48);
72
+ this.power = false;
73
+ this.prompt_tone = true;
74
+ this.mode = 1;
75
+ this.fan_speed = 40;
76
+ this.child_lock = false;
77
+ this.target_humidity = 40;
78
+ this.swing = false;
79
+ this.anion = false;
80
+ this.water_level_set = 50;
81
+ }
82
+ get _body() {
83
+ // byte1, power, prompt_tone
84
+ const power = this.power ? 0x01 : 0x00;
85
+ const prompt_tone = this.prompt_tone ? 0x40 : 0x00;
86
+ // byte2 mode
87
+ const mode = this.mode;
88
+ // byte3 fan_speed
89
+ const fan_speed = this.fan_speed;
90
+ // byte7 target_humidity
91
+ const target_humidity = this.target_humidity;
92
+ // byte8 child_lock
93
+ const child_lock = this.child_lock ? 0x80 : 0x00;
94
+ // byte9 anion
95
+ const anion = this.anion ? 0x40 : 0x00;
96
+ // byte10 swing
97
+ const swing = this.swing ? 0x08 : 0x00;
98
+ // byte 13 water_level_set
99
+ const water_level_set = this.water_level_set;
100
+ return Buffer.from([
101
+ power | prompt_tone | 0x02,
102
+ mode,
103
+ fan_speed,
104
+ 0x00,
105
+ 0x00,
106
+ 0x00,
107
+ target_humidity,
108
+ child_lock,
109
+ anion,
110
+ swing,
111
+ 0x00,
112
+ 0x00,
113
+ water_level_set,
114
+ 0x00,
115
+ 0x00,
116
+ 0x00,
117
+ 0x00,
118
+ 0x00,
119
+ 0x00,
120
+ 0x00,
121
+ ]);
122
+ }
123
+ }
124
+ export class MessageNewProtocolSet extends MessageA1Base {
125
+ light = false;
126
+ constructor(device_protocol_version) {
127
+ super(device_protocol_version, MessageType.SET, 0xb0);
128
+ }
129
+ get _body() {
130
+ let pack_count = 0;
131
+ let payload = Buffer.from([0x00]);
132
+ if (this.light !== undefined) {
133
+ pack_count += 1;
134
+ payload = Buffer.concat([
135
+ payload,
136
+ // original python code at:
137
+ // https://github.com/georgezhao2010/midea_ac_lan/blob/master/custom_components/midea_ac_lan/midea/devices/a1/message.py
138
+ // used "NewProtocolTags.INDIRECT_WIND" but that is/was not defined so assumed to be a bug and should be LIGHT
139
+ NewProtocolMessageBody.packet(NewProtocolTags.LIGHT, Buffer.from([this.light ? 0x01 : 0x00])),
140
+ ]);
141
+ }
142
+ payload[0] = pack_count;
143
+ return payload;
144
+ }
145
+ }
146
+ class A1GeneralMessageBody extends MessageBody {
147
+ power;
148
+ mode;
149
+ fan_speed;
150
+ target_humidity;
151
+ child_lock;
152
+ filter_indicator;
153
+ anion;
154
+ sleep_mode;
155
+ pump_switch_flag;
156
+ pump;
157
+ defrosting;
158
+ tank_level;
159
+ tank_full;
160
+ water_level_set;
161
+ current_humidity;
162
+ current_temperature;
163
+ swing;
164
+ constructor(body) {
165
+ super(body);
166
+ this.power = (body[1] & 0x01) > 0;
167
+ this.mode = body[2] & 0x0f;
168
+ this.fan_speed = body[3] & 0x7f;
169
+ // Target humidity between 35% and 85%
170
+ this.target_humidity = body[7] < 35 ? 35 : body[7] > 85 ? 85 : body[7];
171
+ this.child_lock = (body[8] & 0x80) > 0;
172
+ this.filter_indicator = (body[9] & 0x80) > 0;
173
+ this.anion = (body[9] & 0x40) > 0;
174
+ this.sleep_mode = (body[9] & 0x20) > 0;
175
+ this.pump_switch_flag = (body[9] & 0x10) > 0;
176
+ this.pump = (body[9] & 0x08) > 0;
177
+ this.defrosting = (body[10] & 0x80) > 0;
178
+ this.tank_level = body[10] & 0x7f;
179
+ this.tank_full = this.tank_level >= 100;
180
+ this.water_level_set = body[15];
181
+ this.current_humidity = body[16];
182
+ this.current_temperature = (body[17] - 50) / 2;
183
+ // vertical swing or horizontal swing
184
+ this.swing = (body[19] & 0x20) > 0 || (body[19] & 0x10) > 0;
185
+ // Not sure the purpose of thisfan speed check, but it is part of the original python code at
186
+ // https://github.com/georgezhao2010/midea_ac_lan/blob/master/custom_components/midea_ac_lan/midea/devices/a1/message.py
187
+ if (this.fan_speed < 5) {
188
+ this.fan_speed = 1;
189
+ }
190
+ }
191
+ }
192
+ class A1NewProtocolMessageBody extends NewProtocolMessageBody {
193
+ light = false;
194
+ constructor(body, body_type) {
195
+ super(body, body_type);
196
+ const params = this.parse();
197
+ if (NewProtocolTags.LIGHT in params) {
198
+ this.light = params[NewProtocolTags.LIGHT][0] > 0;
199
+ }
200
+ }
201
+ }
202
+ export class MessageA1Response extends MessageResponse {
203
+ message;
204
+ constructor(message) {
205
+ super(message);
206
+ this.message = message;
207
+ if ([MessageType.QUERY, MessageType.SET, MessageType.NOTIFY2].includes(this.message_type)) {
208
+ if ([0xb0, 0xb1, 0xb5].includes(this.body_type)) {
209
+ this.set_body(new A1NewProtocolMessageBody(this.body, this.body_type));
210
+ }
211
+ else {
212
+ this.set_body(new A1GeneralMessageBody(this.body));
213
+ }
214
+ }
215
+ else if (this.message_type === MessageType.NOTIFY2 && this.body_type === 0xa0) {
216
+ this.set_body(new A1GeneralMessageBody(this.body));
217
+ }
218
+ }
219
+ }
199
220
  //# sourceMappingURL=MideaA1Message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MideaA1Message.js","sourceRoot":"","sources":["../../../src/devices/a1/MideaA1Message.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MideaA1Message.js","sourceRoot":"","sources":["../../../src/devices/a1/MideaA1Message.ts"],"names":[],"mappings":"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"}