@switchbot/homebridge-switchbot 2.9.0-beta.2 → 2.9.0-beta.20

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 (135) hide show
  1. package/config.schema.json +14 -0
  2. package/dist/device/blindtilt.d.ts +1 -1
  3. package/dist/device/blindtilt.d.ts.map +1 -1
  4. package/dist/device/blindtilt.js +39 -18
  5. package/dist/device/blindtilt.js.map +1 -1
  6. package/dist/device/bot.d.ts +1 -1
  7. package/dist/device/bot.d.ts.map +1 -1
  8. package/dist/device/bot.js +73 -20
  9. package/dist/device/bot.js.map +1 -1
  10. package/dist/device/ceilinglight.d.ts +1 -1
  11. package/dist/device/ceilinglight.d.ts.map +1 -1
  12. package/dist/device/ceilinglight.js +35 -18
  13. package/dist/device/ceilinglight.js.map +1 -1
  14. package/dist/device/colorbulb.d.ts +1 -1
  15. package/dist/device/colorbulb.d.ts.map +1 -1
  16. package/dist/device/colorbulb.js +35 -18
  17. package/dist/device/colorbulb.js.map +1 -1
  18. package/dist/device/contact.d.ts +1 -1
  19. package/dist/device/contact.d.ts.map +1 -1
  20. package/dist/device/contact.js +42 -18
  21. package/dist/device/contact.js.map +1 -1
  22. package/dist/device/curtain.d.ts +1 -1
  23. package/dist/device/curtain.d.ts.map +1 -1
  24. package/dist/device/curtain.js +39 -18
  25. package/dist/device/curtain.js.map +1 -1
  26. package/dist/device/hub.d.ts +1 -1
  27. package/dist/device/hub.d.ts.map +1 -1
  28. package/dist/device/hub.js +43 -18
  29. package/dist/device/hub.js.map +1 -1
  30. package/dist/device/humidifier.d.ts +1 -1
  31. package/dist/device/humidifier.d.ts.map +1 -1
  32. package/dist/device/humidifier.js +38 -18
  33. package/dist/device/humidifier.js.map +1 -1
  34. package/dist/device/iosensor.d.ts +1 -1
  35. package/dist/device/iosensor.d.ts.map +1 -1
  36. package/dist/device/iosensor.js +42 -19
  37. package/dist/device/iosensor.js.map +1 -1
  38. package/dist/device/lightstrip.d.ts +1 -1
  39. package/dist/device/lightstrip.d.ts.map +1 -1
  40. package/dist/device/lightstrip.js +35 -18
  41. package/dist/device/lightstrip.js.map +1 -1
  42. package/dist/device/lock.d.ts +1 -1
  43. package/dist/device/lock.d.ts.map +1 -1
  44. package/dist/device/lock.js +39 -18
  45. package/dist/device/lock.js.map +1 -1
  46. package/dist/device/meter.d.ts +1 -1
  47. package/dist/device/meter.d.ts.map +1 -1
  48. package/dist/device/meter.js +41 -18
  49. package/dist/device/meter.js.map +1 -1
  50. package/dist/device/meterplus.d.ts +3 -3
  51. package/dist/device/meterplus.d.ts.map +1 -1
  52. package/dist/device/meterplus.js +61 -38
  53. package/dist/device/meterplus.js.map +1 -1
  54. package/dist/device/motion.d.ts +1 -1
  55. package/dist/device/motion.d.ts.map +1 -1
  56. package/dist/device/motion.js +39 -18
  57. package/dist/device/motion.js.map +1 -1
  58. package/dist/device/plug.d.ts +1 -1
  59. package/dist/device/plug.d.ts.map +1 -1
  60. package/dist/device/plug.js +36 -18
  61. package/dist/device/plug.js.map +1 -1
  62. package/dist/device/robotvacuumcleaner.d.ts +1 -1
  63. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  64. package/dist/device/robotvacuumcleaner.js +38 -17
  65. package/dist/device/robotvacuumcleaner.js.map +1 -1
  66. package/dist/irdevice/airconditioner.d.ts +1 -1
  67. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  68. package/dist/irdevice/airconditioner.js +29 -15
  69. package/dist/irdevice/airconditioner.js.map +1 -1
  70. package/dist/irdevice/airpurifier.d.ts +1 -1
  71. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  72. package/dist/irdevice/airpurifier.js +29 -15
  73. package/dist/irdevice/airpurifier.js.map +1 -1
  74. package/dist/irdevice/camera.d.ts +1 -1
  75. package/dist/irdevice/camera.d.ts.map +1 -1
  76. package/dist/irdevice/camera.js +29 -15
  77. package/dist/irdevice/camera.js.map +1 -1
  78. package/dist/irdevice/fan.d.ts +1 -1
  79. package/dist/irdevice/fan.d.ts.map +1 -1
  80. package/dist/irdevice/fan.js +29 -15
  81. package/dist/irdevice/fan.js.map +1 -1
  82. package/dist/irdevice/light.d.ts +1 -1
  83. package/dist/irdevice/light.d.ts.map +1 -1
  84. package/dist/irdevice/light.js +29 -15
  85. package/dist/irdevice/light.js.map +1 -1
  86. package/dist/irdevice/other.d.ts +1 -1
  87. package/dist/irdevice/other.d.ts.map +1 -1
  88. package/dist/irdevice/other.js +50 -23
  89. package/dist/irdevice/other.js.map +1 -1
  90. package/dist/irdevice/tv.d.ts +1 -1
  91. package/dist/irdevice/tv.d.ts.map +1 -1
  92. package/dist/irdevice/tv.js +29 -15
  93. package/dist/irdevice/tv.js.map +1 -1
  94. package/dist/irdevice/vacuumcleaner.d.ts +1 -1
  95. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  96. package/dist/irdevice/vacuumcleaner.js +29 -15
  97. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  98. package/dist/irdevice/waterheater.d.ts +1 -1
  99. package/dist/irdevice/waterheater.d.ts.map +1 -1
  100. package/dist/irdevice/waterheater.js +29 -15
  101. package/dist/irdevice/waterheater.js.map +1 -1
  102. package/dist/platform.d.ts.map +1 -1
  103. package/dist/platform.js +4 -0
  104. package/dist/platform.js.map +1 -1
  105. package/dist/settings.d.ts +1 -0
  106. package/dist/settings.d.ts.map +1 -1
  107. package/dist/settings.js.map +1 -1
  108. package/package.json +10 -10
  109. package/src/device/blindtilt.ts +39 -19
  110. package/src/device/bot.ts +63 -21
  111. package/src/device/ceilinglight.ts +35 -20
  112. package/src/device/colorbulb.ts +35 -19
  113. package/src/device/contact.ts +42 -20
  114. package/src/device/curtain.ts +39 -19
  115. package/src/device/hub.ts +44 -20
  116. package/src/device/humidifier.ts +38 -20
  117. package/src/device/iosensor.ts +42 -21
  118. package/src/device/lightstrip.ts +35 -19
  119. package/src/device/lock.ts +40 -21
  120. package/src/device/meter.ts +41 -19
  121. package/src/device/meterplus.ts +64 -41
  122. package/src/device/motion.ts +39 -21
  123. package/src/device/plug.ts +36 -20
  124. package/src/device/robotvacuumcleaner.ts +38 -19
  125. package/src/irdevice/airconditioner.ts +29 -16
  126. package/src/irdevice/airpurifier.ts +31 -16
  127. package/src/irdevice/camera.ts +31 -16
  128. package/src/irdevice/fan.ts +31 -16
  129. package/src/irdevice/light.ts +31 -16
  130. package/src/irdevice/other.ts +50 -24
  131. package/src/irdevice/tv.ts +31 -16
  132. package/src/irdevice/vacuumcleaner.ts +31 -16
  133. package/src/irdevice/waterheater.ts +31 -16
  134. package/src/platform.ts +4 -0
  135. package/src/settings.ts +1 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "Homebridge SwitchBot",
3
3
  "name": "@switchbot/homebridge-switchbot",
4
- "version": "2.9.0-beta.2",
4
+ "version": "2.9.0-beta.20",
5
5
  "description": "The [Homebridge](https://homebridge.io) SwitchBot plugin allows you to access your [SwitchBot](https://www.switch-bot.com) device(s) from HomeKit.",
6
6
  "author": "SwitchBot <support@wondertechlabs.com> (https://github.com/SwitchBot)",
7
7
  "license": "ISC",
@@ -59,27 +59,27 @@
59
59
  "async-mqtt": "^2.6.3",
60
60
  "crypto-js": "^4.1.1",
61
61
  "fakegato-history": "^0.6.4",
62
- "homebridge-lib": "^6.4.1",
62
+ "homebridge-lib": "^6.5.0",
63
63
  "rxjs": "^7.8.1",
64
- "undici": "^5.23.0"
64
+ "undici": "^5.24.0"
65
65
  },
66
66
  "optionalDependencies": {
67
67
  "@abandonware/bluetooth-hci-socket": "^0.5.3-10",
68
68
  "@abandonware/noble": "^1.9.2-23",
69
- "node-switchbot": "^1.8.2"
69
+ "node-switchbot": "^1.9.0-beta.2"
70
70
  },
71
71
  "devDependencies": {
72
- "@types/crypto-js": "^4.1.1",
73
- "@types/node": "^20.5.7",
74
- "@typescript-eslint/eslint-plugin": "^6.5.0",
75
- "@typescript-eslint/parser": "^6.5.0",
72
+ "@types/crypto-js": "^4.1.2",
73
+ "@types/node": "^20.5.9",
74
+ "@typescript-eslint/eslint-plugin": "^6.6.0",
75
+ "@typescript-eslint/parser": "^6.6.0",
76
76
  "eslint": "^8.48.0",
77
77
  "eslint-config-prettier": "9.0.0",
78
78
  "eslint-plugin-prettier": "5.0.0",
79
79
  "homebridge": "^1.6.1",
80
80
  "nodemon": "^3.0.1",
81
- "npm-check-updates": "^16.13.2",
82
- "prettier": "3.0.2",
81
+ "npm-check-updates": "^16.13.3",
82
+ "prettier": "3.0.3",
83
83
  "rimraf": "^5.0.1",
84
84
  "ts-node": "^10.9.1",
85
85
  "typescript": "^5.2.2"
@@ -114,10 +114,20 @@ export class BlindTilt {
114
114
  .getService(this.platform.Service.AccessoryInformation)!
115
115
  .setCharacteristic(this.platform.Characteristic.Manufacturer, 'SwitchBot')
116
116
  .setCharacteristic(this.platform.Characteristic.Model, 'W2701600')
117
- .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId)
118
- .setCharacteristic(this.platform.Characteristic.FirmwareRevision, this.setFirmwareRevision(accessory, device))
119
- .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
120
- .updateValue(this.setFirmwareRevision(accessory, device));
117
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!);
118
+
119
+ if (accessory.context.FirmwareRevision) {
120
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName}`
121
+ + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`);
122
+ accessory
123
+ .getService(this.platform.Service.AccessoryInformation)!
124
+ .setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
125
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
126
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
127
+ .updateValue(accessory.context.FirmwareRevision);
128
+ } else {
129
+ this.setFirmwareRevision(accessory, device);
130
+ }
121
131
 
122
132
  // get the WindowCovering service if it exists, otherwise create a new WindowCovering service
123
133
  // you can create multiple services for each accessory
@@ -444,7 +454,7 @@ export class BlindTilt {
444
454
  + ` StatusLowBattery: ${this.StatusLowBattery}`);
445
455
 
446
456
  // FirmwareRevision
447
- this.FirmwareRevision = JSON.stringify(this.OpenAPI_FirmwareRevision);
457
+ this.FirmwareRevision = this.OpenAPI_FirmwareRevision!;
448
458
  }
449
459
 
450
460
  async refreshStatus(): Promise<void> {
@@ -895,8 +905,11 @@ export class BlindTilt {
895
905
  this.mqttPublish('FirmwareRevision', this.FirmwareRevision);
896
906
  }
897
907
  this.accessory.context.FirmwareRevision = this.FirmwareRevision;
898
- this.accessory.getService(this.platform.Service.AccessoryInformation)!
899
- .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
908
+ this.batteryService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
909
+ this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
910
+ if (!this.device.blindTilt?.hide_lightsensor) {
911
+ this.lightSensorService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
912
+ }
900
913
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} `
901
914
  + `updateCharacteristic FirmwareRevision: ${this.FirmwareRevision}`);
902
915
  }
@@ -1132,23 +1145,30 @@ export class BlindTilt {
1132
1145
  //throw new this.platform.api.hap.HapStatusError(HAPStatus.SERVICE_COMMUNICATION_FAILURE);
1133
1146
  }
1134
1147
 
1135
- setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig): CharacteristicValue {
1136
- this.debugLog(
1137
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`,
1138
- );
1139
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1140
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1148
+ async setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig) {
1149
+ await this.refreshStatus();
1141
1150
  if (device.firmware) {
1142
- this.FirmwareRevision = device.firmware;
1151
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1152
+ accessory.context.FirmwareRevision = device.firmware;
1153
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1154
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware, FirmwareRevision: ${this.FirmwareRevision}`);
1143
1155
  } else if (device.version) {
1144
- this.FirmwareRevision = JSON.stringify(device.version);
1145
- } else if (accessory.context.FirmwareRevision) {
1156
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version: ${device.version}`);
1157
+ accessory.context.FirmwareRevision = device.version;
1146
1158
  this.FirmwareRevision = accessory.context.FirmwareRevision;
1159
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version, FirmwareRevision: ${this.FirmwareRevision}`);
1147
1160
  } else {
1148
- this.FirmwareRevision = this.platform.version;
1161
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1162
+ accessory.context.FirmwareRevision = this.platform.version;
1163
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1164
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version, FirmwareRevision: ${this.FirmwareRevision}`);
1149
1165
  }
1150
- this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1151
- return this.FirmwareRevision;
1166
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1167
+ accessory
1168
+ .getService(this.platform.Service.AccessoryInformation)!
1169
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
1170
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
1171
+ .updateValue(this.FirmwareRevision);
1152
1172
  }
1153
1173
 
1154
1174
  async context() {
package/src/device/bot.ts CHANGED
@@ -94,10 +94,20 @@ export class Bot {
94
94
  .getService(this.platform.Service.AccessoryInformation)!
95
95
  .setCharacteristic(this.platform.Characteristic.Manufacturer, 'SwitchBot')
96
96
  .setCharacteristic(this.platform.Characteristic.Model, 'SWITCHBOT-BOT-S1')
97
- .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!)
98
- .setCharacteristic(this.platform.Characteristic.FirmwareRevision, this.setFirmwareRevision(accessory, device))
99
- .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
100
- .updateValue(this.setFirmwareRevision(accessory, device));
97
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!);
98
+
99
+ if (accessory.context.FirmwareRevision) {
100
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName}`
101
+ + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`);
102
+ accessory
103
+ .getService(this.platform.Service.AccessoryInformation)!
104
+ .setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
105
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
106
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
107
+ .updateValue(accessory.context.FirmwareRevision);
108
+ } else {
109
+ this.setFirmwareRevision(accessory, device);
110
+ }
101
111
 
102
112
  // deviceType
103
113
  if (this.botDeviceType === 'switch') {
@@ -470,7 +480,7 @@ export class Bot {
470
480
  + ` StatusLowBattery: ${this.StatusLowBattery}`);
471
481
 
472
482
  // FirmwareRevision
473
- this.FirmwareRevision = JSON.stringify(this.OpenAPI_FirmwareRevision);
483
+ this.FirmwareRevision = this.OpenAPI_FirmwareRevision!;
474
484
  }
475
485
 
476
486
  /**
@@ -1037,8 +1047,28 @@ export class Bot {
1037
1047
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} FirmwareRevision: ${this.FirmwareRevision}`);
1038
1048
  } else {
1039
1049
  this.accessory.context.FirmwareRevision = this.FirmwareRevision;
1040
- this.accessory.getService(this.platform.Service.AccessoryInformation)!
1041
- .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1050
+ this.batteryService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1051
+ if (this.botDeviceType === 'garagedoor') {
1052
+ this.garageDoorService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1053
+ } else if (this.botDeviceType === 'door') {
1054
+ this.doorService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1055
+ } else if (this.botDeviceType === 'window') {
1056
+ this.windowService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1057
+ } else if (this.botDeviceType === 'windowcovering') {
1058
+ this.windowCoveringService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1059
+ } else if (this.botDeviceType === 'lock') {
1060
+ this.lockService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1061
+ } else if (this.botDeviceType === 'faucet') {
1062
+ this.faucetService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1063
+ } else if (this.botDeviceType === 'fan') {
1064
+ this.fanService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1065
+ } else if (this.botDeviceType === 'stateful') {
1066
+ this.statefulProgrammableSwitchService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1067
+ } else if (this.botDeviceType === 'switch') {
1068
+ this.switchService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1069
+ } else {
1070
+ this.outletService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1071
+ }
1042
1072
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} `
1043
1073
  + `updateCharacteristic FirmwareRevision: ${this.FirmwareRevision}`);
1044
1074
  }
@@ -1333,28 +1363,40 @@ export class Bot {
1333
1363
  this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
1334
1364
  }
1335
1365
 
1336
- setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig): CharacteristicValue {
1337
- this.debugLog(
1338
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`,
1339
- );
1340
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1341
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1366
+ async setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig) {
1367
+ await this.refreshStatus();
1342
1368
  if (device.firmware) {
1343
- this.FirmwareRevision = device.firmware;
1369
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1370
+ accessory.context.FirmwareRevision = device.firmware;
1371
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1372
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware, FirmwareRevision: ${this.FirmwareRevision}`);
1344
1373
  } else if (device.version) {
1345
- this.FirmwareRevision = JSON.stringify(device.version);
1346
- } if (accessory.context.FirmwareRevision) {
1374
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version: ${device.version}`);
1375
+ accessory.context.FirmwareRevision = device.version;
1347
1376
  this.FirmwareRevision = accessory.context.FirmwareRevision;
1377
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version, FirmwareRevision: ${this.FirmwareRevision}`);
1348
1378
  } else {
1349
- this.FirmwareRevision = this.platform.version;
1379
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1380
+ accessory.context.FirmwareRevision = this.platform.version;
1381
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1382
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version, FirmwareRevision: ${this.FirmwareRevision}`);
1350
1383
  }
1351
- this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1352
- return this.FirmwareRevision;
1384
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1385
+ accessory
1386
+ .getService(this.platform.Service.AccessoryInformation)!
1387
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
1388
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
1389
+ .updateValue(this.FirmwareRevision);
1353
1390
  }
1354
1391
 
1355
1392
  async deviceType(device: device & devicesConfig): Promise<void> {
1356
- if (device.bot?.deviceType) {
1357
- this.botDeviceType = this.accessory.context.deviceType = device.bot.deviceType;
1393
+ if (!device.bot?.deviceType && this.accessory.context.deviceType) {
1394
+ this.botDeviceType = this.accessory.context.deviceType;
1395
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Type: ${this.botDeviceType}, from Accesory Cache.`);
1396
+ } else if (device.bot?.deviceType) {
1397
+ this.accessory.context.deviceType = device.bot.deviceType;
1398
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Accesory Cache: ${this.accessory.context.deviceType}`);
1399
+ this.botDeviceType = this.accessory.context.deviceType;
1358
1400
  this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Device Type: ${this.botDeviceType}`);
1359
1401
  } else {
1360
1402
  this.botDeviceType = 'outlet';
@@ -88,10 +88,20 @@ export class CeilingLight {
88
88
  .getService(this.platform.Service.AccessoryInformation)!
89
89
  .setCharacteristic(this.platform.Characteristic.Manufacturer, 'SwitchBot')
90
90
  .setCharacteristic(this.platform.Characteristic.Model, this.model(device))
91
- .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!)
92
- .setCharacteristic(this.platform.Characteristic.FirmwareRevision, this.setFirmwareRevision(accessory, device))
93
- .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
94
- .updateValue(this.setFirmwareRevision(accessory, device));
91
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!);
92
+
93
+ if (accessory.context.FirmwareRevision) {
94
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName}`
95
+ + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`);
96
+ accessory
97
+ .getService(this.platform.Service.AccessoryInformation)!
98
+ .setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
99
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
100
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
101
+ .updateValue(accessory.context.FirmwareRevision);
102
+ } else {
103
+ this.setFirmwareRevision(accessory, device);
104
+ }
95
105
 
96
106
  // get the Lightbulb service if it exists, otherwise create a new Lightbulb service
97
107
  // you can create multiple services for each accessory
@@ -304,7 +314,7 @@ export class CeilingLight {
304
314
  }
305
315
 
306
316
  // FirmwareRevision
307
- this.FirmwareRevision = JSON.stringify(this.OpenAPI_FirmwareRevision);
317
+ this.FirmwareRevision = this.OpenAPI_FirmwareRevision!;
308
318
  }
309
319
 
310
320
  /**
@@ -852,8 +862,7 @@ export class CeilingLight {
852
862
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} FirmwareRevision: ${this.FirmwareRevision}`);
853
863
  } else {
854
864
  this.accessory.context.FirmwareRevision = this.FirmwareRevision;
855
- this.accessory.getService(this.platform.Service.AccessoryInformation)!
856
- .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
865
+ this.lightBulbService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
857
866
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} `
858
867
  + `updateCharacteristic FirmwareRevision: ${this.FirmwareRevision}`);
859
868
  }
@@ -1013,24 +1022,30 @@ export class CeilingLight {
1013
1022
  this.lightBulbService.updateCharacteristic(this.platform.Characteristic.ColorTemperature, e);
1014
1023
  }
1015
1024
 
1016
- setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig): CharacteristicValue {
1017
-
1018
- this.debugLog(
1019
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`,
1020
- );
1021
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1022
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1025
+ async setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig) {
1026
+ await this.refreshStatus();
1023
1027
  if (device.firmware) {
1024
- this.FirmwareRevision = device.firmware;
1028
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1029
+ accessory.context.FirmwareRevision = device.firmware;
1030
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1031
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware, FirmwareRevision: ${this.FirmwareRevision}`);
1025
1032
  } else if (device.version) {
1026
- this.FirmwareRevision = JSON.stringify(device.version);
1027
- } else if (accessory.context.FirmwareRevision) {
1033
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version: ${device.version}`);
1034
+ accessory.context.FirmwareRevision = device.version;
1028
1035
  this.FirmwareRevision = accessory.context.FirmwareRevision;
1036
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version, FirmwareRevision: ${this.FirmwareRevision}`);
1029
1037
  } else {
1030
- this.FirmwareRevision = this.platform.version;
1038
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1039
+ accessory.context.FirmwareRevision = this.platform.version;
1040
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1041
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version, FirmwareRevision: ${this.FirmwareRevision}`);
1031
1042
  }
1032
- this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1033
- return this.FirmwareRevision;
1043
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1044
+ accessory
1045
+ .getService(this.platform.Service.AccessoryInformation)!
1046
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
1047
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
1048
+ .updateValue(this.FirmwareRevision);
1034
1049
  }
1035
1050
 
1036
1051
  async context() {
@@ -94,10 +94,20 @@ export class ColorBulb {
94
94
  .getService(this.platform.Service.AccessoryInformation)!
95
95
  .setCharacteristic(this.platform.Characteristic.Manufacturer, 'SwitchBot')
96
96
  .setCharacteristic(this.platform.Characteristic.Model, 'W1401400')
97
- .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!)
98
- .setCharacteristic(this.platform.Characteristic.FirmwareRevision, this.setFirmwareRevision(accessory, device))
99
- .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
100
- .updateValue(this.setFirmwareRevision(accessory, device));
97
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!);
98
+
99
+ if (accessory.context.FirmwareRevision) {
100
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName}`
101
+ + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`);
102
+ accessory
103
+ .getService(this.platform.Service.AccessoryInformation)!
104
+ .setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
105
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
106
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
107
+ .updateValue(accessory.context.FirmwareRevision);
108
+ } else {
109
+ this.setFirmwareRevision(accessory, device);
110
+ }
101
111
 
102
112
  // get the Lightbulb service if it exists, otherwise create a new Lightbulb service
103
113
  // you can create multiple services for each accessory
@@ -330,7 +340,7 @@ export class ColorBulb {
330
340
  }
331
341
 
332
342
  // FirmwareRevision
333
- this.FirmwareRevision = JSON.stringify(this.OpenAPI_FirmwareRevision);
343
+ this.FirmwareRevision = this.OpenAPI_FirmwareRevision!;
334
344
  }
335
345
 
336
346
  /**
@@ -1019,8 +1029,7 @@ export class ColorBulb {
1019
1029
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} FirmwareRevision: ${this.FirmwareRevision}`);
1020
1030
  } else {
1021
1031
  this.accessory.context.FirmwareRevision = this.FirmwareRevision;
1022
- this.accessory.getService(this.platform.Service.AccessoryInformation)!
1023
- .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1032
+ this.lightBulbService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
1024
1033
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} `
1025
1034
  + `updateCharacteristic FirmwareRevision: ${this.FirmwareRevision}`);
1026
1035
  }
@@ -1180,23 +1189,30 @@ export class ColorBulb {
1180
1189
  this.lightBulbService.updateCharacteristic(this.platform.Characteristic.ColorTemperature, e);
1181
1190
  }
1182
1191
 
1183
- setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig): CharacteristicValue {
1184
- this.debugLog(
1185
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`,
1186
- );
1187
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1188
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1192
+ async setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig) {
1193
+ await this.refreshStatus();
1189
1194
  if (device.firmware) {
1190
- this.FirmwareRevision = device.firmware;
1195
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1196
+ accessory.context.FirmwareRevision = device.firmware;
1197
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1198
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware, FirmwareRevision: ${this.FirmwareRevision}`);
1191
1199
  } else if (device.version) {
1192
- this.FirmwareRevision = JSON.stringify(device.version);
1193
- } if (accessory.context.FirmwareRevision) {
1200
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version: ${device.version}`);
1201
+ accessory.context.FirmwareRevision = device.version;
1194
1202
  this.FirmwareRevision = accessory.context.FirmwareRevision;
1203
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version, FirmwareRevision: ${this.FirmwareRevision}`);
1195
1204
  } else {
1196
- this.FirmwareRevision = this.platform.version;
1205
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1206
+ accessory.context.FirmwareRevision = this.platform.version;
1207
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1208
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version, FirmwareRevision: ${this.FirmwareRevision}`);
1197
1209
  }
1198
- this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1199
- return this.FirmwareRevision;
1210
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1211
+ accessory
1212
+ .getService(this.platform.Service.AccessoryInformation)!
1213
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
1214
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
1215
+ .updateValue(this.FirmwareRevision);
1200
1216
  }
1201
1217
 
1202
1218
  async context() {
@@ -83,10 +83,20 @@ export class Contact {
83
83
  .getService(this.platform.Service.AccessoryInformation)!
84
84
  .setCharacteristic(this.platform.Characteristic.Manufacturer, 'SwitchBot')
85
85
  .setCharacteristic(this.platform.Characteristic.Model, 'W1201500')
86
- .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!)
87
- .setCharacteristic(this.platform.Characteristic.FirmwareRevision, this.setFirmwareRevision(accessory, device))
88
- .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
89
- .updateValue(this.setFirmwareRevision(accessory, device));
86
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!);
87
+
88
+ if (accessory.context.FirmwareRevision) {
89
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName}`
90
+ + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`);
91
+ accessory
92
+ .getService(this.platform.Service.AccessoryInformation)!
93
+ .setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
94
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
95
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
96
+ .updateValue(accessory.context.FirmwareRevision);
97
+ } else {
98
+ this.setFirmwareRevision(accessory, device);
99
+ }
90
100
 
91
101
  // get the Contact service if it exists, otherwise create a new Contact service
92
102
  // you can create multiple services for each accessory
@@ -282,7 +292,7 @@ export class Contact {
282
292
  );
283
293
 
284
294
  // FirmwareRevision
285
- this.FirmwareRevision = JSON.stringify(this.OpenAPI_FirmwareRevision);
295
+ this.FirmwareRevision = this.OpenAPI_FirmwareRevision!;
286
296
  }
287
297
 
288
298
  /**
@@ -460,8 +470,14 @@ export class Contact {
460
470
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} FirmwareRevision: ${this.FirmwareRevision}`);
461
471
  } else {
462
472
  this.accessory.context.FirmwareRevision = this.FirmwareRevision;
463
- this.accessory.getService(this.platform.Service.AccessoryInformation)!
464
- .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
473
+ this.batteryService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
474
+ this.contactSensorservice.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
475
+ if (!this.device.contact?.hide_motionsensor) {
476
+ this.motionService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
477
+ }
478
+ if (!this.device.contact?.hide_lightsensor) {
479
+ this.lightSensorService!.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
480
+ }
465
481
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} `
466
482
  + `updateCharacteristic FirmwareRevision: ${this.FirmwareRevision}`);
467
483
  }
@@ -596,24 +612,30 @@ export class Contact {
596
612
  this.batteryService?.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, e);
597
613
  }
598
614
 
599
- setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig): CharacteristicValue {
600
-
601
- this.debugLog(
602
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`,
603
- );
604
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
605
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
615
+ async setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig) {
616
+ await this.refreshStatus();
606
617
  if (device.firmware) {
607
- this.FirmwareRevision = device.firmware;
618
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
619
+ accessory.context.FirmwareRevision = device.firmware;
620
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
621
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware, FirmwareRevision: ${this.FirmwareRevision}`);
608
622
  } else if (device.version) {
609
- this.FirmwareRevision = JSON.stringify(device.version);
610
- } else if (accessory.context.FirmwareRevision) {
623
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version: ${device.version}`);
624
+ accessory.context.FirmwareRevision = device.version;
611
625
  this.FirmwareRevision = accessory.context.FirmwareRevision;
626
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version, FirmwareRevision: ${this.FirmwareRevision}`);
612
627
  } else {
613
- this.FirmwareRevision = this.platform.version;
628
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
629
+ accessory.context.FirmwareRevision = this.platform.version;
630
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
631
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version, FirmwareRevision: ${this.FirmwareRevision}`);
614
632
  }
615
- this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
616
- return this.FirmwareRevision;
633
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
634
+ accessory
635
+ .getService(this.platform.Service.AccessoryInformation)!
636
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
637
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
638
+ .updateValue(this.FirmwareRevision);
617
639
  }
618
640
 
619
641
  async context() {
@@ -102,10 +102,20 @@ export class Curtain {
102
102
  .getService(this.platform.Service.AccessoryInformation)!
103
103
  .setCharacteristic(this.platform.Characteristic.Manufacturer, 'SwitchBot')
104
104
  .setCharacteristic(this.platform.Characteristic.Model, 'W0701600')
105
- .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId)
106
- .setCharacteristic(this.platform.Characteristic.FirmwareRevision, this.setFirmwareRevision(accessory, device))
107
- .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
108
- .updateValue(this.setFirmwareRevision(accessory, device));
105
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, device.deviceId!);
106
+
107
+ if (accessory.context.FirmwareRevision) {
108
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName}`
109
+ + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`);
110
+ accessory
111
+ .getService(this.platform.Service.AccessoryInformation)!
112
+ .setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
113
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
114
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
115
+ .updateValue(accessory.context.FirmwareRevision);
116
+ } else {
117
+ this.setFirmwareRevision(accessory, device);
118
+ }
109
119
 
110
120
  // get the WindowCovering service if it exists, otherwise create a new WindowCovering service
111
121
  // you can create multiple services for each accessory
@@ -471,7 +481,7 @@ export class Curtain {
471
481
  + ` StatusLowBattery: ${this.StatusLowBattery}`);
472
482
 
473
483
  // FirmwareRevision
474
- this.FirmwareRevision = JSON.stringify(this.OpenAPI_FirmwareRevision);
484
+ this.FirmwareRevision = this.OpenAPI_FirmwareRevision!;
475
485
  }
476
486
 
477
487
  async refreshStatus(): Promise<void> {
@@ -873,8 +883,11 @@ export class Curtain {
873
883
  this.mqttPublish('FirmwareRevision', this.FirmwareRevision);
874
884
  }
875
885
  this.accessory.context.FirmwareRevision = this.FirmwareRevision;
876
- this.accessory.getService(this.platform.Service.AccessoryInformation)!
877
- .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
886
+ this.batteryService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
887
+ this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
888
+ if (this.device.curtain?.hide_lightsensor) {
889
+ this.windowCoveringService.updateCharacteristic(this.platform.Characteristic.FirmwareRevision, this.FirmwareRevision);
890
+ }
878
891
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} `
879
892
  + `updateCharacteristic FirmwareRevision: ${this.FirmwareRevision}`);
880
893
  }
@@ -1109,23 +1122,30 @@ export class Curtain {
1109
1122
  //throw new this.platform.api.hap.HapStatusError(HAPStatus.SERVICE_COMMUNICATION_FAILURE);
1110
1123
  }
1111
1124
 
1112
- setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig): CharacteristicValue {
1113
- this.debugLog(
1114
- `${this.device.deviceType}: ${this.accessory.displayName}` + ` accessory.context.FirmwareRevision: ${accessory.context.FirmwareRevision}`,
1115
- );
1116
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1117
- this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1125
+ async setFirmwareRevision(accessory: PlatformAccessory<Context>, device: device & devicesConfig) {
1126
+ await this.refreshStatus();
1118
1127
  if (device.firmware) {
1119
- this.FirmwareRevision = device.firmware;
1128
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware: ${device.firmware}`);
1129
+ accessory.context.FirmwareRevision = device.firmware;
1130
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1131
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.firmware, FirmwareRevision: ${this.FirmwareRevision}`);
1120
1132
  } else if (device.version) {
1121
- this.FirmwareRevision = JSON.stringify(device.version);
1122
- } if (accessory.context.FirmwareRevision) {
1133
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version: ${device.version}`);
1134
+ accessory.context.FirmwareRevision = device.version;
1123
1135
  this.FirmwareRevision = accessory.context.FirmwareRevision;
1136
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} device.version, FirmwareRevision: ${this.FirmwareRevision}`);
1124
1137
  } else {
1125
- this.FirmwareRevision = this.platform.version;
1138
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version: ${this.platform.version}`);
1139
+ accessory.context.FirmwareRevision = this.platform.version;
1140
+ this.FirmwareRevision = accessory.context.FirmwareRevision;
1141
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} this.platform.version, FirmwareRevision: ${this.FirmwareRevision}`);
1126
1142
  }
1127
- this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1128
- return this.FirmwareRevision;
1143
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} setFirmwareRevision: ${this.FirmwareRevision}`);
1144
+ accessory
1145
+ .getService(this.platform.Service.AccessoryInformation)!
1146
+ .updateCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.FirmwareRevision)
1147
+ .getCharacteristic(this.platform.Characteristic.FirmwareRevision)
1148
+ .updateValue(this.FirmwareRevision);
1129
1149
  }
1130
1150
 
1131
1151
  async context() {