@homebridge-plugins/homebridge-smarthq 0.4.0-beta.1 → 0.4.0-beta.2

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 (93) hide show
  1. package/README.md +11 -1
  2. package/config.schema.json +17 -0
  3. package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.d.ts +14 -0
  4. package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.d.ts.map +1 -0
  5. package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.js +35 -0
  6. package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.js.map +1 -0
  7. package/dist/devices/OpalIceMaker/Managers/OpalMetadataSvcManager.d.ts +9 -0
  8. package/dist/devices/OpalIceMaker/Managers/OpalMetadataSvcManager.d.ts.map +1 -0
  9. package/dist/devices/OpalIceMaker/Managers/OpalMetadataSvcManager.js +35 -0
  10. package/dist/devices/OpalIceMaker/Managers/OpalMetadataSvcManager.js.map +1 -0
  11. package/dist/devices/OpalIceMaker/Managers/OpalMonitorManager.d.ts +20 -0
  12. package/dist/devices/OpalIceMaker/Managers/OpalMonitorManager.d.ts.map +1 -0
  13. package/dist/devices/OpalIceMaker/Managers/OpalMonitorManager.js +65 -0
  14. package/dist/devices/OpalIceMaker/Managers/OpalMonitorManager.js.map +1 -0
  15. package/dist/devices/OpalIceMaker/Managers/OpalNightlightSvcManager.d.ts +10 -0
  16. package/dist/devices/OpalIceMaker/Managers/OpalNightlightSvcManager.d.ts.map +1 -0
  17. package/dist/devices/OpalIceMaker/Managers/OpalNightlightSvcManager.js +69 -0
  18. package/dist/devices/OpalIceMaker/Managers/OpalNightlightSvcManager.js.map +1 -0
  19. package/dist/devices/OpalIceMaker/Managers/OpalPowerSvcManager.d.ts +11 -0
  20. package/dist/devices/OpalIceMaker/Managers/OpalPowerSvcManager.d.ts.map +1 -0
  21. package/dist/devices/OpalIceMaker/Managers/OpalPowerSvcManager.js +22 -0
  22. package/dist/devices/OpalIceMaker/Managers/OpalPowerSvcManager.js.map +1 -0
  23. package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.d.ts +20 -0
  24. package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.d.ts.map +1 -0
  25. package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.js +121 -0
  26. package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.js.map +1 -0
  27. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalAddWaterStatusSvcManager.d.ts +17 -0
  28. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalAddWaterStatusSvcManager.d.ts.map +1 -0
  29. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalAddWaterStatusSvcManager.js +35 -0
  30. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalAddWaterStatusSvcManager.js.map +1 -0
  31. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalIceBucketStatusSvcManager.d.ts +17 -0
  32. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalIceBucketStatusSvcManager.d.ts.map +1 -0
  33. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalIceBucketStatusSvcManager.js +35 -0
  34. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalIceBucketStatusSvcManager.js.map +1 -0
  35. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.d.ts +27 -0
  36. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.d.ts.map +1 -0
  37. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.js +40 -0
  38. package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.js.map +1 -0
  39. package/dist/devices/OpalIceMaker/Managers/StatusManagers/index.d.ts +13 -0
  40. package/dist/devices/OpalIceMaker/Managers/StatusManagers/index.d.ts.map +1 -0
  41. package/dist/devices/OpalIceMaker/Managers/StatusManagers/index.js +33 -0
  42. package/dist/devices/OpalIceMaker/Managers/StatusManagers/index.js.map +1 -0
  43. package/dist/devices/OpalIceMaker/Managers/index.d.ts +7 -0
  44. package/dist/devices/OpalIceMaker/Managers/index.d.ts.map +1 -0
  45. package/dist/devices/OpalIceMaker/Managers/index.js +7 -0
  46. package/dist/devices/OpalIceMaker/Managers/index.js.map +1 -0
  47. package/dist/devices/OpalIceMaker/OpalDeviceBase.d.ts +13 -0
  48. package/dist/devices/OpalIceMaker/OpalDeviceBase.d.ts.map +1 -0
  49. package/dist/devices/OpalIceMaker/OpalDeviceBase.js +42 -0
  50. package/dist/devices/OpalIceMaker/OpalDeviceBase.js.map +1 -0
  51. package/dist/devices/OpalIceMaker/index.d.ts +17 -0
  52. package/dist/devices/OpalIceMaker/index.d.ts.map +1 -0
  53. package/dist/devices/OpalIceMaker/index.js +33 -0
  54. package/dist/devices/OpalIceMaker/index.js.map +1 -0
  55. package/dist/homebridge-ui/public/index.html +23 -25
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +2 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/platform.js +1 -1
  61. package/dist/platform.js.map +1 -1
  62. package/dist/settings.d.ts +6 -1
  63. package/dist/settings.d.ts.map +1 -1
  64. package/dist/settings.js +7 -7
  65. package/dist/settings.js.map +1 -1
  66. package/docs/assets/dmt/dmt-component-data.js +1 -1
  67. package/docs/assets/dmt/dmt-search.cmp +0 -0
  68. package/docs/classes/SmartHQPlatform.html +66 -0
  69. package/docs/functions/default.html +1 -1
  70. package/docs/index.html +10 -2
  71. package/docs/interfaces/SmartHQPlatformConfig.html +16 -0
  72. package/docs/interfaces/SmartHqContext.html +4 -0
  73. package/docs/interfaces/credentials.html +4 -0
  74. package/docs/interfaces/devicesConfig.html +8 -0
  75. package/docs/interfaces/options.html +13 -0
  76. package/docs/modules.html +1 -1
  77. package/docs/variables/API_URL.html +2 -0
  78. package/docs/variables/ERD_CODES.html +2 -0
  79. package/docs/variables/ERD_TYPES.html +2 -0
  80. package/docs/variables/KEEPALIVE_TIMEOUT.html +2 -0
  81. package/docs/variables/LOGIN_URL.html +3 -0
  82. package/docs/variables/OAUTH2_CLIENT_ID.html +2 -0
  83. package/docs/variables/OAUTH2_CLIENT_SECRET.html +2 -0
  84. package/docs/variables/OAUTH2_REDIRECT_URI.html +2 -0
  85. package/docs/variables/PLATFORM_NAME.html +3 -0
  86. package/docs/variables/PLUGIN_NAME.html +3 -0
  87. package/docs/variables/SECURE_URL.html +3 -0
  88. package/package.json +3 -2
  89. package/vitest.config.ts +9 -0
  90. package/dist/devices/icemaker.d.ts +0 -17
  91. package/dist/devices/icemaker.d.ts.map +0 -1
  92. package/dist/devices/icemaker.js +0 -159
  93. package/dist/devices/icemaker.js.map +0 -1
package/README.md CHANGED
@@ -28,4 +28,14 @@ plugin allows which allows to interact with SmartHQ API.
28
28
 
29
29
  ## Supported SmartHQ Features
30
30
 
31
- This plugin is in developenet
31
+ This plugin is in development
32
+
33
+ ## Homekit Controller Notifications
34
+
35
+ Currently Homekit Controller Notifications are supported for the Opal Ice Maker, to setup, install Homekit Controller App and configure notifications for each respective event. Put your Homekit Controller client secret in the Plugin Advanced Options, and the path associated with each available notifcation in the Opal device options.
36
+ These are the events that are currently supported:
37
+
38
+ - Ice Bucket Full
39
+ - Production Progress Complete
40
+ - Filter Maintenance Change Alert
41
+ - Add Water Alert
@@ -158,6 +158,15 @@
158
158
  "placeholder": 30,
159
159
  "description": "How frequently in seconds that HomeKit accessories are updated"
160
160
  },
161
+ "homekitControllerNotificationsSecret": {
162
+ "title": "Homekit Controller Notifications Secret",
163
+ "type": "string",
164
+ "placeholder": "xxxxxx",
165
+ "default": "",
166
+ "x-schema-form": {
167
+ "type": "password"
168
+ }
169
+ },
161
170
  "logging": {
162
171
  "title": "Logging Setting",
163
172
  "type": "string",
@@ -260,6 +269,14 @@
260
269
  "key": "options.updateRate",
261
270
  "notitle": true
262
271
  },
272
+ {
273
+ "type": "help",
274
+ "helpvalue": "<h5>Homekit Controller Notifications Secret</h5><em class='primary-text'>For better notifications you can configure homekit controller, this is the secret under 'Devices & Secret'</em>"
275
+ },
276
+ {
277
+ "key": "options.homekitControllerNotificationsSecret",
278
+ "notitle": true
279
+ },
263
280
  "options.logging"
264
281
  ]
265
282
  }
@@ -0,0 +1,14 @@
1
+ import type { SmartHQPlatform } from '../../../index.js';
2
+ import { type devicesConfig, type SmartHqContext } from '../../../index.js';
3
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
4
+ import type { PlatformAccessory, Service } from 'homebridge';
5
+ export declare class OpalFilterMaintenanceSvcManager extends OpalDeviceBase {
6
+ service: Service;
7
+ serviceName: string;
8
+ filterMaintenanceStatus: 0 | 1;
9
+ constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
10
+ getFilterMaintenaceStatus(): Promise<void>;
11
+ setFilterMaintenaceStatus(updateValue: 0 | 1): void;
12
+ getService(): Service;
13
+ }
14
+ //# sourceMappingURL=OpalFilterMaintenanceSvcManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalFilterMaintenanceSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE5D,qBAAa,+BAAgC,SAAQ,cAAc;IAC1D,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAA4B;IACtD,uBAAuB,EAAE,CAAC,GAAG,CAAC,CAAI;gBAEhC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAkB5C,yBAAyB;IAK/B,yBAAyB,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;IAM5C,UAAU,IAAI,OAAO;CAGtB"}
@@ -0,0 +1,35 @@
1
+ import { ERD_TYPES } from '../../../index.js';
2
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
3
+ export class OpalFilterMaintenanceSvcManager extends OpalDeviceBase {
4
+ service;
5
+ serviceName = 'Opal Filter Maintenance';
6
+ filterMaintenanceStatus = 0;
7
+ constructor(platform, accessory, device) {
8
+ super(platform, accessory, device);
9
+ this.service = this.accessory.getService(this.serviceName)
10
+ || this.accessory.addService(this.platform.Service.FilterMaintenance, this.serviceName);
11
+ this.service.getCharacteristic(this.platform.Characteristic.FilterChangeIndication).onGet(() => {
12
+ return this.filterMaintenanceStatus;
13
+ }).on('change', async (chg) => {
14
+ if (chg.oldValue === this.platform.Characteristic.FilterChangeIndication.FILTER_OK && chg.newValue === this.platform.Characteristic.FilterChangeIndication.CHANGE_FILTER) {
15
+ const notificationPath = this.platform.config.options?.oplHKCFilterMaintenanceNotificationPath;
16
+ if (notificationPath) {
17
+ await this.sendHomeKitControllerNotification(notificationPath);
18
+ }
19
+ }
20
+ });
21
+ }
22
+ async getFilterMaintenaceStatus() {
23
+ const currentFilterStatus = await this.readErd(ERD_TYPES.OIM_FILTER_STATUS);
24
+ this.setFilterMaintenaceStatus(Number.parseInt(currentFilterStatus));
25
+ }
26
+ setFilterMaintenaceStatus(updateValue) {
27
+ this.filterMaintenanceStatus = updateValue;
28
+ // Stimulate on change handler for native notification
29
+ this.service.getCharacteristic(this.platform.Characteristic.FilterChangeIndication).setValue(updateValue);
30
+ }
31
+ getService() {
32
+ return this.service;
33
+ }
34
+ }
35
+ //# sourceMappingURL=OpalFilterMaintenanceSvcManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalFilterMaintenanceSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA2C,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,MAAM,OAAO,+BAAgC,SAAQ,cAAc;IAC1D,OAAO,CAAS;IAChB,WAAW,GAAW,yBAAyB,CAAA;IACtD,uBAAuB,GAAU,CAAC,CAAA;IAClC,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;eACrD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAEzF,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC7F,OAAO,IAAI,CAAC,uBAAuB,CAAA;QACrC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,aAAa,EAAE,CAAC;gBACzK,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,uCAAuC,CAAA;gBAC9F,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,IAAI,CAAC,iCAAiC,CAAC,gBAAgB,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC7B,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QAC3E,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAU,CAAC,CAAA;IAC/E,CAAC;IAED,yBAAyB,CAAC,WAAkB;QAC1C,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAA;QAC1C,sDAAsD;QACtD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC3G,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { PlatformAccessory, Service } from 'homebridge';
2
+ import type { SmartHQPlatform, devicesConfig, SmartHqContext } from '../../../index.js';
3
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
4
+ export declare class OpalMetadataSvcManager extends OpalDeviceBase {
5
+ service: Service;
6
+ constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
7
+ getService(): Service;
8
+ }
9
+ //# sourceMappingURL=OpalMetadataSvcManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalMetadataSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalMetadataSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAE3E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,sBAAuB,SAAQ,cAAc;IACjD,OAAO,EAAE,OAAO,CAAA;gBAGrB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAgClD,UAAU,IAAI,OAAO;CAGtB"}
@@ -0,0 +1,35 @@
1
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
2
+ export class OpalMetadataSvcManager extends OpalDeviceBase {
3
+ service;
4
+ constructor(platform, accessory, device) {
5
+ super(platform, accessory, device);
6
+ // Get default accessory information service
7
+ this.service = this.accessory.getService('');
8
+ // Metadata for Device Form, Opal Production Limit
9
+ const opalProductionLimitQueryStr = 'l=Production_Duration_Minutes&i=opalProductionLimit&t=number&d=0&p=Number._0_for_Infinite';
10
+ const opalHKCNotificationsPathQueryStr = 'l=HKC_Ice_Bucket_Full_Notification_Path&i=oplHKCIceBucketFullNotificationPath';
11
+ const opalHKCCompletionNotificationPathQueryStr = 'l=HKC_Progress_Complete_Notification_Path&i=oplHKCProgressCompleteNotificationPath';
12
+ const opalHKCFilterMaintenanceNotificationPathQueryStr = 'l=HKC_Filter_Maintenace_Notification_Path&i=oplHKCFilterMaintenanceNotificationPath';
13
+ const opalHKCAddWaterNotificationPathQueryStr = 'l=HKC_Add_Water_Notification_Path&i=oplHKCAddWaterNotificationPath';
14
+ const fullQueryStr = [
15
+ opalProductionLimitQueryStr,
16
+ opalHKCNotificationsPathQueryStr,
17
+ opalHKCCompletionNotificationPathQueryStr,
18
+ opalHKCFilterMaintenanceNotificationPathQueryStr,
19
+ opalHKCAddWaterNotificationPathQueryStr
20
+ ]
21
+ .reduce((acc, qs, index) => {
22
+ if (index === 0) {
23
+ return acc.concat(qs);
24
+ }
25
+ return acc.concat(',').concat(qs);
26
+ }, '');
27
+ this.service
28
+ ?.getCharacteristic(this.platform.Characteristic.ProductData)
29
+ .onGet(() => fullQueryStr);
30
+ }
31
+ getService() {
32
+ return this.service;
33
+ }
34
+ }
35
+ //# sourceMappingURL=OpalMetadataSvcManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalMetadataSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalMetadataSvcManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACjD,OAAO,CAAS;IAEvB,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAElC,4CAA4C;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAE,CAAA;QAC7C,kDAAkD;QAClD,MAAM,2BAA2B,GAAG,2FAA2F,CAAA;QAC/H,MAAM,gCAAgC,GAAG,+EAA+E,CAAA;QACxH,MAAM,yCAAyC,GAAG,oFAAoF,CAAA;QACtI,MAAM,gDAAgD,GAAG,qFAAqF,CAAA;QAC9I,MAAM,uCAAuC,GAAG,oEAAoE,CAAA;QAEpH,MAAM,YAAY,GAAG;YACnB,2BAA2B;YAC3B,gCAAgC;YAChC,yCAAyC;YACzC,gDAAgD;YAChD,uCAAuC;SACxC;aACE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;YACzB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACvB,CAAC;YACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnC,CAAC,EAAE,EAAE,CAAC,CAAA;QAER,IAAI,CAAC,OAAO;YACV,EAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC;aAC5D,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAA;IAC9B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { PlatformAccessory } from 'homebridge';
2
+ import type { SmartHQPlatform, devicesConfig, SmartHqContext } from '../../../index.js';
3
+ import type { OpalFilterMaintenanceSvcManager, OpalPowerSvcManager, OpalProgressSvcManager } from '../Managers/index.js';
4
+ import type { OpalStatusSvcManager } from '../Managers/StatusManagers/index.js';
5
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
6
+ export declare class OpalMonitorManager extends OpalDeviceBase {
7
+ readonly platform: SmartHQPlatform;
8
+ accessory: PlatformAccessory<SmartHqContext>;
9
+ readonly device: SmartHqContext['device'] & devicesConfig;
10
+ private statusManager;
11
+ private powerManager;
12
+ private progressManager;
13
+ private filterMaintenanceManager;
14
+ private subscription;
15
+ constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig, statusManager: OpalStatusSvcManager, powerManager: OpalPowerSvcManager, progressManager: OpalProgressSvcManager, filterMaintenanceManager: OpalFilterMaintenanceSvcManager);
16
+ startMonitoring(): void;
17
+ stopMonitoring(): void;
18
+ updateRefreshRate(newRate: number): void;
19
+ }
20
+ //# sourceMappingURL=OpalMonitorManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalMonitorManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalMonitorManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3E,OAAO,KAAK,EAAE,+BAA+B,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAC3H,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAA;AAGlF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,qBAAa,kBAAmB,SAAQ,cAAc;IAGlD,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IACzD,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,wBAAwB;IARlC,OAAO,CAAC,YAAY,CAA4B;gBAErC,QAAQ,EAAE,eAAe,EAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC1C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa,EACjD,aAAa,EAAE,oBAAoB,EACnC,YAAY,EAAE,mBAAmB,EACjC,eAAe,EAAE,sBAAsB,EACvC,wBAAwB,EAAE,+BAA+B;IAMnE,eAAe,IAAI,IAAI;IA6BvB,cAAc,IAAI,IAAI;IAStB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAOzC"}
@@ -0,0 +1,65 @@
1
+ import { interval, skipWhile } from 'rxjs';
2
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
3
+ export class OpalMonitorManager extends OpalDeviceBase {
4
+ platform;
5
+ accessory;
6
+ device;
7
+ statusManager;
8
+ powerManager;
9
+ progressManager;
10
+ filterMaintenanceManager;
11
+ subscription = null;
12
+ constructor(platform, accessory, device, statusManager, powerManager, progressManager, filterMaintenanceManager) {
13
+ super(platform, accessory, device);
14
+ this.platform = platform;
15
+ this.accessory = accessory;
16
+ this.device = device;
17
+ this.statusManager = statusManager;
18
+ this.powerManager = powerManager;
19
+ this.progressManager = progressManager;
20
+ this.filterMaintenanceManager = filterMaintenanceManager;
21
+ }
22
+ // Start the monitoring
23
+ startMonitoring() {
24
+ // Stop any existing subscription first
25
+ this.stopMonitoring();
26
+ this.subscription = interval((this.device.refreshRate || 30) * 1000)
27
+ .pipe(skipWhile(() => !this.progressManager && !this.platform.config.options?.homekitControllerNotificationsSecret))
28
+ .subscribe(async () => {
29
+ await this.statusManager.getOpalCurrentStatus();
30
+ await this.filterMaintenanceManager.getFilterMaintenaceStatus();
31
+ if (this.progressManager.hasService()) {
32
+ try {
33
+ const currentProductionValue = await this.progressManager.processProductionProgress();
34
+ // Auto-shutoff if production exceeds limit
35
+ if (this.progressManager.opalProductionLimit && currentProductionValue >= this.progressManager.opalProductionLimit) {
36
+ this.powerManager.setOpalPowerState(false);
37
+ this.platform.debugLog(`Auto-shutoff triggered: Production (${currentProductionValue}) > Limit (${this.progressManager.opalProductionLimit})`);
38
+ }
39
+ }
40
+ catch (error) {
41
+ const typedErr = error;
42
+ this.platform.errorLog(`Monitor error: ${typedErr.message}`);
43
+ }
44
+ }
45
+ });
46
+ this.platform.debugLog(`Started ice maker monitoring at ${this.device.refreshRate}s intervals`);
47
+ }
48
+ // Stop the monitoring
49
+ stopMonitoring() {
50
+ if (this.subscription) {
51
+ this.subscription.unsubscribe();
52
+ this.subscription = null;
53
+ this.platform.debugLog('Stopped ice maker monitoring');
54
+ }
55
+ }
56
+ // Update monitoring rate
57
+ updateRefreshRate(newRate) {
58
+ this.device.refreshRate = newRate;
59
+ if (this.subscription) {
60
+ // Restart with new rate
61
+ this.startMonitoring();
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=OpalMonitorManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalMonitorManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalMonitorManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { PlatformAccessory, Service } from 'homebridge';
2
+ import type { SmartHQPlatform, devicesConfig, SmartHqContext } from '../../../index.js';
3
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
4
+ export declare class OpalNightlightSvcManager extends OpalDeviceBase {
5
+ private service;
6
+ private serviceName;
7
+ constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
8
+ getService(): Service;
9
+ }
10
+ //# sourceMappingURL=OpalNightlightSvcManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalNightlightSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalNightlightSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,wBAAyB,SAAQ,cAAc;IAC1D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAoB;gBAGrC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IA8DlD,UAAU,IAAI,OAAO;CAGtB"}
@@ -0,0 +1,69 @@
1
+ import { ERD_TYPES } from '../../../index.js';
2
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
3
+ export class OpalNightlightSvcManager extends OpalDeviceBase {
4
+ service;
5
+ serviceName = 'Opal Nightlight';
6
+ constructor(platform, accessory, device) {
7
+ super(platform, accessory, device);
8
+ this.service = this.accessory.getService(this.serviceName)
9
+ || this.accessory.addService(this.platform.Service.Lightbulb, this.serviceName);
10
+ this.service.getCharacteristic(this.platform.Characteristic.On)
11
+ .onGet(async () => {
12
+ const currentLevel = await this.readErd(ERD_TYPES.OIM_LIGHT_LEVEL);
13
+ return currentLevel !== '00'; // If the level is not OFF (00), return true (ON)
14
+ })
15
+ .onSet(async (value) => {
16
+ let newState;
17
+ const currentLevel = await this.readErd(ERD_TYPES.OIM_LIGHT_LEVEL);
18
+ if (value) {
19
+ // If turning the light ON, cycle through states
20
+ if (currentLevel === '00') {
21
+ newState = '02'; // LOW
22
+ }
23
+ else if (currentLevel === '02') {
24
+ newState = '01'; // HIGH
25
+ }
26
+ }
27
+ else {
28
+ newState = '00'; // OFF
29
+ }
30
+ await this.writeErd(ERD_TYPES.OIM_LIGHT_LEVEL, newState);
31
+ });
32
+ this.service.getCharacteristic(this.platform.Characteristic.Brightness)
33
+ .setProps({
34
+ minValue: 0, // Minimum value for brightness (OFF)
35
+ maxValue: 100, // Maximum value for brightness (HIGH)
36
+ minStep: 50, // Step value (only allow OFF, LOW, and HIGH)
37
+ })
38
+ .onGet(async () => {
39
+ const currentLevel = await this.readErd(ERD_TYPES.OIM_LIGHT_LEVEL);
40
+ // Map the light level to brightness values
41
+ if (currentLevel === '02') { // HIGH
42
+ return 50; // Dim Brightness
43
+ }
44
+ else if (currentLevel === '01') { // LOW
45
+ return 100; // Full Brightness
46
+ }
47
+ else {
48
+ return 0; // OFF
49
+ }
50
+ })
51
+ .onSet(async (value) => {
52
+ let newState;
53
+ if (value === 50) {
54
+ newState = '02'; // LOW (for dim brightness)
55
+ }
56
+ else if (value === 100) {
57
+ newState = '01'; // HIGH (for full brightness)
58
+ }
59
+ else {
60
+ newState = '00'; // OFF
61
+ }
62
+ await this.writeErd(ERD_TYPES.OIM_LIGHT_LEVEL, newState);
63
+ });
64
+ }
65
+ getService() {
66
+ return this.service;
67
+ }
68
+ }
69
+ //# sourceMappingURL=OpalNightlightSvcManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalNightlightSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalNightlightSvcManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { PlatformAccessory, Service } from 'homebridge';
2
+ import type { SmartHQPlatform, devicesConfig, SmartHqContext } from '../../../index.js';
3
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
4
+ export declare class OpalPowerSvcManager extends OpalDeviceBase {
5
+ service: Service;
6
+ private serviceName;
7
+ constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
8
+ getService(): Service;
9
+ setOpalPowerState(newPowerState: boolean): void;
10
+ }
11
+ //# sourceMappingURL=OpalPowerSvcManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalPowerSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalPowerSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,mBAAoB,SAAQ,cAAc;IAC9C,OAAO,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,WAAW,CAAe;gBAGhC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAalD,UAAU,IAAI,OAAO;IAId,iBAAiB,CAAC,aAAa,EAAE,OAAO;CAMhD"}
@@ -0,0 +1,22 @@
1
+ import { ERD_TYPES } from '../../../index.js';
2
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
3
+ export class OpalPowerSvcManager extends OpalDeviceBase {
4
+ service;
5
+ serviceName = 'Opal Power';
6
+ constructor(platform, accessory, device) {
7
+ super(platform, accessory, device);
8
+ this.service = this.accessory.getService(this.serviceName)
9
+ || this.accessory.addService(this.platform.Service.Switch, this.serviceName, 'opal-power');
10
+ this.service
11
+ .getCharacteristic(this.platform.Characteristic.On)
12
+ .onGet(() => this.readErd(ERD_TYPES.OIM_POWER).then(r => Number.parseInt(r) !== 0))
13
+ .onSet(value => this.writeErd(ERD_TYPES.OIM_POWER, value));
14
+ }
15
+ getService() {
16
+ return this.service;
17
+ }
18
+ setOpalPowerState(newPowerState) {
19
+ this.service?.setCharacteristic(this.platform.Characteristic.On, newPowerState);
20
+ }
21
+ }
22
+ //# sourceMappingURL=OpalPowerSvcManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalPowerSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalPowerSvcManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IAC9C,OAAO,CAAS;IACf,WAAW,GAAG,YAAY,CAAA;IAElC,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;eACrD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QAE5F,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aAClD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aAClF,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,KAAgB,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAEM,iBAAiB,CAAC,aAAsB;QAC7C,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAC7B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAC/B,aAAa,CACd,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { PlatformAccessory, Service } from 'homebridge';
2
+ import type { SmartHQPlatform, devicesConfig, SmartHqContext } from '../../../index.js';
3
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
4
+ export declare class OpalProgressSvcManager extends OpalDeviceBase {
5
+ readonly platform: SmartHQPlatform;
6
+ accessory: PlatformAccessory<SmartHqContext>;
7
+ readonly device: SmartHqContext['device'] & devicesConfig;
8
+ serviceName: string;
9
+ service: Service | null;
10
+ opalProductionLimit?: number;
11
+ constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
12
+ private createService;
13
+ updateCharacteristic(characteristic: any, value: any): void;
14
+ hasService(): boolean;
15
+ setEnabled(enabled: boolean): void;
16
+ processProductionProgress(): Promise<number>;
17
+ updateProductionLimit(newLimit: number): void;
18
+ private getProductionValue;
19
+ }
20
+ //# sourceMappingURL=OpalProgressSvcManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalProgressSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalProgressSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAO3E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,sBAAuB,SAAQ,cAAc;IAKtD,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IANpD,WAAW,EAAE,MAAM,CAAkB;IACrC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAO;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAW;gBAEnC,QAAQ,EAAE,eAAe,EAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC1C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAkB3D,OAAO,CAAC,aAAa;IAyCrB,oBAAoB,CAAC,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAO3D,UAAU,IAAI,OAAO;IAKrB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASrB,yBAAyB;IAuBtC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;YAM/B,kBAAkB;CAiBjC"}
@@ -0,0 +1,121 @@
1
+ import { Buffer } from 'node:buffer';
2
+ import { ERD_TYPES } from '../../../index.js';
3
+ import { OpalDeviceBase } from '../OpalDeviceBase.js';
4
+ export class OpalProgressSvcManager extends OpalDeviceBase {
5
+ platform;
6
+ accessory;
7
+ device;
8
+ serviceName = 'Opal Progress';
9
+ service = null;
10
+ opalProductionLimit = Infinity;
11
+ constructor(platform, accessory, device) {
12
+ super(platform, accessory, device);
13
+ this.platform = platform;
14
+ this.accessory = accessory;
15
+ this.device = device;
16
+ if (platform.config.options?.opalProductionLimit) {
17
+ this.createService();
18
+ this.opalProductionLimit = platform.config.options?.opalProductionLimit;
19
+ }
20
+ else {
21
+ // If the service exists but condition is false, remove it
22
+ const existingService = this.accessory.getService(this.serviceName);
23
+ if (existingService) {
24
+ this.accessory.removeService(existingService);
25
+ }
26
+ this.opalProductionLimit = Infinity;
27
+ }
28
+ }
29
+ // Create the service and configure it
30
+ createService() {
31
+ // Check if service already exists
32
+ const existingService = this.accessory.getService(this.serviceName);
33
+ // Remove existing service if it exists
34
+ if (existingService) {
35
+ this.accessory.removeService(existingService);
36
+ }
37
+ // Create new service
38
+ this.service = this.accessory.addService(this.platform.Service.Fanv2, this.serviceName);
39
+ // Configure Active characteristic
40
+ this.service.getCharacteristic(this.platform.Characteristic.Active)
41
+ .setProps({
42
+ perms: ["ev" /* Perms.EVENTS */, "pr" /* Perms.PAIRED_READ */],
43
+ });
44
+ // Configure RotationSpeed characteristic
45
+ this.service.getCharacteristic(this.platform.Characteristic.RotationSpeed)
46
+ .setProps({
47
+ format: "int" /* Formats.INT */,
48
+ unit: "percentage" /* Units.PERCENTAGE */,
49
+ minStep: 1,
50
+ minValue: 0,
51
+ maxValue: 100,
52
+ perms: ["ev" /* Perms.EVENTS */, "pr" /* Perms.PAIRED_READ */],
53
+ })
54
+ .removeOnGet()
55
+ .removeOnSet()
56
+ .on('change', async (chg) => {
57
+ if (chg.oldValue !== 100 && chg.newValue === 100) {
58
+ const notificationPath = this.platform.config.options?.oplHKCProgressCompleteNotificationPath;
59
+ if (notificationPath) {
60
+ await this.sendHomeKitControllerNotification(notificationPath);
61
+ }
62
+ }
63
+ });
64
+ }
65
+ // Update characteristics if service exists
66
+ updateCharacteristic(characteristic, value) {
67
+ if (this.service) {
68
+ this.service.updateCharacteristic(characteristic, value);
69
+ }
70
+ }
71
+ // Check if service exists
72
+ hasService() {
73
+ return this.service !== null;
74
+ }
75
+ // Enable/disable the service based on a new condition
76
+ setEnabled(enabled) {
77
+ if (enabled && !this.service) {
78
+ this.createService();
79
+ }
80
+ else if (!enabled && this.service) {
81
+ this.accessory.removeService(this.service);
82
+ this.service = null;
83
+ }
84
+ }
85
+ async processProductionProgress() {
86
+ try {
87
+ const [productionValueProgressBar, productionValueMinutes] = await this.getProductionValue();
88
+ this.service?.updateCharacteristic(this.platform.Characteristic.RotationSpeed, Math.min(productionValueProgressBar, 100));
89
+ this.service?.updateCharacteristic(this.platform.Characteristic.Active, productionValueMinutes > 0 ? 1 : 0);
90
+ return productionValueMinutes;
91
+ }
92
+ catch (err) {
93
+ const typedErr = err;
94
+ this.platform.errorLog(`Monitor error: ${typedErr.message}`);
95
+ return 0;
96
+ }
97
+ }
98
+ // Update production limit
99
+ updateProductionLimit(newLimit) {
100
+ this.opalProductionLimit = newLimit;
101
+ this.platform.debugLog(`Updated production limit to: ${newLimit}`);
102
+ }
103
+ // Get current production value
104
+ async getProductionValue() {
105
+ try {
106
+ const erdVal = await this.readErd(ERD_TYPES.OIM_PRODUCTION);
107
+ const productionValueMinutes = Buffer.from(erdVal, 'hex').readUInt8(0);
108
+ const completionistMsg = productionValueMinutes > 100 ? `, Completion: ${productionValueMinutes}` : '';
109
+ this.platform.debugSuccessLog(`Production: ${productionValueMinutes}, Limit: ${this.opalProductionLimit}${completionistMsg}`);
110
+ const productionValueProgressBar = Math.floor((100 / this.opalProductionLimit) * productionValueMinutes);
111
+ return [productionValueProgressBar, productionValueMinutes];
112
+ }
113
+ catch (error) {
114
+ const typedErr = error;
115
+ this.platform.errorLog(`Failed to read production value: ${typedErr.message}`);
116
+ // Default to 0 if there's an error
117
+ return [0, 0];
118
+ }
119
+ }
120
+ }
121
+ //# sourceMappingURL=OpalProgressSvcManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalProgressSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalProgressSvcManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { PlatformAccessory, Service } from 'homebridge';
2
+ import type { SmartHQPlatform } from '../../../../platform.js';
3
+ import type { devicesConfig, SmartHqContext } from '../../../../settings.js';
4
+ import { OpalDeviceBase } from '../../OpalDeviceBase.js';
5
+ export declare class OpalAddWaterStatusSvcManager extends OpalDeviceBase {
6
+ service: Service;
7
+ private serviceName;
8
+ AddWaterCurrentStatus: {
9
+ readonly WATER_OK: 0;
10
+ readonly ADD_WATER: 1;
11
+ };
12
+ addWaterCurrentStatus: 0 | 1;
13
+ constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
14
+ setAddWaterCurrentStatus(updateValue: 0 | 1): void;
15
+ getService(): Service;
16
+ }
17
+ //# sourceMappingURL=OpalAddWaterStatusSvcManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalAddWaterStatusSvcManager.d.ts","sourceRoot":"","sources":["../../../../../src/devices/OpalIceMaker/Managers/StatusManagers/OpalAddWaterStatusSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,4BAA6B,SAAQ,cAAc;IACvD,OAAO,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,WAAW,CAAqB;IACjC,qBAAqB;;;MAGlB;IACH,qBAAqB,EAAE,CAAC,GAAG,CAAC,CAAsC;gBAGvE,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAqBlD,wBAAwB,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;IAM3C,UAAU,IAAI,OAAO;CAGtB"}
@@ -0,0 +1,35 @@
1
+ import { OpalDeviceBase } from '../../OpalDeviceBase.js';
2
+ export class OpalAddWaterStatusSvcManager extends OpalDeviceBase {
3
+ service;
4
+ serviceName = 'Add Water Sensor';
5
+ AddWaterCurrentStatus = {
6
+ WATER_OK: 0,
7
+ ADD_WATER: 1,
8
+ };
9
+ addWaterCurrentStatus = this.AddWaterCurrentStatus.WATER_OK;
10
+ constructor(platform, accessory, device) {
11
+ super(platform, accessory, device);
12
+ this.service = this.accessory.getService(this.serviceName)
13
+ || this.accessory.addService(this.platform.Service.ContactSensor, this.serviceName, 'opal-add-water-sensor');
14
+ this.service
15
+ .getCharacteristic(this.platform.Characteristic.ContactSensorState)
16
+ .onGet(() => this.addWaterCurrentStatus)
17
+ .on('change', async (chg) => {
18
+ if (chg.oldValue === this.AddWaterCurrentStatus.WATER_OK && chg.newValue === this.AddWaterCurrentStatus.ADD_WATER) {
19
+ const notificationPath = this.platform.config.options?.oplHKCAddWaterNotificationPath;
20
+ if (notificationPath) {
21
+ await this.sendHomeKitControllerNotification(notificationPath);
22
+ }
23
+ }
24
+ });
25
+ }
26
+ setAddWaterCurrentStatus(updateValue) {
27
+ this.addWaterCurrentStatus = updateValue;
28
+ // Stimulate on change handler for native notification
29
+ this.service.getCharacteristic(this.platform.Characteristic.ContactSensorState).setValue(updateValue);
30
+ }
31
+ getService() {
32
+ return this.service;
33
+ }
34
+ }
35
+ //# sourceMappingURL=OpalAddWaterStatusSvcManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpalAddWaterStatusSvcManager.js","sourceRoot":"","sources":["../../../../../src/devices/OpalIceMaker/Managers/StatusManagers/OpalAddWaterStatusSvcManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,OAAO,4BAA6B,SAAQ,cAAc;IACvD,OAAO,CAAS;IACf,WAAW,GAAG,kBAAkB,CAAA;IACjC,qBAAqB,GAAG;QAC7B,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;KACJ,CAAA;IACH,qBAAqB,GAAU,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAA;IAEzE,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;eACrD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAA;QAE9G,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aAClE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC;aACvC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC1B,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,qBAAqB,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC;gBAClH,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAA;gBAErF,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,IAAI,CAAC,iCAAiC,CAAC,gBAAgB,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACN,CAAC;IAED,wBAAwB,CAAC,WAAkB;QACzC,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAA;QACxC,sDAAsD;QACtD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACvG,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}