@switchbot/homebridge-switchbot 3.5.0-beta.3 → 3.5.0-beta.31

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 (166) hide show
  1. package/CHANGELOG.md +4 -1
  2. package/config.schema.json +147 -9
  3. package/dist/device/blindtilt.d.ts +21 -94
  4. package/dist/device/blindtilt.d.ts.map +1 -1
  5. package/dist/device/blindtilt.js +347 -756
  6. package/dist/device/blindtilt.js.map +1 -1
  7. package/dist/device/bot.d.ts +25 -71
  8. package/dist/device/bot.d.ts.map +1 -1
  9. package/dist/device/bot.js +582 -759
  10. package/dist/device/bot.js.map +1 -1
  11. package/dist/device/ceilinglight.d.ts +13 -67
  12. package/dist/device/ceilinglight.d.ts.map +1 -1
  13. package/dist/device/ceilinglight.js +209 -587
  14. package/dist/device/ceilinglight.js.map +1 -1
  15. package/dist/device/colorbulb.d.ts +13 -74
  16. package/dist/device/colorbulb.d.ts.map +1 -1
  17. package/dist/device/colorbulb.js +250 -632
  18. package/dist/device/colorbulb.js.map +1 -1
  19. package/dist/device/contact.d.ts +14 -65
  20. package/dist/device/contact.d.ts.map +1 -1
  21. package/dist/device/contact.js +204 -531
  22. package/dist/device/contact.js.map +1 -1
  23. package/dist/device/curtain.d.ts +17 -86
  24. package/dist/device/curtain.d.ts.map +1 -1
  25. package/dist/device/curtain.js +335 -786
  26. package/dist/device/curtain.js.map +1 -1
  27. package/dist/device/device.d.ts +59 -0
  28. package/dist/device/device.d.ts.map +1 -0
  29. package/dist/device/device.js +654 -0
  30. package/dist/device/device.js.map +1 -0
  31. package/dist/device/fan.d.ts +51 -0
  32. package/dist/device/fan.d.ts.map +1 -0
  33. package/dist/device/fan.js +499 -0
  34. package/dist/device/fan.js.map +1 -0
  35. package/dist/device/hub.d.ts +15 -59
  36. package/dist/device/hub.d.ts.map +1 -1
  37. package/dist/device/hub.js +242 -596
  38. package/dist/device/hub.js.map +1 -1
  39. package/dist/device/humidifier.d.ts +10 -65
  40. package/dist/device/humidifier.d.ts.map +1 -1
  41. package/dist/device/humidifier.js +207 -571
  42. package/dist/device/humidifier.js.map +1 -1
  43. package/dist/device/iosensor.d.ts +11 -64
  44. package/dist/device/iosensor.d.ts.map +1 -1
  45. package/dist/device/iosensor.js +174 -584
  46. package/dist/device/iosensor.js.map +1 -1
  47. package/dist/device/lightstrip.d.ts +10 -68
  48. package/dist/device/lightstrip.d.ts.map +1 -1
  49. package/dist/device/lightstrip.js +252 -568
  50. package/dist/device/lightstrip.js.map +1 -1
  51. package/dist/device/lock.d.ts +15 -62
  52. package/dist/device/lock.d.ts.map +1 -1
  53. package/dist/device/lock.js +210 -542
  54. package/dist/device/lock.js.map +1 -1
  55. package/dist/device/meter.d.ts +13 -63
  56. package/dist/device/meter.d.ts.map +1 -1
  57. package/dist/device/meter.js +170 -577
  58. package/dist/device/meter.js.map +1 -1
  59. package/dist/device/meterplus.d.ts +13 -64
  60. package/dist/device/meterplus.d.ts.map +1 -1
  61. package/dist/device/meterplus.js +159 -577
  62. package/dist/device/meterplus.js.map +1 -1
  63. package/dist/device/motion.d.ts +13 -69
  64. package/dist/device/motion.d.ts.map +1 -1
  65. package/dist/device/motion.js +136 -518
  66. package/dist/device/motion.js.map +1 -1
  67. package/dist/device/plug.d.ts +9 -57
  68. package/dist/device/plug.d.ts.map +1 -1
  69. package/dist/device/plug.js +82 -452
  70. package/dist/device/plug.js.map +1 -1
  71. package/dist/device/robotvacuumcleaner.d.ts +11 -62
  72. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  73. package/dist/device/robotvacuumcleaner.js +140 -451
  74. package/dist/device/robotvacuumcleaner.js.map +1 -1
  75. package/dist/device/waterdetector.d.ts +9 -70
  76. package/dist/device/waterdetector.d.ts.map +1 -1
  77. package/dist/device/waterdetector.js +121 -664
  78. package/dist/device/waterdetector.js.map +1 -1
  79. package/dist/index.js +1 -1
  80. package/dist/irdevice/airconditioner.d.ts +8 -48
  81. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  82. package/dist/irdevice/airconditioner.js +309 -419
  83. package/dist/irdevice/airconditioner.js.map +1 -1
  84. package/dist/irdevice/airpurifier.d.ts +7 -38
  85. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  86. package/dist/irdevice/airpurifier.js +72 -304
  87. package/dist/irdevice/airpurifier.js.map +1 -1
  88. package/dist/irdevice/camera.d.ts +6 -35
  89. package/dist/irdevice/camera.d.ts.map +1 -1
  90. package/dist/irdevice/camera.js +34 -278
  91. package/dist/irdevice/camera.js.map +1 -1
  92. package/dist/irdevice/fan.d.ts +6 -39
  93. package/dist/irdevice/fan.d.ts.map +1 -1
  94. package/dist/irdevice/fan.js +67 -311
  95. package/dist/irdevice/fan.js.map +1 -1
  96. package/dist/irdevice/irdevice.d.ts +40 -0
  97. package/dist/irdevice/irdevice.d.ts.map +1 -0
  98. package/dist/irdevice/irdevice.js +509 -0
  99. package/dist/irdevice/irdevice.js.map +1 -0
  100. package/dist/irdevice/light.d.ts +6 -34
  101. package/dist/irdevice/light.d.ts.map +1 -1
  102. package/dist/irdevice/light.js +23 -272
  103. package/dist/irdevice/light.js.map +1 -1
  104. package/dist/irdevice/other.d.ts +18 -47
  105. package/dist/irdevice/other.d.ts.map +1 -1
  106. package/dist/irdevice/other.js +352 -546
  107. package/dist/irdevice/other.js.map +1 -1
  108. package/dist/irdevice/tv.d.ts +7 -39
  109. package/dist/irdevice/tv.d.ts.map +1 -1
  110. package/dist/irdevice/tv.js +82 -321
  111. package/dist/irdevice/tv.js.map +1 -1
  112. package/dist/irdevice/vacuumcleaner.d.ts +6 -35
  113. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  114. package/dist/irdevice/vacuumcleaner.js +41 -284
  115. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  116. package/dist/irdevice/waterheater.d.ts +6 -35
  117. package/dist/irdevice/waterheater.d.ts.map +1 -1
  118. package/dist/irdevice/waterheater.js +42 -287
  119. package/dist/irdevice/waterheater.js.map +1 -1
  120. package/dist/platform.d.ts +14 -1
  121. package/dist/platform.d.ts.map +1 -1
  122. package/dist/platform.js +237 -94
  123. package/dist/platform.js.map +1 -1
  124. package/dist/settings.d.ts +40 -10
  125. package/dist/settings.d.ts.map +1 -1
  126. package/dist/settings.js +0 -552
  127. package/dist/settings.js.map +1 -1
  128. package/dist/utils.d.ts +77 -0
  129. package/dist/utils.d.ts.map +1 -1
  130. package/dist/utils.js +638 -1
  131. package/dist/utils.js.map +1 -1
  132. package/package.json +16 -15
  133. package/src/custom.d.ts +2 -1
  134. package/src/device/blindtilt.ts +373 -782
  135. package/src/device/bot.ts +616 -844
  136. package/src/device/ceilinglight.ts +222 -607
  137. package/src/device/colorbulb.ts +264 -656
  138. package/src/device/contact.ts +229 -553
  139. package/src/device/curtain.ts +355 -810
  140. package/src/device/device.ts +681 -0
  141. package/src/device/fan.ts +548 -0
  142. package/src/device/hub.ts +268 -623
  143. package/src/device/humidifier.ts +237 -618
  144. package/src/device/iosensor.ts +200 -610
  145. package/src/device/lightstrip.ts +273 -596
  146. package/src/device/lock.ts +247 -582
  147. package/src/device/meter.ts +196 -601
  148. package/src/device/meterplus.ts +184 -602
  149. package/src/device/motion.ts +156 -541
  150. package/src/device/plug.ts +92 -480
  151. package/src/device/robotvacuumcleaner.ts +161 -477
  152. package/src/device/waterdetector.ts +139 -689
  153. package/src/index.ts +1 -1
  154. package/src/irdevice/airconditioner.ts +330 -446
  155. package/src/irdevice/airpurifier.ts +89 -321
  156. package/src/irdevice/camera.ts +42 -293
  157. package/src/irdevice/fan.ts +78 -327
  158. package/src/irdevice/irdevice.ts +526 -0
  159. package/src/irdevice/light.ts +32 -287
  160. package/src/irdevice/other.ts +396 -615
  161. package/src/irdevice/tv.ts +100 -339
  162. package/src/irdevice/vacuumcleaner.ts +49 -305
  163. package/src/irdevice/waterheater.ts +50 -310
  164. package/src/platform.ts +247 -102
  165. package/src/settings.ts +56 -565
  166. package/src/utils.ts +642 -1
@@ -1,119 +1,89 @@
1
1
  import { request } from 'undici';
2
- import { sleep } from '../utils.js';
2
+ import { deviceBase } from './device.js';
3
3
  import { interval, Subject } from 'rxjs';
4
4
  import { SwitchBotPlatform } from '../platform.js';
5
5
  import { debounceTime, skipWhile, take, tap } from 'rxjs/operators';
6
- import { Service, PlatformAccessory, CharacteristicValue, API, Logging, HAP } from 'homebridge';
7
- import { device, devicesConfig, serviceData, deviceStatus, Devices, SwitchBotPlatformConfig } from '../settings.js';
6
+ import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
7
+ import { device, devicesConfig, serviceData, deviceStatus, Devices } from '../settings.js';
8
8
 
9
9
  /**
10
10
  * Platform Accessory
11
11
  * An instance of this class is created for each accessory your platform registers
12
12
  * Each accessory may expose multiple services of different service types.
13
13
  */
14
- export class Humidifier {
15
- public readonly api: API;
16
- public readonly log: Logging;
17
- public readonly config!: SwitchBotPlatformConfig;
18
- protected readonly hap: HAP;
14
+ export class Humidifier extends deviceBase {
19
15
  // Services
20
- humidifierService: Service;
21
- temperatureservice?: Service;
22
-
23
- // Characteristic Values
24
- Active!: CharacteristicValue;
25
- WaterLevel!: CharacteristicValue;
26
- FirmwareRevision!: CharacteristicValue;
27
- CurrentTemperature!: CharacteristicValue;
28
- CurrentRelativeHumidity!: CharacteristicValue;
29
- TargetHumidifierDehumidifierState!: CharacteristicValue;
30
- CurrentHumidifierDehumidifierState!: CharacteristicValue;
31
- RelativeHumidityHumidifierThreshold!: CharacteristicValue;
32
-
33
- // OpenAPI
34
- OpenAPI_Active: deviceStatus['power'];
35
- OpenAPI_WaterLevel: deviceStatus['lackWater'];
36
- OpenAPI_FirmwareRevision: deviceStatus['version'];
37
- OpenAPI_CurrentTemperature: deviceStatus['temperature'];
38
- OpenAPI_CurrentRelativeHumidity: deviceStatus['humidity'];
39
- OpenAPI_CurrentHumidifierDehumidifierState: deviceStatus['auto'];
40
- OpenAPI_RelativeHumidityHumidifierThreshold: deviceStatus['nebulizationEfficiency'];
41
-
42
- // BLE Others
43
- connected?: boolean;
44
- onState!: serviceData['onState'];
45
- autoMode!: serviceData['autoMode'];
46
- percentage!: serviceData['percentage'];
47
-
48
- // Config
49
- set_minStep?: number;
50
- scanDuration!: number;
51
- deviceLogging!: string;
52
- deviceRefreshRate!: number;
16
+ private HumidifierDehumidifier: {
17
+ Service: Service;
18
+ Active: CharacteristicValue;
19
+ WaterLevel: CharacteristicValue;
20
+ CurrentRelativeHumidity: CharacteristicValue;
21
+ TargetHumidifierDehumidifierState: CharacteristicValue;
22
+ CurrentHumidifierDehumidifierState: CharacteristicValue;
23
+ RelativeHumidityHumidifierThreshold: CharacteristicValue;
24
+ };
25
+
26
+ private TemperatureSensor?: {
27
+ Service: Service;
28
+ CurrentTemperature: CharacteristicValue;
29
+ };
53
30
 
54
31
  // Updates
55
32
  humidifierUpdateInProgress!: boolean;
56
33
  doHumidifierUpdate!: Subject<void>;
57
34
 
58
- // Connection
59
- private readonly OpenAPI: boolean;
60
- private readonly BLE: boolean;
61
-
62
35
  constructor(
63
- private readonly platform: SwitchBotPlatform,
64
- private accessory: PlatformAccessory,
65
- public device: device & devicesConfig,
36
+ readonly platform: SwitchBotPlatform,
37
+ accessory: PlatformAccessory,
38
+ device: device & devicesConfig,
66
39
  ) {
67
- this.api = this.platform.api;
68
- this.log = this.platform.log;
69
- this.config = this.platform.config;
70
- this.hap = this.api.hap;
71
- // Connection
72
- this.BLE = this.device.connectionType === 'BLE' || this.device.connectionType === 'BLE/OpenAPI';
73
- this.OpenAPI = this.device.connectionType === 'OpenAPI' || this.device.connectionType === 'BLE/OpenAPI';
74
- // default placeholders
75
- this.deviceLogs(device);
76
- this.scan(device);
77
- this.refreshRate(device);
78
- this.deviceContext();
79
- this.deviceConfig(device);
80
-
40
+ super(platform, accessory, device);
81
41
  // this is subject we use to track when we need to POST changes to the SwitchBot API
82
42
  this.doHumidifierUpdate = new Subject();
83
43
  this.humidifierUpdateInProgress = false;
84
44
 
45
+ // Initialize the HumidifierDehumidifier Service
46
+ this.HumidifierDehumidifier = {
47
+ Service: accessory.getService(this.hap.Service.HumidifierDehumidifier)!,
48
+ Active: accessory.context.Active || this.hap.Characteristic.Active.ACTIVE,
49
+ WaterLevel: accessory.context.WaterLevel || 100,
50
+ CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity || 50,
51
+ TargetHumidifierDehumidifierState: accessory.context.TargetHumidifierDehumidifierState
52
+ || this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER,
53
+ CurrentHumidifierDehumidifierState: accessory.context.CurrentHumidifierDehumidifierState
54
+ || this.hap.Characteristic.CurrentHumidifierDehumidifierState.INACTIVE,
55
+ RelativeHumidityHumidifierThreshold: accessory.context.RelativeHumidityHumidifierThreshold || 50,
56
+ };
57
+
58
+ // Initialize the Temperature Sensor Service
59
+ if (!device.humidifier?.hide_temperature) {
60
+ this.TemperatureSensor = {
61
+ Service: accessory.getService(this.hap.Service.TemperatureSensor)!,
62
+ CurrentTemperature: accessory.context.CurrentTemperature || 30,
63
+ };
64
+ }
65
+
85
66
  // Retrieve initial values and updateHomekit
86
67
  this.refreshStatus();
87
68
 
88
- // set accessory information
89
- accessory
90
- .getService(this.hap.Service.AccessoryInformation)!
91
- .setCharacteristic(this.hap.Characteristic.Manufacturer, 'SwitchBot')
92
- .setCharacteristic(this.hap.Characteristic.Model, 'W0801800')
93
- .setCharacteristic(this.hap.Characteristic.SerialNumber, device.deviceId)
94
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision);
95
-
96
69
  // get the service if it exists, otherwise create a new service
97
70
  // you can create multiple services for each accessory
98
- const humidifierService = `${accessory.displayName} Humidifier`;
99
- (this.humidifierService = accessory.getService(this.hap.Service.HumidifierDehumidifier)
100
- || accessory.addService(this.hap.Service.HumidifierDehumidifier)), humidifierService;
71
+ const HumidifierDehumidifierService = `${accessory.displayName} Humidifier`;
72
+ (this.HumidifierDehumidifier.Service = accessory.getService(this.hap.Service.HumidifierDehumidifier)
73
+ || accessory.addService(this.hap.Service.HumidifierDehumidifier)), HumidifierDehumidifierService;
101
74
 
102
- this.humidifierService.setCharacteristic(this.hap.Characteristic.Name, accessory.displayName);
103
- if (!this.humidifierService.testCharacteristic(this.hap.Characteristic.ConfiguredName)) {
104
- this.humidifierService.addCharacteristic(this.hap.Characteristic.ConfiguredName, accessory.displayName);
105
- }
75
+ this.HumidifierDehumidifier.Service.setCharacteristic(this.hap.Characteristic.Name, accessory.displayName);
106
76
 
107
77
  // each service must implement at-minimum the "required characteristics" for the given service type
108
78
  // see https://developers.homebridge.io/#/service/HumidifierDehumidifier
109
79
 
110
80
  // create handlers for required characteristics
111
- this.humidifierService.setCharacteristic(
81
+ this.HumidifierDehumidifier.Service.setCharacteristic(
112
82
  this.hap.Characteristic.CurrentHumidifierDehumidifierState,
113
- this.CurrentHumidifierDehumidifierState,
83
+ this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState,
114
84
  );
115
85
 
116
- this.humidifierService
86
+ this.HumidifierDehumidifier.Service
117
87
  .getCharacteristic(this.hap.Characteristic.TargetHumidifierDehumidifierState)
118
88
  .setProps({
119
89
  validValueRanges: [0, 1],
@@ -123,34 +93,31 @@ export class Humidifier {
123
93
  })
124
94
  .onSet(this.TargetHumidifierDehumidifierStateSet.bind(this));
125
95
 
126
- this.humidifierService.getCharacteristic(this.hap.Characteristic.Active).onSet(this.ActiveSet.bind(this));
96
+ this.HumidifierDehumidifier.Service.getCharacteristic(this.hap.Characteristic.Active).onSet(this.ActiveSet.bind(this));
127
97
 
128
- this.humidifierService
98
+ this.HumidifierDehumidifier.Service
129
99
  .getCharacteristic(this.hap.Characteristic.RelativeHumidityHumidifierThreshold)
130
100
  .setProps({
131
101
  validValueRanges: [0, 100],
132
102
  minValue: 0,
133
103
  maxValue: 100,
134
- minStep: this.minStep(),
104
+ minStep: this.minStep(device),
135
105
  })
136
106
  .onSet(this.RelativeHumidityHumidifierThresholdSet.bind(this));
137
107
 
138
108
  // Temperature Sensor Service
139
109
  if (device.humidifier?.hide_temperature || this.BLE) {
140
110
  this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Removing Temperature Sensor Service`);
141
- this.temperatureservice = this.accessory.getService(this.hap.Service.TemperatureSensor);
142
- accessory.removeService(this.temperatureservice!);
143
- } else if (!this.temperatureservice && !this.BLE) {
111
+ this.TemperatureSensor!.Service = this.accessory.getService(this.hap.Service.TemperatureSensor) as Service;
112
+ accessory.removeService(this.TemperatureSensor!.Service);
113
+ } else if (!this.TemperatureSensor?.Service && !this.BLE) {
144
114
  this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Add Temperature Sensor Service`);
145
- const temperatureservice = `${accessory.displayName} Temperature Sensor`;
146
- (this.temperatureservice = this.accessory.getService(this.hap.Service.TemperatureSensor)
147
- || this.accessory.addService(this.hap.Service.TemperatureSensor)), temperatureservice;
115
+ const TemperatureSensorService = `${accessory.displayName} Temperature Sensor`;
116
+ (this.TemperatureSensor!.Service = this.accessory.getService(this.hap.Service.TemperatureSensor)
117
+ || this.accessory.addService(this.hap.Service.TemperatureSensor)), TemperatureSensorService;
148
118
 
149
- this.temperatureservice.setCharacteristic(this.hap.Characteristic.Name, `${accessory.displayName} Temperature Sensor`);
150
- if (!this.temperatureservice.testCharacteristic(this.hap.Characteristic.ConfiguredName)) {
151
- this.temperatureservice.addCharacteristic(this.hap.Characteristic.ConfiguredName, `${accessory.displayName} Temperature Sensor`);
152
- }
153
- this.temperatureservice
119
+ this.TemperatureSensor!.Service.setCharacteristic(this.hap.Characteristic.Name, TemperatureSensorService);
120
+ this.TemperatureSensor!.Service
154
121
  .getCharacteristic(this.hap.Characteristic.CurrentTemperature)
155
122
  .setProps({
156
123
  validValueRanges: [-273.15, 100],
@@ -159,7 +126,7 @@ export class Humidifier {
159
126
  minStep: 0.1,
160
127
  })
161
128
  .onGet(() => {
162
- return this.CurrentTemperature;
129
+ return this.TemperatureSensor!.CurrentTemperature;
163
130
  });
164
131
  } else {
165
132
  this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Temperature Sensor Service Not Added`);
@@ -176,20 +143,23 @@ export class Humidifier {
176
143
  });
177
144
 
178
145
  //regisiter webhook event handler
179
- if (this.device.webhook) {
180
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} is listening webhook.`);
146
+ if (device.webhook) {
147
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} is listening webhook.`);
181
148
  this.platform.webhookEventHandler[this.device.deviceId] = async (context) => {
182
149
  try {
183
150
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} received Webhook: ${JSON.stringify(context)}`);
184
151
  if (context.scale === 'CELSIUS') {
185
152
  const { temperature, humidity } = context;
186
- const { CurrentTemperature, CurrentRelativeHumidity } = this;
153
+ const { CurrentRelativeHumidity } = this.HumidifierDehumidifier;
154
+ const { CurrentTemperature } = this.TemperatureSensor || { CurrentTemperature: undefined };
187
155
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ` +
188
156
  '(temperature, humidity) = ' +
189
157
  `Webhook:(${temperature}, ${humidity}), ` +
190
158
  `current:(${CurrentTemperature}, ${CurrentRelativeHumidity})`);
191
- this.CurrentRelativeHumidity = humidity;
192
- this.CurrentTemperature = temperature;
159
+ this.HumidifierDehumidifier.CurrentRelativeHumidity = humidity;
160
+ if (!this.device.humidifier?.hide_temperature) {
161
+ this.TemperatureSensor!.CurrentTemperature = temperature;
162
+ }
193
163
  this.updateHomeKitCharacteristics();
194
164
  }
195
165
  } catch (e: any) {
@@ -222,105 +192,91 @@ export class Humidifier {
222
192
  });
223
193
  }
224
194
 
225
- /**
226
- * Parse the device status from the SwitchBot api
227
- */
228
- async parseStatus(): Promise<void> {
229
- if (!this.device.enableCloudService && this.OpenAPI) {
230
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} parseStatus enableCloudService: ${this.device.enableCloudService}`);
231
- } else if (this.BLE) {
232
- await this.BLEparseStatus();
233
- } else if (this.OpenAPI && this.platform.config.credentials?.token) {
234
- await this.openAPIparseStatus();
235
- } else {
236
- await this.offlineOff();
237
- this.debugWarnLog(
238
- `${this.device.deviceType}: ${this.accessory.displayName} Connection Type:` + ` ${this.device.connectionType}, parseStatus will not happen.`,
239
- );
240
- }
241
- }
242
-
243
- async BLEparseStatus(): Promise<void> {
195
+ async BLEparseStatus(serviceData: serviceData): Promise<void> {
244
196
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEparseStatus`);
197
+ // Target Humidifier Dehumidifier State
198
+ if (serviceData.autoMode) {
199
+ this.HumidifierDehumidifier.TargetHumidifierDehumidifierState = this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER;
200
+ }
245
201
  // Current Relative Humidity
246
- this.CurrentRelativeHumidity = this.percentage!;
247
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`);
202
+ this.HumidifierDehumidifier.CurrentRelativeHumidity = serviceData.percentage!;
203
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
204
+ + ` CurrentRelativeHumidity: ${this.HumidifierDehumidifier.CurrentRelativeHumidity}`);
248
205
  // Active
249
- if (this.onState) {
250
- this.Active = this.hap.Characteristic.Active.ACTIVE;
206
+ if (serviceData.onState) {
207
+ this.HumidifierDehumidifier.Active = this.hap.Characteristic.Active.ACTIVE;
251
208
  } else {
252
- this.Active = this.hap.Characteristic.Active.INACTIVE;
209
+ this.HumidifierDehumidifier.Active = this.hap.Characteristic.Active.INACTIVE;
253
210
  }
254
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Active: ${this.Active}`);
211
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Active: ${this.HumidifierDehumidifier.Active}`);
255
212
  }
256
213
 
257
- async openAPIparseStatus(): Promise<void> {
214
+ async openAPIparseStatus(deviceStatus: deviceStatus): Promise<void> {
258
215
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIparseStatus`);
259
216
  // Current Relative Humidity
260
- this.CurrentRelativeHumidity = this.OpenAPI_CurrentTemperature!;
261
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`);
217
+ this.HumidifierDehumidifier.CurrentRelativeHumidity = deviceStatus.body.temperature!;
218
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
219
+ + ` CurrentRelativeHumidity: ${this.HumidifierDehumidifier.CurrentRelativeHumidity}`);
262
220
  // Current Temperature
263
221
  if (!this.device.humidifier?.hide_temperature) {
264
- this.CurrentTemperature = this.OpenAPI_CurrentTemperature!;
265
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentTemperature: ${this.CurrentTemperature}`);
222
+ this.TemperatureSensor!.CurrentTemperature = deviceStatus.body.temperature!;
223
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentTemperature: ${this.TemperatureSensor!.CurrentTemperature}`);
266
224
  }
267
225
  // Target Humidifier Dehumidifier State
268
- switch (this.OpenAPI_CurrentHumidifierDehumidifierState) {
226
+ switch (deviceStatus.body.auto) {
269
227
  case true:
270
- this.TargetHumidifierDehumidifierState = this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER_OR_DEHUMIDIFIER;
271
- this.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.HUMIDIFYING;
272
- this.RelativeHumidityHumidifierThreshold = this.CurrentRelativeHumidity;
228
+ this.HumidifierDehumidifier.TargetHumidifierDehumidifierState =
229
+ this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER_OR_DEHUMIDIFIER;
230
+ this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.HUMIDIFYING;
231
+ this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold = this.HumidifierDehumidifier.CurrentRelativeHumidity;
273
232
  break;
274
233
  default:
275
- this.TargetHumidifierDehumidifierState = this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER;
276
- if (this.OpenAPI_RelativeHumidityHumidifierThreshold! > 100) {
277
- this.RelativeHumidityHumidifierThreshold = 100;
234
+ this.HumidifierDehumidifier.TargetHumidifierDehumidifierState = this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER;
235
+ if (deviceStatus.body.nebulizationEfficiency! > 100) {
236
+ this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold = 100;
278
237
  } else {
279
- this.RelativeHumidityHumidifierThreshold = this.OpenAPI_RelativeHumidityHumidifierThreshold!;
238
+ this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold = deviceStatus.body.nebulizationEfficiency!;
280
239
  }
281
- if (this.CurrentRelativeHumidity > this.RelativeHumidityHumidifierThreshold) {
282
- this.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.IDLE;
283
- } else if (this.Active === this.hap.Characteristic.Active.INACTIVE) {
284
- this.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.INACTIVE;
240
+ if (this.HumidifierDehumidifier.CurrentRelativeHumidity > this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold) {
241
+ this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.IDLE;
242
+ } else if (this.HumidifierDehumidifier.Active === this.hap.Characteristic.Active.INACTIVE) {
243
+ this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.INACTIVE;
285
244
  } else {
286
- this.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.HUMIDIFYING;
245
+ this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.HUMIDIFYING;
287
246
  }
288
247
  }
289
- this.debugLog(
290
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` TargetHumidifierDehumidifierState: ${this.TargetHumidifierDehumidifierState}`,
291
- );
292
- this.debugLog(
293
- `${this.device.deviceType}: ${this.accessory.displayName}` +
294
- ` RelativeHumidityHumidifierThreshold: ${this.RelativeHumidityHumidifierThreshold}`,
295
- );
296
- this.debugLog(
297
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` CurrentHumidifierDehumidifierState: ${this.CurrentHumidifierDehumidifierState}`,
298
- );
248
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
249
+ + ` TargetHumidifierDehumidifierState: ${this.HumidifierDehumidifier.TargetHumidifierDehumidifierState}`);
250
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
251
+ + ` RelativeHumidityHumidifierThreshold: ${this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold}`);
252
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
253
+ + ` CurrentHumidifierDehumidifierState: ${this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState}`);
299
254
  // Active
300
- switch (this.OpenAPI_Active) {
255
+ switch (deviceStatus.body.power) {
301
256
  case 'on':
302
- this.Active = this.hap.Characteristic.Active.ACTIVE;
257
+ this.HumidifierDehumidifier.Active = this.hap.Characteristic.Active.ACTIVE;
303
258
  break;
304
259
  default:
305
- this.Active = this.hap.Characteristic.Active.INACTIVE;
260
+ this.HumidifierDehumidifier.Active = this.hap.Characteristic.Active.INACTIVE;
306
261
  }
307
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Active: ${this.Active}`);
262
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Active: ${this.HumidifierDehumidifier.Active}`);
308
263
  // Water Level
309
- if (this.OpenAPI_WaterLevel) {
310
- this.WaterLevel = 0;
264
+ if (deviceStatus.body.lackWater) {
265
+ this.HumidifierDehumidifier.WaterLevel = 0;
311
266
  } else {
312
- this.WaterLevel = 100;
267
+ this.HumidifierDehumidifier.WaterLevel = 100;
313
268
  }
314
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} WaterLevel: ${this.WaterLevel}`);
269
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} WaterLevel: ${this.HumidifierDehumidifier.WaterLevel}`);
315
270
 
316
271
  // FirmwareRevision
317
- this.FirmwareRevision = this.OpenAPI_FirmwareRevision!;
318
- this.accessory.context.FirmwareRevision = this.FirmwareRevision;
272
+ this.accessory.context.FirmwareRevision = deviceStatus.body.version;
273
+ this.accessory
274
+ .getService(this.hap.Service.AccessoryInformation)!
275
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.FirmwareRevision)
276
+ .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
277
+ .updateValue(this.accessory.context.FirmwareRevision);
319
278
  }
320
279
 
321
- /**
322
- * Asks the SwitchBot API for the latest device information
323
- */
324
280
  async refreshStatus(): Promise<void> {
325
281
  if (!this.device.enableCloudService && this.OpenAPI) {
326
282
  this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} refreshStatus enableCloudService: ${this.device.enableCloudService}`);
@@ -350,103 +306,43 @@ export class Humidifier {
350
306
  // Start to monitor advertisement packets
351
307
  (async () => {
352
308
  // Start to monitor advertisement packets
353
- await switchbot.startScan({
354
- model: 'e',
355
- id: this.device.bleMac,
356
- });
309
+ await switchbot.startScan({ model: this.device.bleModel, id: this.device.bleMac });
357
310
  // Set an event handler
358
311
  switchbot.onadvertisement = (ad: any) => {
359
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ${JSON.stringify(ad, null, ' ')}`);
360
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} address: ${ad.address}, model: ${ad.serviceData.model}`);
361
- if (this.device.bleMac === ad.address && ad.serviceData.model === 'e') {
312
+ if (this.device.bleMac === ad.address && ad.model === this.device.bleModel) {
313
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ${JSON.stringify(ad, null, ' ')}`);
314
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} address: ${ad.address}, model: ${ad.model}`);
362
315
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
363
- this.autoMode = ad.serviceData.autoMode;
364
- this.onState = ad.serviceData.onState;
365
- this.percentage = ad.serviceData.percentage > 100 ? 100 : ad.serviceData.percentage;
366
316
  } else {
367
317
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
368
318
  }
369
319
  };
370
- // Wait 1 seconds
320
+ // Wait 10 seconds
371
321
  await switchbot.wait(this.scanDuration * 1000);
372
322
  // Stop to monitor
373
323
  await switchbot.stopScan();
374
324
  // Update HomeKit
375
- await this.BLEparseStatus();
325
+ await this.BLEparseStatus(switchbot.onadvertisement.serviceData);
376
326
  await this.updateHomeKitCharacteristics();
377
327
  })();
378
- /*if (switchbot !== false) {
379
- switchbot
380
- .startScan({
381
- model: 'e',
382
- id: this.device.bleMac,
383
- })
384
- .then(async () => {
385
- // Set an event handler
386
- switchbot.onadvertisement = async (ad: ad) => {
387
- this.debugLog(
388
- `${this.device.deviceType}: ${this.accessory.displayName} Config BLE Address: ${this.device.bleMac},` +
389
- ` BLE Address Found: ${ad.address}`,
390
- );
391
- this.autoMode = ad.serviceData.autoMode;
392
- this.onState = ad.serviceData.onState;
393
- this.percentage = ad.serviceData.percentage;
394
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
395
- this.debugLog(
396
- `${this.device.deviceType}: ${this.accessory.displayName} model: ${ad.serviceData.model}, modelName: ${ad.serviceData.modelName},` +
397
- `autoMode: ${ad.serviceData.autoMode}, onState: ${ad.serviceData.onState}, percentage: ${ad.serviceData.percentage}`,
398
- );
399
-
400
- if (ad.serviceData) {
401
- this.connected = true;
402
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} connected: ${this.connected}`);
403
- await this.stopScanning(switchbot);
404
- } else {
405
- this.connected = false;
406
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} connected: ${this.connected}`);
407
- }
408
- };
409
- // Wait
410
- return await sleep(this.scanDuration * 1000);
411
- })
412
- .then(async () => {
413
- // Stop to monitor
414
- await this.stopScanning(switchbot);
415
- })
416
- .catch(async (e: any) => {
417
- this.apiError(e);
418
- this.errorLog(
419
- `${this.device.deviceType}: ${this.accessory.displayName} failed BLERefreshStatus with ${this.device.connectionType}` +
420
- ` Connection, Error Message: ${JSON.stringify(e.message)}`,
421
- );
422
- await this.BLERefreshConnection(switchbot);
423
- });
424
- } else {
328
+ if (switchbot === undefined) {
425
329
  await this.BLERefreshConnection(switchbot);
426
- }*/
330
+ }
427
331
  }
428
332
 
429
333
  async openAPIRefreshStatus(): Promise<void> {
430
334
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIRefreshStatus`);
431
335
  try {
432
- const { body, statusCode } = await request(`${Devices}/${this.device.deviceId}/status`, {
433
- headers: this.platform.generateHeaders(),
434
- });
336
+ const { body, statusCode } = await this.platform.retryRequest(this.deviceMaxRetries, this.deviceDelayBetweenRetries,
337
+ `${Devices}/${this.device.deviceId}/status`, { headers: this.platform.generateHeaders() });
435
338
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} statusCode: ${statusCode}`);
436
339
  const deviceStatus: any = await body.json();
437
340
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus: ${JSON.stringify(deviceStatus)}`);
438
341
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
439
342
  if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
440
- this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
343
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
441
344
  + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
442
- this.OpenAPI_CurrentHumidifierDehumidifierState = deviceStatus.body.auto;
443
- this.OpenAPI_Active = deviceStatus.body.power;
444
- this.OpenAPI_WaterLevel = deviceStatus.body.lackWater;
445
- this.OpenAPI_CurrentRelativeHumidity = deviceStatus.body.humidity;
446
- this.OpenAPI_CurrentTemperature = deviceStatus.body.temperature;
447
- this.OpenAPI_RelativeHumidityHumidifierThreshold = deviceStatus.body.nebulizationEfficiency;
448
- this.OpenAPI_FirmwareRevision = deviceStatus.body.version;
449
- this.openAPIparseStatus();
345
+ this.openAPIparseStatus(deviceStatus);
450
346
  this.updateHomeKitCharacteristics();
451
347
  } else {
452
348
  this.statusCode(statusCode);
@@ -500,11 +396,13 @@ export class Humidifier {
500
396
  id: this.device.bleMac,
501
397
  })
502
398
  .then(async (device_list: any) => {
503
- this.infoLog(`${this.accessory.displayName} Target Position: ${this.Active}`);
504
- return await device_list[0].percentage(this.RelativeHumidityHumidifierThreshold);
399
+ this.infoLog(`${this.accessory.displayName} Active: ${this.HumidifierDehumidifier.Active}`);
400
+ return await device_list[0].percentage(this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold);
505
401
  })
506
402
  .then(() => {
507
403
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
404
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
405
+ + `Active: ${this.HumidifierDehumidifier.Active} sent over BLE, sent successfully`);
508
406
  })
509
407
  .catch(async (e: any) => {
510
408
  this.apiError(e);
@@ -519,13 +417,14 @@ export class Humidifier {
519
417
  async openAPIpushChanges(): Promise<void> {
520
418
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIpushChanges`);
521
419
  if (
522
- this.TargetHumidifierDehumidifierState === this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER &&
523
- this.Active === this.hap.Characteristic.Active.ACTIVE
420
+ this.HumidifierDehumidifier.TargetHumidifierDehumidifierState === this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER &&
421
+ this.HumidifierDehumidifier.Active === this.hap.Characteristic.Active.ACTIVE
524
422
  ) {
525
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Pushing Manual: ${this.RelativeHumidityHumidifierThreshold}!`);
423
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
424
+ + ` Pushing Manual: ${this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold}!`);
526
425
  const bodyChange = JSON.stringify({
527
426
  command: 'setMode',
528
- parameter: `${this.RelativeHumidityHumidifierThreshold}`,
427
+ parameter: `${this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold}`,
529
428
  commandType: 'command',
530
429
  });
531
430
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Sending request to SwitchBot API, body: ${bodyChange},`);
@@ -543,6 +442,8 @@ export class Humidifier {
543
442
  if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
544
443
  this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
545
444
  + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
445
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
446
+ + `request to SwitchBot API, body: ${deviceStatus} sent successfully`);
546
447
  } else {
547
448
  this.statusCode(statusCode);
548
449
  this.statusCode(deviceStatus.statusCode);
@@ -555,8 +456,9 @@ export class Humidifier {
555
456
  );
556
457
  }
557
458
  } else if (
558
- this.TargetHumidifierDehumidifierState === this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER_OR_DEHUMIDIFIER &&
559
- this.Active === this.hap.Characteristic.Active.ACTIVE
459
+ this.HumidifierDehumidifier.TargetHumidifierDehumidifierState ===
460
+ this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER_OR_DEHUMIDIFIER &&
461
+ this.HumidifierDehumidifier.Active === this.hap.Characteristic.Active.ACTIVE
560
462
  ) {
561
463
  await this.pushAutoChanges();
562
464
  } else {
@@ -570,8 +472,9 @@ export class Humidifier {
570
472
  async pushAutoChanges(): Promise<void> {
571
473
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} pushAutoChanges`);
572
474
  if (
573
- this.TargetHumidifierDehumidifierState === this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER_OR_DEHUMIDIFIER &&
574
- this.Active === this.hap.Characteristic.Active.ACTIVE
475
+ this.HumidifierDehumidifier.TargetHumidifierDehumidifierState ===
476
+ this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER_OR_DEHUMIDIFIER &&
477
+ this.HumidifierDehumidifier.Active === this.hap.Characteristic.Active.ACTIVE
575
478
  ) {
576
479
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Pushing Auto`);
577
480
  const bodyChange = JSON.stringify({
@@ -594,6 +497,8 @@ export class Humidifier {
594
497
  if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
595
498
  this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
596
499
  + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
500
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
501
+ + `request to SwitchBot API, body: ${deviceStatus} sent successfully`);
597
502
  } else {
598
503
  this.statusCode(statusCode);
599
504
  this.statusCode(deviceStatus.statusCode);
@@ -606,10 +511,8 @@ export class Humidifier {
606
511
  );
607
512
  }
608
513
  } else {
609
- this.debugLog(
610
- `${this.device.deviceType}: ${this.accessory.displayName} No pushAutoChanges.` +
611
- `TargetHumidifierDehumidifierState: ${this.TargetHumidifierDehumidifierState}, Active: ${this.Active}`,
612
- );
514
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushAutoChanges. TargetHumidifierDehumidifierState:`
515
+ + ` ${this.HumidifierDehumidifier.TargetHumidifierDehumidifierState}, Active: ${this.HumidifierDehumidifier.Active}`);
613
516
  }
614
517
  }
615
518
 
@@ -618,7 +521,7 @@ export class Humidifier {
618
521
  */
619
522
  async pushActiveChanges(): Promise<void> {
620
523
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} pushActiveChanges`);
621
- if (this.Active === this.hap.Characteristic.Active.INACTIVE) {
524
+ if (this.HumidifierDehumidifier.Active === this.hap.Characteristic.Active.INACTIVE) {
622
525
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Pushing Off`);
623
526
  const bodyChange = JSON.stringify({
624
527
  command: 'turnOff',
@@ -640,6 +543,8 @@ export class Humidifier {
640
543
  if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
641
544
  this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
642
545
  + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
546
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
547
+ + `request to SwitchBot API, body: ${deviceStatus} sent successfully`);
643
548
  } else {
644
549
  this.statusCode(statusCode);
645
550
  this.statusCode(deviceStatus.statusCode);
@@ -652,7 +557,7 @@ export class Humidifier {
652
557
  );
653
558
  }
654
559
  } else {
655
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushActiveChanges. Active: ${this.Active}`);
560
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No pushActiveChanges. Active: ${this.HumidifierDehumidifier.Active}`);
656
561
  }
657
562
  }
658
563
 
@@ -660,13 +565,13 @@ export class Humidifier {
660
565
  * Handle requests to set the "Active" characteristic
661
566
  */
662
567
  async ActiveSet(value: CharacteristicValue): Promise<void> {
663
- if (this.Active === this.accessory.context.Active) {
568
+ if (this.HumidifierDehumidifier.Active === this.accessory.context.Active) {
664
569
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Active: ${value}`);
665
570
  } else {
666
571
  this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Active: ${value}`);
667
572
  }
668
573
 
669
- this.Active = value;
574
+ this.HumidifierDehumidifier.Active = value;
670
575
  this.doHumidifierUpdate.next();
671
576
  }
672
577
 
@@ -674,13 +579,13 @@ export class Humidifier {
674
579
  * Handle requests to set the "Target Humidifier Dehumidifier State" characteristic
675
580
  */
676
581
  async TargetHumidifierDehumidifierStateSet(value: CharacteristicValue): Promise<void> {
677
- if (this.Active === this.hap.Characteristic.Active.ACTIVE) {
582
+ if (this.HumidifierDehumidifier.Active === this.hap.Characteristic.Active.ACTIVE) {
678
583
  this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set TargetHumidifierDehumidifierState: ${value}`);
679
584
  } else {
680
585
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set TargetHumidifierDehumidifierState: ${value}`);
681
586
  }
682
587
 
683
- this.TargetHumidifierDehumidifierState = value;
588
+ this.HumidifierDehumidifier.TargetHumidifierDehumidifierState = value;
684
589
  this.doHumidifierUpdate.next();
685
590
  }
686
591
 
@@ -688,16 +593,16 @@ export class Humidifier {
688
593
  * Handle requests to set the "Relative Humidity Humidifier Threshold" characteristic
689
594
  */
690
595
  async RelativeHumidityHumidifierThresholdSet(value: CharacteristicValue): Promise<void> {
691
- if (this.Active === this.hap.Characteristic.Active.ACTIVE) {
596
+ if (this.HumidifierDehumidifier.Active === this.hap.Characteristic.Active.ACTIVE) {
692
597
  this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set RelativeHumidityHumidifierThreshold: ${value}`);
693
598
  } else {
694
599
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Set RelativeHumidityHumidifierThreshold: ${value}`);
695
600
  }
696
601
 
697
- this.RelativeHumidityHumidifierThreshold = value;
698
- if (this.Active === this.hap.Characteristic.Active.INACTIVE) {
699
- this.Active = this.hap.Characteristic.Active.ACTIVE;
700
- this.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.IDLE;
602
+ this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold = value;
603
+ if (this.HumidifierDehumidifier.Active === this.hap.Characteristic.Active.INACTIVE) {
604
+ this.HumidifierDehumidifier.Active = this.hap.Characteristic.Active.ACTIVE;
605
+ this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.IDLE;
701
606
  }
702
607
  this.doHumidifierUpdate.next();
703
608
  }
@@ -706,117 +611,76 @@ export class Humidifier {
706
611
  * Updates the status for each of the HomeKit Characteristics
707
612
  */
708
613
  async updateHomeKitCharacteristics(): Promise<void> {
709
- if (this.CurrentRelativeHumidity === undefined) {
710
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`);
614
+ if (this.HumidifierDehumidifier.CurrentRelativeHumidity === undefined) {
615
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
616
+ + ` CurrentRelativeHumidity: ${this.HumidifierDehumidifier.CurrentRelativeHumidity}`);
711
617
  } else {
712
- this.humidifierService.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, this.CurrentRelativeHumidity);
713
- this.debugLog(
714
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` updateCharacteristic CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`,
715
- );
716
- this.accessory.context.CurrentRelativeHumidity = this.CurrentRelativeHumidity;
618
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity,
619
+ this.HumidifierDehumidifier.CurrentRelativeHumidity);
620
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
621
+ + ` CurrentRelativeHumidity: ${this.HumidifierDehumidifier.CurrentRelativeHumidity}`);
622
+ this.accessory.context.CurrentRelativeHumidity = this.HumidifierDehumidifier.CurrentRelativeHumidity;
717
623
  }
718
624
  if (this.OpenAPI) {
719
- if (this.WaterLevel === undefined) {
720
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} WaterLevel: ${this.WaterLevel}`);
625
+ if (this.HumidifierDehumidifier.WaterLevel === undefined) {
626
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} WaterLevel: ${this.HumidifierDehumidifier.WaterLevel}`);
721
627
  } else {
722
- this.humidifierService.updateCharacteristic(this.hap.Characteristic.WaterLevel, this.WaterLevel);
723
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic WaterLevel: ${this.WaterLevel}`);
724
- this.accessory.context.WaterLevel = this.WaterLevel;
628
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.WaterLevel, this.HumidifierDehumidifier.WaterLevel);
629
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
630
+ + ` WaterLevel: ${this.HumidifierDehumidifier.WaterLevel}`);
631
+ this.accessory.context.WaterLevel = this.HumidifierDehumidifier.WaterLevel;
725
632
  }
726
633
  }
727
- if (this.CurrentHumidifierDehumidifierState === undefined) {
728
- this.debugLog(
729
- `${this.device.deviceType}: ${this.accessory.displayName}` +
730
- ` CurrentHumidifierDehumidifierState: ${this.CurrentHumidifierDehumidifierState}`,
731
- );
634
+ if (this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState === undefined) {
635
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}` +
636
+ ` CurrentHumidifierDehumidifierState: ${this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState}`);
732
637
  } else {
733
- this.humidifierService.updateCharacteristic(
734
- this.hap.Characteristic.CurrentHumidifierDehumidifierState,
735
- this.CurrentHumidifierDehumidifierState,
736
- );
737
- this.debugLog(
738
- `${this.device.deviceType}: ${this.accessory.displayName}` +
739
- ` updateCharacteristic CurrentHumidifierDehumidifierState: ${this.CurrentHumidifierDehumidifierState}`,
740
- );
741
- this.accessory.context.CurrentHumidifierDehumidifierState = this.CurrentHumidifierDehumidifierState;
742
- }
743
- if (this.TargetHumidifierDehumidifierState === undefined) {
744
- this.debugLog(
745
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` TargetHumidifierDehumidifierState: ${this.TargetHumidifierDehumidifierState}`,
638
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.CurrentHumidifierDehumidifierState,
639
+ this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState);
640
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic` +
641
+ ` CurrentHumidifierDehumidifierState: ${this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState}`);
642
+ this.accessory.context.CurrentHumidifierDehumidifierState = this.HumidifierDehumidifier.CurrentHumidifierDehumidifierState;
643
+ }
644
+ if (this.HumidifierDehumidifier.TargetHumidifierDehumidifierState === undefined) {
645
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}`
646
+ + ` TargetHumidifierDehumidifierState: ${this.HumidifierDehumidifier.TargetHumidifierDehumidifierState}`,
746
647
  );
747
648
  } else {
748
- this.humidifierService.updateCharacteristic(
749
- this.hap.Characteristic.TargetHumidifierDehumidifierState,
750
- this.TargetHumidifierDehumidifierState,
751
- );
752
- this.debugLog(
753
- `${this.device.deviceType}: ${this.accessory.displayName}` +
754
- ` updateCharacteristic TargetHumidifierDehumidifierState: ${this.TargetHumidifierDehumidifierState}`,
755
- );
756
- this.accessory.context.TargetHumidifierDehumidifierState = this.TargetHumidifierDehumidifierState;
757
- }
758
- if (this.Active === undefined) {
759
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Active: ${this.Active}`);
649
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.TargetHumidifierDehumidifierState,
650
+ this.HumidifierDehumidifier.TargetHumidifierDehumidifierState);
651
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
652
+ + ` TargetHumidifierDehumidifierState: ${this.HumidifierDehumidifier.TargetHumidifierDehumidifierState}`);
653
+ this.accessory.context.TargetHumidifierDehumidifierState = this.HumidifierDehumidifier.TargetHumidifierDehumidifierState;
654
+ }
655
+ if (this.HumidifierDehumidifier.Active === undefined) {
656
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Active: ${this.HumidifierDehumidifier.Active}`);
760
657
  } else {
761
- this.humidifierService.updateCharacteristic(this.hap.Characteristic.Active, this.Active);
762
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Active: ${this.Active}`);
763
- this.accessory.context.Active = this.Active;
658
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.Active, this.HumidifierDehumidifier.Active);
659
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Active: ${this.HumidifierDehumidifier.Active}`);
660
+ this.accessory.context.Active = this.HumidifierDehumidifier.Active;
764
661
  }
765
- if (this.RelativeHumidityHumidifierThreshold === undefined) {
766
- this.debugLog(
767
- `${this.device.deviceType}: ${this.accessory.displayName}` +
768
- ` RelativeHumidityHumidifierThreshold: ${this.RelativeHumidityHumidifierThreshold}`,
769
- );
662
+ if (this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold === undefined) {
663
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName}` +
664
+ ` RelativeHumidityHumidifierThreshold: ${this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold}`);
770
665
  } else {
771
- this.humidifierService.updateCharacteristic(
772
- this.hap.Characteristic.RelativeHumidityHumidifierThreshold,
773
- this.RelativeHumidityHumidifierThreshold,
774
- );
775
- this.debugLog(
776
- `${this.device.deviceType}: ${this.accessory.displayName}` +
777
- ` updateCharacteristic RelativeHumidityHumidifierThreshold: ${this.RelativeHumidityHumidifierThreshold}`,
778
- );
779
- this.accessory.context.RelativeHumidityHumidifierThreshold = this.RelativeHumidityHumidifierThreshold;
666
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.RelativeHumidityHumidifierThreshold,
667
+ this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold);
668
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic` +
669
+ ` RelativeHumidityHumidifierThreshold: ${this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold}`);
670
+ this.accessory.context.RelativeHumidityHumidifierThreshold = this.HumidifierDehumidifier.RelativeHumidityHumidifierThreshold;
780
671
  }
781
672
  if (!this.device.humidifier?.hide_temperature && !this.BLE) {
782
- if (this.CurrentTemperature === undefined) {
783
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentTemperature: ${this.CurrentTemperature}`);
673
+ if (this.TemperatureSensor!.CurrentTemperature === undefined) {
674
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentTemperature: ${this.TemperatureSensor!.CurrentTemperature}`);
784
675
  } else {
785
- this.temperatureservice?.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, this.CurrentTemperature);
786
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic CurrentTemperature: ${this.CurrentTemperature}`);
787
- this.accessory.context.CurrentTemperature = this.CurrentTemperature;
676
+ this.TemperatureSensor!.Service.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, this.TemperatureSensor!.CurrentTemperature);
677
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic`
678
+ + ` CurrentTemperature: ${this.TemperatureSensor!.CurrentTemperature}`);
679
+ this.accessory.context.CurrentTemperature = this.TemperatureSensor!.CurrentTemperature;
788
680
  }
789
681
  }
790
682
  }
791
683
 
792
- async stopScanning(switchbot: any) {
793
- switchbot.stopScan();
794
- if (this.connected) {
795
- await this.BLEparseStatus();
796
- await this.updateHomeKitCharacteristics();
797
- } else {
798
- await this.BLERefreshConnection(switchbot);
799
- }
800
- }
801
-
802
- async getCustomBLEAddress(switchbot: any) {
803
- if (this.device.customBLEaddress && this.deviceLogging.includes('debug')) {
804
- (async () => {
805
- // Start to monitor advertisement packets
806
- await switchbot.startScan({
807
- model: 'e',
808
- });
809
- // Set an event handler
810
- switchbot.onadvertisement = (ad: any) => {
811
- this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} ad: ${JSON.stringify(ad, null, ' ')}`);
812
- };
813
- await sleep(10000);
814
- // Stop to monitor
815
- switchbot.stopScan();
816
- })();
817
- }
818
- }
819
-
820
684
  async BLEPushConnection() {
821
685
  if (this.platform.config.credentials?.token && this.device.connectionType === 'BLE/OpenAPI') {
822
686
  this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} Using OpenAPI Connection to Push Changes`);
@@ -833,283 +697,38 @@ export class Humidifier {
833
697
  }
834
698
  }
835
699
 
836
- minStep(): number {
837
- if (this.device.humidifier?.set_minStep) {
838
- this.set_minStep = this.device.humidifier?.set_minStep;
839
- } else {
840
- this.set_minStep = 1;
841
- }
842
- return this.set_minStep;
843
- }
844
-
845
- async scan(device: device & devicesConfig): Promise<void> {
846
- if (device.scanDuration) {
847
- this.scanDuration = this.accessory.context.scanDuration = device.scanDuration;
848
- if (this.BLE) {
849
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config scanDuration: ${this.scanDuration}`);
850
- }
700
+ minStep(device: device & devicesConfig): number {
701
+ let set_minStep: number;
702
+ if (device.humidifier?.set_minStep) {
703
+ set_minStep = device.humidifier?.set_minStep;
851
704
  } else {
852
- this.scanDuration = this.accessory.context.scanDuration = 1;
853
- if (this.BLE) {
854
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Default scanDuration: ${this.scanDuration}`);
855
- }
856
- }
857
- }
858
-
859
- async statusCode(statusCode: number): Promise<void> {
860
- switch (statusCode) {
861
- case 151:
862
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Command not supported by this deviceType, statusCode: ${statusCode}`);
863
- break;
864
- case 152:
865
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device not found, statusCode: ${statusCode}`);
866
- break;
867
- case 160:
868
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Command is not supported, statusCode: ${statusCode}`);
869
- break;
870
- case 161:
871
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Device is offline, statusCode: ${statusCode}`);
872
- this.offlineOff();
873
- break;
874
- case 171:
875
- this.errorLog(
876
- `${this.device.deviceType}: ${this.accessory.displayName} Hub Device is offline, statusCode: ${statusCode}. ` +
877
- `Hub: ${this.device.hubDeviceId}`,
878
- );
879
- this.offlineOff();
880
- break;
881
- case 190:
882
- this.errorLog(
883
- `${this.device.deviceType}: ${this.accessory.displayName} Device internal error due to device states not synchronized with server,` +
884
- ` Or command format is invalid, statusCode: ${statusCode}`,
885
- );
886
- break;
887
- case 100:
888
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Command successfully sent, statusCode: ${statusCode}`);
889
- break;
890
- case 200:
891
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Request successful, statusCode: ${statusCode}`);
892
- break;
893
- case 400:
894
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Bad Request, The client has issued an invalid request. `
895
- + `This is commonly used to specify validation errors in a request payload, statusCode: ${statusCode}`);
896
- break;
897
- case 401:
898
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unauthorized, Authorization for the API is required, `
899
- + `but the request has not been authenticated, statusCode: ${statusCode}`);
900
- break;
901
- case 403:
902
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Forbidden, The request has been authenticated but does not `
903
- + `have appropriate permissions, or a requested resource is not found, statusCode: ${statusCode}`);
904
- break;
905
- case 404:
906
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Not Found, Specifies the requested path does not exist, `
907
- + `statusCode: ${statusCode}`);
908
- break;
909
- case 406:
910
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Not Acceptable, The client has requested a MIME type via `
911
- + `the Accept header for a value not supported by the server, statusCode: ${statusCode}`);
912
- break;
913
- case 415:
914
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unsupported Media Type, The client has defined a contentType `
915
- + `header that is not supported by the server, statusCode: ${statusCode}`);
916
- break;
917
- case 422:
918
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Unprocessable Entity, The client has made a valid request, `
919
- + `but the server cannot process it. This is often used for APIs for which certain limits have been exceeded, statusCode: ${statusCode}`);
920
- break;
921
- case 429:
922
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Too Many Requests, The client has exceeded the number of `
923
- + `requests allowed for a given time window, statusCode: ${statusCode}`);
924
- break;
925
- case 500:
926
- this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} Internal Server Error, An unexpected error on the SmartThings `
927
- + `servers has occurred. These errors should be rare, statusCode: ${statusCode}`);
928
- break;
929
- default:
930
- this.infoLog(
931
- `${this.device.deviceType}: ${this.accessory.displayName} Unknown statusCode: ` +
932
- `${statusCode}, Submit Bugs Here: ' + 'https://tinyurl.com/SwitchBotBug`,
933
- );
705
+ set_minStep = 1;
934
706
  }
707
+ return set_minStep;
935
708
  }
936
709
 
937
710
  async offlineOff(): Promise<void> {
938
711
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} offline: ${this.device.offline}`);
939
712
  if (this.device.offline) {
940
- await this.deviceContext();
941
- if (this.CurrentTemperature === undefined) {
942
- this.CurrentTemperature = 0;
943
- }
944
- await this.updateHomeKitCharacteristics();
713
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.CurrentHumidifierDehumidifierState,
714
+ this.hap.Characteristic.CurrentHumidifierDehumidifierState.INACTIVE);
715
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.TargetHumidifierDehumidifierState,
716
+ this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER);
717
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.Active, this.hap.Characteristic.Active.INACTIVE);
945
718
  }
946
719
  }
947
720
 
948
721
  async apiError(e: any): Promise<void> {
949
- this.humidifierService.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, e);
722
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, e);
950
723
  if (!this.BLE) {
951
- this.humidifierService.updateCharacteristic(this.hap.Characteristic.WaterLevel, e);
724
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.WaterLevel, e);
952
725
  }
953
- this.humidifierService.updateCharacteristic(this.hap.Characteristic.CurrentHumidifierDehumidifierState, e);
954
- this.humidifierService.updateCharacteristic(this.hap.Characteristic.TargetHumidifierDehumidifierState, e);
955
- this.humidifierService.updateCharacteristic(this.hap.Characteristic.Active, e);
956
- this.humidifierService.updateCharacteristic(this.hap.Characteristic.RelativeHumidityHumidifierThreshold, e);
726
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.CurrentHumidifierDehumidifierState, e);
727
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.TargetHumidifierDehumidifierState, e);
728
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.Active, e);
729
+ this.HumidifierDehumidifier.Service.updateCharacteristic(this.hap.Characteristic.RelativeHumidityHumidifierThreshold, e);
957
730
  if (!this.device.humidifier?.hide_temperature && !this.BLE) {
958
- this.temperatureservice?.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, e);
959
- }
960
- }
961
-
962
- async deviceContext() {
963
- if (this.Active === undefined) {
964
- this.Active = this.hap.Characteristic.Active.ACTIVE;
965
- } else {
966
- this.Active = this.accessory.context.Active;
967
- }
968
- if (this.CurrentTemperature === undefined) {
969
- this.CurrentTemperature = 30;
970
- } else {
971
- this.CurrentTemperature = this.accessory.context.CurrentTemperature;
972
- }
973
- if (this.CurrentRelativeHumidity === undefined) {
974
- this.CurrentRelativeHumidity = 0;
975
- } else {
976
- this.CurrentRelativeHumidity = this.accessory.context.CurrentRelativeHumidity;
977
- }
978
- if (this.TargetHumidifierDehumidifierState === undefined) {
979
- this.TargetHumidifierDehumidifierState = this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER;
980
- } else if (this.accessory.context.TargetHumidifierDehumidifierState === undefined) {
981
- this.TargetHumidifierDehumidifierState = this.hap.Characteristic.TargetHumidifierDehumidifierState.HUMIDIFIER;
982
- } else {
983
- this.TargetHumidifierDehumidifierState = this.accessory.context.TargetHumidifierDehumidifierState;
984
- }
985
- if (this.CurrentHumidifierDehumidifierState === undefined) {
986
- this.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.INACTIVE;
987
- } else if (this.accessory.context.CurrentHumidifierDehumidifierState === undefined) {
988
- this.CurrentHumidifierDehumidifierState = this.hap.Characteristic.CurrentHumidifierDehumidifierState.INACTIVE;
989
- } else {
990
- this.CurrentHumidifierDehumidifierState = this.accessory.context.CurrentHumidifierDehumidifierState;
991
- }
992
- if (this.RelativeHumidityHumidifierThreshold === undefined) {
993
- this.RelativeHumidityHumidifierThreshold = 0;
994
- } else {
995
- this.RelativeHumidityHumidifierThreshold = this.accessory.context.RelativeHumidityHumidifierThreshold;
996
- }
997
- if (this.WaterLevel === undefined) {
998
- this.WaterLevel = 0;
999
- } else {
1000
- this.WaterLevel = this.accessory.context.WaterLevel;
1001
- }
1002
- if (this.FirmwareRevision === undefined) {
1003
- this.FirmwareRevision = this.platform.version;
1004
- this.accessory.context.FirmwareRevision = this.FirmwareRevision;
1005
- }
1006
- }
1007
-
1008
- async refreshRate(device: device & devicesConfig): Promise<void> {
1009
- if (device.refreshRate) {
1010
- this.deviceRefreshRate = this.accessory.context.refreshRate = device.refreshRate;
1011
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config refreshRate: ${this.deviceRefreshRate}`);
1012
- } else if (this.platform.config.options!.refreshRate) {
1013
- this.deviceRefreshRate = this.accessory.context.refreshRate = this.platform.config.options!.refreshRate;
1014
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Platform Config refreshRate: ${this.deviceRefreshRate}`);
731
+ this.TemperatureSensor!.Service.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, e);
1015
732
  }
1016
733
  }
1017
-
1018
- async deviceConfig(device: device & devicesConfig): Promise<void> {
1019
- let config = {};
1020
- if (device.humidifier) {
1021
- config = device.humidifier;
1022
- }
1023
- if (device.connectionType !== undefined) {
1024
- config['connectionType'] = device.connectionType;
1025
- }
1026
- if (device.external !== undefined) {
1027
- config['external'] = device.external;
1028
- }
1029
- if (device.logging !== undefined) {
1030
- config['logging'] = device.logging;
1031
- }
1032
- if (device.refreshRate !== undefined) {
1033
- config['refreshRate'] = device.refreshRate;
1034
- }
1035
- if (device.scanDuration !== undefined) {
1036
- config['scanDuration'] = device.scanDuration;
1037
- }
1038
- if (device.offline !== undefined) {
1039
- config['offline'] = device.offline;
1040
- }
1041
- if (device.webhook !== undefined) {
1042
- config['webhook'] = device.webhook;
1043
- }
1044
- if (Object.entries(config).length !== 0) {
1045
- this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
1046
- }
1047
- }
1048
-
1049
- async deviceLogs(device: device & devicesConfig): Promise<void> {
1050
- if (this.platform.debugMode) {
1051
- this.deviceLogging = this.accessory.context.logging = 'debugMode';
1052
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Debug Mode Logging: ${this.deviceLogging}`);
1053
- } else if (device.logging) {
1054
- this.deviceLogging = this.accessory.context.logging = device.logging;
1055
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Config Logging: ${this.deviceLogging}`);
1056
- } else if (this.platform.config.options?.logging) {
1057
- this.deviceLogging = this.accessory.context.logging = this.platform.config.options?.logging;
1058
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Platform Config Logging: ${this.deviceLogging}`);
1059
- } else {
1060
- this.deviceLogging = this.accessory.context.logging = 'standard';
1061
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Logging Not Set, Using: ${this.deviceLogging}`);
1062
- }
1063
- }
1064
-
1065
- /**
1066
- * Logging for Device
1067
- */
1068
- async infoLog(...log: any[]): Promise<void> {
1069
- if (this.enablingDeviceLogging()) {
1070
- this.platform.log.info(String(...log));
1071
- }
1072
- }
1073
-
1074
- async warnLog(...log: any[]): Promise<void> {
1075
- if (this.enablingDeviceLogging()) {
1076
- this.platform.log.warn(String(...log));
1077
- }
1078
- }
1079
-
1080
- async debugWarnLog(...log: any[]): Promise<void> {
1081
- if (this.enablingDeviceLogging()) {
1082
- if (this.deviceLogging?.includes('debug')) {
1083
- this.platform.log.warn('[DEBUG]', String(...log));
1084
- }
1085
- }
1086
- }
1087
-
1088
- async errorLog(...log: any[]): Promise<void> {
1089
- if (this.enablingDeviceLogging()) {
1090
- this.platform.log.error(String(...log));
1091
- }
1092
- }
1093
-
1094
- async debugErrorLog(...log: any[]): Promise<void> {
1095
- if (this.enablingDeviceLogging()) {
1096
- if (this.deviceLogging?.includes('debug')) {
1097
- this.platform.log.error('[DEBUG]', String(...log));
1098
- }
1099
- }
1100
- }
1101
-
1102
- async debugLog(...log: any[]): Promise<void> {
1103
- if (this.enablingDeviceLogging()) {
1104
- if (this.deviceLogging === 'debug') {
1105
- this.platform.log.info('[DEBUG]', String(...log));
1106
- } else {
1107
- this.platform.log.debug(String(...log));
1108
- }
1109
- }
1110
- }
1111
-
1112
- enablingDeviceLogging(): boolean {
1113
- return this.deviceLogging.includes('debug') || this.deviceLogging === 'standard';
1114
- }
1115
734
  }