@switchbot/homebridge-switchbot 3.5.0-beta.63 → 3.5.0-beta.65

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 (113) hide show
  1. package/dist/device/blindtilt.d.ts.map +1 -1
  2. package/dist/device/blindtilt.js +15 -9
  3. package/dist/device/blindtilt.js.map +1 -1
  4. package/dist/device/bot.d.ts.map +1 -1
  5. package/dist/device/bot.js +37 -24
  6. package/dist/device/bot.js.map +1 -1
  7. package/dist/device/ceilinglight.d.ts.map +1 -1
  8. package/dist/device/ceilinglight.js +10 -6
  9. package/dist/device/ceilinglight.js.map +1 -1
  10. package/dist/device/colorbulb.d.ts.map +1 -1
  11. package/dist/device/colorbulb.js +7 -6
  12. package/dist/device/colorbulb.js.map +1 -1
  13. package/dist/device/contact.d.ts.map +1 -1
  14. package/dist/device/contact.js +20 -13
  15. package/dist/device/contact.js.map +1 -1
  16. package/dist/device/curtain.d.ts.map +1 -1
  17. package/dist/device/curtain.js +6 -3
  18. package/dist/device/curtain.js.map +1 -1
  19. package/dist/device/device.d.ts.map +1 -1
  20. package/dist/device/device.js +47 -18
  21. package/dist/device/device.js.map +1 -1
  22. package/dist/device/fan.d.ts.map +1 -1
  23. package/dist/device/fan.js +13 -8
  24. package/dist/device/fan.js.map +1 -1
  25. package/dist/device/hub.d.ts.map +1 -1
  26. package/dist/device/hub.js +15 -9
  27. package/dist/device/hub.js.map +1 -1
  28. package/dist/device/humidifier.d.ts.map +1 -1
  29. package/dist/device/humidifier.js +12 -7
  30. package/dist/device/humidifier.js.map +1 -1
  31. package/dist/device/iosensor.d.ts.map +1 -1
  32. package/dist/device/iosensor.js +16 -9
  33. package/dist/device/iosensor.js.map +1 -1
  34. package/dist/device/lightstrip.d.ts.map +1 -1
  35. package/dist/device/lightstrip.js +9 -5
  36. package/dist/device/lightstrip.js.map +1 -1
  37. package/dist/device/lock.d.ts.map +1 -1
  38. package/dist/device/lock.js +18 -11
  39. package/dist/device/lock.js.map +1 -1
  40. package/dist/device/meter.d.ts.map +1 -1
  41. package/dist/device/meter.js +14 -8
  42. package/dist/device/meter.js.map +1 -1
  43. package/dist/device/meterplus.d.ts.map +1 -1
  44. package/dist/device/meterplus.js +15 -9
  45. package/dist/device/meterplus.js.map +1 -1
  46. package/dist/device/motion.d.ts.map +1 -1
  47. package/dist/device/motion.js +15 -8
  48. package/dist/device/motion.js.map +1 -1
  49. package/dist/device/plug.d.ts.map +1 -1
  50. package/dist/device/plug.js +9 -5
  51. package/dist/device/plug.js.map +1 -1
  52. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  53. package/dist/device/robotvacuumcleaner.js +12 -7
  54. package/dist/device/robotvacuumcleaner.js.map +1 -1
  55. package/dist/device/waterdetector.d.ts.map +1 -1
  56. package/dist/device/waterdetector.js +10 -5
  57. package/dist/device/waterdetector.js.map +1 -1
  58. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  59. package/dist/irdevice/airconditioner.js +5 -5
  60. package/dist/irdevice/airconditioner.js.map +1 -1
  61. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  62. package/dist/irdevice/airpurifier.js +6 -10
  63. package/dist/irdevice/airpurifier.js.map +1 -1
  64. package/dist/irdevice/camera.d.ts.map +1 -1
  65. package/dist/irdevice/camera.js +3 -5
  66. package/dist/irdevice/camera.js.map +1 -1
  67. package/dist/irdevice/fan.d.ts.map +1 -1
  68. package/dist/irdevice/fan.js +3 -6
  69. package/dist/irdevice/fan.js.map +1 -1
  70. package/dist/irdevice/light.d.ts.map +1 -1
  71. package/dist/irdevice/light.js +7 -13
  72. package/dist/irdevice/light.js.map +1 -1
  73. package/dist/irdevice/other.d.ts.map +1 -1
  74. package/dist/irdevice/other.js +34 -55
  75. package/dist/irdevice/other.js.map +1 -1
  76. package/dist/irdevice/tv.d.ts.map +1 -1
  77. package/dist/irdevice/tv.js +4 -8
  78. package/dist/irdevice/tv.js.map +1 -1
  79. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  80. package/dist/irdevice/vacuumcleaner.js +3 -5
  81. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  82. package/dist/irdevice/waterheater.d.ts.map +1 -1
  83. package/dist/irdevice/waterheater.js +3 -5
  84. package/dist/irdevice/waterheater.js.map +1 -1
  85. package/package.json +1 -1
  86. package/src/device/blindtilt.ts +15 -9
  87. package/src/device/bot.ts +37 -24
  88. package/src/device/ceilinglight.ts +10 -6
  89. package/src/device/colorbulb.ts +7 -6
  90. package/src/device/contact.ts +20 -13
  91. package/src/device/curtain.ts +8 -7
  92. package/src/device/device.ts +44 -18
  93. package/src/device/fan.ts +13 -8
  94. package/src/device/hub.ts +15 -9
  95. package/src/device/humidifier.ts +12 -7
  96. package/src/device/iosensor.ts +17 -9
  97. package/src/device/lightstrip.ts +9 -5
  98. package/src/device/lock.ts +18 -11
  99. package/src/device/meter.ts +14 -8
  100. package/src/device/meterplus.ts +16 -9
  101. package/src/device/motion.ts +15 -8
  102. package/src/device/plug.ts +9 -5
  103. package/src/device/robotvacuumcleaner.ts +12 -7
  104. package/src/device/waterdetector.ts +10 -5
  105. package/src/irdevice/airconditioner.ts +5 -6
  106. package/src/irdevice/airpurifier.ts +6 -11
  107. package/src/irdevice/camera.ts +3 -5
  108. package/src/irdevice/fan.ts +3 -7
  109. package/src/irdevice/light.ts +7 -15
  110. package/src/irdevice/other.ts +34 -55
  111. package/src/irdevice/tv.ts +4 -8
  112. package/src/irdevice/vacuumcleaner.ts +3 -5
  113. package/src/irdevice/waterheater.ts +3 -5
@@ -51,12 +51,14 @@ export class Lock extends deviceBase {
51
51
  this.lockUpdateInProgress = false;
52
52
 
53
53
  // Initialize LockMechanism Service
54
+ accessory.context.LockMechanism = accessory.context.LockMechanism ?? {};
54
55
  this.LockMechanism = {
55
- Name: accessory.context.LockMechanismName ?? accessory.displayName,
56
+ Name: accessory.context.LockMechanism.Name ?? accessory.displayName,
56
57
  Service: accessory.getService(this.hap.Service.LockMechanism) ?? accessory.addService(this.hap.Service.LockMechanism) as Service,
57
58
  LockTargetState: accessory.context.LockTargetState ?? this.hap.Characteristic.LockTargetState.SECURED,
58
59
  LockCurrentState: accessory.context.LockCurrentState ?? this.hap.Characteristic.LockCurrentState.SECURED,
59
60
  };
61
+ accessory.context.LockMechanism = this.LockMechanism as object;
60
62
 
61
63
  // Initialize LockMechanism Characteristics
62
64
  this.LockMechanism.Service
@@ -66,15 +68,16 @@ export class Lock extends deviceBase {
66
68
  return this.LockMechanism.LockTargetState;
67
69
  })
68
70
  .onSet(this.LockTargetStateSet.bind(this));
69
- accessory.context.LockMechanismName = this.LockMechanism.Name;
70
71
 
71
72
  // Initialize Battery property
73
+ accessory.context.Battery = accessory.context.Battery ?? {};
72
74
  this.Battery = {
73
- Name: accessory.context.BatteryName ?? `${accessory.displayName} Battery`,
75
+ Name: accessory.context.Battery.Name ?? `${accessory.displayName} Battery`,
74
76
  Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery) as Service,
75
77
  BatteryLevel: accessory.context.BatteryLevel ?? 100,
76
78
  StatusLowBattery: accessory.context.StatusLowBattery ?? this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
77
79
  };
80
+ accessory.context.Battery = this.Battery as object;
78
81
 
79
82
  // Initialize Battery Characteristics
80
83
  this.Battery.Service
@@ -90,7 +93,6 @@ export class Lock extends deviceBase {
90
93
  .onGet(() => {
91
94
  return this.Battery.StatusLowBattery;
92
95
  });
93
- accessory.context.BatteryName = this.Battery.Name;
94
96
 
95
97
  // Contact Sensor Service
96
98
  if (device.lock?.hide_contactsensor) {
@@ -98,11 +100,13 @@ export class Lock extends deviceBase {
98
100
  this.ContactSensor!.Service = this.accessory.getService(this.hap.Service.ContactSensor) as Service;
99
101
  accessory.removeService(this.ContactSensor!.Service);
100
102
  } else {
103
+ accessory.context.ContactSensor = accessory.context.ContactSensor ?? {};
101
104
  this.ContactSensor = {
102
- Name: accessory.context.ContactSensorName ?? `${accessory.displayName} Contact Sensor`,
105
+ Name: accessory.context.ContactSensor.Name ?? `${accessory.displayName} Contact Sensor`,
103
106
  Service: accessory.getService(this.hap.Service.ContactSensor) ?? this.accessory.addService(this.hap.Service.ContactSensor) as Service,
104
107
  ContactSensorState: accessory.context.ContactSensorState ?? this.hap.Characteristic.ContactSensorState.CONTACT_DETECTED,
105
108
  };
109
+ accessory.context.ContactSensor = this.ContactSensor as object;
106
110
 
107
111
  // Initialize Contact Sensor Characteristics
108
112
  this.ContactSensor.Service
@@ -112,7 +116,6 @@ export class Lock extends deviceBase {
112
116
  .onGet(() => {
113
117
  return this.ContactSensor!.ContactSensorState;
114
118
  });
115
- accessory.context.ContactSensorName = this.ContactSensor.Name;
116
119
  }
117
120
 
118
121
  // Initialize Latch Button Service
@@ -121,11 +124,13 @@ export class Lock extends deviceBase {
121
124
  this.Switch!.Service = accessory.getService(this.hap.Service.Switch) as Service;
122
125
  accessory.removeService(this.Switch!.Service);
123
126
  } else {
127
+ accessory.context.Switch = accessory.context.Switch ?? {};
124
128
  this.Switch = {
125
- Name: accessory.context.SwitchName ?? `${accessory.displayName} Latch`,
129
+ Name: accessory.context.Switch.Name ?? `${accessory.displayName} Latch`,
126
130
  Service: accessory.getService(this.hap.Service.Switch) ?? accessory.addService(this.hap.Service.Switch) as Service,
127
131
  On: accessory.context.On ?? false,
128
132
  };
133
+ accessory.context.Switch = this.Switch as object;
129
134
 
130
135
  // Initialize Latch Button Characteristics
131
136
  this.Switch.Service
@@ -135,7 +140,6 @@ export class Lock extends deviceBase {
135
140
  return this.Switch!.On;
136
141
  })
137
142
  .onSet(this.OnSet.bind(this));
138
- accessory.context.SwitchName = this.Switch.Name;
139
143
  }
140
144
 
141
145
  // Retrieve initial values and updateHomekit
@@ -270,12 +274,15 @@ export class Lock extends deviceBase {
270
274
  const version = deviceStatus.body.version?.toString();
271
275
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
272
276
  if (deviceStatus.body.version) {
273
- this.accessory.context.version = version?.replace(/^V|-.*$/g, '');
277
+ const deviceVersion = version?.replace(/^V|-.*$/g, '') ?? '0.0.0';
274
278
  this.accessory
275
279
  .getService(this.hap.Service.AccessoryInformation)!
276
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
280
+ .setCharacteristic(this.hap.Characteristic.HardwareRevision, deviceVersion)
281
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, deviceVersion)
277
282
  .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
278
- .updateValue(this.accessory.context.version);
283
+ .updateValue(deviceVersion);
284
+ this.accessory.context.deviceVersion = deviceVersion;
285
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceVersion: ${this.accessory.context.deviceVersion}`);
279
286
  }
280
287
  }
281
288
 
@@ -48,12 +48,14 @@ export class Meter extends deviceBase {
48
48
  this.meterUpdateInProgress = false;
49
49
 
50
50
  // Initialize Battery Service
51
+ accessory.context.Battery = accessory.context.Battery ?? {};
51
52
  this.Battery = {
52
- Name: accessory.context.BatteryName ?? `${accessory.displayName} Battery`,
53
+ Name: accessory.context.Battery.Name ?? `${accessory.displayName} Battery`,
53
54
  Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery) as Service,
54
55
  BatteryLevel: accessory.context.BatteryLevel ?? 100,
55
56
  StatusLowBattery: accessory.context.StatusLowBattery ?? this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
56
57
  };
58
+ accessory.context.Battery = this.Battery as object;
57
59
 
58
60
  // Initialize Battery Characteristics
59
61
  this.Battery.Service
@@ -69,7 +71,6 @@ export class Meter extends deviceBase {
69
71
  .onGet(() => {
70
72
  return this.Battery.StatusLowBattery;
71
73
  });
72
- accessory.context.BatteryName = this.Battery.Name;
73
74
 
74
75
  // Initialize Temperature Sensor Service
75
76
  if (device.meter?.hide_temperature) {
@@ -77,11 +78,13 @@ export class Meter extends deviceBase {
77
78
  this.TemperatureSensor!.Service = this.accessory.getService(this.hap.Service.TemperatureSensor) as Service;
78
79
  accessory.removeService(this.TemperatureSensor!.Service);
79
80
  } else {
81
+ accessory.context.TemperatureSensor = accessory.context.TemperatureSensor ?? {};
80
82
  this.TemperatureSensor = {
81
- Name: accessory.context.TemperatureSensorName ?? `${accessory.displayName} Temperature Sensor`,
83
+ Name: accessory.context.TemperatureSensor.Name ?? `${accessory.displayName} Temperature Sensor`,
82
84
  Service: accessory.getService(this.hap.Service.TemperatureSensor) ?? this.accessory.addService(this.hap.Service.TemperatureSensor) as Service,
83
85
  CurrentTemperature: accessory.context.CurrentTemperature ?? 30,
84
86
  };
87
+ accessory.context.TemperatureSensor = this.TemperatureSensor as object;
85
88
 
86
89
  // Initialize Temperature Sensor Characteristics
87
90
  this.TemperatureSensor.Service
@@ -97,7 +100,6 @@ export class Meter extends deviceBase {
97
100
  .onGet(() => {
98
101
  return this.TemperatureSensor!.CurrentTemperature!;
99
102
  });
100
- accessory.context.TemperatureSensorName = this.TemperatureSensor.Name;
101
103
  }
102
104
  // Initialize Humidity Sensor Service
103
105
  if (device.meter?.hide_humidity) {
@@ -105,11 +107,13 @@ export class Meter extends deviceBase {
105
107
  this.HumiditySensor!.Service = this.accessory.getService(this.hap.Service.HumiditySensor) as Service;
106
108
  accessory.removeService(this.HumiditySensor!.Service);
107
109
  } else {
110
+ accessory.context.HumiditySensor = accessory.context.HumiditySensor ?? {};
108
111
  this.HumiditySensor = {
109
112
  Name: accessory.context.HumiditySensorName ?? `${accessory.displayName} Humidity Sensor`,
110
113
  Service: accessory.getService(this.hap.Service.HumiditySensor) ?? this.accessory.addService(this.hap.Service.HumiditySensor) as Service,
111
114
  CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity ?? 50,
112
115
  };
116
+ accessory.context.HumiditySensor = this.HumiditySensor as object;
113
117
 
114
118
  // Initialize Humidity Sensor Characteristics
115
119
  this.HumiditySensor!.Service
@@ -121,7 +125,6 @@ export class Meter extends deviceBase {
121
125
  .onGet(() => {
122
126
  return this.HumiditySensor!.CurrentRelativeHumidity!;
123
127
  });
124
- accessory.context.HumiditySensorName = this.HumiditySensor.Name;
125
128
  }
126
129
 
127
130
  // Retrieve initial values and updateHomekit
@@ -227,12 +230,15 @@ export class Meter extends deviceBase {
227
230
  const version = deviceStatus.body.version?.toString();
228
231
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
229
232
  if (deviceStatus.body.version) {
230
- this.accessory.context.version = version?.replace(/^V|-.*$/g, '');
233
+ const deviceVersion = version?.replace(/^V|-.*$/g, '') ?? '0.0.0';
231
234
  this.accessory
232
235
  .getService(this.hap.Service.AccessoryInformation)!
233
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
236
+ .setCharacteristic(this.hap.Characteristic.HardwareRevision, deviceVersion)
237
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, deviceVersion)
234
238
  .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
235
- .updateValue(this.accessory.context.version);
239
+ .updateValue(deviceVersion);
240
+ this.accessory.context.deviceVersion = deviceVersion;
241
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceVersion: ${this.accessory.context.deviceVersion}`);
236
242
  }
237
243
  }
238
244
 
@@ -52,12 +52,14 @@ export class MeterPlus extends deviceBase {
52
52
  this.meterUpdateInProgress = false;
53
53
 
54
54
  // Initialize Battery Service
55
+ accessory.context.Battery = accessory.context.Battery ?? {};
55
56
  this.Battery = {
56
- Name: accessory.context.BatteryName ?? `${accessory.displayName} Battery`,
57
+ Name: accessory.context.Battery.Name ?? `${accessory.displayName} Battery`,
57
58
  Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery) as Service,
58
59
  BatteryLevel: accessory.context.BatteryLevel ?? 100,
59
60
  StatusLowBattery: accessory.context.StatusLowBattery ?? this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
60
61
  };
62
+ accessory.context.Battery = this.Battery as object;
61
63
 
62
64
  // Initialize Battery Characteristics
63
65
  this.Battery.Service
@@ -73,7 +75,6 @@ export class MeterPlus extends deviceBase {
73
75
  .onGet(() => {
74
76
  return this.Battery.StatusLowBattery;
75
77
  });
76
- accessory.context.BatteryName = this.Battery.Name;
77
78
 
78
79
  // Initialize Temperature Sensor Service
79
80
  if (device.meter?.hide_temperature) {
@@ -81,11 +82,13 @@ export class MeterPlus extends deviceBase {
81
82
  this.TemperatureSensor!.Service = this.accessory.getService(this.hap.Service.TemperatureSensor) as Service;
82
83
  accessory.removeService(this.TemperatureSensor!.Service);
83
84
  } else {
85
+ accessory.context.TemperatureSensor = accessory.context.TemperatureSensor ?? {};
84
86
  this.TemperatureSensor = {
85
- Name: accessory.context.TemperatureSensorName ?? `${accessory.displayName} Temperature Sensor`,
87
+ Name: accessory.context.TemperatureSensor.Name ?? `${accessory.displayName} Temperature Sensor`,
86
88
  Service: accessory.getService(this.hap.Service.TemperatureSensor) ?? this.accessory.addService(this.hap.Service.TemperatureSensor) as Service,
87
89
  CurrentTemperature: accessory.context.CurrentTemperature ?? 30,
88
90
  };
91
+ accessory.context.TemperatureSensor = this.TemperatureSensor as object;
89
92
 
90
93
  // Initialize Temperature Sensor Characteristics
91
94
  this.TemperatureSensor.Service
@@ -101,7 +104,6 @@ export class MeterPlus extends deviceBase {
101
104
  .onGet(() => {
102
105
  return this.TemperatureSensor!.CurrentTemperature!;
103
106
  });
104
- accessory.context.TemperatureSensorName = this.TemperatureSensor.Name;
105
107
  }
106
108
  // Initialize Humidity Sensor Service
107
109
  if (device.meter?.hide_humidity) {
@@ -109,11 +111,13 @@ export class MeterPlus extends deviceBase {
109
111
  this.HumiditySensor!.Service = this.accessory.getService(this.hap.Service.HumiditySensor) as Service;
110
112
  accessory.removeService(this.HumiditySensor!.Service);
111
113
  } else {
114
+ accessory.context.HumiditySensor = accessory.context.HumiditySensor ?? {};
112
115
  this.HumiditySensor = {
113
- Name: accessory.context.HumiditySensorName ?? `${accessory.displayName} Humidity Sensor`,
116
+ Name: accessory.context.HumiditySensor.Name ?? `${accessory.displayName} Humidity Sensor`,
114
117
  Service: accessory.getService(this.hap.Service.HumiditySensor) ?? this.accessory.addService(this.hap.Service.HumiditySensor) as Service,
115
118
  CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity ?? 50,
116
119
  };
120
+ accessory.context.HumiditySensor = this.HumiditySensor as object;
117
121
 
118
122
  // Initialize Humidity Sensor Characteristics
119
123
  this.HumiditySensor!.Service
@@ -125,7 +129,6 @@ export class MeterPlus extends deviceBase {
125
129
  .onGet(() => {
126
130
  return this.HumiditySensor!.CurrentRelativeHumidity!;
127
131
  });
128
- accessory.context.HumiditySensorName = this.HumiditySensor.Name;
129
132
  }
130
133
 
131
134
  // Retrieve initial values and updateHomekit
@@ -224,16 +227,20 @@ export class MeterPlus extends deviceBase {
224
227
  this.TemperatureSensor!.CurrentTemperature = deviceStatus.body.temperature!;
225
228
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Temperature: ${this.TemperatureSensor!.CurrentTemperature}°c`);
226
229
  }
230
+
227
231
  // Firmware Version
228
232
  const version = deviceStatus.body.version?.toString();
229
233
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
230
234
  if (deviceStatus.body.version) {
231
- this.accessory.context.version = version?.replace(/^V|-.*$/g, '');
235
+ const deviceVersion = version?.replace(/^V|-.*$/g, '') ?? '0.0.0';
232
236
  this.accessory
233
237
  .getService(this.hap.Service.AccessoryInformation)!
234
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
238
+ .setCharacteristic(this.hap.Characteristic.HardwareRevision, deviceVersion)
239
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, deviceVersion)
235
240
  .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
236
- .updateValue(this.accessory.context.version);
241
+ .updateValue(deviceVersion);
242
+ this.accessory.context.deviceVersion = deviceVersion;
243
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceVersion: ${this.accessory.context.deviceVersion}`);
237
244
  }
238
245
  }
239
246
 
@@ -52,11 +52,13 @@ export class Motion extends deviceBase {
52
52
  this.motionUbpdateInProgress = false;
53
53
 
54
54
  // Initialize Motion Sensor property
55
+ accessory.context.MotionSensor = accessory.context.MotionSensor ?? {};
55
56
  this.MotionSensor = {
56
- Name: accessory.context.MotionSensorName ?? `${accessory.displayName} Motion Sensor`,
57
+ Name: accessory.context.MotionSensor.Name ?? `${accessory.displayName} Motion Sensor`,
57
58
  Service: accessory.getService(this.hap.Service.MotionSensor) ?? accessory.addService(this.hap.Service.MotionSensor) as Service,
58
59
  MotionDetected: accessory.context.MotionDetected ?? false,
59
60
  };
61
+ accessory.context.MotionSensor = this.MotionSensor as object;
60
62
 
61
63
  // Initialize Motion Sensor Characteristics
62
64
  this.MotionSensor.Service
@@ -69,12 +71,14 @@ export class Motion extends deviceBase {
69
71
  accessory.context.MotionSensorName = this.MotionSensor.Name;
70
72
 
71
73
  // Initialize Battery Service
74
+ accessory.context.Battery = accessory.context.Battery ?? {};
72
75
  this.Battery = {
73
- Name: accessory.context.BatteryName ?? `${accessory.displayName} Battery`,
76
+ Name: accessory.context.Battery.Name ?? `${accessory.displayName} Battery`,
74
77
  Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery) as Service,
75
78
  BatteryLevel: accessory.context.BatteryLevel ?? 100,
76
79
  StatusLowBattery: accessory.context.StatusLowBattery ?? this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
77
80
  };
81
+ accessory.context.Battery = this.Battery as object;
78
82
 
79
83
  // Initialize Battery Characteristics
80
84
  this.Battery.Service
@@ -91,7 +95,6 @@ export class Motion extends deviceBase {
91
95
  .onGet(() => {
92
96
  return this.Battery.StatusLowBattery;
93
97
  });
94
- accessory.context.BatteryName = this.Battery.Name;
95
98
 
96
99
  // Initialize Light Sensor Service
97
100
  if (device.motion?.hide_lightsensor) {
@@ -99,11 +102,13 @@ export class Motion extends deviceBase {
99
102
  this.LightSensor!.Service = this.accessory.getService(this.hap.Service.LightSensor) as Service;
100
103
  accessory.removeService(this.LightSensor!.Service);
101
104
  } else {
105
+ accessory.context.LightSensor = accessory.context.LightSensor ?? {};
102
106
  this.LightSensor = {
103
- Name: accessory.context.LightSensorName ?? `${accessory.displayName} Light Sensor`,
107
+ Name: accessory.context.LightSensor.Name ?? `${accessory.displayName} Light Sensor`,
104
108
  Service: accessory.getService(this.hap.Service.LightSensor) ?? this.accessory.addService(this.hap.Service.LightSensor) as Service,
105
109
  CurrentAmbientLightLevel: accessory.context.CurrentAmbientLightLevel ?? 0.0001,
106
110
  };
111
+ accessory.context.LightSensor = this.LightSensor as object;
107
112
 
108
113
  // Initialize LightSensor Characteristics
109
114
  this.LightSensor!.Service
@@ -113,7 +118,6 @@ export class Motion extends deviceBase {
113
118
  .onGet(() => {
114
119
  return this.LightSensor!.CurrentAmbientLightLevel;
115
120
  });
116
- accessory.context.LightSensorName = this.LightSensor.Name;
117
121
  };
118
122
 
119
123
 
@@ -234,12 +238,15 @@ export class Motion extends deviceBase {
234
238
  const version = deviceStatus.body.version?.toString();
235
239
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
236
240
  if (deviceStatus.body.version) {
237
- this.accessory.context.version = version?.replace(/^V|-.*$/g, '');
241
+ const deviceVersion = version?.replace(/^V|-.*$/g, '') ?? '0.0.0';
238
242
  this.accessory
239
243
  .getService(this.hap.Service.AccessoryInformation)!
240
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
244
+ .setCharacteristic(this.hap.Characteristic.HardwareRevision, deviceVersion)
245
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, deviceVersion)
241
246
  .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
242
- .updateValue(this.accessory.context.version);
247
+ .updateValue(deviceVersion);
248
+ this.accessory.context.deviceVersion = deviceVersion;
249
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceVersion: ${this.accessory.context.deviceVersion}`);
243
250
  }
244
251
  }
245
252
 
@@ -33,11 +33,13 @@ export class Plug extends deviceBase {
33
33
  this.plugUpdateInProgress = false;
34
34
 
35
35
  // Initialize Outlet Service
36
+ accessory.context.Outlet = accessory.context.Outlet ?? {};
36
37
  this.Outlet = {
37
- Name: accessory.context.OutletName ?? accessory.displayName,
38
+ Name: accessory.context.Outlet.Name ?? accessory.displayName,
38
39
  Service: accessory.getService(this.hap.Service.Outlet) ?? accessory.addService(this.hap.Service.Outlet) as Service,
39
40
  On: accessory.context.On || false,
40
41
  };
42
+ accessory.context.Outlet = this.Outlet as object;
41
43
 
42
44
  // Initialize Outlet Characteristics
43
45
  this.Outlet.Service
@@ -47,7 +49,6 @@ export class Plug extends deviceBase {
47
49
  return this.Outlet.On;
48
50
  })
49
51
  .onSet(this.OnSet.bind(this));
50
- accessory.context.OutletName = this.Outlet.Name;
51
52
 
52
53
  // Retrieve initial values and updateHomekit
53
54
  this.refreshStatus();
@@ -134,12 +135,15 @@ export class Plug extends deviceBase {
134
135
  const version = deviceStatus.body.version?.toString();
135
136
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
136
137
  if (deviceStatus.body.version) {
137
- this.accessory.context.version = version?.replace(/^V|-.*$/g, '');
138
+ const deviceVersion = version?.replace(/^V|-.*$/g, '') ?? '0.0.0';
138
139
  this.accessory
139
140
  .getService(this.hap.Service.AccessoryInformation)!
140
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
141
+ .setCharacteristic(this.hap.Characteristic.HardwareRevision, deviceVersion)
142
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, deviceVersion)
141
143
  .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
142
- .updateValue(this.accessory.context.version);
144
+ .updateValue(deviceVersion);
145
+ this.accessory.context.deviceVersion = deviceVersion;
146
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceVersion: ${this.accessory.context.deviceVersion}`);
143
147
  }
144
148
  }
145
149
 
@@ -44,12 +44,14 @@ export class RobotVacuumCleaner extends deviceBase {
44
44
  this.robotVacuumCleanerUpdateInProgress = false;
45
45
 
46
46
  // Initialize Lightbulb Service
47
+ accessory.context.LightBulb = accessory.context.LightBulb ?? {};
47
48
  this.LightBulb = {
48
- Name: accessory.context.LightBulbName ?? accessory.displayName,
49
+ Name: accessory.context.LightBulb.Name ?? accessory.displayName,
49
50
  Service: accessory.getService(this.hap.Service.Lightbulb) ?? accessory.addService(this.hap.Service.Lightbulb) as Service,
50
51
  On: accessory.context.On ?? false,
51
52
  Brightness: accessory.context.Brightness ?? 0,
52
53
  };
54
+ accessory.context.LightBulb = this.LightBulb as object;
53
55
 
54
56
  // Initialize LightBulb Characteristics
55
57
  this.LightBulb.Service
@@ -74,16 +76,17 @@ export class RobotVacuumCleaner extends deviceBase {
74
76
  return this.LightBulb.Brightness;
75
77
  })
76
78
  .onSet(this.BrightnessSet.bind(this));
77
- accessory.context.LightBulbName = this.LightBulb.Name;
78
79
 
79
80
  // Initialize Battery Service
81
+ accessory.context.Battery = accessory.context.Battery ?? {};
80
82
  this.Battery = {
81
- Name: accessory.context.BatteryName ?? `${accessory.displayName} Battery`,
83
+ Name: accessory.context.Battery.Name ?? `${accessory.displayName} Battery`,
82
84
  Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery) as Service,
83
85
  BatteryLevel: accessory.context.BatteryLevel ?? 100,
84
86
  StatusLowBattery: accessory.context.StatusLowBattery ?? this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
85
87
  ChargingState: accessory.context.ChargingState ?? this.hap.Characteristic.ChargingState.NOT_CHARGING,
86
88
  };
89
+ accessory.context.Battery = this.Battery as object;
87
90
 
88
91
  // Initialize Battery Characteristics
89
92
  this.Battery.Service
@@ -104,7 +107,6 @@ export class RobotVacuumCleaner extends deviceBase {
104
107
  .onGet(() => {
105
108
  return this.Battery.ChargingState;
106
109
  });
107
- accessory.context.BatteryName = this.Battery.Name;
108
110
 
109
111
  // Retrieve initial values and updateHomekit
110
112
  this.refreshStatus();
@@ -227,12 +229,15 @@ export class RobotVacuumCleaner extends deviceBase {
227
229
  const version = deviceStatus.body.version?.toString();
228
230
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
229
231
  if (deviceStatus.body.version) {
230
- this.accessory.context.version = version?.replace(/^V|-.*$/g, '');
232
+ const deviceVersion = version?.replace(/^V|-.*$/g, '') ?? '0.0.0';
231
233
  this.accessory
232
234
  .getService(this.hap.Service.AccessoryInformation)!
233
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
235
+ .setCharacteristic(this.hap.Characteristic.HardwareRevision, deviceVersion)
236
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, deviceVersion)
234
237
  .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
235
- .updateValue(this.accessory.context.version);
238
+ .updateValue(deviceVersion);
239
+ this.accessory.context.deviceVersion = deviceVersion;
240
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceVersion: ${this.accessory.context.deviceVersion}`);
236
241
  }
237
242
  }
238
243
 
@@ -51,6 +51,7 @@ export class WaterDetector extends deviceBase {
51
51
  this.WaterDetectorUpdateInProgress = false;
52
52
 
53
53
  // Initialize Battery Service
54
+ accessory.context.Battery = accessory.context.Battery ?? {};
54
55
  this.Battery = {
55
56
  Name: accessory.context.Battery.Name ?? `${accessory.displayName} Battery`,
56
57
  Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery) as Service,
@@ -58,6 +59,7 @@ export class WaterDetector extends deviceBase {
58
59
  StatusLowBattery: accessory.context.StatusLowBattery ?? this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
59
60
  ChargingState: accessory.context.ChargingState ?? this.hap.Characteristic.ChargingState.NOT_CHARGEABLE,
60
61
  };
62
+ accessory.context.Battery = this.Battery as object;
61
63
 
62
64
  // Initialize Battery Characteristic
63
65
  this.Battery.Service
@@ -73,7 +75,6 @@ export class WaterDetector extends deviceBase {
73
75
  .onGet(() => {
74
76
  return this.Battery.StatusLowBattery;
75
77
  });
76
- accessory.context.Battery.Name = this.Battery.Name;
77
78
 
78
79
  // Initialize Leak Sensor Service
79
80
  if (device.waterdetector?.hide_leak) {
@@ -81,12 +82,14 @@ export class WaterDetector extends deviceBase {
81
82
  this.LeakSensor!.Service = this.accessory.getService(this.hap.Service.LeakSensor) as Service;
82
83
  accessory.removeService(this.LeakSensor!.Service);
83
84
  } else {
85
+ accessory.context.LeakSensor = accessory.context.LeakSensor ?? {};
84
86
  this.LeakSensor = {
85
87
  Name: accessory.context.LeakSensor.Name ?? `${accessory.displayName} Leak Sensor`,
86
88
  Service: accessory.getService(this.hap.Service.LeakSensor) ?? this.accessory.addService(this.hap.Service.LeakSensor) as Service,
87
89
  StatusActive: accessory.context.StatusActive ?? false,
88
90
  LeakDetected: accessory.context.LeakDetected ?? this.hap.Characteristic.LeakDetected.LEAK_NOT_DETECTED,
89
91
  };
92
+ accessory.context.LeakSensor = this.LeakSensor as object;
90
93
 
91
94
  // Initialize LeakSensor Characteristic
92
95
  this.LeakSensor!.Service
@@ -96,7 +99,6 @@ export class WaterDetector extends deviceBase {
96
99
  .onGet(() => {
97
100
  return this.LeakSensor!.LeakDetected;
98
101
  });
99
- accessory.context.LeakSensor.Name = this.LeakSensor.Name;
100
102
  }
101
103
 
102
104
  // Retrieve initial values and updateHomekit
@@ -181,12 +183,15 @@ export class WaterDetector extends deviceBase {
181
183
  const version = deviceStatus.body.version?.toString();
182
184
  this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${version?.replace(/^V|-.*$/g, '')}`);
183
185
  if (deviceStatus.body.version) {
184
- this.accessory.context.version = version?.replace(/^V|-.*$/g, '');
186
+ const deviceVersion = version?.replace(/^V|-.*$/g, '') ?? '0.0.0';
185
187
  this.accessory
186
188
  .getService(this.hap.Service.AccessoryInformation)!
187
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
189
+ .setCharacteristic(this.hap.Characteristic.HardwareRevision, deviceVersion)
190
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, deviceVersion)
188
191
  .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
189
- .updateValue(this.accessory.context.version);
192
+ .updateValue(deviceVersion);
193
+ this.accessory.context.deviceVersion = deviceVersion;
194
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceVersion: ${this.accessory.context.deviceVersion}`);
190
195
  }
191
196
  }
192
197
 
@@ -64,9 +64,7 @@ export class AirConditioner extends irdeviceBase {
64
64
 
65
65
 
66
66
  // Initialize HeaterCooler Service
67
- if (!accessory.context.HeaterCooler) {
68
- accessory.context.HeaterCooler = {};
69
- }
67
+ accessory.context.HeaterCooler = accessory.context.HeaterCooler ?? {};
70
68
  this.HeaterCooler = {
71
69
  Name: accessory.context.HeaterCooler.Name ?? `${accessory.displayName} ${device.remoteType}`,
72
70
  Service: accessory.getService(this.hap.Service.HeaterCooler) ?? accessory.addService(this.hap.Service.HeaterCooler) as Service,
@@ -77,7 +75,7 @@ export class AirConditioner extends irdeviceBase {
77
75
  ThresholdTemperature: accessory.context.ThresholdTemperature ?? 24,
78
76
  RotationSpeed: accessory.context.RotationSpeed ?? 4,
79
77
  };
80
-
78
+ accessory.context.HeaterCooler = this.HeaterCooler as object;
81
79
 
82
80
  this.HeaterCooler.Service
83
81
  .setCharacteristic(this.hap.Characteristic.Name, this.HeaterCooler.Name)
@@ -145,18 +143,19 @@ export class AirConditioner extends irdeviceBase {
145
143
  return await this.RotationSpeedGet();
146
144
  })
147
145
  .onSet(this.RotationSpeedSet.bind(this));
148
- accessory.context.HeaterCooler.Name = this.HeaterCooler.Name;
149
146
 
150
147
  // Initialize HumiditySensor property
151
148
 
152
149
  if (this.device.irair?.meterType && this.device.irair?.meterId) {
153
150
  const meterUuid = this.platform.api.hap.uuid.generate(`${this.device.irair.meterId}-${this.device.irair.meterType}`);
154
151
  this.meter = this.platform.accessories.find((accessory) => accessory.UUID === meterUuid);
152
+ accessory.context.HumiditySensor = accessory.context.HumiditySensor ?? {};
155
153
  this.HumiditySensor = {
156
- Name: this.meter!.displayName,
154
+ Name: accessory.context.HumiditySensor ?? this.meter!.displayName,
157
155
  Service: this.meter!.getService(this.hap.Service.HumiditySensor) ?? this.meter!.addService(this.hap.Service.HumiditySensor) as Service,
158
156
  CurrentRelativeHumidity: this.meter!.context.CurrentRelativeHumidity || 0,
159
157
  };
158
+ accessory.context.HumiditySensor = this.HumiditySensor as object;
160
159
  }
161
160
 
162
161
  if (this.device.irair?.meterType && this.device.irair?.meterId) {
@@ -56,11 +56,8 @@ export class AirPurifier extends irdeviceBase {
56
56
  ) {
57
57
  super(platform, accessory, device);
58
58
 
59
- if (!accessory.context.AirPurifier) {
60
- accessory.context.AirPurifier = {};
61
- }
62
-
63
- // Initialize AirPurifier property
59
+ // Initialize AirPurifier Service
60
+ accessory.context.AirPurifier = accessory.context.AirPurifier ?? {};
64
61
  this.AirPurifier = {
65
62
  Name: accessory.context.AirPurifier.Name ?? `${accessory.displayName} Air Purifier`,
66
63
  Service: accessory.getService(this.hap.Service.AirPurifier) ?? accessory.addService(this.hap.Service.AirPurifier) as Service,
@@ -69,6 +66,7 @@ export class AirPurifier extends irdeviceBase {
69
66
  CurrentAirPurifierState: accessory.context.CurrentAirPurifierState ?? this.hap.Characteristic.CurrentAirPurifierState.INACTIVE,
70
67
  TargetAirPurifierState: accessory.context.TargetAirPurifierState ?? this.hap.Characteristic.TargetAirPurifierState.AUTO,
71
68
  };
69
+ accessory.context.AirPurifier = this.AirPurifier as object;
72
70
 
73
71
  this.AirPurifier.Service
74
72
  .setCharacteristic(this.hap.Characteristic.Name, this.AirPurifier.Name)
@@ -90,17 +88,15 @@ export class AirPurifier extends irdeviceBase {
90
88
  return this.AirPurifier.TargetAirPurifierState;
91
89
  })
92
90
  .onSet(this.TargetAirPurifierStateSet.bind(this));
93
- accessory.context.AirPurifier.Name = this.AirPurifier.Name;
94
91
 
95
- if (!accessory.context.TemperatureSensor) {
96
- accessory.context.TemperatureSensor = {};
97
- }
98
- // Initialize TemperatureSensor property
92
+ // Initialize TemperatureSensor Service
93
+ accessory.context.TemperatureSensor = accessory.context.TemperatureSensor ?? {};
99
94
  this.TemperatureSensor = {
100
95
  Name: accessory.context.TemperatureSensor.Name ?? `${accessory.displayName} Temperature Sensor`,
101
96
  Service: accessory.getService(this.hap.Service.TemperatureSensor) ?? accessory.addService(this.hap.Service.TemperatureSensor) as Service,
102
97
  CurrentTemperature: accessory.context.CurrentTemperature || 24,
103
98
  };
99
+ accessory.context.TemperatureSensor = this.TemperatureSensor as object;
104
100
 
105
101
  this.TemperatureSensor.Service
106
102
  .setCharacteristic(this.hap.Characteristic.Name, this.TemperatureSensor.Name)
@@ -108,7 +104,6 @@ export class AirPurifier extends irdeviceBase {
108
104
  .onGet(() => {
109
105
  return this.TemperatureSensor.CurrentTemperature;
110
106
  });
111
- accessory.context.TemperatureSensor.Name = this.TemperatureSensor.Name;
112
107
  }
113
108
 
114
109
  async ActiveSet(value: CharacteristicValue): Promise<void> {
@@ -30,15 +30,14 @@ export class Camera extends irdeviceBase {
30
30
  ) {
31
31
  super(platform, accessory, device);
32
32
 
33
- if (!accessory.context.Switch) {
34
- accessory.context.Switch = {};
35
- }
36
- // Initialize Switch property
33
+ // Initialize Switch Service
34
+ accessory.context.Switch = accessory.context.Switch ?? {};
37
35
  this.Switch = {
38
36
  Name: accessory.context.Switch.Name ?? `${accessory.displayName} Camera`,
39
37
  Service: accessory.getService(this.hap.Service.Switch) ?? accessory.addService(this.hap.Service.Switch) as Service,
40
38
  On: accessory.context.On ?? false,
41
39
  };
40
+ accessory.context.Switch = this.Switch as object;
42
41
 
43
42
  this.Switch.Service
44
43
  .setCharacteristic(this.hap.Characteristic.Name, this.Switch.Name)
@@ -47,7 +46,6 @@ export class Camera extends irdeviceBase {
47
46
  return this.Switch.On;
48
47
  })
49
48
  .onSet(this.OnSet.bind(this));
50
- accessory.context.Switch.Name = this.Switch.Name;
51
49
  }
52
50
 
53
51
  async OnSet(value: CharacteristicValue): Promise<void> {