@switchbot/homebridge-switchbot 2.8.0-beta.1 → 2.8.0-beta.10

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 (129) hide show
  1. package/dist/device/blindtilt.d.ts +1 -0
  2. package/dist/device/blindtilt.d.ts.map +1 -1
  3. package/dist/device/blindtilt.js +9 -6
  4. package/dist/device/blindtilt.js.map +1 -1
  5. package/dist/device/bot.d.ts +1 -0
  6. package/dist/device/bot.d.ts.map +1 -1
  7. package/dist/device/bot.js +8 -5
  8. package/dist/device/bot.js.map +1 -1
  9. package/dist/device/ceilinglight.d.ts +1 -0
  10. package/dist/device/ceilinglight.d.ts.map +1 -1
  11. package/dist/device/ceilinglight.js +12 -9
  12. package/dist/device/ceilinglight.js.map +1 -1
  13. package/dist/device/colorbulb.d.ts +1 -0
  14. package/dist/device/colorbulb.d.ts.map +1 -1
  15. package/dist/device/colorbulb.js +8 -5
  16. package/dist/device/colorbulb.js.map +1 -1
  17. package/dist/device/contact.d.ts +2 -0
  18. package/dist/device/contact.d.ts.map +1 -1
  19. package/dist/device/contact.js +45 -34
  20. package/dist/device/contact.js.map +1 -1
  21. package/dist/device/curtain.d.ts +2 -0
  22. package/dist/device/curtain.d.ts.map +1 -1
  23. package/dist/device/curtain.js +31 -36
  24. package/dist/device/curtain.js.map +1 -1
  25. package/dist/device/hub.d.ts +3 -1
  26. package/dist/device/hub.d.ts.map +1 -1
  27. package/dist/device/hub.js +29 -4
  28. package/dist/device/hub.js.map +1 -1
  29. package/dist/device/humidifier.d.ts.map +1 -1
  30. package/dist/device/humidifier.js +9 -6
  31. package/dist/device/humidifier.js.map +1 -1
  32. package/dist/device/iosensor.d.ts +1 -0
  33. package/dist/device/iosensor.d.ts.map +1 -1
  34. package/dist/device/iosensor.js +10 -6
  35. package/dist/device/iosensor.js.map +1 -1
  36. package/dist/device/lightstrip.d.ts +1 -0
  37. package/dist/device/lightstrip.d.ts.map +1 -1
  38. package/dist/device/lightstrip.js +9 -6
  39. package/dist/device/lightstrip.js.map +1 -1
  40. package/dist/device/lock.d.ts +2 -0
  41. package/dist/device/lock.d.ts.map +1 -1
  42. package/dist/device/lock.js +11 -6
  43. package/dist/device/lock.js.map +1 -1
  44. package/dist/device/meter.d.ts +2 -0
  45. package/dist/device/meter.d.ts.map +1 -1
  46. package/dist/device/meter.js +12 -8
  47. package/dist/device/meter.js.map +1 -1
  48. package/dist/device/meterplus.d.ts +4 -3
  49. package/dist/device/meterplus.d.ts.map +1 -1
  50. package/dist/device/meterplus.js +56 -54
  51. package/dist/device/meterplus.js.map +1 -1
  52. package/dist/device/motion.d.ts +2 -0
  53. package/dist/device/motion.d.ts.map +1 -1
  54. package/dist/device/motion.js +46 -31
  55. package/dist/device/motion.js.map +1 -1
  56. package/dist/device/plug.d.ts +1 -0
  57. package/dist/device/plug.d.ts.map +1 -1
  58. package/dist/device/plug.js +9 -6
  59. package/dist/device/plug.js.map +1 -1
  60. package/dist/device/robotvacuumcleaner.d.ts +1 -0
  61. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  62. package/dist/device/robotvacuumcleaner.js +26 -2
  63. package/dist/device/robotvacuumcleaner.js.map +1 -1
  64. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  65. package/dist/irdevice/airconditioner.js +7 -5
  66. package/dist/irdevice/airconditioner.js.map +1 -1
  67. package/dist/irdevice/airpurifier.d.ts +1 -1
  68. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  69. package/dist/irdevice/airpurifier.js +3 -3
  70. package/dist/irdevice/airpurifier.js.map +1 -1
  71. package/dist/irdevice/camera.d.ts +1 -1
  72. package/dist/irdevice/camera.d.ts.map +1 -1
  73. package/dist/irdevice/camera.js +3 -3
  74. package/dist/irdevice/camera.js.map +1 -1
  75. package/dist/irdevice/fan.d.ts +2 -2
  76. package/dist/irdevice/fan.d.ts.map +1 -1
  77. package/dist/irdevice/fan.js +3 -3
  78. package/dist/irdevice/fan.js.map +1 -1
  79. package/dist/irdevice/light.d.ts +1 -1
  80. package/dist/irdevice/light.d.ts.map +1 -1
  81. package/dist/irdevice/light.js +3 -3
  82. package/dist/irdevice/light.js.map +1 -1
  83. package/dist/irdevice/other.d.ts +1 -1
  84. package/dist/irdevice/other.d.ts.map +1 -1
  85. package/dist/irdevice/other.js +3 -3
  86. package/dist/irdevice/other.js.map +1 -1
  87. package/dist/irdevice/tv.d.ts +2 -2
  88. package/dist/irdevice/tv.d.ts.map +1 -1
  89. package/dist/irdevice/tv.js +3 -3
  90. package/dist/irdevice/tv.js.map +1 -1
  91. package/dist/irdevice/vacuumcleaner.d.ts +1 -1
  92. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  93. package/dist/irdevice/vacuumcleaner.js +3 -3
  94. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  95. package/dist/irdevice/waterheater.d.ts +1 -1
  96. package/dist/irdevice/waterheater.d.ts.map +1 -1
  97. package/dist/irdevice/waterheater.js +3 -3
  98. package/dist/irdevice/waterheater.js.map +1 -1
  99. package/dist/platform.d.ts.map +1 -1
  100. package/dist/platform.js +3 -2
  101. package/dist/platform.js.map +1 -1
  102. package/package.json +3 -3
  103. package/src/device/blindtilt.ts +8 -6
  104. package/src/device/bot.ts +8 -5
  105. package/src/device/ceilinglight.ts +12 -6
  106. package/src/device/colorbulb.ts +10 -5
  107. package/src/device/contact.ts +44 -30
  108. package/src/device/curtain.ts +30 -33
  109. package/src/device/hub.ts +30 -4
  110. package/src/device/humidifier.ts +8 -5
  111. package/src/device/iosensor.ts +9 -5
  112. package/src/device/lightstrip.ts +10 -5
  113. package/src/device/lock.ts +12 -5
  114. package/src/device/meter.ts +12 -7
  115. package/src/device/meterplus.ts +60 -53
  116. package/src/device/motion.ts +45 -27
  117. package/src/device/plug.ts +8 -5
  118. package/src/device/robotvacuumcleaner.ts +29 -2
  119. package/src/irdevice/airconditioner.ts +7 -5
  120. package/src/irdevice/airpurifier.ts +5 -5
  121. package/src/irdevice/camera.ts +5 -5
  122. package/src/irdevice/fan.ts +5 -5
  123. package/src/irdevice/light.ts +5 -5
  124. package/src/irdevice/other.ts +5 -5
  125. package/src/irdevice/tv.ts +5 -5
  126. package/src/irdevice/vacuumcleaner.ts +5 -5
  127. package/src/irdevice/waterheater.ts +5 -5
  128. package/src/platform.ts +3 -2
  129. package/src/settings.ts +1 -1
@@ -1,3 +1,4 @@
1
+ /* eslint-disable brace-style */
1
2
  import { Context } from 'vm';
2
3
  import { request } from 'undici';
3
4
  import { sleep } from '../utils';
@@ -24,6 +25,7 @@ export class ColorBulb {
24
25
  ColorTemperature?: CharacteristicValue;
25
26
 
26
27
  // OpenAPI Others
28
+ Version: deviceStatus['version'];
27
29
  power: deviceStatus['power'];
28
30
  color: deviceStatus['color'];
29
31
  brightness: deviceStatus['brightness'];
@@ -82,8 +84,9 @@ export class ColorBulb {
82
84
  this.scan(device);
83
85
  this.refreshRate(device);
84
86
  this.adaptiveLighting(device);
85
- this.config(device);
86
87
  this.context();
88
+ this.config(device);
89
+
87
90
  // this is subject we use to track when we need to POST changes to the SwitchBot API
88
91
  this.doColorBulbUpdate = new Subject();
89
92
  this.colorBulbUpdateInProgress = false;
@@ -1133,10 +1136,12 @@ export class ColorBulb {
1133
1136
  );
1134
1137
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1135
1138
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1136
- if (accessory.context.FirmwareRevision) {
1137
- FirmwareRevision = accessory.context.FirmwareRevision;
1138
- } else if (device.firmware) {
1139
+ if (device.firmware) {
1139
1140
  FirmwareRevision = device.firmware;
1141
+ } else if (device.version) {
1142
+ FirmwareRevision = JSON.stringify(device.version);
1143
+ } if (accessory.context.FirmwareRevision) {
1144
+ FirmwareRevision = accessory.context.FirmwareRevision;
1140
1145
  } else {
1141
1146
  FirmwareRevision = this.platform.version;
1142
1147
  }
@@ -1210,7 +1215,7 @@ export class ColorBulb {
1210
1215
  config['maxRetry'] = device.maxRetry;
1211
1216
  }
1212
1217
  if (Object.entries(config).length !== 0) {
1213
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
1218
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
1214
1219
  }
1215
1220
  }
1216
1221
 
@@ -27,6 +27,8 @@ export class Contact {
27
27
  StatusLowBattery!: CharacteristicValue;
28
28
 
29
29
  // OpenAPI others
30
+ Version: deviceStatus['version'];
31
+ Battery: deviceStatus['battery'];
30
32
  openState: deviceStatus['openState'];
31
33
  moveDetected: deviceStatus['moveDetected'];
32
34
  brightness: deviceStatus['brightness'];
@@ -71,8 +73,8 @@ export class Contact {
71
73
  this.logs(device);
72
74
  this.scan(device);
73
75
  this.refreshRate(device);
74
- this.config(device);
75
76
  this.context();
77
+ this.config(device);
76
78
 
77
79
  // this is subject we use to track when we need to POST changes to the SwitchBot API
78
80
  this.doContactUpdate = new Subject();
@@ -145,17 +147,16 @@ export class Contact {
145
147
  }
146
148
 
147
149
  // Battery Service
148
- if (!this.BLE) {
149
- this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Removing Battery Service`);
150
- this.batteryService = this.accessory.getService(this.platform.Service.Battery);
151
- accessory.removeService(this.batteryService!);
152
- } else if (this.BLE && !this.batteryService) {
150
+ if (!this.batteryService) {
153
151
  this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Add Battery Service`);
154
152
  (this.batteryService = this.accessory.getService(this.platform.Service.Battery) || this.accessory.addService(this.platform.Service.Battery)),
155
153
  `${accessory.displayName} Battery`;
156
154
 
157
155
  this.batteryService.setCharacteristic(this.platform.Characteristic.Name, `${accessory.displayName} Battery`);
158
- this.batteryService.setCharacteristic(this.platform.Characteristic.ConfiguredName, `${accessory.displayName} Battery`);
156
+ if (!this.batteryService.testCharacteristic(this.platform.Characteristic.ConfiguredName)) {
157
+ this.batteryService.addCharacteristic(this.platform.Characteristic.ConfiguredName, `${accessory.displayName} Battery`);
158
+ }
159
+ this.batteryService.setCharacteristic(this.platform.Characteristic.ChargingState, this.platform.Characteristic.ChargingState.NOT_CHARGEABLE);
159
160
  } else {
160
161
  this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Battery Service Not Added`);
161
162
  }
@@ -284,6 +285,19 @@ export class Contact {
284
285
  }
285
286
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} CurrentAmbientLightLevel: ${this.CurrentAmbientLightLevel}`);
286
287
  }
288
+ // Battery
289
+ if (this.battery === undefined) {
290
+ this.battery === 100;
291
+ }
292
+ this.BatteryLevel = Number(this.Battery);
293
+ if (this.BatteryLevel < 10) {
294
+ this.StatusLowBattery = this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
295
+ } else {
296
+ this.StatusLowBattery = this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
297
+ }
298
+ this.debugLog(
299
+ `${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}, ` + `StatusLowBattery: ${this.StatusLowBattery}`,
300
+ );
287
301
  }
288
302
 
289
303
  /**
@@ -394,6 +408,8 @@ export class Contact {
394
408
  this.openState = deviceStatus.body.openState;
395
409
  this.moveDetected = deviceStatus.body.moveDetected;
396
410
  this.brightness = deviceStatus.body.brightness;
411
+ this.Battery = deviceStatus.body.battery!;
412
+ this.Version = deviceStatus.body.version!;
397
413
  this.openAPIparseStatus();
398
414
  this.updateHomeKitCharacteristics();
399
415
  } catch (e: any) {
@@ -437,21 +453,19 @@ export class Contact {
437
453
  );
438
454
  }
439
455
  }
440
- if (this.BLE) {
441
- if (this.BatteryLevel === undefined) {
442
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}`);
443
- } else {
444
- this.accessory.context.BatteryLevel = this.BatteryLevel;
445
- this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, this.BatteryLevel);
446
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.BatteryLevel}`);
447
- }
448
- if (this.StatusLowBattery === undefined) {
449
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} StatusLowBattery: ${this.StatusLowBattery}`);
450
- } else {
451
- this.accessory.context.StatusLowBattery = this.StatusLowBattery;
452
- this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.StatusLowBattery);
453
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
454
- }
456
+ if (this.BatteryLevel === undefined) {
457
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}`);
458
+ } else {
459
+ this.accessory.context.BatteryLevel = this.BatteryLevel;
460
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, this.BatteryLevel);
461
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.BatteryLevel}`);
462
+ }
463
+ if (this.StatusLowBattery === undefined) {
464
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} StatusLowBattery: ${this.StatusLowBattery}`);
465
+ } else {
466
+ this.accessory.context.StatusLowBattery = this.StatusLowBattery;
467
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.StatusLowBattery);
468
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
455
469
  }
456
470
  }
457
471
 
@@ -580,10 +594,8 @@ export class Contact {
580
594
  if (!this.device.contact?.hide_lightsensor) {
581
595
  this.lightSensorService?.updateCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel, e);
582
596
  }
583
- if (this.BLE) {
584
- this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, e);
585
- this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
586
- }
597
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, e);
598
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
587
599
  }
588
600
 
589
601
  FirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig): CharacteristicValue {
@@ -593,10 +605,12 @@ export class Contact {
593
605
  );
594
606
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
595
607
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
596
- if (accessory.context.FirmwareRevision) {
597
- FirmwareRevision = accessory.context.FirmwareRevision;
598
- } else if (device.firmware) {
608
+ if (device.firmware) {
599
609
  FirmwareRevision = device.firmware;
610
+ } else if (device.version) {
611
+ FirmwareRevision = JSON.stringify(device.version);
612
+ } else if (accessory.context.FirmwareRevision) {
613
+ FirmwareRevision = accessory.context.FirmwareRevision;
600
614
  } else {
601
615
  FirmwareRevision = this.platform.version;
602
616
  }
@@ -647,7 +661,7 @@ export class Contact {
647
661
  config['scanDuration'] = device.scanDuration;
648
662
  }
649
663
  if (Object.entries(config).length !== 0) {
650
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
664
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
651
665
  }
652
666
  }
653
667
 
@@ -26,6 +26,8 @@ export class Curtain {
26
26
  lastActivation?: number;
27
27
 
28
28
  // OpenAPI Others
29
+ Version: deviceStatus['version'];
30
+ Battery: deviceStatus['battery'];
29
31
  deviceStatus!: any; //deviceStatusResponse;
30
32
  slidePosition: deviceStatus['slidePosition'];
31
33
  moving: deviceStatus['moving'];
@@ -83,9 +85,9 @@ export class Curtain {
83
85
  this.logs(device);
84
86
  this.refreshRate(device);
85
87
  this.scan(device);
86
- this.config(device);
87
88
  this.setupMqtt(device);
88
89
  this.context();
90
+ this.config(device);
89
91
 
90
92
  // this is subject we use to track when we need to POST changes to the SwitchBot API
91
93
  this.doCurtainUpdate = new Subject();
@@ -170,11 +172,7 @@ export class Curtain {
170
172
  }
171
173
 
172
174
  // Battery Service
173
- if (!this.BLE) {
174
- this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Removing Battery Service`);
175
- this.batteryService = this.accessory.getService(this.platform.Service.Battery);
176
- accessory.removeService(this.batteryService!);
177
- } else if (this.BLE && !this.batteryService) {
175
+ if (!this.batteryService) {
178
176
  this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Add Battery Service`);
179
177
  (this.batteryService = this.accessory.getService(this.platform.Service.Battery) || this.accessory.addService(this.platform.Service.Battery)),
180
178
  `${accessory.displayName} Battery`;
@@ -183,6 +181,7 @@ export class Curtain {
183
181
  if (!this.batteryService.testCharacteristic(this.platform.Characteristic.ConfiguredName)) {
184
182
  this.batteryService.addCharacteristic(this.platform.Characteristic.ConfiguredName, `${accessory.displayName} Battery`);
185
183
  }
184
+ this.batteryService.setCharacteristic(this.platform.Characteristic.ChargingState, this.platform.Characteristic.ChargingState.NOT_CHARGEABLE);
186
185
  } else {
187
186
  this.debugLog(`${this.device.deviceType}: ${accessory.displayName} Battery Service Not Added`);
188
187
  }
@@ -823,27 +822,25 @@ export class Curtain {
823
822
  }
824
823
  }
825
824
  }
826
- if (this.BLE) {
827
- if (this.BatteryLevel === undefined) {
828
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}`);
829
- } else {
830
- if (this.device.mqttURL) {
831
- this.mqttPublish('BatteryLevel', this.BatteryLevel);
832
- }
833
- this.accessory.context.BatteryLevel = this.BatteryLevel;
834
- this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, this.BatteryLevel);
835
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.BatteryLevel}`);
825
+ if (this.BatteryLevel === undefined) {
826
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.BatteryLevel}`);
827
+ } else {
828
+ if (this.device.mqttURL) {
829
+ this.mqttPublish('BatteryLevel', this.BatteryLevel);
836
830
  }
837
- if (this.StatusLowBattery === undefined) {
838
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} StatusLowBattery: ${this.StatusLowBattery}`);
839
- } else {
840
- if (this.device.mqttURL) {
841
- this.mqttPublish('StatusLowBattery', this.StatusLowBattery);
842
- }
843
- this.accessory.context.StatusLowBattery = this.StatusLowBattery;
844
- this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.StatusLowBattery);
845
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
831
+ this.accessory.context.BatteryLevel = this.BatteryLevel;
832
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, this.BatteryLevel);
833
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.BatteryLevel}`);
834
+ }
835
+ if (this.StatusLowBattery === undefined) {
836
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} StatusLowBattery: ${this.StatusLowBattery}`);
837
+ } else {
838
+ if (this.device.mqttURL) {
839
+ this.mqttPublish('StatusLowBattery', this.StatusLowBattery);
846
840
  }
841
+ this.accessory.context.StatusLowBattery = this.StatusLowBattery;
842
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.StatusLowBattery);
843
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.StatusLowBattery}`);
847
844
  }
848
845
  }
849
846
 
@@ -1071,10 +1068,8 @@ export class Curtain {
1071
1068
  if (!this.device.curtain?.hide_lightsensor) {
1072
1069
  this.lightSensorService?.updateCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel, e);
1073
1070
  }
1074
- if (this.BLE) {
1075
- this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, e);
1076
- this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
1077
- }
1071
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.BatteryLevel, e);
1072
+ this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
1078
1073
  //throw new this.platform.api.hap.HapStatusError(HAPStatus.SERVICE_COMMUNICATION_FAILURE);
1079
1074
  }
1080
1075
 
@@ -1085,10 +1080,12 @@ export class Curtain {
1085
1080
  );
1086
1081
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1087
1082
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1088
- if (accessory.context.FirmwareRevision) {
1089
- FirmwareRevision = accessory.context.FirmwareRevision;
1090
- } else if (device.firmware) {
1083
+ if (device.firmware) {
1091
1084
  FirmwareRevision = device.firmware;
1085
+ } else if (device.version) {
1086
+ FirmwareRevision = JSON.stringify(device.version);
1087
+ } if (accessory.context.FirmwareRevision) {
1088
+ FirmwareRevision = accessory.context.FirmwareRevision;
1092
1089
  } else {
1093
1090
  FirmwareRevision = this.platform.version;
1094
1091
  }
@@ -1188,7 +1185,7 @@ export class Curtain {
1188
1185
  config['maxRetry'] = device.maxRetry;
1189
1186
  }
1190
1187
  if (Object.entries(config).length !== 0) {
1191
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
1188
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
1192
1189
  }
1193
1190
  }
1194
1191
 
package/src/device/hub.ts CHANGED
@@ -3,7 +3,7 @@ import { interval } from 'rxjs';
3
3
  import { request } from 'undici';
4
4
  import { Context } from 'vm';
5
5
  import { SwitchBotPlatform } from '../platform';
6
- import { Devices, device, devicesConfig } from '../settings';
6
+ import { Devices, device, deviceStatus, devicesConfig } from '../settings';
7
7
  import { sleep } from '../utils';
8
8
 
9
9
  export class Hub {
@@ -18,6 +18,7 @@ export class Hub {
18
18
  CurrentAmbientLightLevel!: number;
19
19
 
20
20
  // OpenAPI Others
21
+ Version: deviceStatus['version'];
21
22
  deviceStatus!: any; //deviceStatusResponse;
22
23
  lightLevel!: number;
23
24
  spaceBetweenLevels!: number;
@@ -43,6 +44,7 @@ export class Hub {
43
44
  // default placeholders
44
45
  this.logs(device);
45
46
  this.refreshRate(device);
47
+ this.config(device);
46
48
 
47
49
  this.CurrentRelativeHumidity = accessory.context.CurrentRelativeHumidity;
48
50
  this.CurrentTemperature = accessory.context.CurrentTemperature;
@@ -443,10 +445,12 @@ export class Hub {
443
445
  );
444
446
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
445
447
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
446
- if (accessory.context.FirmwareRevision) {
447
- FirmwareRevision = accessory.context.FirmwareRevision;
448
- } else if (device.firmware) {
448
+ if (device.firmware) {
449
449
  FirmwareRevision = device.firmware;
450
+ } else if (device.version) {
451
+ FirmwareRevision = JSON.stringify(device.version);
452
+ } else if (accessory.context.FirmwareRevision) {
453
+ FirmwareRevision = accessory.context.FirmwareRevision;
450
454
  } else {
451
455
  FirmwareRevision = this.platform.version;
452
456
  }
@@ -472,6 +476,28 @@ export class Hub {
472
476
  }
473
477
  }
474
478
 
479
+ async config(device: device & devicesConfig): Promise<void> {
480
+ let config = {};
481
+ if (device.hub) {
482
+ config = device.hub;
483
+ }
484
+ if (device.connectionType !== undefined) {
485
+ config['connectionType'] = device.connectionType;
486
+ }
487
+ if (device.external !== undefined) {
488
+ config['external'] = device.external;
489
+ }
490
+ if (device.logging !== undefined) {
491
+ config['logging'] = device.logging;
492
+ }
493
+ if (device.refreshRate !== undefined) {
494
+ config['refreshRate'] = device.refreshRate;
495
+ }
496
+ if (Object.entries(config).length !== 0) {
497
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
498
+ }
499
+ }
500
+
475
501
  async logs(device: device & devicesConfig): Promise<void> {
476
502
  if (this.platform.debugMode) {
477
503
  this.deviceLogging = this.accessory.context.logging = 'debugMode';
@@ -1,3 +1,4 @@
1
+ /* eslint-disable brace-style */
1
2
  import { Context } from 'vm';
2
3
  import { request } from 'undici';
3
4
  import { sleep } from '../utils';
@@ -66,8 +67,8 @@ export class Humidifier {
66
67
  this.logs(device);
67
68
  this.scan(device);
68
69
  this.refreshRate(device);
69
- this.config(device);
70
70
  this.context();
71
+ this.config(device);
71
72
 
72
73
  // this is subject we use to track when we need to POST changes to the SwitchBot API
73
74
  this.doHumidifierUpdate = new Subject();
@@ -844,10 +845,12 @@ export class Humidifier {
844
845
  );
845
846
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
846
847
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
847
- if (accessory.context.FirmwareRevision) {
848
- FirmwareRevision = accessory.context.FirmwareRevision;
849
- } else if (device.firmware) {
848
+ if (device.firmware) {
850
849
  FirmwareRevision = device.firmware;
850
+ } else if (device.version) {
851
+ FirmwareRevision = JSON.stringify(device.version);
852
+ } else if (accessory.context.FirmwareRevision) {
853
+ FirmwareRevision = accessory.context.FirmwareRevision;
851
854
  } else {
852
855
  FirmwareRevision = this.platform.version;
853
856
  }
@@ -930,7 +933,7 @@ export class Humidifier {
930
933
  config['offline'] = device.offline;
931
934
  }
932
935
  if (Object.entries(config).length !== 0) {
933
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
936
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
934
937
  }
935
938
  }
936
939
 
@@ -29,6 +29,7 @@ export class IOSensor {
29
29
  StatusLowBattery?: CharacteristicValue;
30
30
 
31
31
  // OpenAPI Others
32
+ Version: deviceStatus['version'];
32
33
  Battery: deviceStatus['battery'];
33
34
  Temperature: deviceStatus['temperature'];
34
35
  Humidity: deviceStatus['humidity'];
@@ -73,10 +74,10 @@ export class IOSensor {
73
74
  this.logs(device);
74
75
  this.scan(device);
75
76
  this.refreshRate(device);
76
- this.config(device);
77
77
  this.context();
78
78
  this.setupHistoryService(device);
79
79
  this.setupMqtt(device);
80
+ this.config(device);
80
81
 
81
82
  // this is subject we use to track when we need to POST changes to the SwitchBot API
82
83
  this.doIOSensorUpdate = new Subject();
@@ -345,6 +346,7 @@ export class IOSensor {
345
346
  this.Humidity = deviceStatus.body.humidity!;
346
347
  this.Temperature = deviceStatus.body.temperature!;
347
348
  this.Battery = deviceStatus.body.battery!;
349
+ this.Version = deviceStatus.body.version!;
348
350
  this.openAPIparseStatus();
349
351
  this.updateHomeKitCharacteristics();
350
352
  } catch (e: any) {
@@ -592,10 +594,12 @@ export class IOSensor {
592
594
  );
593
595
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
594
596
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
595
- if (accessory.context.FirmwareRevision) {
596
- FirmwareRevision = accessory.context.FirmwareRevision;
597
- } else if (device.firmware) {
597
+ if (device.firmware) {
598
598
  FirmwareRevision = device.firmware;
599
+ } else if (device.version) {
600
+ FirmwareRevision = JSON.stringify(device.version);
601
+ } else if (accessory.context.FirmwareRevision) {
602
+ FirmwareRevision = accessory.context.FirmwareRevision;
599
603
  } else {
600
604
  FirmwareRevision = this.platform.version;
601
605
  }
@@ -660,7 +664,7 @@ export class IOSensor {
660
664
  config['scanDuration'] = device.scanDuration;
661
665
  }
662
666
  if (Object.entries(config).length !== 0) {
663
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
667
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
664
668
  }
665
669
  }
666
670
 
@@ -1,3 +1,4 @@
1
+ /* eslint-disable brace-style */
1
2
  import { Context } from 'vm';
2
3
  import { request } from 'undici';
3
4
  import { sleep } from '../utils';
@@ -24,6 +25,7 @@ export class StripLight {
24
25
  ColorTemperature?: CharacteristicValue;
25
26
 
26
27
  // OpenAPI Others
28
+ Version: deviceStatus['version'];
27
29
  power: deviceStatus['power'];
28
30
  color: deviceStatus['color'];
29
31
  brightness: deviceStatus['brightness'];
@@ -71,8 +73,9 @@ export class StripLight {
71
73
  this.logs(device);
72
74
  this.scan(device);
73
75
  this.refreshRate(device);
74
- this.config(device);
75
76
  this.context();
77
+ this.config(device);
78
+
76
79
  // this is subject we use to track when we need to POST changes to the SwitchBot API
77
80
  this.doStripLightUpdate = new Subject();
78
81
  this.stripLightUpdateInProgress = false;
@@ -988,10 +991,12 @@ export class StripLight {
988
991
  );
989
992
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
990
993
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
991
- if (accessory.context.FirmwareRevision) {
992
- FirmwareRevision = accessory.context.FirmwareRevision;
993
- } else if (device.firmware) {
994
+ if (device.firmware) {
994
995
  FirmwareRevision = device.firmware;
996
+ } else if (device.version) {
997
+ FirmwareRevision = JSON.stringify(device.version);
998
+ } else if (accessory.context.FirmwareRevision) {
999
+ FirmwareRevision = accessory.context.FirmwareRevision;
995
1000
  } else {
996
1001
  FirmwareRevision = this.platform.version;
997
1002
  }
@@ -1065,7 +1070,7 @@ export class StripLight {
1065
1070
  config['maxRetry'] = device.maxRetry;
1066
1071
  }
1067
1072
  if (Object.entries(config).length !== 0) {
1068
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
1073
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
1069
1074
  }
1070
1075
  }
1071
1076
 
@@ -1,3 +1,4 @@
1
+ /* eslint-disable brace-style */
1
2
  import { Context } from 'vm';
2
3
  import { request } from 'undici';
3
4
  import { sleep } from '../utils';
@@ -18,6 +19,8 @@ export class Lock {
18
19
  LockTargetState!: CharacteristicValue;
19
20
 
20
21
  // OpenAPI Others
22
+ Version: deviceStatus['version'];
23
+ Battery: deviceStatus['battery'];
21
24
  doorState!: deviceStatus['doorState'];
22
25
  lockState!: deviceStatus['lockState'];
23
26
  deviceStatus!: any; //deviceStatusResponse;
@@ -59,8 +62,8 @@ export class Lock {
59
62
  this.logs(device);
60
63
  this.scan(device);
61
64
  this.refreshRate(device);
62
- this.config(device);
63
65
  this.context();
66
+ this.config(device);
64
67
 
65
68
  // this is subject we use to track when we need to POST changes to the SwitchBot API
66
69
  this.doLockUpdate = new Subject();
@@ -316,6 +319,8 @@ export class Lock {
316
319
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} refreshStatus: ${JSON.stringify(deviceStatus)}`);
317
320
  this.lockState = deviceStatus.body.lockState;
318
321
  this.doorState = deviceStatus.body.doorState;
322
+ this.Version = deviceStatus.body.version;
323
+ this.Battery = deviceStatus.body.battery;
319
324
  this.openAPIparseStatus();
320
325
  this.updateHomeKitCharacteristics();
321
326
  } catch (e: any) {
@@ -597,10 +602,12 @@ export class Lock {
597
602
  );
598
603
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
599
604
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
600
- if (accessory.context.FirmwareRevision) {
601
- FirmwareRevision = accessory.context.FirmwareRevision;
602
- } else if (device.firmware) {
605
+ if (device.firmware) {
603
606
  FirmwareRevision = device.firmware;
607
+ } else if (device.version) {
608
+ FirmwareRevision = JSON.stringify(device.version);
609
+ } else if (accessory.context.FirmwareRevision) {
610
+ FirmwareRevision = accessory.context.FirmwareRevision;
604
611
  } else {
605
612
  FirmwareRevision = this.platform.version;
606
613
  }
@@ -646,7 +653,7 @@ export class Lock {
646
653
  config['scanDuration'] = device.scanDuration;
647
654
  }
648
655
  if (Object.entries(config).length !== 0) {
649
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
656
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
650
657
  }
651
658
  }
652
659
 
@@ -29,6 +29,8 @@ export class Meter {
29
29
  StatusLowBattery?: CharacteristicValue;
30
30
 
31
31
  // OpenAPI Others
32
+ Version: deviceStatus['version'];
33
+ Battery: deviceStatus['battery'];
32
34
  Temperature: deviceStatus['temperature'];
33
35
  Humidity: deviceStatus['humidity'];
34
36
  deviceStatus!: any; //deviceStatusResponse;
@@ -72,10 +74,10 @@ export class Meter {
72
74
  this.logs(device);
73
75
  this.scan(device);
74
76
  this.refreshRate(device);
75
- this.config(device);
76
77
  this.context();
77
78
  this.setupHistoryService(device);
78
79
  this.setupMqtt(device);
80
+ this.config(device);
79
81
 
80
82
  // this is subject we use to track when we need to POST changes to the SwitchBot API
81
83
  this.doMeterUpdate = new Subject();
@@ -226,7 +228,7 @@ export class Meter {
226
228
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIparseStatus`);
227
229
 
228
230
  // Battery
229
- this.BatteryLevel = Number(this.battery);
231
+ this.BatteryLevel = Number(this.Battery);
230
232
  if (this.BatteryLevel < 15) {
231
233
  this.StatusLowBattery = this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
232
234
  } else {
@@ -349,7 +351,8 @@ export class Meter {
349
351
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} refreshStatus: ${JSON.stringify(deviceStatus)}`);
350
352
  this.Humidity = deviceStatus.body.humidity!;
351
353
  this.Temperature = deviceStatus.body.temperature!;
352
- this.battery = deviceStatus.body.battery!;
354
+ this.Battery = deviceStatus.body.battery!;
355
+ this.Version = deviceStatus.body.ver!;
353
356
  this.openAPIparseStatus();
354
357
  this.updateHomeKitCharacteristics();
355
358
  } catch (e: any) {
@@ -599,10 +602,12 @@ export class Meter {
599
602
  );
600
603
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
601
604
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
602
- if (accessory.context.FirmwareRevision) {
603
- FirmwareRevision = accessory.context.FirmwareRevision;
604
- } else if (device.firmware) {
605
+ if (device.firmware) {
605
606
  FirmwareRevision = device.firmware;
607
+ } else if (device.version) {
608
+ FirmwareRevision = JSON.stringify(device.version);
609
+ } else if (accessory.context.FirmwareRevision) {
610
+ FirmwareRevision = accessory.context.FirmwareRevision;
606
611
  } else {
607
612
  FirmwareRevision = this.platform.version;
608
613
  }
@@ -667,7 +672,7 @@ export class Meter {
667
672
  config['scanDuration'] = device.scanDuration;
668
673
  }
669
674
  if (Object.entries(config).length !== 0) {
670
- this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
675
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Config: ${JSON.stringify(config)}`);
671
676
  }
672
677
  }
673
678