@switchbot/homebridge-switchbot 1.4.0 → 1.4.1-beta.3

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 (103) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/config.schema.json +83 -11
  3. package/dist/devices/bots.d.ts +13 -3
  4. package/dist/devices/bots.d.ts.map +1 -1
  5. package/dist/devices/bots.js +162 -105
  6. package/dist/devices/bots.js.map +1 -1
  7. package/dist/devices/colorbulb.d.ts +13 -3
  8. package/dist/devices/colorbulb.d.ts.map +1 -1
  9. package/dist/devices/colorbulb.js +161 -96
  10. package/dist/devices/colorbulb.js.map +1 -1
  11. package/dist/devices/contact.d.ts +13 -3
  12. package/dist/devices/contact.d.ts.map +1 -1
  13. package/dist/devices/contact.js +117 -63
  14. package/dist/devices/contact.js.map +1 -1
  15. package/dist/devices/curtains.d.ts +14 -5
  16. package/dist/devices/curtains.d.ts.map +1 -1
  17. package/dist/devices/curtains.js +198 -140
  18. package/dist/devices/curtains.js.map +1 -1
  19. package/dist/devices/humidifiers.d.ts +13 -3
  20. package/dist/devices/humidifiers.d.ts.map +1 -1
  21. package/dist/devices/humidifiers.js +180 -127
  22. package/dist/devices/humidifiers.js.map +1 -1
  23. package/dist/devices/meters.d.ts +13 -3
  24. package/dist/devices/meters.d.ts.map +1 -1
  25. package/dist/devices/meters.js +121 -63
  26. package/dist/devices/meters.js.map +1 -1
  27. package/dist/devices/motion.d.ts +13 -3
  28. package/dist/devices/motion.d.ts.map +1 -1
  29. package/dist/devices/motion.js +104 -45
  30. package/dist/devices/motion.js.map +1 -1
  31. package/dist/devices/plugs.d.ts +13 -3
  32. package/dist/devices/plugs.d.ts.map +1 -1
  33. package/dist/devices/plugs.js +99 -35
  34. package/dist/devices/plugs.js.map +1 -1
  35. package/dist/irdevices/airconditioners.d.ts +11 -3
  36. package/dist/irdevices/airconditioners.d.ts.map +1 -1
  37. package/dist/irdevices/airconditioners.js +80 -45
  38. package/dist/irdevices/airconditioners.js.map +1 -1
  39. package/dist/irdevices/airpurifiers.d.ts +11 -3
  40. package/dist/irdevices/airpurifiers.d.ts.map +1 -1
  41. package/dist/irdevices/airpurifiers.js +68 -31
  42. package/dist/irdevices/airpurifiers.js.map +1 -1
  43. package/dist/irdevices/cameras.d.ts +11 -3
  44. package/dist/irdevices/cameras.d.ts.map +1 -1
  45. package/dist/irdevices/cameras.js +64 -24
  46. package/dist/irdevices/cameras.js.map +1 -1
  47. package/dist/irdevices/fans.d.ts +11 -3
  48. package/dist/irdevices/fans.d.ts.map +1 -1
  49. package/dist/irdevices/fans.js +74 -35
  50. package/dist/irdevices/fans.js.map +1 -1
  51. package/dist/irdevices/lights.d.ts +11 -3
  52. package/dist/irdevices/lights.d.ts.map +1 -1
  53. package/dist/irdevices/lights.js +65 -25
  54. package/dist/irdevices/lights.js.map +1 -1
  55. package/dist/irdevices/others.d.ts +11 -3
  56. package/dist/irdevices/others.d.ts.map +1 -1
  57. package/dist/irdevices/others.js +71 -31
  58. package/dist/irdevices/others.js.map +1 -1
  59. package/dist/irdevices/tvs.d.ts +11 -3
  60. package/dist/irdevices/tvs.d.ts.map +1 -1
  61. package/dist/irdevices/tvs.js +81 -42
  62. package/dist/irdevices/tvs.js.map +1 -1
  63. package/dist/irdevices/vacuumcleaners.d.ts +11 -3
  64. package/dist/irdevices/vacuumcleaners.d.ts.map +1 -1
  65. package/dist/irdevices/vacuumcleaners.js +64 -24
  66. package/dist/irdevices/vacuumcleaners.js.map +1 -1
  67. package/dist/irdevices/waterheaters.d.ts +11 -3
  68. package/dist/irdevices/waterheaters.d.ts.map +1 -1
  69. package/dist/irdevices/waterheaters.js +64 -24
  70. package/dist/irdevices/waterheaters.js.map +1 -1
  71. package/dist/platform.d.ts +10 -10
  72. package/dist/platform.d.ts.map +1 -1
  73. package/dist/platform.js +290 -307
  74. package/dist/platform.js.map +1 -1
  75. package/dist/settings.d.ts +4 -1
  76. package/dist/settings.d.ts.map +1 -1
  77. package/dist/settings.js.map +1 -1
  78. package/nodemon.json +1 -1
  79. package/package.json +70 -66
  80. package/src/devices/bots.ts +169 -105
  81. package/src/devices/colorbulb.ts +170 -99
  82. package/src/devices/contact.ts +124 -64
  83. package/src/devices/curtains.ts +207 -145
  84. package/src/devices/humidifiers.ts +187 -129
  85. package/src/devices/meters.ts +128 -64
  86. package/src/devices/motion.ts +110 -45
  87. package/src/devices/plugs.ts +104 -36
  88. package/src/irdevices/airconditioners.ts +85 -45
  89. package/src/irdevices/airpurifiers.ts +73 -31
  90. package/src/irdevices/cameras.ts +69 -24
  91. package/src/irdevices/fans.ts +79 -36
  92. package/src/irdevices/lights.ts +70 -25
  93. package/src/irdevices/others.ts +76 -31
  94. package/src/irdevices/tvs.ts +86 -42
  95. package/src/irdevices/vacuumcleaners.ts +69 -24
  96. package/src/irdevices/waterheaters.ts +69 -24
  97. package/src/platform.ts +285 -302
  98. package/src/settings.ts +4 -1
  99. package/dist/devices/indoorcam.d.ts +0 -64
  100. package/dist/devices/indoorcam.d.ts.map +0 -1
  101. package/dist/devices/indoorcam.js +0 -249
  102. package/dist/devices/indoorcam.js.map +0 -1
  103. package/src/devices/indoorcam.ts +0 -309
@@ -2,7 +2,7 @@ import Switchbot from 'node-switchbot';
2
2
  import { interval, Subject } from 'rxjs';
3
3
  import { skipWhile } from 'rxjs/operators';
4
4
  import { SwitchBotPlatform } from '../platform';
5
- import { Service, PlatformAccessory, Units, CharacteristicValue } from 'homebridge';
5
+ import { Service, PlatformAccessory, Units, CharacteristicValue, HAPStatus } from 'homebridge';
6
6
  import { DeviceURL, device, devicesConfig, serviceData, ad, switchbot, deviceStatusResponse, temperature } from '../settings';
7
7
 
8
8
  /**
@@ -40,8 +40,8 @@ export class Meter {
40
40
  humidity!: serviceData['humidity'];
41
41
 
42
42
  // Config
43
- private readonly deviceDebug = this.platform.config.options?.debug === 'device' || this.platform.debugMode;
44
- private readonly debugDebug = this.platform.config.options?.debug === 'debug' || this.platform.debugMode;
43
+ deviceLogging!: string;
44
+ deviceRefreshRate!: number;
45
45
 
46
46
  // Updates
47
47
  meterUpdateInProgress!: boolean;
@@ -52,11 +52,9 @@ export class Meter {
52
52
  private accessory: PlatformAccessory,
53
53
  public device: device & devicesConfig,
54
54
  ) {
55
- // Meter Config
56
- this.platform.device(`Meter: ${this.accessory.displayName} Config: (ble: ${device.ble}, hide_temperature: ${device.meter?.hide_temperature},`
57
- + ` hide_humidity: ${device.meter?.hide_humidity})`);
58
-
59
55
  // default placeholders
56
+ this.refreshRate();
57
+ this.logs();
60
58
  if (this.BatteryLevel === undefined) {
61
59
  this.BatteryLevel = 100;
62
60
  } else {
@@ -79,6 +77,10 @@ export class Meter {
79
77
  this.CurrentTemperature = this.accessory.context.CurrentTemperature;
80
78
  }
81
79
 
80
+ // Meter Config
81
+ this.debugLog(`Meter: ${this.accessory.displayName} Config: (ble: ${device.ble}, hide_temperature: ${device.meter?.hide_temperature},`
82
+ + ` hide_humidity: ${device.meter?.hide_humidity})`);
83
+
82
84
  // this is subject we use to track when we need to POST changes to the SwitchBot API
83
85
  this.doMeterUpdate = new Subject();
84
86
  this.meterUpdateInProgress = false;
@@ -115,11 +117,11 @@ export class Meter {
115
117
 
116
118
  // Temperature Sensor Service
117
119
  if (device.meter?.hide_temperature) {
118
- this.platform.device(`Meter: ${accessory.displayName} Removing Temperature Sensor Service`);
120
+ this.debugLog(`Meter: ${accessory.displayName} Removing Temperature Sensor Service`);
119
121
  this.temperatureservice = this.accessory.getService(this.platform.Service.TemperatureSensor);
120
122
  accessory.removeService(this.temperatureservice!);
121
123
  } else if (!this.temperatureservice) {
122
- this.platform.device(`Meter: ${accessory.displayName} Add Temperature Sensor Service`);
124
+ this.debugLog(`Meter: ${accessory.displayName} Add Temperature Sensor Service`);
123
125
  (this.temperatureservice =
124
126
  this.accessory.getService(this.platform.Service.TemperatureSensor) ||
125
127
  this.accessory.addService(this.platform.Service.TemperatureSensor)), `${accessory.displayName} Temperature Sensor`;
@@ -139,16 +141,16 @@ export class Meter {
139
141
  return this.CurrentTemperature;
140
142
  });
141
143
  } else {
142
- this.platform.device(`Meter: ${accessory.displayName} Temperature Sensor Service Not Added`);
144
+ this.debugLog(`Meter: ${accessory.displayName} Temperature Sensor Service Not Added`);
143
145
  }
144
146
 
145
147
  // Humidity Sensor Service
146
148
  if (device.meter?.hide_humidity) {
147
- this.platform.device(`Meter: ${accessory.displayName} Removing Humidity Sensor Service`);
149
+ this.debugLog(`Meter: ${accessory.displayName} Removing Humidity Sensor Service`);
148
150
  this.humidityservice = this.accessory.getService(this.platform.Service.HumiditySensor);
149
151
  accessory.removeService(this.humidityservice!);
150
152
  } else if (!this.humidityservice) {
151
- this.platform.device(`Meter: ${accessory.displayName} Add Humidity Sensor Service`);
153
+ this.debugLog(`Meter: ${accessory.displayName} Add Humidity Sensor Service`);
152
154
  (this.humidityservice =
153
155
  this.accessory.getService(this.platform.Service.HumiditySensor) ||
154
156
  this.accessory.addService(this.platform.Service.HumiditySensor)), `${accessory.displayName} Humidity Sensor`;
@@ -164,20 +166,53 @@ export class Meter {
164
166
  return this.CurrentRelativeHumidity;
165
167
  });
166
168
  } else {
167
- this.platform.device(`Meter: ${accessory.displayName} Humidity Sensor Service Not Added`);
169
+ this.debugLog(`Meter: ${accessory.displayName} Humidity Sensor Service Not Added`);
168
170
  }
169
171
 
170
172
  // Retrieve initial values and updateHomekit
171
173
  this.updateHomeKitCharacteristics();
172
174
 
173
175
  // Start an update interval
174
- interval(this.platform.config.options!.refreshRate! * 1000)
176
+ interval(this.deviceRefreshRate * 1000)
175
177
  .pipe(skipWhile(() => this.meterUpdateInProgress))
176
178
  .subscribe(() => {
177
179
  this.refreshStatus();
178
180
  });
179
181
  }
180
182
 
183
+ refreshRate() {
184
+ if (this.device.refreshRate) {
185
+ this.deviceRefreshRate = this.accessory.context.refreshRate = this.device.refreshRate;
186
+ if (this.platform.debugMode) {
187
+ this.warnLog(`Using Device Config refreshRate: ${this.deviceRefreshRate}`);
188
+ }
189
+ } else if (this.platform.config.options!.refreshRate) {
190
+ this.deviceRefreshRate = this.accessory.context.refreshRate = this.platform.config.options!.refreshRate;
191
+ if (this.platform.debugMode) {
192
+ this.warnLog(`Using Platform Config refreshRate: ${this.deviceRefreshRate}`);
193
+ }
194
+ }
195
+ }
196
+
197
+ logs() {
198
+ if (this.device.logging) {
199
+ this.deviceLogging = this.accessory.context.logging = this.device.logging;
200
+ if (this.platform.debugMode) {
201
+ this.warnLog(`Using Device Config Logging: ${this.deviceLogging}`);
202
+ }
203
+ } else if (this.platform.config.options?.logging) {
204
+ this.deviceLogging = this.accessory.context.logging = this.platform.config.options?.logging;
205
+ if (this.platform.debugMode) {
206
+ this.warnLog(`Using Platform Config Logging: ${this.deviceLogging}`);
207
+ }
208
+ } else {
209
+ this.deviceLogging = this.accessory.context.logging = 'standard';
210
+ if (this.platform.debugMode) {
211
+ this.warnLog('Using Device Standard Logging');
212
+ }
213
+ }
214
+ }
215
+
181
216
  /**
182
217
  * Parse the device status from the SwitchBot api
183
218
  */
@@ -190,7 +225,7 @@ export class Meter {
190
225
  }
191
226
 
192
227
  private async BLEparseStatus() {
193
- this.platform.debug(`Meter: ${this.accessory.displayName} BLE parseStatus`);
228
+ this.debugLog(`Meter: ${this.accessory.displayName} BLE parseStatus`);
194
229
 
195
230
  // Battery
196
231
  this.BatteryLevel = Number(this.battery);
@@ -199,25 +234,25 @@ export class Meter {
199
234
  } else {
200
235
  this.StatusLowBattery = this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
201
236
  }
202
- this.platform.debug(`${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}, StatusLowBattery: ${this.StatusLowBattery}`);
237
+ this.debugLog(`${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}, StatusLowBattery: ${this.StatusLowBattery}`);
203
238
 
204
239
  if (!this.device.meter?.hide_humidity) {
205
240
  // Humidity
206
241
  this.CurrentRelativeHumidity = Number(this.humidity);
207
- this.platform.debug(`Meter: ${this.accessory.displayName} Humidity: ${this.CurrentRelativeHumidity}%`);
242
+ this.debugLog(`Meter: ${this.accessory.displayName} Humidity: ${this.CurrentRelativeHumidity}%`);
208
243
  }
209
244
 
210
245
  // Current Temperature
211
246
  if (!this.device.meter?.hide_temperature) {
212
247
  this.temperature < 0 ? 0 : this.temperature > 100 ? 100 : this.temperature;
213
248
  this.CurrentTemperature = this.temperature;
214
- this.platform.debug(`Meter: ${this.accessory.displayName} Temperature: ${this.CurrentTemperature}°c`);
249
+ this.debugLog(`Meter: ${this.accessory.displayName} Temperature: ${this.CurrentTemperature}°c`);
215
250
  }
216
251
  }
217
252
 
218
253
  private async openAPIparseStatus() {
219
254
  if (this.platform.config.credentials?.openToken) {
220
- this.platform.debug(`Meter: ${this.accessory.displayName} OpenAPI parseStatus`);
255
+ this.debugLog(`Meter: ${this.accessory.displayName} OpenAPI parseStatus`);
221
256
  if (this.deviceStatus.body) {
222
257
  this.BatteryLevel = 100;
223
258
  } else {
@@ -231,13 +266,13 @@ export class Meter {
231
266
  // Current Relative Humidity
232
267
  if (!this.device.meter?.hide_humidity) {
233
268
  this.CurrentRelativeHumidity = this.deviceStatus.body.humidity!;
234
- this.platform.debug(`Meter: ${this.accessory.displayName} Humidity: ${this.CurrentRelativeHumidity}%`);
269
+ this.debugLog(`Meter: ${this.accessory.displayName} Humidity: ${this.CurrentRelativeHumidity}%`);
235
270
  }
236
271
 
237
272
  // Current Temperature
238
273
  if (!this.device.meter?.hide_temperature) {
239
274
  this.CurrentTemperature = Number(this.deviceStatus.body.temperature);
240
- this.platform.debug(`Meter: ${this.accessory.displayName} Temperature: ${this.CurrentTemperature}°c`);
275
+ this.debugLog(`Meter: ${this.accessory.displayName} Temperature: ${this.CurrentTemperature}°c`);
241
276
  }
242
277
  }
243
278
  }
@@ -247,25 +282,26 @@ export class Meter {
247
282
  */
248
283
  async refreshStatus() {
249
284
  if (this.device.ble) {
250
- await this.BLErefreshStatus();
285
+ this.BLErefreshStatus();
251
286
  } else {
252
- await this.openAPIRefreshStatus();
287
+ this.openAPIRefreshStatus();
253
288
  }
254
289
  }
255
290
 
256
291
  private connectBLE() {
257
292
  const switchbot = new Switchbot();
258
293
  this.device.bleMac = ((this.device.deviceId!.match(/.{1,2}/g))!.join(':')).toLowerCase();
259
- this.platform.device(`Meter: ${this.accessory.displayName} BLE Address: ${this.device.bleMac}`);
294
+ this.debugLog(`Meter: ${this.accessory.displayName} BLE Address: ${this.device.bleMac}`);
260
295
  return switchbot;
261
296
  }
262
297
 
263
- private async BLErefreshStatus() {
264
- this.platform.debug(`Meter: ${this.accessory.displayName} BLE RefreshStatus`);
298
+ private BLErefreshStatus() {
299
+ this.debugLog(`Meter: ${this.accessory.displayName} BLE RefreshStatus`);
265
300
  // eslint-disable-next-line @typescript-eslint/no-var-requires
266
301
  const switchbot = this.connectBLE();
267
302
  // Start to monitor advertisement packets
268
303
  switchbot.startScan({
304
+ model: 'T',
269
305
  id: this.device.bleMac,
270
306
  }).then(() => {
271
307
  // Set an event hander
@@ -274,17 +310,17 @@ export class Meter {
274
310
  this.temperature = ad.serviceData.temperature!.c;
275
311
  this.humidity = ad.serviceData.humidity;
276
312
  this.battery = ad.serviceData.battery;
277
- this.platform.device(`Meter: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
278
- this.platform.device(`Meter: ${this.accessory.displayName} model: ${ad.serviceData.model}, modelName: ${ad.serviceData.modelName}, `
313
+ this.debugLog(`Meter: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
314
+ this.debugLog(`Meter: ${this.accessory.displayName} model: ${ad.serviceData.model}, modelName: ${ad.serviceData.modelName}, `
279
315
  + `temperature: ${JSON.stringify(ad.serviceData.temperature?.c)}, humidity: ${ad.serviceData.humidity}, `
280
316
  + `battery: ${ad.serviceData.battery}`);
281
317
 
282
318
  if (this.serviceData) {
283
319
  this.connected = true;
284
- this.platform.device(`Meter: ${this.accessory.displayName} connected: ${this.connected}`);
320
+ this.debugLog(`Meter: ${this.accessory.displayName} connected: ${this.connected}`);
285
321
  } else {
286
322
  this.connected = false;
287
- this.platform.device(`Meter: ${this.accessory.displayName} connected: ${this.connected}`);
323
+ this.debugLog(`Meter: ${this.accessory.displayName} connected: ${this.connected}`);
288
324
  }
289
325
  };
290
326
  // Wait 10 seconds
@@ -302,36 +338,36 @@ export class Meter {
302
338
  this.parseStatus();
303
339
  this.updateHomeKitCharacteristics();
304
340
  } else {
305
- this.platform.log.error(`Meter: ${this.accessory.displayName} wasn't able to establish BLE Connection`);
341
+ this.errorLog(`Meter: ${this.accessory.displayName} wasn't able to establish BLE Connection`);
306
342
  if (this.platform.config.credentials?.openToken) {
307
- this.platform.log.warn(`Meter: ${this.accessory.displayName} Using OpenAPI Connection`);
308
- await this.openAPIRefreshStatus();
343
+ this.warnLog(`Meter: ${this.accessory.displayName} Using OpenAPI Connection`);
344
+ this.openAPIRefreshStatus();
309
345
  }
310
346
  }
311
347
  }).catch(async (e: any) => {
312
- this.platform.log.error(`Meter: ${this.accessory.displayName} failed refreshStatus with BLE Connection`);
313
- if (this.deviceDebug) {
314
- this.platform.log.error(`Meter: ${this.accessory.displayName} failed refreshStatus with BLE Connection,`
348
+ this.errorLog(`Meter: ${this.accessory.displayName} failed refreshStatus with BLE Connection`);
349
+ if (this.deviceLogging === 'debug') {
350
+ this.errorLog(`Meter: ${this.accessory.displayName} failed refreshStatus with BLE Connection,`
315
351
  + ` Error Message: ${JSON.stringify(e.message)}`);
316
352
  }
317
- if (this.debugDebug) {
318
- this.platform.log.error(`Meter: ${this.accessory.displayName} failed refreshStatus with BLE Connection,`
353
+ if (this.platform.debugMode) {
354
+ this.errorLog(`Meter: ${this.accessory.displayName} failed refreshStatus with BLE Connection,`
319
355
  + ` Error: ${JSON.stringify(e)}`);
320
356
  }
321
357
  if (this.platform.config.credentials?.openToken) {
322
- this.platform.log.warn(`Meter: ${this.accessory.displayName} Using OpenAPI Connection`);
323
- await this.openAPIRefreshStatus();
358
+ this.warnLog(`Meter: ${this.accessory.displayName} Using OpenAPI Connection`);
359
+ this.openAPIRefreshStatus();
324
360
  }
325
- this.apiError(e);
361
+ this.apiError();
326
362
  });
327
363
  }
328
364
 
329
365
  private async openAPIRefreshStatus() {
330
366
  if (this.platform.config.credentials?.openToken) {
331
- this.platform.debug(`Meter: ${this.accessory.displayName} OpenAPI RefreshStatus`);
367
+ this.debugLog(`Meter: ${this.accessory.displayName} OpenAPI RefreshStatus`);
332
368
  try {
333
369
  this.deviceStatus = (await this.platform.axios.get(`${DeviceURL}/${this.device.deviceId}/status`)).data;
334
- this.platform.debug(`Meter: ${this.accessory.displayName} openAPIRefreshStatus: ${JSON.stringify(this.deviceStatus)}`);
370
+ this.debugLog(`Meter: ${this.accessory.displayName} openAPIRefreshStatus: ${JSON.stringify(this.deviceStatus)}`);
335
371
  this.CurrentTemperatureCached = this.deviceStatus.body.humidity!;
336
372
  this.accessory.context.CurrentTemperature = this.CurrentTemperatureCached;
337
373
  this.CurrentRelativeHumidityCached = this.deviceStatus.body.humidity!;
@@ -341,16 +377,16 @@ export class Meter {
341
377
  this.parseStatus();
342
378
  this.updateHomeKitCharacteristics();
343
379
  } catch (e: any) {
344
- this.platform.log.error(`Meter: ${this.accessory.displayName} failed refreshStatus with OpenAPI Connection`);
345
- if (this.deviceDebug) {
346
- this.platform.log.error(`Meter: ${this.accessory.displayName} failed refreshStatus with OpenAPI Connection,`
380
+ this.errorLog(`Meter: ${this.accessory.displayName} failed refreshStatus with OpenAPI Connection`);
381
+ if (this.deviceLogging === 'debug') {
382
+ this.errorLog(`Meter: ${this.accessory.displayName} failed refreshStatus with OpenAPI Connection,`
347
383
  + ` Error Message: ${JSON.stringify(e.message)}`);
348
384
  }
349
- if (this.debugDebug) {
350
- this.platform.log.error(`Meter: ${this.accessory.displayName} failed refreshStatus with OpenAPI Connection,`
385
+ if (this.platform.debugMode) {
386
+ this.errorLog(`Meter: ${this.accessory.displayName} failed refreshStatus with OpenAPI Connection,`
351
387
  + ` Error: ${JSON.stringify(e)}`);
352
388
  }
353
- this.apiError(e);
389
+ this.apiError();
354
390
  }
355
391
  }
356
392
  }
@@ -360,43 +396,71 @@ export class Meter {
360
396
  */
361
397
  updateHomeKitCharacteristics() {
362
398
  if (this.StatusLowBattery === undefined) {
363
- this.platform.debug(`Meter: ${this.accessory.displayName} StatusLowBattery: ${this.StatusLowBattery}`);
399
+ this.debugLog(`Meter: ${this.accessory.displayName} StatusLowBattery: ${this.StatusLowBattery}`);
364
400
  } else {
365
401
  this.service.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.StatusLowBattery);
366
- this.platform.device(`Meter: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
402
+ this.debugLog(`Meter: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
367
403
  }
368
404
  if (this.BatteryLevel === undefined) {
369
- this.platform.debug(`Meter: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}`);
405
+ this.debugLog(`Meter: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}`);
370
406
  } else {
371
407
  this.service.updateCharacteristic(this.platform.Characteristic.BatteryLevel, this.BatteryLevel);
372
- this.platform.device(`Meter: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.BatteryLevel}`);
408
+ this.debugLog(`Meter: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.BatteryLevel}`);
373
409
  }
374
410
  if (!this.device.meter?.hide_humidity) {
375
411
  if (this.CurrentRelativeHumidity === undefined) {
376
- this.platform.debug(`Meter: ${this.accessory.displayName} CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`);
412
+ this.debugLog(`Meter: ${this.accessory.displayName} CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`);
377
413
  } else {
378
414
  this.humidityservice?.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, this.CurrentRelativeHumidity);
379
- this.platform.device(`Meter: ${this.accessory.displayName} updateCharacteristic CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`);
415
+ this.debugLog(`Meter: ${this.accessory.displayName} updateCharacteristic CurrentRelativeHumidity: ${this.CurrentRelativeHumidity}`);
380
416
  }
381
417
  }
382
418
  if (!this.device.meter?.hide_temperature) {
383
419
  if (this.CurrentTemperature === undefined) {
384
- this.platform.debug(`Meter: ${this.accessory.displayName} CurrentTemperature: ${this.CurrentTemperature}`);
420
+ this.debugLog(`Meter: ${this.accessory.displayName} CurrentTemperature: ${this.CurrentTemperature}`);
385
421
  } else {
386
422
  this.temperatureservice?.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, this.CurrentTemperature);
387
- this.platform.device(`Meter: ${this.accessory.displayName} updateCharacteristic CurrentTemperature: ${this.CurrentTemperature}`);
423
+ this.debugLog(`Meter: ${this.accessory.displayName} updateCharacteristic CurrentTemperature: ${this.CurrentTemperature}`);
388
424
  }
389
425
  }
390
426
  }
391
427
 
392
- public apiError(e: any) {
393
- this.service.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
394
- this.service.updateCharacteristic(this.platform.Characteristic.BatteryLevel, e);
395
- if (!this.device.meter?.hide_humidity) {
396
- this.humidityservice?.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, e);
428
+ public apiError() {
429
+ throw new this.platform.api.hap.HapStatusError(HAPStatus.SERVICE_COMMUNICATION_FAILURE);
430
+ }
431
+
432
+ /**
433
+ * Logging for Device
434
+ */
435
+ infoLog(...log: any[]) {
436
+ if (this.enablingDeviceLogging()) {
437
+ this.platform.log.info(String(...log));
397
438
  }
398
- if (!this.device.meter?.hide_temperature) {
399
- this.temperatureservice?.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, e);
439
+ }
440
+
441
+ warnLog(...log: any[]) {
442
+ if (this.enablingDeviceLogging()) {
443
+ this.platform.log.warn(String(...log));
444
+ }
445
+ }
446
+
447
+ errorLog(...log: any[]) {
448
+ if (this.enablingDeviceLogging()) {
449
+ this.platform.log.error(String(...log));
400
450
  }
401
451
  }
452
+
453
+ debugLog(...log: any[]) {
454
+ if (this.enablingDeviceLogging()) {
455
+ if (this.deviceLogging === 'debug') {
456
+ this.platform.log.info('[DEBUG]', String(...log));
457
+ } else {
458
+ this.platform.log.debug(String(...log));
459
+ }
460
+ }
461
+ }
462
+
463
+ enablingDeviceLogging(): boolean {
464
+ return this.deviceLogging === 'debug' || this.deviceLogging === 'standard';
465
+ }
402
466
  }