@homebridge-plugins/homebridge-smarthq 0.5.0-beta.4 → 0.5.0-beta.41

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 (145) hide show
  1. package/.github/ISSUE_TEMPLATE/config.yml +1 -1
  2. package/.github/copilot-instructions.md +361 -0
  3. package/.github/scripts/branch-helper.sh +41 -0
  4. package/.github/workflows/beta-release.yml +1 -1
  5. package/.github/workflows/release.yml +53 -17
  6. package/CHANGELOG.md +563 -18
  7. package/MATTER.md +304 -0
  8. package/README.md +15 -0
  9. package/config.schema.json +24 -5
  10. package/dist/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.d.ts.map +1 -1
  11. package/dist/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.js +3 -1
  12. package/dist/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.js.map +1 -1
  13. package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.d.ts.map +1 -1
  14. package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.js +3 -1
  15. package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.js.map +1 -1
  16. package/dist/devices/OpalIceMaker/Managers/OpalPowerSvcManager.js +1 -1
  17. package/dist/devices/OpalIceMaker/Managers/OpalPowerSvcManager.js.map +1 -1
  18. package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.d.ts +1 -1
  19. package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.d.ts.map +1 -1
  20. package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.js +12 -5
  21. package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.js.map +1 -1
  22. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.d.ts.map +1 -1
  23. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.js +4 -2
  24. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.js.map +1 -1
  25. package/dist/devices/OpalIceMaker/OpalDeviceBase.d.ts +3 -4
  26. package/dist/devices/OpalIceMaker/OpalDeviceBase.d.ts.map +1 -1
  27. package/dist/devices/OpalIceMaker/OpalDeviceBase.js +3 -18
  28. package/dist/devices/OpalIceMaker/OpalDeviceBase.js.map +1 -1
  29. package/dist/devices/advantium.d.ts +10 -0
  30. package/dist/devices/advantium.d.ts.map +1 -0
  31. package/dist/devices/advantium.js +75 -0
  32. package/dist/devices/advantium.js.map +1 -0
  33. package/dist/devices/airConditioner.d.ts +11 -2
  34. package/dist/devices/airConditioner.d.ts.map +1 -1
  35. package/dist/devices/airConditioner.js +111 -17
  36. package/dist/devices/airConditioner.js.map +1 -1
  37. package/dist/devices/beverageCenter.d.ts +10 -0
  38. package/dist/devices/beverageCenter.d.ts.map +1 -0
  39. package/dist/devices/beverageCenter.js +125 -0
  40. package/dist/devices/beverageCenter.js.map +1 -0
  41. package/dist/devices/clothesDryer.d.ts +21 -0
  42. package/dist/devices/clothesDryer.d.ts.map +1 -0
  43. package/dist/devices/clothesDryer.js +273 -0
  44. package/dist/devices/clothesDryer.js.map +1 -0
  45. package/dist/devices/clothesWasher.d.ts +21 -0
  46. package/dist/devices/clothesWasher.d.ts.map +1 -0
  47. package/dist/devices/clothesWasher.js +284 -0
  48. package/dist/devices/clothesWasher.js.map +1 -0
  49. package/dist/devices/coffeeMaker.d.ts +10 -0
  50. package/dist/devices/coffeeMaker.d.ts.map +1 -0
  51. package/dist/devices/coffeeMaker.js +79 -0
  52. package/dist/devices/coffeeMaker.js.map +1 -0
  53. package/dist/devices/device.d.ts +108 -13
  54. package/dist/devices/device.d.ts.map +1 -1
  55. package/dist/devices/device.js +381 -60
  56. package/dist/devices/device.js.map +1 -1
  57. package/dist/devices/dishwasher.d.ts +9 -3
  58. package/dist/devices/dishwasher.d.ts.map +1 -1
  59. package/dist/devices/dishwasher.js +164 -29
  60. package/dist/devices/dishwasher.js.map +1 -1
  61. package/dist/devices/hood.d.ts +41 -0
  62. package/dist/devices/hood.d.ts.map +1 -0
  63. package/dist/devices/hood.js +336 -0
  64. package/dist/devices/hood.js.map +1 -0
  65. package/dist/devices/microwave.d.ts +19 -0
  66. package/dist/devices/microwave.d.ts.map +1 -0
  67. package/dist/devices/microwave.js +147 -0
  68. package/dist/devices/microwave.js.map +1 -0
  69. package/dist/devices/oven.d.ts +9 -2
  70. package/dist/devices/oven.d.ts.map +1 -1
  71. package/dist/devices/oven.js +267 -43
  72. package/dist/devices/oven.js.map +1 -1
  73. package/dist/devices/refrigerator.d.ts +37 -2
  74. package/dist/devices/refrigerator.d.ts.map +1 -1
  75. package/dist/devices/refrigerator.js +583 -34
  76. package/dist/devices/refrigerator.js.map +1 -1
  77. package/dist/devices/waterFilter.d.ts +10 -0
  78. package/dist/devices/waterFilter.d.ts.map +1 -0
  79. package/dist/devices/waterFilter.js +67 -0
  80. package/dist/devices/waterFilter.js.map +1 -0
  81. package/dist/devices/waterHeater.d.ts +19 -0
  82. package/dist/devices/waterHeater.d.ts.map +1 -0
  83. package/dist/devices/waterHeater.js +161 -0
  84. package/dist/devices/waterHeater.js.map +1 -0
  85. package/dist/devices/waterSoftener.d.ts +10 -0
  86. package/dist/devices/waterSoftener.d.ts.map +1 -0
  87. package/dist/devices/waterSoftener.js +67 -0
  88. package/dist/devices/waterSoftener.js.map +1 -0
  89. package/dist/getAccessToken.d.ts.map +1 -1
  90. package/dist/getAccessToken.js +190 -2
  91. package/dist/getAccessToken.js.map +1 -1
  92. package/dist/platform.d.ts +32 -1
  93. package/dist/platform.d.ts.map +1 -1
  94. package/dist/platform.js +853 -151
  95. package/dist/platform.js.map +1 -1
  96. package/dist/platform.test.d.ts +2 -0
  97. package/dist/platform.test.d.ts.map +1 -0
  98. package/dist/platform.test.js +80 -0
  99. package/dist/platform.test.js.map +1 -0
  100. package/dist/settings.d.ts +24 -0
  101. package/dist/settings.d.ts.map +1 -1
  102. package/dist/settings.js +13 -0
  103. package/dist/settings.js.map +1 -1
  104. package/docs/assets/highlight.css +7 -0
  105. package/docs/assets/main.js +5 -5
  106. package/docs/assets/navigation.js +1 -0
  107. package/docs/assets/search.js +1 -0
  108. package/docs/assets/style.css +248 -226
  109. package/docs/classes/SmartHQPlatform.html +54 -56
  110. package/docs/hierarchy.html +1 -0
  111. package/docs/index.html +22 -12
  112. package/docs/interfaces/DeviceOptions.html +2 -3
  113. package/docs/interfaces/SmartHQPlatformConfig.html +6 -17
  114. package/docs/interfaces/SmartHqContext.html +6 -4
  115. package/docs/interfaces/SmartHqERDResponse.html +7 -8
  116. package/docs/interfaces/credentials.html +3 -4
  117. package/docs/interfaces/devicesConfig.html +9 -8
  118. package/docs/interfaces/options.html +7 -8
  119. package/docs/media/copilot-instructions.md +361 -0
  120. package/docs/modules.html +1 -2
  121. package/docs/variables/API_URL.html +1 -2
  122. package/docs/variables/ERD_CODES.html +1 -2
  123. package/docs/variables/ERD_TYPES.html +1 -2
  124. package/docs/variables/KEEPALIVE_TIMEOUT.html +1 -2
  125. package/docs/variables/LOGIN_URL.html +2 -3
  126. package/docs/variables/OAUTH2_CLIENT_ID.html +1 -2
  127. package/docs/variables/OAUTH2_CLIENT_SECRET.html +1 -2
  128. package/docs/variables/OAUTH2_REDIRECT_URI.html +1 -2
  129. package/docs/variables/PLATFORM_NAME.html +2 -3
  130. package/docs/variables/PLUGIN_NAME.html +2 -3
  131. package/docs/variables/SECURE_URL.html +2 -3
  132. package/docs/variables/default.html +1 -0
  133. package/package.json +22 -33
  134. package/typedoc.json +0 -4
  135. package/vitest.config.ts +6 -5
  136. package/.github/workflows/build.yml +0 -18
  137. package/.github/workflows/changerelease.yml +0 -11
  138. package/.github/workflows/labeler.yml +0 -9
  139. package/.github/workflows/release-drafter.yml +0 -14
  140. package/docs/assets/dmt/dmt-component-data.js +0 -1
  141. package/docs/assets/dmt/dmt-components.css +0 -20
  142. package/docs/assets/dmt/dmt-components.js +0 -67
  143. package/docs/assets/dmt/dmt-search.cmp +0 -0
  144. package/docs/assets/dmt/dmt-theme.css +0 -1
  145. package/docs/functions/default.html +0 -2
@@ -0,0 +1,19 @@
1
+ import type { PlatformAccessory } from 'homebridge';
2
+ import type { SmartHQPlatform } from '../platform.js';
3
+ import type { devicesConfig, SmartHqContext } from '../settings.js';
4
+ import { deviceBase } from './device.js';
5
+ export declare class SmartHQMicrowave extends deviceBase {
6
+ readonly platform: SmartHQPlatform;
7
+ readonly device: SmartHqContext['device'] & devicesConfig;
8
+ private useMatterOverride;
9
+ constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
10
+ /**
11
+ * Initialize Matter protocol
12
+ */
13
+ private initializeMatter;
14
+ /**
15
+ * Initialize HAP (HomeKit) protocol
16
+ */
17
+ private initializeHAP;
18
+ }
19
+ //# sourceMappingURL=microwave.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microwave.d.ts","sourceRoot":"","sources":["../../src/devices/microwave.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,qBAAa,gBAAiB,SAAQ,UAAU;IAK5C,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAElC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAL3D,OAAO,CAAC,iBAAiB,CAAiB;gBAG/B,QAAQ,EAAE,eAAe,EAClC,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACnC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAoB3D;;OAEG;YACW,gBAAgB;IAkD9B;;OAEG;IACH,OAAO,CAAC,aAAa;CAsEtB"}
@@ -0,0 +1,147 @@
1
+ import { deviceBase } from './device.js';
2
+ export class SmartHQMicrowave extends deviceBase {
3
+ platform;
4
+ device;
5
+ // Matter support override flag
6
+ useMatterOverride = false;
7
+ constructor(platform, accessory, device) {
8
+ super(platform, accessory, device);
9
+ this.platform = platform;
10
+ this.device = device;
11
+ // Check if we should use Matter protocol
12
+ this.useMatterOverride = device.useMatter ?? false;
13
+ this.debugLog(`Microwave Features: ${JSON.stringify(accessory.context.device.features)}`);
14
+ this.debugLog(`Using protocol: ${this.useMatterOverride ? 'Matter' : 'HAP'}`);
15
+ // Initialize the appropriate protocol
16
+ if (this.useMatterOverride) {
17
+ this.initializeMatter().catch((error) => {
18
+ this.errorLog(`Failed to initialize Matter: ${error}`);
19
+ });
20
+ }
21
+ else {
22
+ this.initializeHAP();
23
+ }
24
+ }
25
+ /**
26
+ * Initialize Matter protocol
27
+ */
28
+ async initializeMatter() {
29
+ const { valid, api: matterAPI } = this.validateMatterAPI();
30
+ if (!valid) {
31
+ this.errorLog('Matter API not available or incomplete - falling back to HAP');
32
+ this.initializeHAP();
33
+ return;
34
+ }
35
+ const serialNumber = this.device.applianceId || 'unknown';
36
+ this.matterUuid = matterAPI.uuid.generate(serialNumber);
37
+ const matterAccessory = {
38
+ UUID: this.matterUuid,
39
+ displayName: this.device.nickname || 'SmartHQ Microwave',
40
+ serialNumber,
41
+ manufacturer: this.device.brand && this.device.brand !== 'Unknown' ? this.device.brand : 'GE Appliances',
42
+ model: this.device.model || 'SmartHQ',
43
+ firmwareRevision: this.deviceFirmwareVersion,
44
+ hardwareRevision: this.deviceFirmwareVersion,
45
+ deviceType: matterAPI.deviceTypes.MicrowaveOven,
46
+ clusters: {
47
+ // On/Off cluster for light
48
+ onOff: {
49
+ onOff: false,
50
+ },
51
+ // Operational State for microwave running
52
+ operationalState: {
53
+ operationalState: 0,
54
+ operationalError: { errorStateID: 0 },
55
+ },
56
+ // Timer cluster for cook time
57
+ timer: {
58
+ timerState: 0,
59
+ duration: 0,
60
+ remainingTime: 0,
61
+ },
62
+ },
63
+ handlers: {},
64
+ };
65
+ await matterAPI.registerPlatformAccessories('@homebridge-plugins/homebridge-smarthq', 'SmartHQ', [matterAccessory]);
66
+ this.matterRegistered = true;
67
+ this.infoLog('Registered Matter Microwave as external accessory with operational state and timer clusters');
68
+ }
69
+ /**
70
+ * Initialize HAP (HomeKit) protocol
71
+ */
72
+ initializeHAP() {
73
+ // Microwave Light
74
+ const light = this.accessory.getService('Microwave Light') ?? this.accessory.addService(this.platform.Service.Lightbulb, 'Microwave Light', 'MicrowaveLight');
75
+ light.setCharacteristic(this.platform.Characteristic.Name, 'Microwave Light');
76
+ light
77
+ .getCharacteristic(this.platform.Characteristic.On)
78
+ .onGet(async () => {
79
+ try {
80
+ // TODO: Implement light state ERD
81
+ return false;
82
+ }
83
+ catch (error) {
84
+ this.warnLog?.(`Microwave Light error: ${error?.message ?? error}`);
85
+ return false;
86
+ }
87
+ })
88
+ .onSet(async (value) => {
89
+ try {
90
+ // TODO: Implement light control ERD
91
+ this.debugLog(`Microwave Light set to: ${value}`);
92
+ }
93
+ catch (error) {
94
+ this.warnLog?.(`Microwave Light set error: ${error?.message ?? error}`);
95
+ }
96
+ });
97
+ // Microwave Running State (Switch)
98
+ const runningSwitch = this.accessory.getService('Microwave') ?? this.accessory.addService(this.platform.Service.Switch, 'Microwave', 'Microwave');
99
+ runningSwitch.setCharacteristic(this.platform.Characteristic.Name, 'Microwave');
100
+ runningSwitch
101
+ .getCharacteristic(this.platform.Characteristic.On)
102
+ .onGet(async () => {
103
+ try {
104
+ // TODO: Implement running state ERD
105
+ return false;
106
+ }
107
+ catch (error) {
108
+ this.warnLog?.(`Microwave Running error: ${error?.message ?? error}`);
109
+ return false;
110
+ }
111
+ })
112
+ .onSet(async (value) => {
113
+ try {
114
+ // TODO: Implement running control ERD
115
+ this.debugLog(`Microwave Running set to: ${value}`);
116
+ }
117
+ catch (error) {
118
+ this.warnLog?.(`Microwave Running set error: ${error?.message ?? error}`);
119
+ }
120
+ });
121
+ // Ventilation Fan (if applicable)
122
+ const fan = this.accessory.getService('Microwave Fan') ?? this.accessory.addService(this.platform.Service.Fanv2, 'Microwave Fan', 'MicrowaveFan');
123
+ fan.setCharacteristic(this.platform.Characteristic.Name, 'Microwave Fan');
124
+ fan
125
+ .getCharacteristic(this.platform.Characteristic.Active)
126
+ .onGet(async () => {
127
+ try {
128
+ // TODO: Implement fan state ERD
129
+ return this.platform.Characteristic.Active.INACTIVE;
130
+ }
131
+ catch (error) {
132
+ this.warnLog?.(`Microwave Fan error: ${error?.message ?? error}`);
133
+ return this.platform.Characteristic.Active.INACTIVE;
134
+ }
135
+ })
136
+ .onSet(async (value) => {
137
+ try {
138
+ // TODO: Implement fan control ERD
139
+ this.debugLog(`Microwave Fan set to: ${value}`);
140
+ }
141
+ catch (error) {
142
+ this.warnLog?.(`Microwave Fan set error: ${error?.message ?? error}`);
143
+ }
144
+ });
145
+ }
146
+ }
147
+ //# sourceMappingURL=microwave.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microwave.js","sourceRoot":"","sources":["../../src/devices/microwave.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,15 @@ import { deviceBase } from './device.js';
5
5
  export declare class SmartHQOven extends deviceBase {
6
6
  readonly platform: SmartHQPlatform;
7
7
  readonly device: SmartHqContext['device'] & devicesConfig;
8
+ private useMatterOverride;
8
9
  constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
9
- readErd(erd: string): Promise<string>;
10
- writeErd(erd: string, value: string | boolean): Promise<undefined>;
10
+ /**
11
+ * Initialize Matter protocol
12
+ */
13
+ private initializeMatter;
14
+ /**
15
+ * Initialize HAP (HomeKit) protocol
16
+ */
17
+ private initializeHAP;
11
18
  }
12
19
  //# sourceMappingURL=oven.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oven.d.ts","sourceRoot":"","sources":["../../src/devices/oven.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAOnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,qBAAa,WAAY,SAAQ,UAAU;IAEvC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAElC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;gBAFhD,QAAQ,EAAE,eAAe,EAClC,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACnC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAuCrD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMrC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAWpD"}
1
+ {"version":3,"file":"oven.d.ts","sourceRoot":"","sources":["../../src/devices/oven.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAKnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,qBAAa,WAAY,SAAQ,UAAU;IAKvC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAElC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAL3D,OAAO,CAAC,iBAAiB,CAAiB;gBAG/B,QAAQ,EAAE,eAAe,EAClC,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACnC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAoB3D;;OAEG;YACW,gBAAgB;IAkH9B;;OAEG;IACH,OAAO,CAAC,aAAa;CAkJtB"}
@@ -1,64 +1,288 @@
1
1
  import { Buffer } from 'node:buffer';
2
- import axios from 'axios';
3
2
  import { ERD_TYPES } from '../settings.js';
4
3
  import { deviceBase } from './device.js';
5
4
  export class SmartHQOven extends deviceBase {
6
5
  platform;
7
6
  device;
7
+ // Matter support override flag
8
+ useMatterOverride = false;
8
9
  constructor(platform, accessory, device) {
9
10
  super(platform, accessory, device);
10
11
  this.platform = platform;
11
12
  this.device = device;
13
+ // Check if we should use Matter protocol
14
+ this.useMatterOverride = device.useMatter ?? false;
12
15
  this.debugLog(`Oven Features: ${JSON.stringify(accessory.context.device.features)}`);
13
- accessory.context.device.features.forEach((feature) => {
14
- switch (feature) {
15
- case 'COOKING_V1_UPPER_OVEN_FOUNDATION': {
16
- const ovenLight = this.accessory.getService(accessory.displayName) ?? this.accessory.addService(this.platform.Service.Lightbulb, accessory.displayName, 'Oven');
17
- ovenLight
18
- .getCharacteristic(this.platform.Characteristic.On)
19
- .onGet(() => this.readErd(ERD_TYPES.UPPER_OVEN_LIGHT).then(r => Number.parseInt(r) !== 0))
20
- .onSet(value => this.writeErd(ERD_TYPES.UPPER_OVEN_LIGHT, value));
21
- break;
22
- }
23
- case 'COOKING_V1_EXTENDED_COOKTOP_FOUNDATION': {
24
- this.accessory.getService(accessory.displayName) ?? this.accessory.addService(this.platform.Service.StatefulProgrammableSwitch, accessory.displayName, 'Oven')
25
- .getCharacteristic(this.platform.Characteristic.TargetTemperature)
26
- .onGet(async () => {
27
- const erdVal = await this.readErd(ERD_TYPES.UPPER_OVEN_COOK_MODE);
28
- const b = Buffer.from(erdVal, 'hex');
29
- return fToC(b.readUint16BE(1));
30
- })
31
- .onSet(async (value) => {
32
- const fTarget = cToF(value);
33
- const erdVal = await this.readErd(ERD_TYPES.UPPER_OVEN_COOK_MODE);
34
- const b = Buffer.from(erdVal, 'hex');
35
- b.writeUint16BE(fTarget, 1);
36
- return this.writeErd(ERD_TYPES.UPPER_OVEN_COOK_MODE, b.toString('hex'));
37
- });
16
+ this.debugLog(`Using protocol: ${this.useMatterOverride ? 'Matter' : 'HAP'}`);
17
+ // Initialize the appropriate protocol
18
+ if (this.useMatterOverride) {
19
+ this.initializeMatter().catch((error) => {
20
+ this.errorLog(`Failed to initialize Matter: ${error}`);
21
+ });
22
+ }
23
+ else {
24
+ this.initializeHAP();
25
+ }
26
+ }
27
+ /**
28
+ * Initialize Matter protocol
29
+ */
30
+ async initializeMatter() {
31
+ const { valid, api: matterAPI } = this.validateMatterAPI();
32
+ if (!valid) {
33
+ if (this.device.matterOnly) {
34
+ this.errorLog('Matter API not available or incomplete - accessory will NOT be published (matterOnly mode enabled)');
35
+ this.errorLog('Reason: Matter API validation failed');
36
+ return;
37
+ }
38
+ this.errorLog('Matter API not available or incomplete - falling back to HAP');
39
+ this.initializeHAP();
40
+ return;
41
+ }
42
+ // Check if OvenDevice device type is available
43
+ if (!matterAPI.deviceTypes.OvenDevice) {
44
+ if (this.device.matterOnly) {
45
+ this.errorLog('Matter OvenDevice device type not available - accessory will NOT be published (matterOnly mode enabled)');
46
+ this.errorLog('Reason: Required Matter device type "OvenDevice" is not available in this Homebridge version');
47
+ this.errorLog(`Available Matter device types: ${Object.keys(matterAPI.deviceTypes).join(', ')}`);
48
+ return;
49
+ }
50
+ this.warnLog('Matter OvenDevice device type not available in this Homebridge version - falling back to HAP');
51
+ this.warnLog(`Available Matter device types: ${Object.keys(matterAPI.deviceTypes).join(', ')}`);
52
+ this.useMatterOverride = false;
53
+ this.initializeHAP();
54
+ return;
55
+ }
56
+ const serialNumber = this.device.applianceId || 'unknown';
57
+ this.matterUuid = matterAPI.uuid.generate(serialNumber);
58
+ // Create Matter accessory configuration with oven-specific clusters
59
+ const matterAccessory = {
60
+ UUID: this.matterUuid,
61
+ displayName: this.device.nickname || 'SmartHQ Oven',
62
+ serialNumber,
63
+ manufacturer: this.device.brand && this.device.brand !== 'Unknown' ? this.device.brand : 'GE Appliances',
64
+ model: this.device.model || 'SmartHQ',
65
+ firmwareRevision: this.deviceFirmwareVersion,
66
+ hardwareRevision: this.deviceFirmwareVersion,
67
+ deviceType: matterAPI.deviceTypes.OvenDevice,
68
+ clusters: {
69
+ // On/Off cluster for oven light
70
+ onOff: {
71
+ onOff: false,
72
+ },
73
+ // Temperature Measurement for oven cavity (maps to UPPER_OVEN_DISPLAY_TEMPERATURE)
74
+ temperatureMeasurement: {
75
+ measuredValue: 2000, // 20°C in 0.01°C units
76
+ minMeasuredValue: 0,
77
+ maxMeasuredValue: 26000, // 260°C max
78
+ },
79
+ // Thermostat cluster for temperature setpoint control
80
+ thermostat: {
81
+ localTemperature: 2000,
82
+ occupiedHeatingSetpoint: 17500, // 175°C default
83
+ systemMode: 0, // 0=Off, 4=Heat
84
+ thermostatRunningMode: 0,
85
+ controlSequenceOfOperation: 2, // Heating only
86
+ },
87
+ // Oven Mode cluster for cooking modes (maps to UPPER_OVEN_COOK_MODE)
88
+ ovenMode: {
89
+ supportedModes: [
90
+ { label: 'Off', mode: 0 },
91
+ { label: 'Bake', mode: 1 },
92
+ { label: 'Convection Bake', mode: 2 },
93
+ { label: 'Broil High', mode: 3 },
94
+ { label: 'Broil Low', mode: 4 },
95
+ { label: 'Convection Multi', mode: 5 },
96
+ ],
97
+ currentMode: 0,
98
+ },
99
+ // Timer cluster for cook time remaining (maps to UPPER_OVEN_COOK_TIME_REMAINING)
100
+ timer: {
101
+ timerState: 0,
102
+ duration: 0,
103
+ remainingTime: 0,
104
+ },
105
+ // Alarm cluster for preheat complete, cooking done
106
+ alarm: {
107
+ mask: 0,
108
+ state: 0,
109
+ supported: 3, // Bits: 0=preheat complete, 1=cook complete
110
+ },
111
+ // Door Lock cluster for oven door
112
+ doorLock: {
113
+ lockState: 0, // 0=Unlocked, 1=Locked
114
+ lockType: 0,
115
+ actuatorEnabled: true,
116
+ },
117
+ },
118
+ handlers: {
119
+ onOff: {
120
+ on: async () => {
121
+ await this.writeErd(ERD_TYPES.UPPER_OVEN_LIGHT, true);
122
+ },
123
+ off: async () => {
124
+ await this.writeErd(ERD_TYPES.UPPER_OVEN_LIGHT, false);
125
+ },
126
+ },
127
+ },
128
+ };
129
+ // Register Matter accessory as external device
130
+ await matterAPI.registerPlatformAccessories('@homebridge-plugins/homebridge-smarthq', 'SmartHQ', [matterAccessory]);
131
+ this.matterRegistered = true;
132
+ this.infoLog('Created Matter Oven with thermostat, mode selection, timer, alarm, and door lock clusters');
133
+ }
134
+ /**
135
+ * Initialize HAP (HomeKit) protocol
136
+ */
137
+ initializeHAP() {
138
+ // Oven Light
139
+ const ovenLight = this.accessory.getService('Oven Light') ?? this.accessory.addService(this.platform.Service.Lightbulb, 'Oven Light', 'OvenLight');
140
+ ovenLight.setCharacteristic(this.platform.Characteristic.Name, 'Oven Light');
141
+ ovenLight
142
+ .getCharacteristic(this.platform.Characteristic.On)
143
+ .onGet(async () => {
144
+ try {
145
+ const r = await this.readErd(ERD_TYPES.UPPER_OVEN_LIGHT);
146
+ return r ? Number.parseInt(r) !== 0 : false;
147
+ }
148
+ catch (error) {
149
+ this.warnLog?.(`Oven Light handleGetOn error: ${error?.message ?? error}`);
150
+ return false;
151
+ }
152
+ })
153
+ .onSet(async (value) => {
154
+ try {
155
+ await this.writeErd(ERD_TYPES.UPPER_OVEN_LIGHT, value);
156
+ }
157
+ catch (error) {
158
+ this.warnLog?.(`Oven Light handleSetOn error: ${error?.message ?? error}`);
159
+ }
160
+ });
161
+ // Oven Current Temperature Sensor
162
+ const ovenTempSensor = this.accessory.getService('Oven Temperature') ?? this.accessory.addService(this.platform.Service.TemperatureSensor, 'Oven Temperature', 'OvenTemp');
163
+ ovenTempSensor.setCharacteristic(this.platform.Characteristic.Name, 'Oven Temperature');
164
+ ovenTempSensor
165
+ .getCharacteristic(this.platform.Characteristic.CurrentTemperature)
166
+ .onGet(async () => {
167
+ try {
168
+ const erdVal = await this.readErd(ERD_TYPES.UPPER_OVEN_COOK_MODE);
169
+ if (!erdVal) {
170
+ return 0;
38
171
  }
172
+ const b = Buffer.from(erdVal, 'hex');
173
+ return fToC(b.readUint16BE(1));
174
+ }
175
+ catch (error) {
176
+ this.warnLog?.(`Oven Temperature error: ${error?.message ?? error}`);
177
+ return 0;
39
178
  }
40
179
  });
41
- }
42
- async readErd(erd) {
43
- const d = await axios
44
- .get(`/appliance/${this.accessory.context.device.applianceId}/erd/${erd}`);
45
- return String(d.data.value);
46
- }
47
- async writeErd(erd, value) {
48
- await axios
49
- .post(`/appliance/${this.accessory.context.device.applianceId}/erd/${erd}`, {
50
- kind: 'appliance#erdListEntry',
51
- userId: this.accessory.context.userId,
52
- applianceId: this.accessory.context.device.applianceId,
53
- erd,
54
- value: typeof value === 'boolean' ? (value ? '01' : '00') : value,
180
+ (async () => {
181
+ const probePresent = await this.has_erd_code(ERD_TYPES.UPPER_OVEN_PROBE_PRESENT);
182
+ if (probePresent) {
183
+ const probeTempSensor = this.accessory.getService('Probe Temperature') ?? this.accessory.addService(this.platform.Service.TemperatureSensor, 'Probe Temperature', 'ProbeTemp');
184
+ probeTempSensor.setCharacteristic(this.platform.Characteristic.Name, 'Probe Temperature');
185
+ probeTempSensor
186
+ .getCharacteristic(this.platform.Characteristic.CurrentTemperature)
187
+ .onGet(async () => {
188
+ const r = await this.readErd(ERD_TYPES.UPPER_OVEN_PROBE_DISPLAY_TEMP);
189
+ if (!r) {
190
+ return 0;
191
+ }
192
+ const tempF = Number.parseInt(r);
193
+ return fToC(tempF);
194
+ });
195
+ }
196
+ })();
197
+ // Cook Time Remaining (using a valve to show remaining duration)
198
+ const cookTimeValve = this.accessory.getService('Cook Time') ?? this.accessory.addService(this.platform.Service.Valve, 'Cook Time', 'CookTime');
199
+ cookTimeValve.setCharacteristic(this.platform.Characteristic.Name, 'Cook Time');
200
+ cookTimeValve.setCharacteristic(this.platform.Characteristic.ValveType, this.platform.Characteristic.ValveType.GENERIC_VALVE);
201
+ cookTimeValve
202
+ .getCharacteristic(this.platform.Characteristic.Active)
203
+ .onGet(async () => {
204
+ const r = await this.readErd(ERD_TYPES.UPPER_OVEN_COOK_TIME_REMAINING);
205
+ // Active if time remaining is non-zero
206
+ return r && Number.parseInt(r, 16) > 0
207
+ ? this.platform.Characteristic.Active.ACTIVE
208
+ : this.platform.Characteristic.Active.INACTIVE;
209
+ });
210
+ cookTimeValve
211
+ .getCharacteristic(this.platform.Characteristic.InUse)
212
+ .onGet(async () => {
213
+ const r = await this.readErd(ERD_TYPES.UPPER_OVEN_COOK_TIME_REMAINING);
214
+ return r && Number.parseInt(r, 16) > 0
215
+ ? this.platform.Characteristic.InUse.IN_USE
216
+ : this.platform.Characteristic.InUse.NOT_IN_USE;
217
+ });
218
+ cookTimeValve
219
+ .getCharacteristic(this.platform.Characteristic.RemainingDuration)
220
+ .onGet(async () => {
221
+ const r = await this.readErd(ERD_TYPES.UPPER_OVEN_COOK_TIME_REMAINING);
222
+ if (!r) {
223
+ return 0;
224
+ }
225
+ // Cook time remaining is stored as minutes in hex, convert to seconds
226
+ const minutes = Number.parseInt(r, 16);
227
+ const seconds = minutes * 60;
228
+ this.debugLog(`Cook Time Remaining - Hex: ${r}, Minutes: ${minutes}, Seconds: ${seconds}`);
229
+ return seconds;
230
+ });
231
+ // Remote Enabled Status (binary sensor)
232
+ const remoteEnabledSensor = this.accessory.getService('Remote Enabled') ?? this.accessory.addService(this.platform.Service.ContactSensor, 'Remote Enabled', 'RemoteEnabled');
233
+ remoteEnabledSensor.setCharacteristic(this.platform.Characteristic.Name, 'Remote Enabled');
234
+ remoteEnabledSensor
235
+ .getCharacteristic(this.platform.Characteristic.ContactSensorState)
236
+ .onGet(async () => {
237
+ const r = await this.readErd(ERD_TYPES.UPPER_OVEN_REMOTE_ENABLED);
238
+ // 1=enabled (open/not detected), 0=disabled (closed/detected)
239
+ return r && Number.parseInt(r) === 1
240
+ ? this.platform.Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
241
+ : this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED;
242
+ });
243
+ // Oven Door Lock (Security System for lock state)
244
+ const ovenDoorLock = this.accessory.getService('Oven Door Lock') ?? this.accessory.addService(this.platform.Service.LockMechanism, 'Oven Door Lock', 'OvenDoorLock');
245
+ ovenDoorLock.setCharacteristic(this.platform.Characteristic.Name, 'Oven Door Lock');
246
+ ovenDoorLock
247
+ .getCharacteristic(this.platform.Characteristic.LockCurrentState)
248
+ .onGet(async () => {
249
+ try {
250
+ // TODO: Use actual ERD for door lock state when available
251
+ return this.platform.Characteristic.LockCurrentState.UNSECURED;
252
+ }
253
+ catch (error) {
254
+ this.warnLog?.(`Oven Door Lock error: ${error?.message ?? error}`);
255
+ return this.platform.Characteristic.LockCurrentState.UNSECURED;
256
+ }
257
+ });
258
+ ovenDoorLock
259
+ .getCharacteristic(this.platform.Characteristic.LockTargetState)
260
+ .onGet(async () => {
261
+ try {
262
+ // TODO: Use actual ERD for door lock state when available
263
+ return this.platform.Characteristic.LockTargetState.UNSECURED;
264
+ }
265
+ catch (error) {
266
+ this.warnLog?.(`Oven Door Lock error: ${error?.message ?? error}`);
267
+ return this.platform.Characteristic.LockTargetState.UNSECURED;
268
+ }
269
+ })
270
+ .onSet(async (value) => {
271
+ try {
272
+ // TODO: Implement door lock control when ERD is available
273
+ this.debugLog(`Oven Door Lock set to: ${value}`);
274
+ }
275
+ catch (error) {
276
+ this.warnLog?.(`Oven Door Lock set error: ${error?.message ?? error}`);
277
+ }
55
278
  });
56
- return undefined;
57
279
  }
58
280
  }
59
- function cToF(celsius) {
60
- return (celsius * 9) / 5 + 32;
281
+ /*
282
+ function cToF(celsius: number) {
283
+ return (celsius * 9) / 5 + 32
61
284
  }
285
+ */
62
286
  function fToC(fahrenheit) {
63
287
  return ((fahrenheit - 32) * 5) / 9;
64
288
  }
@@ -1 +1 @@
1
- {"version":3,"file":"oven.js","sourceRoot":"","sources":["../../src/devices/oven.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oven.js","sourceRoot":"","sources":["../../src/devices/oven.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,48 @@ import type { PlatformAccessory } from 'homebridge';
2
2
  import type { SmartHQPlatform } from '../platform.js';
3
3
  import type { devicesConfig, SmartHqContext } from '../settings.js';
4
4
  import { deviceBase } from './device.js';
5
+ /**
6
+ * SmartHQ Refrigerator - Unified HAP/Matter Implementation
7
+ * Supports both HomeKit Accessory Protocol and Matter protocol
8
+ */
5
9
  export declare class SmartHQRefrigerator extends deviceBase {
6
10
  readonly platform: SmartHQPlatform;
7
11
  readonly device: SmartHqContext['device'] & devicesConfig;
8
12
  SensorUpdateInProgress: boolean;
9
13
  deviceStatus: any;
14
+ private useMatterOverride;
10
15
  constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
11
- readErd(erd: string): Promise<string>;
12
- writeErd(erd: string, value: string | boolean): Promise<undefined>;
16
+ /**
17
+ * Initialize Matter protocol
18
+ */
19
+ private initializeMatter;
20
+ /**
21
+ * Initialize HAP (HomeKit) protocol
22
+ */
23
+ private initializeHAP;
24
+ /**
25
+ * Shared helper: Parse temperature from ERD (works for both HAP and Matter)
26
+ */
27
+ private parseTemperature;
28
+ /**
29
+ * Shared helper: Parse setpoint from ERD
30
+ */
31
+ private parseSetpoint;
32
+ /**
33
+ * Shared helper: Write setpoint to ERD
34
+ */
35
+ private writeSetpoint;
36
+ /**
37
+ * Handle Matter setpoint change
38
+ */
39
+ private handleMatterSetpointChange;
40
+ /**
41
+ * Handle Matter mode change (Normal, Rapid Cool, Rapid Freeze)
42
+ */
43
+ private handleMatterModeChange;
44
+ /**
45
+ * Refresh device status - update both HAP and Matter states
46
+ */
47
+ private refreshDeviceStatus;
13
48
  }
14
49
  //# sourceMappingURL=refrigerator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"refrigerator.d.ts","sourceRoot":"","sources":["../../src/devices/refrigerator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAMnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,qBAAa,mBAAoB,SAAQ,UAAU;IAM/C,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAElC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAN3D,sBAAsB,EAAG,OAAO,CAAA;IAChC,YAAY,EAAE,GAAG,CAAA;gBAGN,QAAQ,EAAE,eAAe,EAClC,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACnC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAoCrD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMrC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAWpD"}
1
+ {"version":3,"file":"refrigerator.d.ts","sourceRoot":"","sources":["../../src/devices/refrigerator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAKnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IAS/C,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAElC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAT3D,sBAAsB,EAAG,OAAO,CAAA;IAChC,YAAY,EAAE,GAAG,CAAA;IAGjB,OAAO,CAAC,iBAAiB,CAAiB;gBAG/B,QAAQ,EAAE,eAAe,EAClC,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACnC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAgC3D;;OAEG;YACW,gBAAgB;IA8I9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAyOrB;;OAEG;YACW,gBAAgB;IAsB9B;;OAEG;YACW,aAAa;IAoB3B;;OAEG;YACW,aAAa;IAW3B;;OAEG;YACW,0BAA0B;IAcxC;;OAEG;YACW,sBAAsB;IAkCpC;;OAEG;YACW,mBAAmB;CAqKlC"}