@homebridge-plugins/homebridge-matter 0.4.1 → 0.6.0

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 (77) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +2 -1
  3. package/config.schema.json +8 -1
  4. package/dist/devices/AirQualitySensorAccessory.d.ts +50 -0
  5. package/dist/devices/AirQualitySensorAccessory.js +130 -0
  6. package/dist/devices/AirQualitySensorAccessory.js.map +1 -0
  7. package/dist/devices/BaseMatterAccessory.d.ts +1 -1
  8. package/dist/devices/ColorLightAccessory.d.ts +3 -3
  9. package/dist/devices/ColorLightAccessory.js +41 -6
  10. package/dist/devices/ColorLightAccessory.js.map +1 -1
  11. package/dist/devices/ColorTemperatureLightAccessory.d.ts +3 -3
  12. package/dist/devices/ColorTemperatureLightAccessory.js +19 -6
  13. package/dist/devices/ColorTemperatureLightAccessory.js.map +1 -1
  14. package/dist/devices/ContactSensorAccessory.d.ts +1 -1
  15. package/dist/devices/ContactSensorAccessory.js +2 -2
  16. package/dist/devices/ContactSensorAccessory.js.map +1 -1
  17. package/dist/devices/DimmableLightAccessory.d.ts +3 -3
  18. package/dist/devices/DimmableLightAccessory.js +23 -7
  19. package/dist/devices/DimmableLightAccessory.js.map +1 -1
  20. package/dist/devices/DoorLockAccessory.d.ts +1 -1
  21. package/dist/devices/DoorLockAccessory.js +37 -2
  22. package/dist/devices/DoorLockAccessory.js.map +1 -1
  23. package/dist/devices/ExtendedColorLightAccessory.d.ts +3 -3
  24. package/dist/devices/ExtendedColorLightAccessory.js +24 -6
  25. package/dist/devices/ExtendedColorLightAccessory.js.map +1 -1
  26. package/dist/devices/FanAccessory.d.ts +2 -2
  27. package/dist/devices/FanAccessory.js +36 -4
  28. package/dist/devices/FanAccessory.js.map +1 -1
  29. package/dist/devices/HumiditySensorAccessory.d.ts +1 -1
  30. package/dist/devices/HumiditySensorAccessory.js +2 -2
  31. package/dist/devices/HumiditySensorAccessory.js.map +1 -1
  32. package/dist/devices/LeakSensorAccessory.d.ts +1 -1
  33. package/dist/devices/LeakSensorAccessory.js +2 -2
  34. package/dist/devices/LeakSensorAccessory.js.map +1 -1
  35. package/dist/devices/LightSensorAccessory.d.ts +1 -1
  36. package/dist/devices/LightSensorAccessory.js +2 -2
  37. package/dist/devices/LightSensorAccessory.js.map +1 -1
  38. package/dist/devices/OccupancySensorAccessory.d.ts +1 -1
  39. package/dist/devices/OccupancySensorAccessory.js +3 -4
  40. package/dist/devices/OccupancySensorAccessory.js.map +1 -1
  41. package/dist/devices/OnOffLightAccessory.d.ts +1 -1
  42. package/dist/devices/OnOffLightAccessory.js +18 -2
  43. package/dist/devices/OnOffLightAccessory.js.map +1 -1
  44. package/dist/devices/OnOffOutletAccessory.d.ts +1 -1
  45. package/dist/devices/OnOffOutletAccessory.js +18 -2
  46. package/dist/devices/OnOffOutletAccessory.js.map +1 -1
  47. package/dist/devices/OnOffSwitchAccessory.d.ts +1 -1
  48. package/dist/devices/OnOffSwitchAccessory.js +14 -2
  49. package/dist/devices/OnOffSwitchAccessory.js.map +1 -1
  50. package/dist/devices/RoboticVacuumAccessory.d.ts +6 -6
  51. package/dist/devices/RoboticVacuumAccessory.js +65 -25
  52. package/dist/devices/RoboticVacuumAccessory.js.map +1 -1
  53. package/dist/devices/SmokeCOAlarmAccessory.d.ts +2 -2
  54. package/dist/devices/SmokeCOAlarmAccessory.js +5 -6
  55. package/dist/devices/SmokeCOAlarmAccessory.js.map +1 -1
  56. package/dist/devices/TemperatureSensorAccessory.d.ts +1 -1
  57. package/dist/devices/TemperatureSensorAccessory.js +2 -2
  58. package/dist/devices/TemperatureSensorAccessory.js.map +1 -1
  59. package/dist/devices/ThermostatAccessory.d.ts +4 -4
  60. package/dist/devices/ThermostatAccessory.js +39 -8
  61. package/dist/devices/ThermostatAccessory.js.map +1 -1
  62. package/dist/devices/VenetianBlindAccessory.d.ts +2 -2
  63. package/dist/devices/VenetianBlindAccessory.js +22 -5
  64. package/dist/devices/VenetianBlindAccessory.js.map +1 -1
  65. package/dist/devices/WindowBlindAccessory.d.ts +1 -1
  66. package/dist/devices/WindowBlindAccessory.js +25 -4
  67. package/dist/devices/WindowBlindAccessory.js.map +1 -1
  68. package/dist/devices/custom/PowerStripAccessory.d.ts +2 -2
  69. package/dist/devices/custom/PowerStripAccessory.js +41 -8
  70. package/dist/devices/custom/PowerStripAccessory.js.map +1 -1
  71. package/dist/devices/index.d.ts +1 -0
  72. package/dist/devices/index.js +1 -0
  73. package/dist/devices/index.js.map +1 -1
  74. package/dist/homebridge-ui/public/index.html +1 -0
  75. package/dist/platform.js +7 -1
  76. package/dist/platform.js.map +1 -1
  77. package/package.json +6 -6
@@ -32,14 +32,49 @@ export class DoorLockAccessory extends BaseMatterAccessory {
32
32
  this.logInfo('initialized.');
33
33
  }
34
34
  async handleLock() {
35
+ this.logInfo('locking door.');
36
+ // Example: Check if door is closed before locking
37
+ // if (this.isDoorOpen) {
38
+ // throw new MatterStatus.InvalidInState('Cannot lock door while it is open')
39
+ // }
40
+ // Example: Check if lock mechanism is already in use
41
+ // if (this.isLockMotorActive) {
42
+ // throw new MatterStatus.Busy('Lock mechanism is currently in use')
43
+ // }
44
+ // Example: Lock with timeout and error handling
45
+ // try {
46
+ // await this.lockAPI.lock({ timeout: 10000 })
47
+ // } catch (error) {
48
+ // if (error.code === 'LOCK_JAMMED') {
49
+ // throw new MatterStatus.Failure('Lock is jammed - check door alignment')
50
+ // }
51
+ // if (error.code === 'ETIMEDOUT') {
52
+ // throw new MatterStatus.Timeout('Lock motor did not respond within 10 seconds')
53
+ // }
54
+ // throw error
55
+ // }
35
56
  this.logInfo('locked.');
36
57
  }
37
58
  async handleUnlock() {
59
+ this.logInfo('unlocking door.');
60
+ // Example: Check if user has permission to unlock
61
+ // if (!this.userHasUnlockPermission) {
62
+ // throw new MatterStatus.PermissionDenied('User does not have permission to unlock')
63
+ // }
64
+ // Example: Check if security system prevents unlocking
65
+ // if (this.isSecuritySystemArmed) {
66
+ // throw new MatterStatus.InvalidInState('Cannot unlock while security system is armed')
67
+ // }
68
+ // Example: Check time-based access restrictions
69
+ // const currentHour = new Date().getHours()
70
+ // if (currentHour < 6 || currentHour > 22) {
71
+ // throw new MatterStatus.PermissionDenied('Remote unlocking disabled during night hours')
72
+ // }
38
73
  this.logInfo('unlocked.');
39
74
  }
40
- updateLockState(state) {
75
+ async updateLockState(state) {
41
76
  // 0 = Not fully locked, 1 = Locked, 2 = Unlocked
42
- this.updateState('doorLock', { lockState: state });
77
+ await this.updateState('doorLock', { lockState: state });
43
78
  const stateStr = ['Not Fully Locked', 'Locked', 'Unlocked'][state];
44
79
  this.logInfo(`lock state: ${stateStr}.`);
45
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DoorLockAccessory.js","sourceRoot":"","sources":["../../src/devices/DoorLockAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IACxD,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,UAAU,CAAA;QAC/B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ;YAC3C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,qBAAqB;YAC5B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ;oBACvD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ;oBACrD,eAAe,EAAE,IAAI;oBACrB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM;iBAC9D;aACF;YAED,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;oBACvC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;iBAC5C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAC3B,CAAC;IAEM,eAAe,CAAC,KAAgB;QACrC,iDAAiD;QACjD,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,CAAC,kBAAkB,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAA;QAClE,IAAI,CAAC,OAAO,CAAC,eAAe,QAAQ,GAAG,CAAC,CAAA;IAC1C,CAAC;CACF"}
1
+ {"version":3,"file":"DoorLockAccessory.js","sourceRoot":"","sources":["../../src/devices/DoorLockAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IACxD,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,UAAU,CAAA;QAC/B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ;YAC3C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,qBAAqB;YAC5B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ;oBACvD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ;oBACrD,eAAe,EAAE,IAAI;oBACrB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM;iBAC9D;aACF;YAED,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;oBACvC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;iBAC5C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAE7B,kDAAkD;QAClD,yBAAyB;QACzB,+EAA+E;QAC/E,IAAI;QAEJ,qDAAqD;QACrD,gCAAgC;QAChC,sEAAsE;QACtE,IAAI;QAEJ,gDAAgD;QAChD,QAAQ;QACR,gDAAgD;QAChD,oBAAoB;QACpB,wCAAwC;QACxC,8EAA8E;QAC9E,MAAM;QACN,sCAAsC;QACtC,qFAAqF;QACrF,MAAM;QACN,gBAAgB;QAChB,IAAI;QAEJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAE/B,kDAAkD;QAClD,uCAAuC;QACvC,uFAAuF;QACvF,IAAI;QAEJ,uDAAuD;QACvD,oCAAoC;QACpC,0FAA0F;QAC1F,IAAI;QAEJ,gDAAgD;QAChD,4CAA4C;QAC5C,6CAA6C;QAC7C,4FAA4F;QAC5F,IAAI;QAEJ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAC3B,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,KAAgB;QAC3C,iDAAiD;QACjD,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QACxD,MAAM,QAAQ,GAAG,CAAC,kBAAkB,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAA;QAClE,IAAI,CAAC,OAAO,CAAC,eAAe,QAAQ,GAAG,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -12,7 +12,7 @@ export declare class ExtendedColorLightAccessory extends BaseMatterAccessory {
12
12
  private handleSetColor;
13
13
  private handleSetHueSaturation;
14
14
  private handleSetColorTemperature;
15
- updateOnOffState(isOn: boolean): void;
16
- updateBrightness(percent: number): void;
17
- updateHueSaturation(hue: number, saturation: number): void;
15
+ updateOnOffState(isOn: boolean): Promise<void>;
16
+ updateBrightness(percent: number): Promise<void>;
17
+ updateHueSaturation(hue: number, saturation: number): Promise<void>;
18
18
  }
@@ -87,19 +87,37 @@ export class ExtendedColorLightAccessory extends BaseMatterAccessory {
87
87
  const { colorTemperatureMireds, transitionTime } = request;
88
88
  const kelvin = Math.round(1000000 / colorTemperatureMireds);
89
89
  this.logInfo(`setting color temp to ${kelvin}k.`);
90
+ // Example: Validate color temperature is within device physical limits
91
+ // const minMireds = 147 // ~6800K (cool white)
92
+ // const maxMireds = 454 // ~2200K (warm white)
93
+ // if (colorTemperatureMireds < minMireds || colorTemperatureMireds > maxMireds) {
94
+ // throw new MatterStatus.ConstraintError(
95
+ // `Color temperature ${kelvin}K is out of range (2200K-6800K)`
96
+ // )
97
+ // }
98
+ // Example: Check if bulb is in the correct color mode for CCT
99
+ // if (this.currentColorMode === 'xy' || this.currentColorMode === 'hs') {
100
+ // throw new MatterStatus.InvalidInState(
101
+ // 'Cannot set color temperature while in color mode - switch to white mode first'
102
+ // )
103
+ // }
104
+ // Example: Check if bulb supports tunable white
105
+ // if (!this.supportsTunableWhite) {
106
+ // throw new MatterStatus.InvalidAction('This bulb does not support color temperature adjustment')
107
+ // }
90
108
  // TODO: await myLightAPI.setColorTemperature(kelvin, transitionTime)
91
109
  }
92
- updateOnOffState(isOn) {
93
- this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
110
+ async updateOnOffState(isOn) {
111
+ await this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
94
112
  }
95
- updateBrightness(percent) {
113
+ async updateBrightness(percent) {
96
114
  const matterLevel = Math.max(1, Math.round((percent / 100) * 254));
97
- this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel });
115
+ await this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel });
98
116
  }
99
- updateHueSaturation(hue, saturation) {
117
+ async updateHueSaturation(hue, saturation) {
100
118
  const matterHue = Math.round((hue / 360) * 254);
101
119
  const matterSat = Math.round((saturation / 100) * 254);
102
- this.updateState(this.api.matter.clusterNames.ColorControl, {
120
+ await this.updateState(this.api.matter.clusterNames.ColorControl, {
103
121
  currentHue: matterHue,
104
122
  currentSaturation: matterSat,
105
123
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ExtendedColorLightAccessory.js","sourceRoot":"","sources":["../../src/devices/ExtendedColorLightAccessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExtendedColorLightAccessory.js","sourceRoot":"","sources":["../../src/devices/ExtendedColorLightAccessory.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,6 @@ export declare class FanAccessory extends BaseMatterAccessory {
8
8
  private handleStep;
9
9
  private handleFanModeChange;
10
10
  private handlePercentSettingChange;
11
- updateFanMode(mode: number): void;
12
- updateFanSpeed(percent: number): void;
11
+ updateFanMode(mode: number): Promise<void>;
12
+ updateFanSpeed(percent: number): Promise<void>;
13
13
  }
@@ -44,6 +44,19 @@ export class FanAccessory extends BaseMatterAccessory {
44
44
  const modeNames = ['Off', 'Low', 'Medium', 'High', 'On', 'Auto', 'Smart'];
45
45
  const modeName = modeNames[request.fanMode] || `Unknown (${request.fanMode})`;
46
46
  this.logInfo(`fan mode changed to: ${modeName}.`);
47
+ // Example: Check if requested mode is supported by the fan
48
+ // const supportedModes = [0, 1, 2, 3, 4] // Off, Low, Medium, High, On
49
+ // if (!supportedModes.includes(request.fanMode)) {
50
+ // throw new MatterStatus.InvalidAction(
51
+ // `Fan mode ${modeName} is not supported by this device`
52
+ // )
53
+ // }
54
+ // Example: Check if fan can change modes while running
55
+ // if (this.isOscillating && request.fanMode === 5) {
56
+ // throw new MatterStatus.InvalidInState(
57
+ // 'Cannot switch to Auto mode while oscillating'
58
+ // )
59
+ // }
47
60
  // TODO: await myFanAPI.setMode(request.fanMode)
48
61
  }
49
62
  async handlePercentSettingChange(request) {
@@ -51,6 +64,25 @@ export class FanAccessory extends BaseMatterAccessory {
51
64
  const percent = request.percentSetting ?? 0;
52
65
  const isOff = percent === 0;
53
66
  const wasOff = (request.oldPercentSetting ?? 0) === 0;
67
+ // Example: Validate speed percentage is within supported range
68
+ // if (percent < 0 || percent > 100) {
69
+ // throw new MatterStatus.ConstraintError(
70
+ // `Fan speed ${percent}% is out of range (0-100)`
71
+ // )
72
+ // }
73
+ // Example: Check if fan supports variable speed control
74
+ // if (percent > 0 && percent < 100 && !this.supportsVariableSpeed) {
75
+ // throw new MatterStatus.InvalidAction(
76
+ // 'This fan only supports fixed speeds (Low/Medium/High), not variable percentage'
77
+ // )
78
+ // }
79
+ // Example: Enforce minimum speed when fan is on
80
+ // const minSpeed = 20
81
+ // if (percent > 0 && percent < minSpeed) {
82
+ // throw new MatterStatus.ConstraintError(
83
+ // `Fan minimum speed is ${minSpeed}% when on`
84
+ // )
85
+ // }
54
86
  if (isOff !== wasOff) {
55
87
  this.logInfo(`fan turned ${isOff ? 'off' : 'on'}.`);
56
88
  }
@@ -59,11 +91,11 @@ export class FanAccessory extends BaseMatterAccessory {
59
91
  }
60
92
  // TODO: await myFanAPI.setSpeed(percent)
61
93
  }
62
- updateFanMode(mode) {
63
- this.updateState(this.api.matter.clusterNames.FanControl, { fanMode: mode });
94
+ async updateFanMode(mode) {
95
+ await this.updateState(this.api.matter.clusterNames.FanControl, { fanMode: mode });
64
96
  }
65
- updateFanSpeed(percent) {
66
- this.updateState(this.api.matter.clusterNames.FanControl, {
97
+ async updateFanSpeed(percent) {
98
+ await this.updateState(this.api.matter.clusterNames.FanControl, {
67
99
  percentSetting: percent,
68
100
  percentCurrent: percent,
69
101
  });
@@ -1 +1 @@
1
- {"version":3,"file":"FanAccessory.js","sourceRoot":"","sources":["../../src/devices/FanAccessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FanAccessory.js","sourceRoot":"","sources":["../../src/devices/FanAccessory.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,5 @@ import type { API, Logger } from 'homebridge';
5
5
  import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
6
  export declare class HumiditySensorAccessory extends BaseMatterAccessory {
7
7
  constructor(api: API, log: Logger);
8
- updateHumidity(percent: number): void;
8
+ updateHumidity(percent: number): Promise<void>;
9
9
  }
@@ -24,9 +24,9 @@ export class HumiditySensorAccessory extends BaseMatterAccessory {
24
24
  });
25
25
  this.logInfo('initialized.');
26
26
  }
27
- updateHumidity(percent) {
27
+ async updateHumidity(percent) {
28
28
  const value = Math.round(percent * 100); // convert to hundredths
29
- this.updateState('relativeHumidityMeasurement', { measuredValue: value });
29
+ await this.updateState('relativeHumidityMeasurement', { measuredValue: value });
30
30
  this.logInfo(`humidity: ${percent}%.`);
31
31
  }
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HumiditySensorAccessory.js","sourceRoot":"","sources":["../../src/devices/HumiditySensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAC9D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc;YACjD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,2BAA2B;YAClC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,2BAA2B,EAAE;oBAC3B,aAAa,EAAE,IAAI,EAAE,mCAAmC;oBACxD,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,KAAK;iBACxB;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,cAAc,CAAC,OAAe;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAA,CAAC,wBAAwB;QAChE,IAAI,CAAC,WAAW,CAAC,6BAA6B,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAA;QACzE,IAAI,CAAC,OAAO,CAAC,aAAa,OAAO,IAAI,CAAC,CAAA;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"HumiditySensorAccessory.js","sourceRoot":"","sources":["../../src/devices/HumiditySensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAC9D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc;YACjD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,2BAA2B;YAClC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,2BAA2B,EAAE;oBAC3B,aAAa,EAAE,IAAI,EAAE,mCAAmC;oBACxD,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,KAAK;iBACxB;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,OAAe;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAA,CAAC,wBAAwB;QAChE,MAAM,IAAI,CAAC,WAAW,CAAC,6BAA6B,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAA;QAC/E,IAAI,CAAC,OAAO,CAAC,aAAa,OAAO,IAAI,CAAC,CAAA;IACxC,CAAC;CACF"}
@@ -5,5 +5,5 @@ import type { API, Logger } from 'homebridge';
5
5
  import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
6
  export declare class LeakSensorAccessory extends BaseMatterAccessory {
7
7
  constructor(api: API, log: Logger);
8
- updateLeakState(leakDetected: boolean): void;
8
+ updateLeakState(leakDetected: boolean): Promise<void>;
9
9
  }
@@ -22,8 +22,8 @@ export class LeakSensorAccessory extends BaseMatterAccessory {
22
22
  });
23
23
  this.logInfo('initialized.');
24
24
  }
25
- updateLeakState(leakDetected) {
26
- this.updateState(this.api.matter.clusterNames.BooleanState, { stateValue: leakDetected });
25
+ async updateLeakState(leakDetected) {
26
+ await this.updateState(this.api.matter.clusterNames.BooleanState, { stateValue: leakDetected });
27
27
  this.logInfo(`leak: ${leakDetected ? 'detected' : 'none'}.`);
28
28
  }
29
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LeakSensorAccessory.js","sourceRoot":"","sources":["../../src/devices/LeakSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;IAC1D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,aAAa;YAC1B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU;YAC7C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,uBAAuB;YAC9B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,UAAU,EAAE,KAAK,EAAE,2BAA2B;iBAC/C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,eAAe,CAAC,YAAqB;QAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAA;QACzF,IAAI,CAAC,OAAO,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAC9D,CAAC;CACF"}
1
+ {"version":3,"file":"LeakSensorAccessory.js","sourceRoot":"","sources":["../../src/devices/LeakSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;IAC1D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,aAAa;YAC1B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU;YAC7C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,uBAAuB;YAC9B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,UAAU,EAAE,KAAK,EAAE,2BAA2B;iBAC/C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,YAAqB;QAChD,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAA;QAC/F,IAAI,CAAC,OAAO,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAC9D,CAAC;CACF"}
@@ -5,5 +5,5 @@ import type { API, Logger } from 'homebridge';
5
5
  import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
6
  export declare class LightSensorAccessory extends BaseMatterAccessory {
7
7
  constructor(api: API, log: Logger);
8
- updateIlluminance(lux: number): void;
8
+ updateIlluminance(lux: number): Promise<void>;
9
9
  }
@@ -24,9 +24,9 @@ export class LightSensorAccessory extends BaseMatterAccessory {
24
24
  });
25
25
  this.logInfo('initialized.');
26
26
  }
27
- updateIlluminance(lux) {
27
+ async updateIlluminance(lux) {
28
28
  const value = Math.round(10000 * Math.log10(lux));
29
- this.updateState('illuminanceMeasurement', { measuredValue: value });
29
+ await this.updateState('illuminanceMeasurement', { measuredValue: value });
30
30
  this.logInfo(`illuminance: ${lux} lux.`);
31
31
  }
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LightSensorAccessory.js","sourceRoot":"","sources":["../../src/devices/LightSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAC3D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,cAAc;YAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW;YAC9C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,wBAAwB;YAC/B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,sBAAsB,EAAE;oBACtB,aAAa,EAAE,IAAI;oBACnB,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,KAAK;iBACxB;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,iBAAiB,CAAC,GAAW;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QACjD,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAA;QACpE,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAA;IAC1C,CAAC;CACF"}
1
+ {"version":3,"file":"LightSensorAccessory.js","sourceRoot":"","sources":["../../src/devices/LightSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAC3D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,cAAc;YAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW;YAC9C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,wBAAwB;YAC/B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,sBAAsB,EAAE;oBACtB,aAAa,EAAE,IAAI;oBACnB,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,KAAK;iBACxB;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,GAAW;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QACjD,MAAM,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1E,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -5,5 +5,5 @@ import type { API, Logger } from 'homebridge';
5
5
  import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
6
  export declare class OccupancySensorAccessory extends BaseMatterAccessory {
7
7
  constructor(api: API, log: Logger);
8
- updateOccupancyDetected(detected: boolean): void;
8
+ updateOccupancyDetected(detected: boolean): Promise<void>;
9
9
  }
@@ -6,8 +6,7 @@ export class OccupancySensorAccessory extends BaseMatterAccessory {
6
6
  constructor(api, log) {
7
7
  const serialNumber = 'SENSOR-003';
8
8
  // Note: Matter.js API calls this "MotionSensor" but it's actually an Occupancy Sensor
9
- const OccupancySensingServer = api.matter.deviceTypes.MotionSensor.requirements.OccupancySensingServer;
10
- const OccupancySensorWithPIR = api.matter.deviceTypes.MotionSensor.with(OccupancySensingServer.with('PassiveInfrared'));
9
+ const OccupancySensorWithPIR = api.matter.deviceTypes.MotionSensor.with(api.matter.deviceTypes.MotionSensor.requirements.OccupancySensingServer.with('PassiveInfrared'));
11
10
  super(api, log, {
12
11
  uuid: api.matter.uuid.generate(serialNumber),
13
12
  displayName: 'Occupancy Sensor',
@@ -33,8 +32,8 @@ export class OccupancySensorAccessory extends BaseMatterAccessory {
33
32
  });
34
33
  this.logInfo('initialized.');
35
34
  }
36
- updateOccupancyDetected(detected) {
37
- this.updateState('occupancySensing', {
35
+ async updateOccupancyDetected(detected) {
36
+ await this.updateState('occupancySensing', {
38
37
  occupancy: { occupied: detected },
39
38
  });
40
39
  this.logInfo(`occupancy: ${detected ? 'detected' : 'clear'}.`);
@@ -1 +1 @@
1
- {"version":3,"file":"OccupancySensorAccessory.js","sourceRoot":"","sources":["../../src/devices/OccupancySensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,wBAAyB,SAAQ,mBAAmB;IAC/D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,sFAAsF;QACtF,MAAM,sBAAsB,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,sBAAsB,CAAA;QACtG,MAAM,sBAAsB,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CACrE,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC/C,CAAA;QAED,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,kBAAkB;YAC/B,UAAU,EAAE,sBAAsB;YAClC,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,4BAA4B;YACnC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,gBAAgB,EAAE;oBAChB,SAAS,EAAE;wBACT,QAAQ,EAAE,KAAK;qBAChB;oBACD,mBAAmB,EAAE,CAAC;oBACtB,yBAAyB,EAAE;wBACzB,GAAG,EAAE,IAAI;wBACT,UAAU,EAAE,KAAK;wBACjB,eAAe,EAAE,KAAK;qBACvB;iBACF;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,uBAAuB,CAAC,QAAiB;QAC9C,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;YACnC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,cAAc,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAA;IAChE,CAAC;CACF"}
1
+ {"version":3,"file":"OccupancySensorAccessory.js","sourceRoot":"","sources":["../../src/devices/OccupancySensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,wBAAyB,SAAQ,mBAAmB;IAC/D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,sFAAsF;QACtF,MAAM,sBAAsB,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CACrE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAChG,CAAA;QAED,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,kBAAkB;YAC/B,UAAU,EAAE,sBAAsB;YAClC,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,4BAA4B;YACnC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,gBAAgB,EAAE;oBAChB,SAAS,EAAE;wBACT,QAAQ,EAAE,KAAK;qBAChB;oBACD,mBAAmB,EAAE,CAAC;oBACtB,yBAAyB,EAAE;wBACzB,GAAG,EAAE,IAAI;wBACT,UAAU,EAAE,KAAK;wBACjB,eAAe,EAAE,KAAK;qBACvB;iBACF;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,QAAiB;QACpD,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;YACzC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,cAAc,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAA;IAChE,CAAC;CACF"}
@@ -26,7 +26,7 @@ export declare class OnOffLightAccessory extends BaseMatterAccessory {
26
26
  * Update the on/off state from external source
27
27
  * Call this when your physical device state changes externally
28
28
  */
29
- updateOnOffState(isOn: boolean): void;
29
+ updateOnOffState(isOn: boolean): Promise<void>;
30
30
  /**
31
31
  * Example: Start monitoring external state changes
32
32
  * This shows how you might set up event listeners or polling
@@ -62,6 +62,14 @@ export class OnOffLightAccessory extends BaseMatterAccessory {
62
62
  }
63
63
  catch (error) {
64
64
  this.logError('failed to turn on:', error);
65
+ // Example: Handle specific error types from your device API
66
+ // if (error.code === 'ETIMEDOUT' || error.code === 'ECONNREFUSED') {
67
+ // throw new MatterStatus.Timeout('Device did not respond - check network connection')
68
+ // }
69
+ // if (error.code === 'DEVICE_OFFLINE') {
70
+ // throw new MatterStatus.Failure('Device is offline or unreachable')
71
+ // }
72
+ // Re-throw the error - Homebridge will wrap it as a generic Failure
65
73
  throw error;
66
74
  }
67
75
  }
@@ -78,6 +86,14 @@ export class OnOffLightAccessory extends BaseMatterAccessory {
78
86
  }
79
87
  catch (error) {
80
88
  this.logError('failed to turn off:', error);
89
+ // Example: Map HTTP status codes to appropriate Matter errors
90
+ // if (error.response?.status === 503) {
91
+ // throw new MatterStatus.Busy('Device is busy processing another command')
92
+ // }
93
+ // if (error.response?.status === 504) {
94
+ // throw new MatterStatus.Timeout('Request timed out after 30 seconds')
95
+ // }
96
+ // Re-throw the error - Homebridge will wrap it as a generic Failure
81
97
  throw error;
82
98
  }
83
99
  }
@@ -85,8 +101,8 @@ export class OnOffLightAccessory extends BaseMatterAccessory {
85
101
  * Update the on/off state from external source
86
102
  * Call this when your physical device state changes externally
87
103
  */
88
- updateOnOffState(isOn) {
89
- this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
104
+ async updateOnOffState(isOn) {
105
+ await this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
90
106
  this.logInfo(`state synced: ${isOn ? 'ON' : 'OFF'}.`);
91
107
  }
92
108
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"OnOffLightAccessory.js","sourceRoot":"","sources":["../../src/devices/OnOffLightAccessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OnOffLightAccessory.js","sourceRoot":"","sources":["../../src/devices/OnOffLightAccessory.ts"],"names":[],"mappings":"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"}
@@ -7,5 +7,5 @@ export declare class OnOffOutletAccessory extends BaseMatterAccessory {
7
7
  constructor(api: API, log: Logger);
8
8
  private handleOn;
9
9
  private handleOff;
10
- updateOnOffState(isOn: boolean): void;
10
+ updateOnOffState(isOn: boolean): Promise<void>;
11
11
  }
@@ -30,14 +30,30 @@ export class OnOffOutletAccessory extends BaseMatterAccessory {
30
30
  }
31
31
  async handleOn() {
32
32
  this.logInfo('turning on.');
33
+ // Example: Check for overcurrent protection
34
+ // if (this.hasOvercurrentTripped) {
35
+ // throw new MatterStatus.InvalidInState('Outlet overcurrent protection tripped - reset required')
36
+ // }
37
+ // Example: Check power monitoring threshold
38
+ // if (this.lastPowerDraw > this.maxWattage) {
39
+ // throw new MatterStatus.InvalidInState(`Cannot turn on - last load exceeded ${this.maxWattage}W limit`)
40
+ // }
41
+ // Example: Check if outlet is disabled by physical safety lock
42
+ // if (this.isPhysicallylocked) {
43
+ // throw new MatterStatus.PermissionDenied('Outlet is physically locked for safety')
44
+ // }
33
45
  // TODO: await myOutletAPI.turnOn()
34
46
  }
35
47
  async handleOff() {
36
48
  this.logInfo('turning off.');
49
+ // Example: Check if outlet can be turned off (some outlets with critical loads)
50
+ // if (this.isCriticalLoad) {
51
+ // throw new MatterStatus.InvalidInState('Cannot turn off outlet with critical load connected')
52
+ // }
37
53
  // TODO: await myOutletAPI.turnOff()
38
54
  }
39
- updateOnOffState(isOn) {
40
- this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
55
+ async updateOnOffState(isOn) {
56
+ await this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
41
57
  }
42
58
  }
43
59
  //# sourceMappingURL=OnOffOutletAccessory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OnOffOutletAccessory.js","sourceRoot":"","sources":["../../src/devices/OnOffOutletAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAC3D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,eAAe;YAC5B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW;YAC9C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,yBAAyB;YAChC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;iBACb;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC/B,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;iBAClC;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAC3B,mCAAmC;IACrC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAC5B,oCAAoC;IACtC,CAAC;IAEM,gBAAgB,CAAC,IAAa;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACvE,CAAC;CACF"}
1
+ {"version":3,"file":"OnOffOutletAccessory.js","sourceRoot":"","sources":["../../src/devices/OnOffOutletAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAC3D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,eAAe;YAC5B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW;YAC9C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,yBAAyB;YAChC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;iBACb;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC/B,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;iBAClC;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAE3B,4CAA4C;QAC5C,oCAAoC;QACpC,oGAAoG;QACpG,IAAI;QAEJ,4CAA4C;QAC5C,8CAA8C;QAC9C,2GAA2G;QAC3G,IAAI;QAEJ,+DAA+D;QAC/D,iCAAiC;QACjC,sFAAsF;QACtF,IAAI;QAEJ,mCAAmC;IACrC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAE5B,gFAAgF;QAChF,6BAA6B;QAC7B,iGAAiG;QACjG,IAAI;QAEJ,oCAAoC;IACtC,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,IAAa;QACzC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7E,CAAC;CACF"}
@@ -7,5 +7,5 @@ export declare class OnOffSwitchAccessory extends BaseMatterAccessory {
7
7
  constructor(api: API, log: Logger);
8
8
  private handleOn;
9
9
  private handleOff;
10
- updateOnOffState(isOn: boolean): void;
10
+ updateOnOffState(isOn: boolean): Promise<void>;
11
11
  }
@@ -30,14 +30,26 @@ export class OnOffSwitchAccessory extends BaseMatterAccessory {
30
30
  }
31
31
  async handleOn() {
32
32
  this.logInfo('turning on.');
33
+ // Example: Check if switch is in manual mode
34
+ // if (this.isManualModeEnabled) {
35
+ // throw new MatterStatus.InvalidInState('Switch is in manual mode - disable to allow remote control')
36
+ // }
37
+ // Example: Check load type compatibility
38
+ // if (this.loadType === 'inductive' && !this.supportsInductiveLoads) {
39
+ // throw new MatterStatus.InvalidAction('Switch not rated for inductive loads')
40
+ // }
33
41
  // TODO: await mySwitchAPI.turnOn()
34
42
  }
35
43
  async handleOff() {
36
44
  this.logInfo('turning off.');
45
+ // Example: Check if always-on mode is enabled
46
+ // if (this.alwaysOnMode) {
47
+ // throw new MatterStatus.InvalidInState('Switch is configured for always-on operation')
48
+ // }
37
49
  // TODO: await mySwitchAPI.turnOff()
38
50
  }
39
- updateOnOffState(isOn) {
40
- this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
51
+ async updateOnOffState(isOn) {
52
+ await this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
41
53
  }
42
54
  }
43
55
  //# sourceMappingURL=OnOffSwitchAccessory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OnOffSwitchAccessory.js","sourceRoot":"","sources":["../../src/devices/OnOffSwitchAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAC3D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,eAAe;YAC5B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW;YAC9C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,yBAAyB;YAChC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;iBACb;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC/B,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;iBAClC;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAC3B,mCAAmC;IACrC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAC5B,oCAAoC;IACtC,CAAC;IAEM,gBAAgB,CAAC,IAAa;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACvE,CAAC;CACF"}
1
+ {"version":3,"file":"OnOffSwitchAccessory.js","sourceRoot":"","sources":["../../src/devices/OnOffSwitchAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAC3D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,eAAe;YAC5B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW;YAC9C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,yBAAyB;YAChC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;iBACb;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC/B,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;iBAClC;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAE3B,6CAA6C;QAC7C,kCAAkC;QAClC,wGAAwG;QACxG,IAAI;QAEJ,yCAAyC;QACzC,uEAAuE;QACvE,iFAAiF;QACjF,IAAI;QAEJ,mCAAmC;IACrC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAE5B,8CAA8C;QAC9C,2BAA2B;QAC3B,0FAA0F;QAC1F,IAAI;QAEJ,oCAAoC;IACtC,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,IAAa;QACzC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7E,CAAC;CACF"}
@@ -48,15 +48,15 @@ export declare class RoboticVacuumAccessory extends BaseMatterAccessory {
48
48
  *
49
49
  * Since this is a platform accessory, state updates work immediately after registration.
50
50
  */
51
- updateOperationalState(state: number): void;
52
- updateRunMode(mode: number): void;
53
- updateCleanMode(mode: number): void;
54
- updateSelectedAreas(areaIds: number[]): void;
55
- updateCurrentArea(areaId: number | null): void;
51
+ updateOperationalState(state: number): Promise<void>;
52
+ updateRunMode(mode: number): Promise<void>;
53
+ updateCleanMode(mode: number): Promise<void>;
54
+ updateSelectedAreas(areaIds: number[]): Promise<void>;
55
+ updateCurrentArea(areaId: number | null): Promise<void>;
56
56
  updateProgress(progress: Array<{
57
57
  areaId: number;
58
58
  status: number;
59
- }>): void;
59
+ }>): Promise<void>;
60
60
  /**
61
61
  * Update battery percentage
62
62
  * @param percentage - Battery percentage (0-100)