@switchbot/homebridge-switchbot 5.0.0-beta.1 → 5.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/devices-matter/ColorLightAccessory.d.ts +3 -1
  2. package/dist/devices-matter/ColorLightAccessory.d.ts.map +1 -1
  3. package/dist/devices-matter/ColorLightAccessory.js +35 -36
  4. package/dist/devices-matter/ColorLightAccessory.js.map +1 -1
  5. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts +3 -1
  6. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts.map +1 -1
  7. package/dist/devices-matter/ColorTemperatureLightAccessory.js +32 -37
  8. package/dist/devices-matter/ColorTemperatureLightAccessory.js.map +1 -1
  9. package/dist/devices-matter/ContactSensorAccessory.d.ts +3 -1
  10. package/dist/devices-matter/ContactSensorAccessory.d.ts.map +1 -1
  11. package/dist/devices-matter/ContactSensorAccessory.js +16 -13
  12. package/dist/devices-matter/ContactSensorAccessory.js.map +1 -1
  13. package/dist/devices-matter/DimmableLightAccessory.d.ts +3 -1
  14. package/dist/devices-matter/DimmableLightAccessory.d.ts.map +1 -1
  15. package/dist/devices-matter/DimmableLightAccessory.js +24 -27
  16. package/dist/devices-matter/DimmableLightAccessory.js.map +1 -1
  17. package/dist/devices-matter/DoorLockAccessory.d.ts +3 -1
  18. package/dist/devices-matter/DoorLockAccessory.d.ts.map +1 -1
  19. package/dist/devices-matter/DoorLockAccessory.js +25 -22
  20. package/dist/devices-matter/DoorLockAccessory.js.map +1 -1
  21. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts +3 -1
  22. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts.map +1 -1
  23. package/dist/devices-matter/ExtendedColorLightAccessory.js +40 -41
  24. package/dist/devices-matter/ExtendedColorLightAccessory.js.map +1 -1
  25. package/dist/devices-matter/FanAccessory.d.ts +3 -1
  26. package/dist/devices-matter/FanAccessory.d.ts.map +1 -1
  27. package/dist/devices-matter/FanAccessory.js +31 -23
  28. package/dist/devices-matter/FanAccessory.js.map +1 -1
  29. package/dist/devices-matter/HumiditySensorAccessory.d.ts +3 -1
  30. package/dist/devices-matter/HumiditySensorAccessory.d.ts.map +1 -1
  31. package/dist/devices-matter/HumiditySensorAccessory.js +16 -15
  32. package/dist/devices-matter/HumiditySensorAccessory.js.map +1 -1
  33. package/dist/devices-matter/LeakSensorAccessory.d.ts +3 -1
  34. package/dist/devices-matter/LeakSensorAccessory.d.ts.map +1 -1
  35. package/dist/devices-matter/LeakSensorAccessory.js +16 -13
  36. package/dist/devices-matter/LeakSensorAccessory.js.map +1 -1
  37. package/dist/devices-matter/LightSensorAccessory.d.ts +3 -1
  38. package/dist/devices-matter/LightSensorAccessory.d.ts.map +1 -1
  39. package/dist/devices-matter/LightSensorAccessory.js +16 -15
  40. package/dist/devices-matter/LightSensorAccessory.js.map +1 -1
  41. package/dist/devices-matter/OccupancySensorAccessory.d.ts +3 -1
  42. package/dist/devices-matter/OccupancySensorAccessory.d.ts.map +1 -1
  43. package/dist/devices-matter/OccupancySensorAccessory.js +17 -21
  44. package/dist/devices-matter/OccupancySensorAccessory.js.map +1 -1
  45. package/dist/devices-matter/OnOffLightAccessory.d.ts +3 -1
  46. package/dist/devices-matter/OnOffLightAccessory.d.ts.map +1 -1
  47. package/dist/devices-matter/OnOffLightAccessory.js +22 -21
  48. package/dist/devices-matter/OnOffLightAccessory.js.map +1 -1
  49. package/dist/devices-matter/OnOffOutletAccessory.d.ts +3 -3
  50. package/dist/devices-matter/OnOffOutletAccessory.d.ts.map +1 -1
  51. package/dist/devices-matter/OnOffOutletAccessory.js +24 -27
  52. package/dist/devices-matter/OnOffOutletAccessory.js.map +1 -1
  53. package/dist/devices-matter/OnOffSwitchAccessory.d.ts +3 -1
  54. package/dist/devices-matter/OnOffSwitchAccessory.d.ts.map +1 -1
  55. package/dist/devices-matter/OnOffSwitchAccessory.js +18 -19
  56. package/dist/devices-matter/OnOffSwitchAccessory.js.map +1 -1
  57. package/dist/devices-matter/RoboticVacuumAccessory.d.ts +3 -1
  58. package/dist/devices-matter/RoboticVacuumAccessory.d.ts.map +1 -1
  59. package/dist/devices-matter/RoboticVacuumAccessory.js +77 -145
  60. package/dist/devices-matter/RoboticVacuumAccessory.js.map +1 -1
  61. package/dist/devices-matter/TemperatureSensorAccessory.d.ts +3 -1
  62. package/dist/devices-matter/TemperatureSensorAccessory.d.ts.map +1 -1
  63. package/dist/devices-matter/TemperatureSensorAccessory.js +18 -15
  64. package/dist/devices-matter/TemperatureSensorAccessory.js.map +1 -1
  65. package/dist/devices-matter/ThermostatAccessory.d.ts +3 -1
  66. package/dist/devices-matter/ThermostatAccessory.d.ts.map +1 -1
  67. package/dist/devices-matter/ThermostatAccessory.js +37 -29
  68. package/dist/devices-matter/ThermostatAccessory.js.map +1 -1
  69. package/dist/devices-matter/VenetianBlindAccessory.d.ts +3 -1
  70. package/dist/devices-matter/VenetianBlindAccessory.d.ts.map +1 -1
  71. package/dist/devices-matter/VenetianBlindAccessory.js +39 -40
  72. package/dist/devices-matter/VenetianBlindAccessory.js.map +1 -1
  73. package/dist/devices-matter/WindowBlindAccessory.d.ts +3 -1
  74. package/dist/devices-matter/WindowBlindAccessory.d.ts.map +1 -1
  75. package/dist/devices-matter/WindowBlindAccessory.js +36 -37
  76. package/dist/devices-matter/WindowBlindAccessory.js.map +1 -1
  77. package/dist/platform-matter.d.ts +15 -0
  78. package/dist/platform-matter.d.ts.map +1 -1
  79. package/dist/platform-matter.js +82 -1
  80. package/dist/platform-matter.js.map +1 -1
  81. package/docs/variables/default.html +1 -1
  82. package/package.json +1 -1
  83. package/src/devices-matter/ColorLightAccessory.ts +37 -40
  84. package/src/devices-matter/ColorTemperatureLightAccessory.ts +35 -41
  85. package/src/devices-matter/ContactSensorAccessory.ts +18 -14
  86. package/src/devices-matter/DimmableLightAccessory.ts +26 -30
  87. package/src/devices-matter/DoorLockAccessory.ts +28 -24
  88. package/src/devices-matter/ExtendedColorLightAccessory.ts +43 -47
  89. package/src/devices-matter/FanAccessory.ts +33 -25
  90. package/src/devices-matter/HumiditySensorAccessory.ts +18 -16
  91. package/src/devices-matter/LeakSensorAccessory.ts +18 -14
  92. package/src/devices-matter/LightSensorAccessory.ts +18 -16
  93. package/src/devices-matter/OccupancySensorAccessory.ts +18 -22
  94. package/src/devices-matter/OnOffLightAccessory.ts +23 -23
  95. package/src/devices-matter/OnOffOutletAccessory.ts +25 -31
  96. package/src/devices-matter/OnOffSwitchAccessory.ts +20 -21
  97. package/src/devices-matter/RoboticVacuumAccessory.ts +79 -156
  98. package/src/devices-matter/TemperatureSensorAccessory.ts +20 -16
  99. package/src/devices-matter/ThermostatAccessory.ts +39 -34
  100. package/src/devices-matter/VenetianBlindAccessory.ts +41 -44
  101. package/src/devices-matter/WindowBlindAccessory.ts +37 -39
  102. package/src/platform-matter.ts +92 -1
@@ -7,50 +7,44 @@ import type { API, Logger, MatterRequests } from 'homebridge'
7
7
  import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
8
 
9
9
  export class ColorTemperatureLightAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'LIGHT-003'
12
- super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Colour Temperature Light',
15
- deviceType: api.matter.deviceTypes.ColorTemperatureLight,
16
- serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-LIGHT-COLOUR-TEMP',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
10
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
11
+ const serialNumber = opts?.serialNumber ?? 'LIGHT-003'
12
+ const displayName = opts?.displayName ?? 'Colour Temperature Light'
13
+ const manufacturer = opts?.manufacturer ?? 'Homebridge Matter'
14
+ const model = opts?.model ?? 'HB-MATTER-LIGHT-COLOUR-TEMP'
15
+ const firmwareRevision = opts?.firmwareRevision ?? '2.0.0'
16
+ const hardwareRevision = opts?.hardwareRevision ?? '1.0.0'
21
17
 
22
- clusters: {
23
- onOff: {
24
- onOff: false,
25
- },
26
- levelControl: {
27
- currentLevel: 127,
28
- minLevel: 1,
29
- maxLevel: 254,
30
- },
31
- colorControl: {
32
- colorMode: api.matter.types.ColorControl.ColorMode.ColorTemperatureMireds,
33
- colorTemperatureMireds: 250,
34
- colorTempPhysicalMinMireds: 147,
35
- colorTempPhysicalMaxMireds: 454,
36
- coupleColorTempToLevelMinMireds: 147,
37
- },
18
+ const clusters = opts?.clusters ?? {
19
+ onOff: { onOff: false },
20
+ levelControl: { currentLevel: 127, minLevel: 1, maxLevel: 254 },
21
+ colorControl: {
22
+ colorMode: api.matter.types.ColorControl.ColorMode.ColorTemperatureMireds,
23
+ colorTemperatureMireds: 250,
24
+ colorTempPhysicalMinMireds: 147,
25
+ colorTempPhysicalMaxMireds: 454,
26
+ coupleColorTempToLevelMinMireds: 147,
38
27
  },
28
+ }
39
29
 
40
- handlers: {
41
- onOff: {
42
- on: async () => this.handleOn(),
43
- off: async () => this.handleOff(),
44
- },
45
- levelControl: {
46
- moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) =>
47
- this.handleSetLevel(request),
48
- },
49
- colorControl: {
50
- moveToColorTemperatureLogic: async (request: MatterRequests.MoveToColorTemperature) =>
51
- this.handleSetColorTemperature(request),
52
- },
53
- },
30
+ const handlers = opts?.handlers ?? {
31
+ onOff: { on: async () => this.handleOn(), off: async () => this.handleOff() },
32
+ levelControl: { moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) => this.handleSetLevel(request) },
33
+ colorControl: { moveToColorTemperatureLogic: async (request: MatterRequests.MoveToColorTemperature) => this.handleSetColorTemperature(request) },
34
+ }
35
+
36
+ super(api, log, {
37
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
38
+ displayName,
39
+ deviceType: api.matter.deviceTypes.ColorTemperatureLight,
40
+ serialNumber,
41
+ manufacturer,
42
+ model,
43
+ firmwareRevision,
44
+ hardwareRevision,
45
+ clusters,
46
+ handlers,
47
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
54
48
  })
55
49
 
56
50
  this.logInfo('initialized.')
@@ -7,23 +7,27 @@ import type { API, Logger } from 'homebridge'
7
7
  import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
8
 
9
9
  export class ContactSensorAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'SENSOR-001'
10
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
11
+ const serialNumber = opts?.serialNumber ?? 'SENSOR-001'
12
+ const displayName = opts?.displayName ?? 'Contact Sensor'
13
+ const manufacturer = opts?.manufacturer ?? 'Homebridge Matter'
14
+ const model = opts?.model ?? 'HB-MATTER-SENSOR-CONTACT'
15
+ const firmwareRevision = opts?.firmwareRevision ?? '2.0.0'
16
+ const hardwareRevision = opts?.hardwareRevision ?? '1.0.0'
17
+
18
+ const clusters = opts?.clusters ?? { booleanState: { stateValue: true } }
19
+
12
20
  super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Contact Sensor',
21
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
22
+ displayName,
15
23
  deviceType: api.matter.deviceTypes.ContactSensor,
16
24
  serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-SENSOR-CONTACT',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- booleanState: {
24
- stateValue: true, // matter: true = closed/normal, false = open/triggered
25
- },
26
- },
25
+ manufacturer,
26
+ model,
27
+ firmwareRevision,
28
+ hardwareRevision,
29
+ clusters,
30
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
27
31
  })
28
32
 
29
33
  this.logInfo('initialized.')
@@ -22,16 +22,31 @@ export class DimmableLightAccessory extends BaseMatterAccessory {
22
22
  // Track current state
23
23
  private currentLevel: number = 127 // 50% brightness
24
24
 
25
- constructor(api: API, log: Logger) {
26
- const serialNumber = 'LIGHT-002'
27
- const displayName = 'Dimmable Light'
28
- const manufacturer = 'Homebridge Matter'
29
- const model = 'HB-MATTER-LIGHT-DIMMABLE'
30
- const firmwareRevision = '2.0.0'
31
- const hardwareRevision = '1.0.0'
25
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
26
+ const serialNumber = opts?.serialNumber ?? 'LIGHT-002'
27
+ const displayName = opts?.displayName ?? 'Dimmable Light'
28
+ const manufacturer = opts?.manufacturer ?? 'Homebridge Matter'
29
+ const model = opts?.model ?? 'HB-MATTER-LIGHT-DIMMABLE'
30
+ const firmwareRevision = opts?.firmwareRevision ?? '2.0.0'
31
+ const hardwareRevision = opts?.hardwareRevision ?? '1.0.0'
32
+
33
+ const clusters = opts?.clusters ?? {
34
+ onOff: { onOff: false },
35
+ levelControl: { currentLevel: 127, minLevel: 1, maxLevel: 254 },
36
+ }
37
+
38
+ const handlers = opts?.handlers ?? {
39
+ onOff: {
40
+ on: async () => this.handleOn(),
41
+ off: async () => this.handleOff(),
42
+ },
43
+ levelControl: {
44
+ moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) => this.handleSetLevel(request),
45
+ },
46
+ }
32
47
 
33
48
  super(api, log, {
34
- uuid: api.matter.uuid.generate(serialNumber),
49
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
35
50
  displayName,
36
51
  deviceType: api.matter.deviceTypes.DimmableLight,
37
52
  serialNumber,
@@ -39,28 +54,9 @@ export class DimmableLightAccessory extends BaseMatterAccessory {
39
54
  model,
40
55
  firmwareRevision,
41
56
  hardwareRevision,
42
-
43
- clusters: {
44
- onOff: {
45
- onOff: false,
46
- },
47
- levelControl: {
48
- currentLevel: 127, // 50% brightness (range 1-254)
49
- minLevel: 1,
50
- maxLevel: 254,
51
- },
52
- },
53
-
54
- handlers: {
55
- onOff: {
56
- on: async () => this.handleOn(),
57
- off: async () => this.handleOff(),
58
- },
59
- levelControl: {
60
- moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) =>
61
- this.handleSetLevel(request),
62
- },
63
- },
57
+ clusters,
58
+ handlers,
59
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
64
60
  })
65
61
 
66
62
  this.logInfo('initialized.')
@@ -7,33 +7,37 @@ import type { API, Logger } from 'homebridge'
7
7
  import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
8
 
9
9
  export class DoorLockAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'LOCK-001'
10
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
11
+ const serialNumber = opts?.serialNumber ?? 'LOCK-001'
12
+ const displayName = opts?.displayName ?? 'Door Lock'
13
+ const manufacturer = opts?.manufacturer ?? 'Homebridge Matter'
14
+ const model = opts?.model ?? 'HB-MATTER-LOCK-DOOR'
15
+ const firmwareRevision = opts?.firmwareRevision ?? '2.0.0'
16
+ const hardwareRevision = opts?.hardwareRevision ?? '1.0.0'
17
+
18
+ const clusters = opts?.clusters ?? {
19
+ doorLock: {
20
+ lockState: api.matter.types.DoorLock.LockState.Unlocked,
21
+ lockType: api.matter.types.DoorLock.LockType.DeadBolt,
22
+ actuatorEnabled: true,
23
+ operatingMode: api.matter.types.DoorLock.OperatingMode.Normal,
24
+ },
25
+ }
26
+
27
+ const handlers = opts?.handlers ?? { doorLock: { lockDoor: async () => this.handleLock(), unlockDoor: async () => this.handleUnlock() } }
28
+
12
29
  super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Door Lock',
30
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
31
+ displayName,
15
32
  deviceType: api.matter.deviceTypes.DoorLock,
16
33
  serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-LOCK-DOOR',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- doorLock: {
24
- lockState: api.matter.types.DoorLock.LockState.Unlocked,
25
- lockType: api.matter.types.DoorLock.LockType.DeadBolt,
26
- actuatorEnabled: true,
27
- operatingMode: api.matter.types.DoorLock.OperatingMode.Normal,
28
- },
29
- },
30
-
31
- handlers: {
32
- doorLock: {
33
- lockDoor: async () => this.handleLock(),
34
- unlockDoor: async () => this.handleUnlock(),
35
- },
36
- },
34
+ manufacturer,
35
+ model,
36
+ firmwareRevision,
37
+ hardwareRevision,
38
+ clusters,
39
+ handlers,
40
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
37
41
  })
38
42
 
39
43
  this.logInfo('initialized.')
@@ -8,56 +8,52 @@ import type { API, Logger, MatterRequests } from 'homebridge'
8
8
  import { BaseMatterAccessory } from './BaseMatterAccessory.js'
9
9
 
10
10
  export class ExtendedColorLightAccessory extends BaseMatterAccessory {
11
- constructor(api: API, log: Logger) {
12
- const serialNumber = 'LIGHT-005'
13
- super(api, log, {
14
- uuid: api.matter.uuid.generate(serialNumber),
15
- displayName: 'Extended Colour Light (HS+CCT)',
16
- deviceType: api.matter.deviceTypes.ExtendedColorLight,
17
- serialNumber,
18
- manufacturer: 'Homebridge Matter',
19
- model: 'HB-MATTER-LIGHT-EXTENDED-COLOUR',
20
- firmwareRevision: '2.0.0',
21
- hardwareRevision: '1.0.0',
22
-
23
- clusters: {
24
- onOff: { onOff: false },
25
- levelControl: {
26
- currentLevel: 127,
27
- minLevel: 1,
28
- maxLevel: 254,
29
- },
30
- colorControl: {
31
- colorMode: api.matter.types.ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
32
- currentHue: 0,
33
- currentSaturation: 254,
34
- currentX: 41942,
35
- currentY: 21626,
36
- colorTemperatureMireds: 250,
37
- colorTempPhysicalMinMireds: 147,
38
- colorTempPhysicalMaxMireds: 454,
39
- coupleColorTempToLevelMinMireds: 147,
40
- },
11
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
12
+ const serialNumber = opts?.serialNumber ?? 'LIGHT-005'
13
+ const displayName = opts?.displayName ?? 'Extended Colour Light (HS+CCT)'
14
+ const manufacturer = opts?.manufacturer ?? 'Homebridge Matter'
15
+ const model = opts?.model ?? 'HB-MATTER-LIGHT-EXTENDED-COLOUR'
16
+ const firmwareRevision = opts?.firmwareRevision ?? '2.0.0'
17
+ const hardwareRevision = opts?.hardwareRevision ?? '1.0.0'
18
+
19
+ const clusters = opts?.clusters ?? {
20
+ onOff: { onOff: false },
21
+ levelControl: { currentLevel: 127, minLevel: 1, maxLevel: 254 },
22
+ colorControl: {
23
+ colorMode: api.matter.types.ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
24
+ currentHue: 0,
25
+ currentSaturation: 254,
26
+ currentX: 41942,
27
+ currentY: 21626,
28
+ colorTemperatureMireds: 250,
29
+ colorTempPhysicalMinMireds: 147,
30
+ colorTempPhysicalMaxMireds: 454,
31
+ coupleColorTempToLevelMinMireds: 147,
41
32
  },
33
+ }
42
34
 
43
- handlers: {
44
- onOff: {
45
- on: async () => this.handleOn(),
46
- off: async () => this.handleOff(),
47
- },
48
- levelControl: {
49
- moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) =>
50
- this.handleSetLevel(request),
51
- },
52
- colorControl: {
53
- moveToColorLogic: async (request: MatterRequests.MoveToColor) =>
54
- this.handleSetColor(request),
55
- moveToHueAndSaturationLogic: async (request: MatterRequests.MoveToHueAndSaturation) =>
56
- this.handleSetHueSaturation(request),
57
- moveToColorTemperatureLogic: async (request: MatterRequests.MoveToColorTemperature) =>
58
- this.handleSetColorTemperature(request),
59
- },
35
+ const handlers = opts?.handlers ?? {
36
+ onOff: { on: async () => this.handleOn(), off: async () => this.handleOff() },
37
+ levelControl: { moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) => this.handleSetLevel(request) },
38
+ colorControl: {
39
+ moveToColorLogic: async (request: MatterRequests.MoveToColor) => this.handleSetColor(request),
40
+ moveToHueAndSaturationLogic: async (request: MatterRequests.MoveToHueAndSaturation) => this.handleSetHueSaturation(request),
41
+ moveToColorTemperatureLogic: async (request: MatterRequests.MoveToColorTemperature) => this.handleSetColorTemperature(request),
60
42
  },
43
+ }
44
+
45
+ super(api, log, {
46
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
47
+ displayName,
48
+ deviceType: api.matter.deviceTypes.ExtendedColorLight,
49
+ serialNumber,
50
+ manufacturer,
51
+ model,
52
+ firmwareRevision,
53
+ hardwareRevision,
54
+ clusters,
55
+ handlers,
56
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
61
57
  })
62
58
 
63
59
  this.logInfo('initialized.')
@@ -7,35 +7,43 @@ import type { API, Logger, MatterRequests } from 'homebridge'
7
7
  import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
8
 
9
9
  export class FanAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'FAN-001'
12
- super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Fan',
15
- deviceType: api.matter.deviceTypes.Fan,
16
- serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-FAN',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
10
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
11
+ const serialNumber = opts?.serialNumber ?? 'FAN-001'
12
+ const displayName = opts?.displayName ?? 'Fan'
13
+ const manufacturer = opts?.manufacturer ?? 'Homebridge Matter'
14
+ const model = opts?.model ?? 'HB-MATTER-FAN'
15
+ const firmwareRevision = opts?.firmwareRevision ?? '2.0.0'
16
+ const hardwareRevision = opts?.hardwareRevision ?? '1.0.0'
21
17
 
22
- clusters: {
23
- fanControl: {
24
- fanMode: api.matter.types.FanControl.FanMode.Off,
25
- fanModeSequence: api.matter.types.FanControl.FanModeSequence.OffLowMedHigh,
26
- percentSetting: 0,
27
- percentCurrent: 0,
28
- },
18
+ const clusters = opts?.clusters ?? {
19
+ fanControl: {
20
+ fanMode: api.matter.types.FanControl.FanMode.Off,
21
+ fanModeSequence: api.matter.types.FanControl.FanModeSequence.OffLowMedHigh,
22
+ percentSetting: 0,
23
+ percentCurrent: 0,
29
24
  },
25
+ }
30
26
 
31
- handlers: {
32
- fanControl: {
33
- step: async (request: MatterRequests.FanStep) => this.handleStep(request),
34
- fanModeChange: async (request: { fanMode: number, oldFanMode: number }) => this.handleFanModeChange(request),
35
- percentSettingChange: async (request: { percentSetting: number | null, oldPercentSetting: number | null }) =>
36
- this.handlePercentSettingChange(request),
37
- },
27
+ const handlers = opts?.handlers ?? {
28
+ fanControl: {
29
+ step: async (request: MatterRequests.FanStep) => this.handleStep(request),
30
+ fanModeChange: async (request: { fanMode: number, oldFanMode: number }) => this.handleFanModeChange(request),
31
+ percentSettingChange: async (request: { percentSetting: number | null, oldPercentSetting: number | null }) => this.handlePercentSettingChange(request),
38
32
  },
33
+ }
34
+
35
+ super(api, log, {
36
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
37
+ displayName,
38
+ deviceType: api.matter.deviceTypes.Fan,
39
+ serialNumber,
40
+ manufacturer,
41
+ model,
42
+ firmwareRevision,
43
+ hardwareRevision,
44
+ clusters,
45
+ handlers,
46
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
39
47
  })
40
48
 
41
49
  this.logInfo('initialized.')
@@ -7,25 +7,27 @@ import type { API, Logger } from 'homebridge'
7
7
  import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
8
 
9
9
  export class HumiditySensorAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'SENSOR-005'
10
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
11
+ const serialNumber = opts?.serialNumber ?? 'SENSOR-005'
12
+ const displayName = opts?.displayName ?? 'Humidity Sensor'
13
+ const manufacturer = opts?.manufacturer ?? 'Homebridge Matter'
14
+ const model = opts?.model ?? 'HB-MATTER-SENSOR-HUMIDITY'
15
+ const firmwareRevision = opts?.firmwareRevision ?? '2.0.0'
16
+ const hardwareRevision = opts?.hardwareRevision ?? '1.0.0'
17
+
18
+ const clusters = opts?.clusters ?? { relativeHumidityMeasurement: { measuredValue: 5500, minMeasuredValue: 0, maxMeasuredValue: 10000 } }
19
+
12
20
  super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Humidity Sensor',
21
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
22
+ displayName,
15
23
  deviceType: api.matter.deviceTypes.HumiditySensor,
16
24
  serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-SENSOR-HUMIDITY',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- relativeHumidityMeasurement: {
24
- measuredValue: 5500, // 55% (in hundredths of a percent)
25
- minMeasuredValue: 0,
26
- maxMeasuredValue: 10000,
27
- },
28
- },
25
+ manufacturer,
26
+ model,
27
+ firmwareRevision,
28
+ hardwareRevision,
29
+ clusters,
30
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
29
31
  })
30
32
 
31
33
  this.logInfo('initialized.')
@@ -7,23 +7,27 @@ import type { API, Logger } from 'homebridge'
7
7
  import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
8
 
9
9
  export class LeakSensorAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'SENSOR-007'
10
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
11
+ const serialNumber = opts?.serialNumber ?? 'SENSOR-007'
12
+ const displayName = opts?.displayName ?? 'Leak Sensor'
13
+ const manufacturer = opts?.manufacturer ?? 'Homebridge Matter'
14
+ const model = opts?.model ?? 'HB-MATTER-SENSOR-LEAK'
15
+ const firmwareRevision = opts?.firmwareRevision ?? '2.0.0'
16
+ const hardwareRevision = opts?.hardwareRevision ?? '1.0.0'
17
+
18
+ const clusters = opts?.clusters ?? { booleanState: { stateValue: false } }
19
+
12
20
  super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Leak Sensor',
21
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
22
+ displayName,
15
23
  deviceType: api.matter.deviceTypes.LeakSensor,
16
24
  serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-SENSOR-LEAK',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- booleanState: {
24
- stateValue: false, // false = dry, true = leak
25
- },
26
- },
25
+ manufacturer,
26
+ model,
27
+ firmwareRevision,
28
+ hardwareRevision,
29
+ clusters,
30
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
27
31
  })
28
32
 
29
33
  this.logInfo('initialized.')
@@ -7,25 +7,27 @@ import type { API, Logger } from 'homebridge'
7
7
  import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
8
 
9
9
  export class LightSensorAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'SENSOR-002'
10
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
11
+ const serialNumber = opts?.serialNumber ?? 'SENSOR-002'
12
+ const displayName = opts?.displayName ?? 'Light Sensor'
13
+ const manufacturer = opts?.manufacturer ?? 'Homebridge Matter'
14
+ const model = opts?.model ?? 'HB-MATTER-SENSOR-LIGHT'
15
+ const firmwareRevision = opts?.firmwareRevision ?? '2.0.0'
16
+ const hardwareRevision = opts?.hardwareRevision ?? '1.0.0'
17
+
18
+ const clusters = opts?.clusters ?? { illuminanceMeasurement: { measuredValue: 5000, minMeasuredValue: 1, maxMeasuredValue: 65534 } }
19
+
12
20
  super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Light Sensor',
21
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
22
+ displayName,
15
23
  deviceType: api.matter.deviceTypes.LightSensor,
16
24
  serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-SENSOR-LIGHT',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- illuminanceMeasurement: {
24
- measuredValue: 5000,
25
- minMeasuredValue: 1,
26
- maxMeasuredValue: 65534,
27
- },
28
- },
25
+ manufacturer,
26
+ model,
27
+ firmwareRevision,
28
+ hardwareRevision,
29
+ clusters,
30
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
29
31
  })
30
32
 
31
33
  this.logInfo('initialized.')
@@ -7,37 +7,33 @@ import type { API, Logger } from 'homebridge'
7
7
  import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
8
 
9
9
  export class OccupancySensorAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'SENSOR-003'
10
+ constructor(api: API, log: Logger, opts?: Partial<import('./BaseMatterAccessory').BaseMatterAccessoryConfig & { deviceId?: string }>) {
11
+ const serialNumber = opts?.serialNumber ?? 'SENSOR-003'
12
12
  // Note: Matter.js API calls this "MotionSensor" but it's actually an Occupancy Sensor
13
13
  const OccupancySensingServer = api.matter.deviceTypes.MotionSensor.requirements.OccupancySensingServer
14
14
  const OccupancySensorWithPIR = api.matter.deviceTypes.MotionSensor.with(
15
15
  OccupancySensingServer.with('PassiveInfrared'),
16
16
  )
17
17
 
18
+ const clusters = opts?.clusters ?? {
19
+ occupancySensing: {
20
+ occupancy: { occupied: false },
21
+ occupancySensorType: 0,
22
+ occupancySensorTypeBitmap: { pir: true, ultrasonic: false, physicalContact: false },
23
+ },
24
+ }
25
+
18
26
  super(api, log, {
19
- uuid: api.matter.uuid.generate(serialNumber),
20
- displayName: 'Occupancy Sensor',
27
+ uuid: opts?.uuid ?? api.matter.uuid.generate(serialNumber),
28
+ displayName: opts?.displayName ?? 'Occupancy Sensor',
21
29
  deviceType: OccupancySensorWithPIR,
22
30
  serialNumber,
23
- manufacturer: 'Homebridge Matter',
24
- model: 'HB-MATTER-SENSOR-OCCUPANCY',
25
- firmwareRevision: '2.0.0',
26
- hardwareRevision: '1.0.0',
27
-
28
- clusters: {
29
- occupancySensing: {
30
- occupancy: {
31
- occupied: false,
32
- },
33
- occupancySensorType: 0,
34
- occupancySensorTypeBitmap: {
35
- pir: true,
36
- ultrasonic: false,
37
- physicalContact: false,
38
- },
39
- },
40
- },
31
+ manufacturer: opts?.manufacturer ?? 'Homebridge Matter',
32
+ model: opts?.model ?? 'HB-MATTER-SENSOR-OCCUPANCY',
33
+ firmwareRevision: opts?.firmwareRevision ?? '2.0.0',
34
+ hardwareRevision: opts?.hardwareRevision ?? '1.0.0',
35
+ clusters,
36
+ context: { deviceId: opts?.deviceId, ...(opts?.context ?? {}) },
41
37
  })
42
38
 
43
39
  this.logInfo('initialized.')