homebridge-midea-platform 1.2.0-beta.8 → 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 (167) hide show
  1. package/CHANGELOG.md +5 -2
  2. package/README.md +2 -2
  3. package/dist/accessory/AccessoryFactory.d.ts +14 -15
  4. package/dist/accessory/AccessoryFactory.js +34 -40
  5. package/dist/accessory/AccessoryFactory.js.map +1 -1
  6. package/dist/accessory/AirConditionerAccessory.d.ts +98 -99
  7. package/dist/accessory/AirConditionerAccessory.js +666 -662
  8. package/dist/accessory/AirConditionerAccessory.js.map +1 -1
  9. package/dist/accessory/BaseAccessory.d.ts +11 -12
  10. package/dist/accessory/BaseAccessory.js +21 -21
  11. package/dist/accessory/BaseAccessory.js.map +1 -1
  12. package/dist/accessory/DehumidifierAccessory.d.ts +45 -46
  13. package/dist/accessory/DehumidifierAccessory.js +343 -344
  14. package/dist/accessory/DehumidifierAccessory.js.map +1 -1
  15. package/dist/accessory/DishwasherAccessory.d.ts +30 -31
  16. package/dist/accessory/DishwasherAccessory.js +59 -63
  17. package/dist/accessory/DishwasherAccessory.js.map +1 -1
  18. package/dist/accessory/ElectricWaterHeaterAccessory.d.ts +44 -45
  19. package/dist/accessory/ElectricWaterHeaterAccessory.js +172 -176
  20. package/dist/accessory/ElectricWaterHeaterAccessory.js.map +1 -1
  21. package/dist/accessory/FanAccessory.d.ts +39 -40
  22. package/dist/accessory/FanAccessory.js +120 -123
  23. package/dist/accessory/FanAccessory.js.map +1 -1
  24. package/dist/accessory/FrontLoadWasherAccessory.d.ts +30 -31
  25. package/dist/accessory/FrontLoadWasherAccessory.js +63 -66
  26. package/dist/accessory/FrontLoadWasherAccessory.js.map +1 -1
  27. package/dist/accessory/GasWaterHeaterAccessory.d.ts +51 -52
  28. package/dist/accessory/GasWaterHeaterAccessory.js +217 -216
  29. package/dist/accessory/GasWaterHeaterAccessory.js.map +1 -1
  30. package/dist/accessory/{HeatPumpWifiControllerAccessory.d.ts → HeatPumpWiFiControllerAccessory.d.ts} +34 -35
  31. package/dist/accessory/{HeatPumpWifiControllerAccessory.js → HeatPumpWiFiControllerAccessory.js} +55 -36
  32. package/dist/accessory/HeatPumpWiFiControllerAccessory.js.map +1 -0
  33. package/dist/core/MideaCloud.d.ts +34 -36
  34. package/dist/core/MideaCloud.js +349 -350
  35. package/dist/core/MideaCloud.js.map +1 -1
  36. package/dist/core/MideaConstants.d.ts +51 -52
  37. package/dist/core/MideaConstants.js +56 -59
  38. package/dist/core/MideaConstants.js.map +1 -1
  39. package/dist/core/MideaDevice.d.ts +75 -78
  40. package/dist/core/MideaDevice.js +430 -420
  41. package/dist/core/MideaDevice.js.map +1 -1
  42. package/dist/core/MideaDiscover.d.ts +34 -36
  43. package/dist/core/MideaDiscover.js +208 -212
  44. package/dist/core/MideaDiscover.js.map +1 -1
  45. package/dist/core/MideaMessage.d.ts +75 -76
  46. package/dist/core/MideaMessage.js +185 -184
  47. package/dist/core/MideaMessage.js.map +1 -1
  48. package/dist/core/MideaPacketBuilder.d.ts +9 -11
  49. package/dist/core/MideaPacketBuilder.js +60 -60
  50. package/dist/core/MideaPacketBuilder.js.map +1 -1
  51. package/dist/core/MideaSecurity.d.ts +62 -64
  52. package/dist/core/MideaSecurity.js +241 -251
  53. package/dist/core/MideaSecurity.js.map +1 -1
  54. package/dist/core/MideaUtils.d.ts +31 -33
  55. package/dist/core/MideaUtils.js +178 -181
  56. package/dist/core/MideaUtils.js.map +1 -1
  57. package/dist/devices/DeviceFactory.d.ts +14 -15
  58. package/dist/devices/DeviceFactory.js +34 -40
  59. package/dist/devices/DeviceFactory.js.map +1 -1
  60. package/dist/devices/a1/MideaA1Device.d.ts +75 -77
  61. package/dist/devices/a1/MideaA1Device.js +142 -145
  62. package/dist/devices/a1/MideaA1Device.js.map +1 -1
  63. package/dist/devices/a1/MideaA1Message.d.ts +39 -41
  64. package/dist/devices/a1/MideaA1Message.js +219 -198
  65. package/dist/devices/a1/MideaA1Message.js.map +1 -1
  66. package/dist/devices/ac/MideaACDevice.d.ts +105 -107
  67. package/dist/devices/ac/MideaACDevice.js +417 -400
  68. package/dist/devices/ac/MideaACDevice.js.map +1 -1
  69. package/dist/devices/ac/MideaACMessage.d.ts +97 -96
  70. package/dist/devices/ac/MideaACMessage.js +724 -621
  71. package/dist/devices/ac/MideaACMessage.js.map +1 -1
  72. package/dist/devices/c3/MideaC3Device.d.ts +73 -75
  73. package/dist/devices/c3/MideaC3Device.js +249 -255
  74. package/dist/devices/c3/MideaC3Device.js.map +1 -1
  75. package/dist/devices/c3/MideaC3Message.d.ts +81 -80
  76. package/dist/devices/c3/MideaC3Message.js +190 -152
  77. package/dist/devices/c3/MideaC3Message.js.map +1 -1
  78. package/dist/devices/db/MideaDBDevice.d.ts +28 -30
  79. package/dist/devices/db/MideaDBDevice.js +94 -100
  80. package/dist/devices/db/MideaDBDevice.js.map +1 -1
  81. package/dist/devices/db/MideaDBMessage.d.ts +31 -33
  82. package/dist/devices/db/MideaDBMessage.js +101 -101
  83. package/dist/devices/db/MideaDBMessage.js.map +1 -1
  84. package/dist/devices/e1/MideaE1Device.d.ts +55 -57
  85. package/dist/devices/e1/MideaE1Device.js +122 -128
  86. package/dist/devices/e1/MideaE1Device.js.map +1 -1
  87. package/dist/devices/e1/MideaE1Message.d.ts +27 -29
  88. package/dist/devices/e1/MideaE1Message.js +128 -107
  89. package/dist/devices/e1/MideaE1Message.js.map +1 -1
  90. package/dist/devices/e2/MideaE2Device.d.ts +43 -45
  91. package/dist/devices/e2/MideaE2Device.js +124 -129
  92. package/dist/devices/e2/MideaE2Device.js.map +1 -1
  93. package/dist/devices/e2/MideaE2Message.d.ts +34 -34
  94. package/dist/devices/e2/MideaE2Message.js +143 -132
  95. package/dist/devices/e2/MideaE2Message.js.map +1 -1
  96. package/dist/devices/e3/MideaE3Device.d.ts +42 -44
  97. package/dist/devices/e3/MideaE3Device.js +132 -137
  98. package/dist/devices/e3/MideaE3Device.js.map +1 -1
  99. package/dist/devices/e3/MideaE3Message.d.ts +51 -52
  100. package/dist/devices/e3/MideaE3Message.js +144 -136
  101. package/dist/devices/e3/MideaE3Message.js.map +1 -1
  102. package/dist/devices/fa/MideaFADevice.d.ts +35 -37
  103. package/dist/devices/fa/MideaFADevice.js +102 -106
  104. package/dist/devices/fa/MideaFADevice.js.map +1 -1
  105. package/dist/devices/fa/MideaFAMessage.d.ts +38 -39
  106. package/dist/devices/fa/MideaFAMessage.js +108 -98
  107. package/dist/devices/fa/MideaFAMessage.js.map +1 -1
  108. package/dist/index.d.ts +6 -7
  109. package/dist/index.js +8 -6
  110. package/dist/index.js.map +1 -1
  111. package/dist/platform.d.ts +61 -61
  112. package/dist/platform.js +232 -212
  113. package/dist/platform.js.map +1 -1
  114. package/dist/platformUtils.d.ts +116 -117
  115. package/dist/platformUtils.js +107 -110
  116. package/dist/platformUtils.js.map +1 -1
  117. package/dist/settings.d.ts +8 -9
  118. package/dist/settings.js +8 -11
  119. package/dist/settings.js.map +1 -1
  120. package/docs/download_lua.md +9 -0
  121. package/eslint.config.js +43 -0
  122. package/homebridge-ui/public/js/bootstrap.min.js +1179 -1
  123. package/homebridge-ui/{server.js → server.cjs} +30 -30
  124. package/package.json +21 -31
  125. package/.eslintignore +0 -3
  126. package/.husky/pre-commit +0 -5
  127. package/.prettierrc +0 -19
  128. package/dist/accessory/AccessoryFactory.d.ts.map +0 -1
  129. package/dist/accessory/AirConditionerAccessory.d.ts.map +0 -1
  130. package/dist/accessory/BaseAccessory.d.ts.map +0 -1
  131. package/dist/accessory/DehumidifierAccessory.d.ts.map +0 -1
  132. package/dist/accessory/DishwasherAccessory.d.ts.map +0 -1
  133. package/dist/accessory/ElectricWaterHeaterAccessory.d.ts.map +0 -1
  134. package/dist/accessory/FanAccessory.d.ts.map +0 -1
  135. package/dist/accessory/FrontLoadWasherAccessory.d.ts.map +0 -1
  136. package/dist/accessory/GasWaterHeaterAccessory.d.ts.map +0 -1
  137. package/dist/accessory/HeatPumpWifiControllerAccessory.d.ts.map +0 -1
  138. package/dist/accessory/HeatPumpWifiControllerAccessory.js.map +0 -1
  139. package/dist/core/MideaCloud.d.ts.map +0 -1
  140. package/dist/core/MideaConstants.d.ts.map +0 -1
  141. package/dist/core/MideaDevice.d.ts.map +0 -1
  142. package/dist/core/MideaDiscover.d.ts.map +0 -1
  143. package/dist/core/MideaMessage.d.ts.map +0 -1
  144. package/dist/core/MideaPacketBuilder.d.ts.map +0 -1
  145. package/dist/core/MideaSecurity.d.ts.map +0 -1
  146. package/dist/core/MideaUtils.d.ts.map +0 -1
  147. package/dist/devices/DeviceFactory.d.ts.map +0 -1
  148. package/dist/devices/a1/MideaA1Device.d.ts.map +0 -1
  149. package/dist/devices/a1/MideaA1Message.d.ts.map +0 -1
  150. package/dist/devices/ac/MideaACDevice.d.ts.map +0 -1
  151. package/dist/devices/ac/MideaACMessage.d.ts.map +0 -1
  152. package/dist/devices/c3/MideaC3Device.d.ts.map +0 -1
  153. package/dist/devices/c3/MideaC3Message.d.ts.map +0 -1
  154. package/dist/devices/db/MideaDBDevice.d.ts.map +0 -1
  155. package/dist/devices/db/MideaDBMessage.d.ts.map +0 -1
  156. package/dist/devices/e1/MideaE1Device.d.ts.map +0 -1
  157. package/dist/devices/e1/MideaE1Message.d.ts.map +0 -1
  158. package/dist/devices/e2/MideaE2Device.d.ts.map +0 -1
  159. package/dist/devices/e2/MideaE2Message.d.ts.map +0 -1
  160. package/dist/devices/e3/MideaE3Device.d.ts.map +0 -1
  161. package/dist/devices/e3/MideaE3Message.d.ts.map +0 -1
  162. package/dist/devices/fa/MideaFADevice.d.ts.map +0 -1
  163. package/dist/devices/fa/MideaFAMessage.d.ts.map +0 -1
  164. package/dist/index.d.ts.map +0 -1
  165. package/dist/platform.d.ts.map +0 -1
  166. package/dist/platformUtils.d.ts.map +0 -1
  167. package/dist/settings.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MideaDevice.js","sourceRoot":"","sources":["../../src/core/MideaDevice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MideaDevice.js","sourceRoot":"","sources":["../../src/core/MideaDevice.ts"],"names":[],"mappings":"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"}
@@ -1,36 +1,34 @@
1
- /// <reference types="node" />
2
- import { Logger } from 'homebridge';
3
- import EventEmitter from 'events';
4
- export default class Discover extends EventEmitter {
5
- private readonly logger;
6
- private socket;
7
- private readonly xml_parser;
8
- private security;
9
- private ips;
10
- constructor(logger: Logger);
11
- /*********************************************************************
12
- * discoverDeviceByIP
13
- * Sends discover message to a single IP address. Will resend the message
14
- * an additional "retries" times spaced by 3 seconds if the target IP
15
- * address has not responded (recorded in the above callback).
16
- */
17
- discoverDeviceByIP(ip: string, retries?: number, timeout?: number): void;
18
- /*********************************************************************
19
- * ifBroadcastAddrs
20
- * Broadcasts to 255.255.255.255 only gets sent out on the first network inteface.
21
- * This function finds all network interfaces and returns the broadcast address
22
- * for each in an array, e.g. ['192.168.1.255', '192.168.100.255']. If there are
23
- * multiple interfaces this will cause broadcast to be sent out on each interface
24
- * so all appliances are properly discovered.
25
- */
26
- private ifBroadcastAddrs;
27
- /*********************************************************************
28
- * startDiscover
29
- * Sends broadcast to network discover Midea devices. Will continue sending
30
- * up to an additional "retries" times each spaced by 3 seconds.
31
- */
32
- startDiscover(retries?: number, timeout?: number): void;
33
- private getDeviceVersion;
34
- private getDeviceInfo;
35
- }
36
- //# sourceMappingURL=MideaDiscover.d.ts.map
1
+ import { Logger } from 'homebridge';
2
+ import EventEmitter from 'events';
3
+ export default class Discover extends EventEmitter {
4
+ private readonly logger;
5
+ private socket;
6
+ private readonly xml_parser;
7
+ private security;
8
+ private ips;
9
+ constructor(logger: Logger);
10
+ /*********************************************************************
11
+ * discoverDeviceByIP
12
+ * Sends discover message to a single IP address. Will resend the message
13
+ * an additional "retries" times spaced by 3 seconds if the target IP
14
+ * address has not responded (recorded in the above callback).
15
+ */
16
+ discoverDeviceByIP(ip: string, retries?: number, timeout?: number): void;
17
+ /*********************************************************************
18
+ * ifBroadcastAddrs
19
+ * Broadcasts to 255.255.255.255 only gets sent out on the first network inteface.
20
+ * This function finds all network interfaces and returns the broadcast address
21
+ * for each in an array, e.g. ['192.168.1.255', '192.168.100.255']. If there are
22
+ * multiple interfaces this will cause broadcast to be sent out on each interface
23
+ * so all appliances are properly discovered.
24
+ */
25
+ private ifBroadcastAddrs;
26
+ /*********************************************************************
27
+ * startDiscover
28
+ * Sends broadcast to network discover Midea devices. Will continue sending
29
+ * up to an additional "retries" times each spaced by 3 seconds.
30
+ */
31
+ startDiscover(retries?: number, timeout?: number): void;
32
+ private getDeviceVersion;
33
+ private getDeviceInfo;
34
+ }
@@ -1,213 +1,209 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- /***********************************************************************
7
- * Midea device discovery class where we broadcast to network to find
8
- * connected devices.
9
- *
10
- * Copyright (c) 2023 Kovalovszky Patrik, https://github.com/kovapatrik
11
- * Portions Copyright (c) 2023 David Kerr, https://github.com/dkerr64
12
- *
13
- * With thanks to https://github.com/georgezhao2010/midea_ac_lan
14
- *
15
- */
16
- const dgram_1 = __importDefault(require("dgram"));
17
- const MideaConstants_1 = require("./MideaConstants");
18
- const fast_xml_parser_1 = require("fast-xml-parser");
19
- const events_1 = __importDefault(require("events"));
20
- const MideaSecurity_1 = require("./MideaSecurity");
21
- // To access network interface detail...
22
- const os_1 = __importDefault(require("os"));
23
- class Discover extends events_1.default {
24
- constructor(logger) {
25
- super();
26
- this.logger = logger;
27
- this.ips = [];
28
- this.security = new MideaSecurity_1.LocalSecurity();
29
- this.xml_parser = new fast_xml_parser_1.XMLParser();
30
- this.socket = dgram_1.default.createSocket('udp4');
31
- this.socket.bind(0, undefined, () => {
32
- this.socket.setBroadcast(true);
33
- });
34
- this.socket.on('error', (err) => {
35
- this.logger.debug(`server error:\n${err.stack}`);
36
- });
37
- // Register callback function executed when message received on the socket as
38
- // result of sending broadcast messages out to network / IP address.
39
- this.socket.on('message', async (msg, rinfo) => {
40
- if (!this.ips.includes(rinfo.address)) {
41
- // Only add device if it has not already been added.
42
- this.ips.push(rinfo.address);
43
- const device_version = this.getDeviceVersion(msg);
44
- const device_info = await this.getDeviceInfo(rinfo.address, device_version, msg);
45
- this.logger.info(`Discovered device: ${JSON.stringify(device_info)}`);
46
- // Send signal to Homebridge platform with details on the discovered device
47
- this.emit('device', device_info);
48
- }
49
- });
50
- }
51
- /*********************************************************************
52
- * discoverDeviceByIP
53
- * Sends discover message to a single IP address. Will resend the message
54
- * an additional "retries" times spaced by 3 seconds if the target IP
55
- * address has not responded (recorded in the above callback).
56
- */
57
- discoverDeviceByIP(ip, retries = 3, timeout = 2000) {
58
- let tries = 0;
59
- function broadcast() {
60
- if (this.ips.includes(ip) || tries++ > retries) {
61
- return;
62
- }
63
- this.logger.debug(`Sending discovery message to ${ip}, try ${tries}...`);
64
- for (const port of [6445, 20086]) {
65
- this.socket.send(Buffer.from(MideaConstants_1.DISCOVERY_MESSAGE), port, ip, (err) => {
66
- if (err) {
67
- this.logger.error(`Error while sending message to ${ip}: ${err}`);
68
- }
69
- });
70
- }
71
- setTimeout(broadcast.bind(this), timeout);
72
- }
73
- broadcast.bind(this)();
74
- }
75
- /*********************************************************************
76
- * ifBroadcastAddrs
77
- * Broadcasts to 255.255.255.255 only gets sent out on the first network inteface.
78
- * This function finds all network interfaces and returns the broadcast address
79
- * for each in an array, e.g. ['192.168.1.255', '192.168.100.255']. If there are
80
- * multiple interfaces this will cause broadcast to be sent out on each interface
81
- * so all appliances are properly discovered.
82
- */
83
- ifBroadcastAddrs() {
84
- const list = [];
85
- try {
86
- const ifaces = os_1.default.networkInterfaces();
87
- for (const iface of Object.values(ifaces)) {
88
- if (iface) {
89
- for (const f of iface) {
90
- if (!f.internal && f.family === 'IPv4') {
91
- // With thanks to https://github.com/aal89/broadcast-address/blob/master/broadcast-address.js
92
- const addr_splitted = f.address.split('.');
93
- const netmask_splitted = f.netmask.split('.');
94
- // Bitwise OR over the splitted NAND netmask, then glue them back together with a dot character to form an ip
95
- // we have to do a NAND operation because of the 2-complements; getting rid of all the 'prepended' 1's with & 0xFF
96
- const broadcast = addr_splitted.map((e, i) => (~netmask_splitted[i] & 0xff) | Number.parseInt(e)).join('.');
97
- list.push(broadcast);
98
- }
99
- }
100
- }
101
- }
102
- }
103
- catch (e) {
104
- const msg = e instanceof Error ? e.stack : e;
105
- this.logger.error(`Fatal error during plugin initialization:\n${msg}`);
106
- }
107
- // this.logger.info(`Broadcast addresses: ${JSON.stringify(list)}`);
108
- return list;
109
- }
110
- /*********************************************************************
111
- * startDiscover
112
- * Sends broadcast to network discover Midea devices. Will continue sending
113
- * up to an additional "retries" times each spaced by 3 seconds.
114
- */
115
- startDiscover(retries = 3, timeout = 2000) {
116
- let tries = 0;
117
- // force timeout to be between 500ms and 5 seconds
118
- timeout = Math.max(500, Math.min(timeout, 5000));
119
- const broadcastAddrs = this.ifBroadcastAddrs();
120
- function broadcast() {
121
- if (tries++ > retries) {
122
- this.logger.debug(`Device discovery complete after ${retries + 1} network broadcasts.`);
123
- this.emit('complete');
124
- return;
125
- }
126
- else {
127
- this.emit('retry', tries, this.ips.length);
128
- }
129
- for (const ip of broadcastAddrs) {
130
- this.logger.debug(`Sending discovery message to ${ip}, try ${tries}...`);
131
- for (const port of [6445, 20086]) {
132
- this.socket.send(Buffer.from(MideaConstants_1.DISCOVERY_MESSAGE), port, ip, (err) => {
133
- if (err) {
134
- const msg = err instanceof Error ? err.stack : err;
135
- this.logger.error(`Error while sending message to ${ip}:${port}:\n${msg}`);
136
- }
137
- });
138
- }
139
- }
140
- setTimeout(broadcast.bind(this), timeout);
141
- }
142
- broadcast.bind(this)();
143
- }
144
- getDeviceVersion(data) {
145
- try {
146
- this.xml_parser.parse(data.toString(), true);
147
- return MideaConstants_1.ProtocolVersion.V1;
148
- }
149
- catch (_a) {
150
- const start_of_packet = data.subarray(0, 2);
151
- if (start_of_packet.compare(Buffer.from([0x5a, 0x5a])) === 0) {
152
- return MideaConstants_1.ProtocolVersion.V2;
153
- }
154
- else if (start_of_packet.compare(Buffer.from([0x83, 0x70])) === 0) {
155
- return MideaConstants_1.ProtocolVersion.V3;
156
- }
157
- }
158
- throw new Error('Unknown device version.');
159
- }
160
- async getDeviceInfo(ip, version, data) {
161
- if (version === MideaConstants_1.ProtocolVersion.V1) {
162
- // const root = this.xml_parser.parse(data.toString());
163
- // const device = root["body"]["device"]
164
- // if (device) {
165
- // const port = device["port"];
166
- // }
167
- // throw new Error("Could not find 'body/device' in XML.");
168
- throw new Error('Version 1 not implemented.');
169
- }
170
- else {
171
- let buffer = data;
172
- // Strip V3 header and hash
173
- if (version === MideaConstants_1.ProtocolVersion.V3) {
174
- buffer = buffer.subarray(8, -16);
175
- }
176
- const encrypted_data = buffer.subarray(40, -16);
177
- const device_id = buffer.readUIntLE(20, 6);
178
- let decrypted_buffer;
179
- try {
180
- decrypted_buffer = this.security.aes_decrypt(encrypted_data);
181
- }
182
- catch (err) {
183
- throw new Error(`Error while decrypting data: ${err}`);
184
- }
185
- // prettier-ignore
186
- // eslint-disable-next-line max-len
187
- const ip_address = `${decrypted_buffer.readUint8(3)}.${decrypted_buffer.readUint8(2)}.${decrypted_buffer.readUint8(1)}.${decrypted_buffer.readUint8(0)}`;
188
- const port = decrypted_buffer.readUIntLE(4, 2);
189
- if (ip_address !== ip) {
190
- this.logger.warn(`IP address mismatch: ${ip_address} != ${ip}`);
191
- }
192
- const model = decrypted_buffer.subarray(17, 25).toString();
193
- // Serial number
194
- const sn = decrypted_buffer.subarray(8, 40).toString();
195
- // Extract name/SSID
196
- const name_length = decrypted_buffer.readUIntLE(40, 1);
197
- const name = decrypted_buffer.subarray(41, 41 + name_length).toString();
198
- const device_type = Number(`0x${name.split('_')[1]}`);
199
- return {
200
- ip: ip,
201
- port: port,
202
- id: device_id,
203
- model: model,
204
- sn: sn,
205
- name: name,
206
- type: device_type,
207
- version: version,
208
- };
209
- }
210
- }
211
- }
212
- exports.default = Discover;
1
+ /***********************************************************************
2
+ * Midea device discovery class where we broadcast to network to find
3
+ * connected devices.
4
+ *
5
+ * Copyright (c) 2023 Kovalovszky Patrik, https://github.com/kovapatrik
6
+ * Portions Copyright (c) 2023 David Kerr, https://github.com/dkerr64
7
+ *
8
+ * With thanks to https://github.com/georgezhao2010/midea_ac_lan
9
+ *
10
+ */
11
+ import dgram from 'dgram';
12
+ import { DISCOVERY_MESSAGE, ProtocolVersion } from './MideaConstants.js';
13
+ import { XMLParser } from 'fast-xml-parser';
14
+ import EventEmitter from 'events';
15
+ import { LocalSecurity } from './MideaSecurity.js';
16
+ // To access network interface detail...
17
+ import os from 'os';
18
+ export default class Discover extends EventEmitter {
19
+ logger;
20
+ socket;
21
+ xml_parser;
22
+ security;
23
+ ips = [];
24
+ constructor(logger) {
25
+ super();
26
+ this.logger = logger;
27
+ this.security = new LocalSecurity();
28
+ this.xml_parser = new XMLParser();
29
+ this.socket = dgram.createSocket('udp4');
30
+ this.socket.bind(0, undefined, () => {
31
+ this.socket.setBroadcast(true);
32
+ });
33
+ this.socket.on('error', (err) => {
34
+ this.logger.debug(`server error:\n${err.stack}`);
35
+ });
36
+ // Register callback function executed when message received on the socket as
37
+ // result of sending broadcast messages out to network / IP address.
38
+ this.socket.on('message', async (msg, rinfo) => {
39
+ if (!this.ips.includes(rinfo.address)) {
40
+ // Only add device if it has not already been added.
41
+ this.ips.push(rinfo.address);
42
+ const device_version = this.getDeviceVersion(msg);
43
+ const device_info = await this.getDeviceInfo(rinfo.address, device_version, msg);
44
+ this.logger.info(`Discovered device: ${JSON.stringify(device_info)}`);
45
+ // Send signal to Homebridge platform with details on the discovered device
46
+ this.emit('device', device_info);
47
+ }
48
+ });
49
+ }
50
+ /*********************************************************************
51
+ * discoverDeviceByIP
52
+ * Sends discover message to a single IP address. Will resend the message
53
+ * an additional "retries" times spaced by 3 seconds if the target IP
54
+ * address has not responded (recorded in the above callback).
55
+ */
56
+ discoverDeviceByIP(ip, retries = 3, timeout = 2000) {
57
+ let tries = 0;
58
+ function broadcast() {
59
+ if (this.ips.includes(ip) || tries++ > retries) {
60
+ return;
61
+ }
62
+ this.logger.debug(`Sending discovery message to ${ip}, try ${tries}...`);
63
+ for (const port of [6445, 20086]) {
64
+ this.socket.send(Buffer.from(DISCOVERY_MESSAGE), port, ip, (err) => {
65
+ if (err) {
66
+ this.logger.error(`Error while sending message to ${ip}: ${err}`);
67
+ }
68
+ });
69
+ }
70
+ setTimeout(broadcast.bind(this), timeout);
71
+ }
72
+ broadcast.bind(this)();
73
+ }
74
+ /*********************************************************************
75
+ * ifBroadcastAddrs
76
+ * Broadcasts to 255.255.255.255 only gets sent out on the first network inteface.
77
+ * This function finds all network interfaces and returns the broadcast address
78
+ * for each in an array, e.g. ['192.168.1.255', '192.168.100.255']. If there are
79
+ * multiple interfaces this will cause broadcast to be sent out on each interface
80
+ * so all appliances are properly discovered.
81
+ */
82
+ ifBroadcastAddrs() {
83
+ const list = [];
84
+ try {
85
+ const ifaces = os.networkInterfaces();
86
+ for (const iface of Object.values(ifaces)) {
87
+ if (iface) {
88
+ for (const f of iface) {
89
+ if (!f.internal && f.family === 'IPv4') {
90
+ // With thanks to https://github.com/aal89/broadcast-address/blob/master/broadcast-address.js
91
+ const addr_splitted = f.address.split('.');
92
+ const netmask_splitted = f.netmask.split('.');
93
+ // Bitwise OR over the splitted NAND netmask, then glue them back together with a dot character to form an ip
94
+ // we have to do a NAND operation because of the 2-complements; getting rid of all the 'prepended' 1's with & 0xFF
95
+ const broadcast = addr_splitted.map((e, i) => (~netmask_splitted[i] & 0xff) | Number.parseInt(e)).join('.');
96
+ list.push(broadcast);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ catch (e) {
103
+ const msg = e instanceof Error ? e.stack : e;
104
+ this.logger.error(`Fatal error during plugin initialization:\n${msg}`);
105
+ }
106
+ // this.logger.info(`Broadcast addresses: ${JSON.stringify(list)}`);
107
+ return list;
108
+ }
109
+ /*********************************************************************
110
+ * startDiscover
111
+ * Sends broadcast to network discover Midea devices. Will continue sending
112
+ * up to an additional "retries" times each spaced by 3 seconds.
113
+ */
114
+ startDiscover(retries = 3, timeout = 2000) {
115
+ let tries = 0;
116
+ // force timeout to be between 500ms and 5 seconds
117
+ timeout = Math.max(500, Math.min(timeout, 5000));
118
+ const broadcastAddrs = this.ifBroadcastAddrs();
119
+ function broadcast() {
120
+ if (tries++ > retries) {
121
+ this.logger.debug(`Device discovery complete after ${retries + 1} network broadcasts.`);
122
+ this.emit('complete');
123
+ return;
124
+ }
125
+ else {
126
+ this.emit('retry', tries, this.ips.length);
127
+ }
128
+ for (const ip of broadcastAddrs) {
129
+ this.logger.debug(`Sending discovery message to ${ip}, try ${tries}...`);
130
+ for (const port of [6445, 20086]) {
131
+ this.socket.send(Buffer.from(DISCOVERY_MESSAGE), port, ip, (err) => {
132
+ if (err) {
133
+ const msg = err instanceof Error ? err.stack : err;
134
+ this.logger.error(`Error while sending message to ${ip}:${port}:\n${msg}`);
135
+ }
136
+ });
137
+ }
138
+ }
139
+ setTimeout(broadcast.bind(this), timeout);
140
+ }
141
+ broadcast.bind(this)();
142
+ }
143
+ getDeviceVersion(data) {
144
+ try {
145
+ this.xml_parser.parse(data.toString(), true);
146
+ return ProtocolVersion.V1;
147
+ }
148
+ catch {
149
+ const start_of_packet = data.subarray(0, 2);
150
+ if (start_of_packet.compare(Buffer.from([0x5a, 0x5a])) === 0) {
151
+ return ProtocolVersion.V2;
152
+ }
153
+ else if (start_of_packet.compare(Buffer.from([0x83, 0x70])) === 0) {
154
+ return ProtocolVersion.V3;
155
+ }
156
+ }
157
+ throw new Error('Unknown device version.');
158
+ }
159
+ async getDeviceInfo(ip, version, data) {
160
+ if (version === ProtocolVersion.V1) {
161
+ // const root = this.xml_parser.parse(data.toString());
162
+ // const device = root["body"]["device"]
163
+ // if (device) {
164
+ // const port = device["port"];
165
+ // }
166
+ // throw new Error("Could not find 'body/device' in XML.");
167
+ throw new Error('Version 1 not implemented.');
168
+ }
169
+ else {
170
+ let buffer = data;
171
+ // Strip V3 header and hash
172
+ if (version === ProtocolVersion.V3) {
173
+ buffer = buffer.subarray(8, -16);
174
+ }
175
+ const encrypted_data = buffer.subarray(40, -16);
176
+ const device_id = buffer.readUIntLE(20, 6);
177
+ let decrypted_buffer;
178
+ try {
179
+ decrypted_buffer = this.security.aes_decrypt(encrypted_data);
180
+ }
181
+ catch (err) {
182
+ throw new Error(`Error while decrypting data: ${err}`);
183
+ }
184
+ const ip_address = `${decrypted_buffer.readUint8(3)}.${decrypted_buffer.readUint8(2)}.${decrypted_buffer.readUint8(1)}.${decrypted_buffer.readUint8(0)}`;
185
+ const port = decrypted_buffer.readUIntLE(4, 2);
186
+ if (ip_address !== ip) {
187
+ this.logger.warn(`IP address mismatch: ${ip_address} != ${ip}`);
188
+ }
189
+ const model = decrypted_buffer.subarray(17, 25).toString();
190
+ // Serial number
191
+ const sn = decrypted_buffer.subarray(8, 40).toString();
192
+ // Extract name/SSID
193
+ const name_length = decrypted_buffer.readUIntLE(40, 1);
194
+ const name = decrypted_buffer.subarray(41, 41 + name_length).toString();
195
+ const device_type = Number(`0x${name.split('_')[1]}`);
196
+ return {
197
+ ip: ip,
198
+ port: port,
199
+ id: device_id,
200
+ model: model,
201
+ sn: sn,
202
+ name: name,
203
+ type: device_type,
204
+ version: version,
205
+ };
206
+ }
207
+ }
208
+ }
213
209
  //# sourceMappingURL=MideaDiscover.js.map