homebridge-midea-platform 1.2.0-beta.8 → 1.2.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 (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 +157 -84
  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
package/dist/platform.js CHANGED
@@ -1,214 +1,234 @@
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
- exports.MideaPlatform = void 0;
7
- const settings_1 = require("./settings");
8
- const MideaDiscover_1 = __importDefault(require("./core/MideaDiscover"));
9
- const MideaConstants_1 = require("./core/MideaConstants");
10
- const AccessoryFactory_1 = __importDefault(require("./accessory/AccessoryFactory"));
11
- const DeviceFactory_1 = __importDefault(require("./devices/DeviceFactory"));
12
- const platformUtils_1 = require("./platformUtils");
13
- const lodash_1 = require("lodash");
14
- class MideaPlatform {
15
- constructor(log, config, api) {
16
- this.log = log;
17
- this.config = config;
18
- this.api = api;
19
- this.Service = this.api.hap.Service;
20
- this.Characteristic = this.api.hap.Characteristic;
21
- this.accessories = [];
22
- // Keep track of all devices discovered by broadcast
23
- this.discoveredDevices = {};
24
- this.discoveryInterval = 60; // seconds
25
- Error.stackTraceLimit = 100;
26
- // Add default config values
27
- this.platformConfig = (0, lodash_1.defaultsDeep)(config, platformUtils_1.defaultConfig);
28
- // Enforce min/max values
29
- this.platformConfig.refreshInterval = Math.max(0, Math.min(this.platformConfig.refreshInterval, 86400));
30
- this.platformConfig.heartbeatInterval = Math.max(10, Math.min(this.platformConfig.heartbeatInterval, 120));
31
- // debug log configuration
32
- this.log.debug(`Configuration:\n${JSON.stringify(this.platformConfig, null, 2)}`);
33
- this.discover = new MideaDiscover_1.default(log);
34
- // Register callback with Discover class that is called for each device as
35
- // they are discovered on the network.
36
- this.discover.on('device', this.deviceDiscovered.bind(this));
37
- // Register callback with Discover class that is called when we have exhausted
38
- // all retries to discover devices. We can now check what was found.
39
- this.discover.on('complete', this.discoveryComplete.bind(this));
40
- // When this event is fired it means Homebridge has restored all cached accessories from disk.
41
- // Dynamic Platform plugins should only register new accessories after this event was fired,
42
- // in order to ensure they weren't added to homebridge already. This event can also be used
43
- // to start discovery of new accessories.
44
- this.api.on('didFinishLaunching', this.finishedLaunching.bind(this));
45
- }
46
- /*********************************************************************
47
- * finishedLaunching
48
- * Function called when Homebridge has finished loading the plugin.
49
- */
50
- finishedLaunching() {
51
- this.log.info('Start device discovery...');
52
- // If IP address is in config then probe them directly
53
- this.platformConfig.devices.forEach((device) => {
54
- // for some reason, assigning the regex has to be inside the loop, else fails after first pass.
55
- const regexIPv4 = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gi;
56
- // Pull in defaults
57
- device = (0, lodash_1.defaultsDeep)(device, platformUtils_1.defaultDeviceConfig);
58
- const ip = device.advanced_options.ip.toString().trim();
59
- if (regexIPv4.test(ip)) {
60
- this.discover.discoverDeviceByIP(ip);
61
- }
62
- else if (ip) {
63
- // IP is non-empty, non-null, but not valid IP address
64
- this.log.warn(`[${device.name}] Invalid IP address in configuration: ${ip}`);
65
- }
66
- });
67
- // And then send broadcast to network(s)
68
- this.discover.startDiscover();
69
- }
70
- /*********************************************************************
71
- * deviceDiscovered
72
- * Function called by the 'device' on handler.
73
- */
74
- deviceDiscovered(device_info) {
75
- var _a;
76
- // Find device specific configuration from within the homebridge config file.
77
- // If we have configuration indexed by ID use that, if not use IP address.
78
- const deviceConfig = this.platformConfig.devices.find((device) => device.id === device_info.id);
79
- if (deviceConfig) {
80
- // keep track of discovered devices
81
- this.discoveredDevices[device_info.id] = true;
82
- // Override name with that provided in the config.json settings
83
- device_info.name = (_a = deviceConfig.name) !== null && _a !== void 0 ? _a : device_info.name;
84
- this.addDevice(device_info, deviceConfig);
85
- }
86
- else {
87
- this.log.warn(`[${device_info.name} | ${device_info.ip}}] New device discovered, you must add it to the config.json settings.`);
88
- }
89
- }
90
- /*********************************************************************
91
- * discoveryComplete
92
- * Function called by the 'complete' on handler.
93
- */
94
- discoveryComplete() {
95
- this.log.debug(`Discovery complete, check for missing devices`);
96
- // Check if network broadcasting found all devices that user configured. If not then
97
- // we have to handle those.
98
- let missingDevices = 0;
99
- this.platformConfig.devices.forEach((device) => {
100
- if (!this.discoveredDevices[device.id]) {
101
- // This device was not found by network discovery.
102
- missingDevices++;
103
- if (this.discoveredDevices[device.id] === undefined) {
104
- this.discoveredDevices[device.id] = false;
105
- this.log.warn(`[${device.name}] Device not found (id: ${device.id}), will retry every ${this.discoveryInterval} seconds`);
106
- }
107
- else {
108
- this.log.debug(`[${device.name}] Device not found (id: ${device.id}), will retry in ${this.discoveryInterval} seconds`);
109
- }
110
- }
111
- });
112
- if (missingDevices > 0) {
113
- // Some devices not found. Keep retrying periodically until all are found.
114
- setTimeout(() => {
115
- missingDevices = 0;
116
- // on repeat attempts only retry once (so two broadcasts sent), 3000 miliseconds apart.
117
- this.discover.startDiscover(1, 3000);
118
- }, this.discoveryInterval * 1000);
119
- }
120
- else {
121
- this.log.info(`All configured devices added to Homebridge`);
122
- }
123
- }
124
- /*********************************************************************
125
- * addDevice
126
- * Called for each device as discovered on the network. Creates the
127
- * Midea device handler and the associated Homebridge accessory.
128
- */
129
- async addDevice(device_info, deviceConfig) {
130
- var _a, _b;
131
- const uuid = this.api.hap.uuid.generate(device_info.id.toString());
132
- const existingAccessory = this.accessories.find((accessory) => accessory.UUID === uuid);
133
- // Add default config values
134
- (0, lodash_1.defaultsDeep)(deviceConfig, platformUtils_1.defaultDeviceConfig);
135
- const device = DeviceFactory_1.default.createDevice(this.log, device_info, this.platformConfig, deviceConfig);
136
- if (device === null) {
137
- this.log.error(`Device type is unsupported by the plugin: ${device_info.type}`);
138
- }
139
- else {
140
- if (existingAccessory) {
141
- // the accessory already exists, restore from Homebridge cache
142
- this.log.info(`[${device_info.name}] Restoring existing accessory from cache: ${existingAccessory.displayName}`);
143
- try {
144
- // Token/key is only required for V3 devices
145
- if (device_info.version === MideaConstants_1.ProtocolVersion.V3) {
146
- if (deviceConfig.advanced_options.token && deviceConfig.advanced_options.key) {
147
- // token/key provided in config file, use those... replacing values in cached context
148
- this.log.info(`[${device_info.name}] Cached device, using token/key from config file`);
149
- existingAccessory.context.token = deviceConfig.advanced_options.token;
150
- existingAccessory.context.key = deviceConfig.advanced_options.key;
151
- device.setCredentials(Buffer.from(existingAccessory.context.token, 'hex'), Buffer.from(existingAccessory.context.key, 'hex'));
152
- }
153
- else {
154
- // use token/key values from the accessory cached context
155
- this.log.info(`[${device_info.name}] Cached device, using saved credentials`);
156
- device.setCredentials(Buffer.from(existingAccessory.context.token, 'hex'), Buffer.from(existingAccessory.context.key, 'hex'));
157
- }
158
- }
159
- await device.connect(true);
160
- AccessoryFactory_1.default.createAccessory(this, existingAccessory, device, deviceConfig);
161
- }
162
- catch (err) {
163
- const msg = err instanceof Error ? err.stack : err;
164
- this.log.error(`Cannot connect to device from cache ${device_info.ip}:${device_info.port}, error:\n${msg}`);
165
- }
166
- }
167
- else {
168
- try {
169
- this.log.info('Adding new accessory:', device_info.name);
170
- const accessory = new this.api.platformAccessory(device_info.name, uuid);
171
- // Token/key is only required for V3 devices
172
- if (device_info.version === MideaConstants_1.ProtocolVersion.V3) {
173
- if (deviceConfig.advanced_options.token && deviceConfig.advanced_options.key) {
174
- // token/key provided in config file, use those... set values in cached context
175
- this.log.info(`[${device_info.name}] New device at ${device_info.ip}:${device_info.port}, using token/key from config file`);
176
- accessory.context.token = deviceConfig.advanced_options.token;
177
- accessory.context.key = deviceConfig.advanced_options.key;
178
- accessory.context.id = device_info.id.toString();
179
- device.setCredentials(Buffer.from(accessory.context.token, 'hex'), Buffer.from(accessory.context.key, 'hex'));
180
- }
181
- else {
182
- throw new Error(`Token/key not provided in config file, cannot add new device`);
183
- }
184
- }
185
- await device.connect(false);
186
- await device.refresh_status();
187
- // Set serial number and model into the context if they are provided.
188
- accessory.context.sn = (_a = device_info.sn) !== null && _a !== void 0 ? _a : 'unknown';
189
- accessory.context.model = (_b = device_info.model) !== null && _b !== void 0 ? _b : 'unknown';
190
- // create the accessory handler for the newly create accessory
191
- // this is imported from `platformAccessory.ts`
192
- AccessoryFactory_1.default.createAccessory(this, accessory, device, deviceConfig);
193
- // link the accessory to your platform
194
- this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
195
- }
196
- catch (err) {
1
+ import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
2
+ import Discover from './core/MideaDiscover.js';
3
+ import { ProtocolVersion } from './core/MideaConstants.js';
4
+ import AccessoryFactory from './accessory/AccessoryFactory.js';
5
+ import DeviceFactory from './devices/DeviceFactory.js';
6
+ import { defaultConfig, defaultDeviceConfig } from './platformUtils.js';
7
+ import lodash from 'lodash';
8
+ const { defaultsDeep } = lodash;
9
+ // export interface MideaAccessory extends PlatformAccessory {
10
+ // context: {
11
+ // token: string;
12
+ // key: string;
13
+ // id: string;
14
+ // type: string;
15
+ // sn: string;
16
+ // model: string;
17
+ // serviceVersion: number;
18
+ // };
19
+ // }
20
+ export class MideaPlatform {
21
+ log;
22
+ config;
23
+ api;
24
+ Service;
25
+ Characteristic;
26
+ accessories = new Map();
27
+ discoveredCacheUUIDs = [];
28
+ // Keep track of all devices discovered by broadcast
29
+ discoveredDevices = new Map();
30
+ discoveryInterval = 60; // seconds
31
+ discover;
32
+ // Need seperate variable because the DynamicPlatformPlugin constructor won't accept anything but the PlatformConfig type
33
+ platformConfig;
34
+ constructor(log, config, api) {
35
+ this.log = log;
36
+ this.config = config;
37
+ this.api = api;
38
+ this.Service = api.hap.Service;
39
+ this.Characteristic = api.hap.Characteristic;
40
+ Error.stackTraceLimit = 100;
41
+ // Add default config values
42
+ this.platformConfig = defaultsDeep(config, defaultConfig);
43
+ // Enforce min/max values
44
+ this.platformConfig.refreshInterval = Math.max(0, Math.min(this.platformConfig.refreshInterval, 86400));
45
+ this.platformConfig.heartbeatInterval = Math.max(10, Math.min(this.platformConfig.heartbeatInterval, 120));
46
+ // debug log configuration
47
+ this.log.debug(`Configuration:\n${JSON.stringify(this.platformConfig, null, 2)}`);
48
+ this.discover = new Discover(log);
49
+ // Register callback with Discover class that is called for each device as
50
+ // they are discovered on the network.
51
+ this.discover.on('device', this.deviceDiscovered.bind(this));
52
+ // Register callback with Discover class that is called when we have exhausted
53
+ // all retries to discover devices. We can now check what was found.
54
+ this.discover.on('complete', this.discoveryComplete.bind(this));
55
+ // When this event is fired it means Homebridge has restored all cached accessories from disk.
56
+ // Dynamic Platform plugins should only register new accessories after this event was fired,
57
+ // in order to ensure they weren't added to homebridge already. This event can also be used
58
+ // to start discovery of new accessories.
59
+ this.api.on('didFinishLaunching', this.finishedLaunching.bind(this));
60
+ }
61
+ /*********************************************************************
62
+ * finishedLaunching
63
+ * Function called when Homebridge has finished loading the plugin.
64
+ */
65
+ finishedLaunching() {
66
+ this.log.info('Start device discovery...');
67
+ // If IP address is in config then probe them directly
68
+ this.platformConfig.devices.forEach((device) => {
69
+ // for some reason, assigning the regex has to be inside the loop, else fails after first pass.
70
+ const regexIPv4 = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gi;
71
+ // Pull in defaults
72
+ device = defaultsDeep(device, defaultDeviceConfig);
73
+ const ip = device.advanced_options.ip.toString().trim();
74
+ if (regexIPv4.test(ip)) {
75
+ this.discover.discoverDeviceByIP(ip);
76
+ }
77
+ else if (ip) {
78
+ // IP is non-empty, non-null, but not valid IP address
79
+ this.log.warn(`[${device.name}] Invalid IP address in configuration: ${ip}`);
80
+ }
81
+ });
82
+ // And then send broadcast to network(s)
83
+ this.discover.startDiscover();
84
+ }
85
+ /*********************************************************************
86
+ * deviceDiscovered
87
+ * Function called by the 'device' on handler.
88
+ */
89
+ deviceDiscovered(device_info) {
90
+ // Find device specific configuration from within the homebridge config file.
91
+ // If we have configuration indexed by ID use that, if not use IP address.
92
+ const deviceConfig = this.platformConfig.devices.find((device) => device.id === device_info.id);
93
+ if (deviceConfig) {
94
+ // keep track of discovered devices
95
+ this.discoveredDevices.set(device_info.id, true);
96
+ // Override name with that provided in the config.json settings
97
+ device_info.name = deviceConfig.name ?? device_info.name;
98
+ this.addDevice(device_info, deviceConfig);
99
+ }
100
+ else {
101
+ this.log.warn(`[${device_info.name} | ${device_info.ip}}] New device discovered, you must add it to the config.json settings.`);
102
+ }
103
+ }
104
+ /*********************************************************************
105
+ * discoveryComplete
106
+ * Function called by the 'complete' on handler.
107
+ */
108
+ discoveryComplete() {
109
+ this.log.debug('Discovery complete, check for missing devices');
110
+ // Check if network broadcasting found all devices that user configured. If not then
111
+ // we have to handle those.
112
+ let missingDevices = 0;
113
+ this.platformConfig.devices.forEach((device) => {
114
+ if (!this.discoveredDevices.get(device.id)) {
115
+ // This device was not found by network discovery.
116
+ missingDevices++;
117
+ if (this.discoveredDevices.get(device.id) === undefined) {
118
+ this.discoveredDevices.set(device.id, false);
119
+ this.log.warn(`[${device.name}] Device not found (id: ${device.id}), will retry every ${this.discoveryInterval} seconds`);
120
+ }
121
+ else {
122
+ this.log.debug(`[${device.name}] Device not found (id: ${device.id}), will retry in ${this.discoveryInterval} seconds`);
123
+ }
124
+ }
125
+ });
126
+ if (missingDevices > 0) {
127
+ // Some devices not found. Keep retrying periodically until all are found.
128
+ setTimeout(() => {
129
+ missingDevices = 0;
130
+ // on repeat attempts only retry once (so two broadcasts sent), 3000 miliseconds apart.
131
+ this.discover.startDiscover(1, 3000);
132
+ }, this.discoveryInterval * 1000);
133
+ }
134
+ else {
135
+ this.log.info('All configured devices added to Homebridge');
136
+ }
137
+ // Delete not existing, but cached accessories
138
+ // for (const [uuid, accessory] of this.accessories) {
139
+ // if (!this.discoveredCacheUUIDs.includes(uuid)) {
140
+ // this.log.info('Removing existing accessory from cache:', accessory.displayName);
141
+ // this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
142
+ // }
143
+ // }
144
+ }
145
+ /*********************************************************************
146
+ * addDevice
147
+ * Called for each device as discovered on the network. Creates the
148
+ * Midea device handler and the associated Homebridge accessory.
149
+ */
150
+ async addDevice(device_info, deviceConfig) {
151
+ const uuid = this.api.hap.uuid.generate(device_info.id.toString());
152
+ const existingAccessory = this.accessories.get(uuid);
153
+ // Add default config values
154
+ defaultsDeep(deviceConfig, defaultDeviceConfig);
155
+ const device = DeviceFactory.createDevice(this.log, device_info, this.platformConfig, deviceConfig);
156
+ if (device === null) {
157
+ this.log.error(`Device type is unsupported by the plugin: ${device_info.type}`);
158
+ }
159
+ else {
160
+ if (existingAccessory) {
161
+ // the accessory already exists, restore from Homebridge cache
162
+ this.log.info(`[${device_info.name}] Restoring existing accessory from cache: ${existingAccessory.displayName}`);
163
+ try {
164
+ // Token/key is only required for V3 devices
165
+ if (device_info.version === ProtocolVersion.V3) {
166
+ if (deviceConfig.advanced_options.token && deviceConfig.advanced_options.key) {
167
+ // token/key provided in config file, use those... replacing values in cached context
168
+ this.log.info(`[${device_info.name}] Cached device, using token/key from config file`);
169
+ existingAccessory.context.token = deviceConfig.advanced_options.token;
170
+ existingAccessory.context.key = deviceConfig.advanced_options.key;
171
+ device.setCredentials(Buffer.from(existingAccessory.context.token, 'hex'), Buffer.from(existingAccessory.context.key, 'hex'));
172
+ }
173
+ else {
174
+ // use token/key values from the accessory cached context
175
+ this.log.info(`[${device_info.name}] Cached device, using saved credentials`);
176
+ device.setCredentials(Buffer.from(existingAccessory.context.token, 'hex'), Buffer.from(existingAccessory.context.key, 'hex'));
177
+ }
178
+ }
179
+ await device.connect(true);
180
+ AccessoryFactory.createAccessory(this, existingAccessory, device, deviceConfig);
181
+ }
182
+ catch (err) {
183
+ const msg = err instanceof Error ? err.stack : err;
184
+ this.log.error(`Cannot connect to device from cache ${device_info.ip}:${device_info.port}, error:\n${msg}`);
185
+ }
186
+ }
187
+ else {
188
+ try {
189
+ this.log.info('Adding new accessory:', device_info.name);
190
+ const accessory = new this.api.platformAccessory(device_info.name, uuid);
191
+ // Token/key is only required for V3 devices
192
+ if (device_info.version === ProtocolVersion.V3) {
193
+ if (deviceConfig.advanced_options.token && deviceConfig.advanced_options.key) {
194
+ // token/key provided in config file, use those... set values in cached context
195
+ this.log.info(`[${device_info.name}] New device at ${device_info.ip}:${device_info.port}, using token/key from config file`);
196
+ accessory.context.token = deviceConfig.advanced_options.token;
197
+ accessory.context.key = deviceConfig.advanced_options.key;
198
+ accessory.context.id = device_info.id.toString();
199
+ device.setCredentials(Buffer.from(accessory.context.token, 'hex'), Buffer.from(accessory.context.key, 'hex'));
200
+ }
201
+ else {
202
+ throw new Error('Token/key not provided in config file, cannot add new device');
203
+ }
204
+ }
205
+ await device.connect(false);
206
+ await device.refresh_status();
207
+ // Set serial number and model into the context if they are provided.
208
+ accessory.context.sn = device_info.sn ?? 'unknown';
209
+ accessory.context.model = device_info.model ?? 'unknown';
210
+ // create the accessory handler for the newly create accessory
211
+ // this is imported from `platformAccessory.ts`
212
+ AccessoryFactory.createAccessory(this, accessory, device, deviceConfig);
213
+ // link the accessory to your platform
214
+ this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
215
+ }
216
+ catch (err) {
197
217
  this.log.error(`[${device_info.name} | ${device_info.ip}:${device_info.port}}]
198
- Cannot add new device ${device_info.ip}:${device_info.port}, error:\n${err}`);
199
- }
200
- }
201
- }
202
- }
203
- /**
204
- * This function is invoked when homebridge restores cached accessories from disk at startup.
205
- * It should be used to setup event handlers for characteristics and update respective values.
206
- */
207
- configureAccessory(accessory) {
208
- this.log.info('Loading accessory from cache:', accessory.displayName);
209
- // add the restored accessory to the accessories cache so we can track if it has already been registered
210
- this.accessories.push(accessory);
211
- }
212
- }
213
- exports.MideaPlatform = MideaPlatform;
218
+ Cannot add new device ${device_info.ip}:${device_info.port}, error:\n${err}`);
219
+ }
220
+ }
221
+ this.discoveredCacheUUIDs.push(uuid);
222
+ }
223
+ }
224
+ /**
225
+ * This function is invoked when homebridge restores cached accessories from disk at startup.
226
+ * It should be used to setup event handlers for characteristics and update respective values.
227
+ */
228
+ configureAccessory(accessory) {
229
+ this.log.info('Loading accessory from cache:', accessory.displayName);
230
+ // add the restored accessory to the accessories cache so we can track if it has already been registered
231
+ this.accessories.set(accessory.UUID, accessory);
232
+ }
233
+ }
214
234
  //# sourceMappingURL=platform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}