homebridge-smarthq-client 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/Readme.md +138 -0
  3. package/config.schema.json +146 -0
  4. package/dist/index.d.ts +6 -0
  5. package/dist/index.js +9 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/platform.d.ts +40 -0
  8. package/dist/platform.js +243 -0
  9. package/dist/platform.js.map +1 -0
  10. package/dist/refrigerator/controlLock.d.ts +19 -0
  11. package/dist/refrigerator/controlLock.js +85 -0
  12. package/dist/refrigerator/controlLock.js.map +1 -0
  13. package/dist/refrigerator/convertibleDrawer.d.ts +27 -0
  14. package/dist/refrigerator/convertibleDrawer.js +317 -0
  15. package/dist/refrigerator/convertibleDrawer.js.map +1 -0
  16. package/dist/refrigerator/dispenserLight.d.ts +19 -0
  17. package/dist/refrigerator/dispenserLight.js +85 -0
  18. package/dist/refrigerator/dispenserLight.js.map +1 -0
  19. package/dist/refrigerator/energy.d.ts +19 -0
  20. package/dist/refrigerator/energy.js +93 -0
  21. package/dist/refrigerator/energy.js.map +1 -0
  22. package/dist/refrigerator/freezer.d.ts +41 -0
  23. package/dist/refrigerator/freezer.js +188 -0
  24. package/dist/refrigerator/freezer.js.map +1 -0
  25. package/dist/refrigerator/iceMaker.d.ts +19 -0
  26. package/dist/refrigerator/iceMaker.js +81 -0
  27. package/dist/refrigerator/iceMaker.js.map +1 -0
  28. package/dist/refrigerator/interiorLight.d.ts +21 -0
  29. package/dist/refrigerator/interiorLight.js +100 -0
  30. package/dist/refrigerator/interiorLight.js.map +1 -0
  31. package/dist/refrigerator/refrigerator.d.ts +41 -0
  32. package/dist/refrigerator/refrigerator.js +204 -0
  33. package/dist/refrigerator/refrigerator.js.map +1 -0
  34. package/dist/refrigerator/refrigeratorAlerts.d.ts +36 -0
  35. package/dist/refrigerator/refrigeratorAlerts.js +204 -0
  36. package/dist/refrigerator/refrigeratorAlerts.js.map +1 -0
  37. package/dist/refrigerator/sabbathMode.d.ts +20 -0
  38. package/dist/refrigerator/sabbathMode.js +91 -0
  39. package/dist/refrigerator/sabbathMode.js.map +1 -0
  40. package/dist/refrigerator/temperatureUnits.d.ts +21 -0
  41. package/dist/refrigerator/temperatureUnits.js +147 -0
  42. package/dist/refrigerator/temperatureUnits.js.map +1 -0
  43. package/dist/refrigerator/turboCoolMode.d.ts +23 -0
  44. package/dist/refrigerator/turboCoolMode.js +134 -0
  45. package/dist/refrigerator/turboCoolMode.js.map +1 -0
  46. package/dist/refrigerator/waterFilter.d.ts +19 -0
  47. package/dist/refrigerator/waterFilter.js +89 -0
  48. package/dist/refrigerator/waterFilter.js.map +1 -0
  49. package/dist/refrigeratorServices.d.ts +5 -0
  50. package/dist/refrigeratorServices.js +54 -0
  51. package/dist/refrigeratorServices.js.map +1 -0
  52. package/dist/settings.d.ts +12 -0
  53. package/dist/settings.js +13 -0
  54. package/dist/settings.js.map +1 -0
  55. package/dist/smartHqApi.d.ts +29 -0
  56. package/dist/smartHqApi.js +267 -0
  57. package/dist/smartHqApi.js.map +1 -0
  58. package/dist/smarthq-types.d.ts +29 -0
  59. package/dist/smarthq-types.js +2 -0
  60. package/dist/smarthq-types.js.map +1 -0
  61. package/eslint.config.js +12 -0
  62. package/images/homebridge.svg +1 -0
  63. package/package.json +61 -0
  64. package/src/@types/homebridge-lib.d.ts +14 -0
  65. package/src/index.ts +11 -0
  66. package/src/platform.ts +300 -0
  67. package/src/refrigerator/controlLock.ts +103 -0
  68. package/src/refrigerator/convertibleDrawer.ts +381 -0
  69. package/src/refrigerator/dispenserLight.ts +103 -0
  70. package/src/refrigerator/energy.ts +106 -0
  71. package/src/refrigerator/freezer.ts +227 -0
  72. package/src/refrigerator/iceMaker.ts +100 -0
  73. package/src/refrigerator/interiorLight.ts +118 -0
  74. package/src/refrigerator/refrigerator.ts +241 -0
  75. package/src/refrigerator/refrigeratorAlerts.ts +228 -0
  76. package/src/refrigerator/sabbathMode.ts +111 -0
  77. package/src/refrigerator/temperatureUnits.ts +178 -0
  78. package/src/refrigerator/turboCoolMode.ts +164 -0
  79. package/src/refrigerator/waterFilter.ts +107 -0
  80. package/src/refrigeratorServices.ts +60 -0
  81. package/src/settings.ts +14 -0
  82. package/src/smartHqApi.ts +305 -0
  83. package/src/smarthq-types.ts +31 -0
  84. package/tsconfig.json +24 -0
@@ -0,0 +1,93 @@
1
+ import { SmartHqApi } from '../smartHqApi.js';
2
+ /**
3
+ * Platform Accessory
4
+ * An instance of this class is created for each accessory your platform registers
5
+ * Each accessory may expose multiple services of different service types.
6
+ */
7
+ export class EnergySensor {
8
+ platform;
9
+ accessory;
10
+ deviceServices;
11
+ deviceId;
12
+ smartHqApi;
13
+ log;
14
+ prevKwhReading = 0;
15
+ constructor(platform, accessory, deviceServices, deviceId) {
16
+ this.platform = platform;
17
+ this.accessory = accessory;
18
+ this.deviceServices = deviceServices;
19
+ this.deviceId = deviceId;
20
+ this.platform = platform;
21
+ this.accessory = accessory;
22
+ this.deviceServices = deviceServices;
23
+ this.deviceId = deviceId;
24
+ this.log = platform.log;
25
+ this.smartHqApi = new SmartHqApi(this.platform);
26
+ //=====================================================================================
27
+ // Check to see if the device has any supported Energy Sensor services
28
+ // If not, then don't add a service for device that doesn't support it
29
+ //=====================================================================================
30
+ if (!this.platform.deviceSupportsThisService(this.deviceServices, 'cloud.smarthq.device.meter', 'cloud.smarthq.service.meter', 'cloud.smarthq.domain.energy')) {
31
+ this.log.info('No supported Energy Sensor services found for device: ' + this.accessory.displayName);
32
+ return;
33
+ }
34
+ this.platform.debug('green', 'Adding an Energy Sensor');
35
+ //=====================================================================================
36
+ // create a new water FilterMaintenance service for the Refrigerator
37
+ // This works in Homebridge and HomeKit has a native FilterMaintenance service type but the Home app does not implement it yet
38
+ // so no sensor/accessory will show up in the Home app for this service type.
39
+ //=====================================================================================
40
+ const displayName = "Watts/hr";
41
+ const energySensor = this.accessory.getService(displayName)
42
+ || this.accessory.addService(this.platform.Service.TemperatureSensor, displayName, 'energy-2');
43
+ energySensor.addOptionalCharacteristic(this.platform.Characteristic.ConfiguredName);
44
+ energySensor.setCharacteristic(this.platform.Characteristic.ConfiguredName, displayName);
45
+ const energyCurrent = energySensor.getCharacteristic(this.platform.Characteristic.CurrentTemperature);
46
+ //=====================================================================================
47
+ // Now modify the properties for each characteristic to make the temperature sensor
48
+ // function as an energy readout in kWh
49
+ //=====================================================================================
50
+ try {
51
+ energyCurrent.setProps({
52
+ unit: 'kWh',
53
+ minValue: -30.0,
54
+ maxValue: 50000000.0,
55
+ minStep: 1.0
56
+ });
57
+ }
58
+ catch (error) {
59
+ this.platform.debug('blue', 'Error setting Energy sensor properties: ' + error);
60
+ }
61
+ //energySensor.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
62
+ // .onGet(this.getEnergyChange.bind(this));
63
+ //=====================================================================================
64
+ // Poll every 1800 seconds for new energy data
65
+ //=====================================================================================
66
+ setInterval(() => {
67
+ this.getEnergyChange().then(temp => {
68
+ energySensor.getCharacteristic(this.platform.Characteristic.CurrentTemperature).updateValue(temp);
69
+ });
70
+ }, 30 * 60 * 1000);
71
+ }
72
+ //=====================================================================================
73
+ async getEnergyChange() {
74
+ let kwhReading = 0;
75
+ for (const service of this.deviceServices) {
76
+ if (service.serviceDeviceType === 'cloud.smarthq.device.meter'
77
+ && service.serviceType === 'cloud.smarthq.service.meter') {
78
+ const state = await this.smartHqApi.getServiceState(this.deviceId, service.serviceId);
79
+ if (state?.meterValue == null) {
80
+ this.platform.debug('blue', 'No state.meterValue returned from getEnergyChange state');
81
+ return false;
82
+ }
83
+ kwhReading = state?.meterValue;
84
+ const intervalDelta = kwhReading - this.prevKwhReading;
85
+ kwhReading = (intervalDelta * 2 - 32) / 1.8; // Interval is 30 minutes so double to get hourly rate
86
+ this.prevKwhReading = state?.meterValue;
87
+ break;
88
+ }
89
+ }
90
+ return kwhReading; // Interval is 30 minutes so double to get hourly rate
91
+ }
92
+ }
93
+ //# sourceMappingURL=energy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"energy.js","sourceRoot":"","sources":["../../src/refrigerator/energy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { CharacteristicValue, PlatformAccessory } from 'homebridge';
2
+ import { SmartHqPlatform } from '../platform.js';
3
+ import { DevService } from '../smarthq-types.js';
4
+ /**
5
+ * Platform Accessory
6
+ * An instance of this class is created for each accessory your platform registers
7
+ * Each accessory may expose multiple services of different service types.
8
+ */
9
+ export declare class Freezer {
10
+ private readonly platform;
11
+ private readonly accessory;
12
+ readonly deviceServices: DevService[];
13
+ readonly deviceId: string;
14
+ private freezerTargetTemperature;
15
+ private readonly smartHqApi;
16
+ private log;
17
+ constructor(platform: SmartHqPlatform, accessory: PlatformAccessory, deviceServices: DevService[], deviceId: string);
18
+ getFreezerTemperature(): Promise<CharacteristicValue>;
19
+ setFreezerTemperature(value: CharacteristicValue): Promise<void>;
20
+ /**
21
+ * Handle requests to get the current value of the "Current Heating Cooling State" characteristic
22
+ */
23
+ getCurrentHeatingCoolingState(): number;
24
+ /**
25
+ * Handle requests to get the current value of the "Target Heating Cooling State" characteristic
26
+ */
27
+ setCurrentHeatingCoolingState(): number;
28
+ /**
29
+ * Handle requests to set the "Target Heating Cooling State" characteristic
30
+ */
31
+ setTargetHeatingCoolingState(value: CharacteristicValue): number;
32
+ /**
33
+ * Handle requests to get the current value of the "Target Temperature" characteristic
34
+ */
35
+ getFreezerTargetTemperature(): number;
36
+ handleTemperatureDisplayUnitsGet(): number;
37
+ /**
38
+ * Handle requests to set the "Temperature Display Units" characteristic
39
+ */
40
+ handleTemperatureDisplayUnitsSet(value: CharacteristicValue): void;
41
+ }
@@ -0,0 +1,188 @@
1
+ import { SmartHqApi } from '../smartHqApi.js';
2
+ /**
3
+ * Platform Accessory
4
+ * An instance of this class is created for each accessory your platform registers
5
+ * Each accessory may expose multiple services of different service types.
6
+ */
7
+ export class Freezer {
8
+ platform;
9
+ accessory;
10
+ deviceServices;
11
+ deviceId;
12
+ // Default temperatures for a GE Profile Refrigerator
13
+ freezerTargetTemperature = -17.77; // Default 0F
14
+ smartHqApi;
15
+ log;
16
+ constructor(platform, accessory, deviceServices, deviceId) {
17
+ this.platform = platform;
18
+ this.accessory = accessory;
19
+ this.deviceServices = deviceServices;
20
+ this.deviceId = deviceId;
21
+ this.platform = platform;
22
+ this.accessory = accessory;
23
+ this.deviceServices = deviceServices;
24
+ this.deviceId = deviceId;
25
+ this.log = platform.log;
26
+ this.smartHqApi = new SmartHqApi(this.platform);
27
+ this.platform.debug('green', 'Adding Freezer Thermostat');
28
+ //=====================================================================================
29
+ // create a new Thermostat service for the Freezer
30
+ //=====================================================================================
31
+ const displayName = "Freezer";
32
+ const freezerThermostat = this.accessory.getService(displayName)
33
+ || this.accessory.addService(this.platform.Service.Thermostat, displayName, 'freezer-thermo1');
34
+ freezerThermostat.setCharacteristic(this.platform.Characteristic.Name, displayName);
35
+ freezerThermostat.addOptionalCharacteristic(this.platform.Characteristic.ConfiguredName);
36
+ freezerThermostat.setCharacteristic(this.platform.Characteristic.ConfiguredName, displayName);
37
+ const currentHeatCoolCharacteristicFreezer = freezerThermostat.getCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState);
38
+ const targetHeatCoolCharacteristicFreezer = freezerThermostat.getCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState);
39
+ const currentTempCharacteristicFreezer = freezerThermostat.getCharacteristic(this.platform.Characteristic.CurrentTemperature);
40
+ const targetTempCharacteristicFreezer = freezerThermostat.getCharacteristic(this.platform.Characteristic.TargetTemperature);
41
+ //=====================================================================================
42
+ // Now modify the properties for each characteristic to match the freezer capabilities
43
+ //=====================================================================================
44
+ currentHeatCoolCharacteristicFreezer.setProps({
45
+ minValue: this.platform.Characteristic.CurrentHeatingCoolingState.OFF,
46
+ maxValue: this.platform.Characteristic.CurrentHeatingCoolingState.COOL,
47
+ validValues: [this.platform.Characteristic.CurrentHeatingCoolingState.COOL]
48
+ });
49
+ targetHeatCoolCharacteristicFreezer.setProps({
50
+ minValue: this.platform.Characteristic.TargetHeatingCoolingState.OFF,
51
+ maxValue: this.platform.Characteristic.TargetHeatingCoolingState.COOL,
52
+ validValues: [this.platform.Characteristic.TargetHeatingCoolingState.COOL]
53
+ });
54
+ try {
55
+ currentTempCharacteristicFreezer.setProps({
56
+ minValue: -21.111, // -6F
57
+ maxValue: -15.0, // 5F
58
+ minStep: 0.1
59
+ });
60
+ }
61
+ catch (error) {
62
+ this.platform.debug('blue', 'Error setting Freezer Current Temperature properties: ' + error);
63
+ }
64
+ //=====================================================================================
65
+ // Change properties for the characteristic for a GE Profile Refrigerator temperature range is -21.111C (-6F) to -15C (5F)
66
+ // Values obtained from SmartHQ Api service config for refrigerator.freezer.temperature see HB log output when debug is enabled
67
+ //=====================================================================================
68
+ try {
69
+ targetTempCharacteristicFreezer.setProps({
70
+ minValue: -21.111,
71
+ maxValue: -15.0,
72
+ minStep: 0.1
73
+ });
74
+ }
75
+ catch (error) {
76
+ this.platform.debug('blue', 'Error setting Freezer Target Temperature properties: ' + error);
77
+ }
78
+ // create handlers for required characteristics
79
+ freezerThermostat.getCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState)
80
+ .onGet(this.getCurrentHeatingCoolingState.bind(this));
81
+ freezerThermostat.getCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState)
82
+ .onGet(this.getCurrentHeatingCoolingState.bind(this))
83
+ .onSet(this.setTargetHeatingCoolingState.bind(this));
84
+ freezerThermostat.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
85
+ .onGet(this.getFreezerTemperature.bind(this));
86
+ freezerThermostat.getCharacteristic(this.platform.Characteristic.TargetTemperature)
87
+ .onGet(this.getFreezerTargetTemperature.bind(this))
88
+ .onSet(this.setFreezerTemperature.bind(this));
89
+ freezerThermostat.getCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits)
90
+ .onGet(this.handleTemperatureDisplayUnitsGet.bind(this))
91
+ .onSet(this.handleTemperatureDisplayUnitsSet.bind(this));
92
+ //=====================================================================================
93
+ // Updating characteristics values asynchronously.
94
+ //=====================================================================================
95
+ setInterval(() => {
96
+ // push the new value to HomeKit
97
+ this.getFreezerTemperature().then(temp => {
98
+ freezerThermostat.getCharacteristic(this.platform.Characteristic.CurrentTemperature).updateValue(temp);
99
+ });
100
+ }, 10000); // every 10 seconds
101
+ }
102
+ //=====================================================================================
103
+ async getFreezerTemperature() {
104
+ let temp = 0;
105
+ for (const service of this.deviceServices) {
106
+ if (service.serviceDeviceType === 'cloud.smarthq.device.refrigerator.freezer'
107
+ && service.serviceType === 'cloud.smarthq.service.temperature') {
108
+ const state = await this.smartHqApi.getServiceState(this.deviceId, service.serviceId);
109
+ if (state?.celsiusConverted == null) {
110
+ this.platform.debug('blue', 'No celsiusConverted returned from getFreezerTemperature state');
111
+ return -17.77; // Return -17.77C (0F) if no data
112
+ }
113
+ temp = state?.celsiusConverted;
114
+ break;
115
+ }
116
+ }
117
+ return temp;
118
+ }
119
+ //=====================================================================================
120
+ async setFreezerTemperature(value) {
121
+ this.platform.debug('blue', "Triggered setTemperature");
122
+ const cmdBody = {
123
+ command: {
124
+ commandType: 'cloud.smarthq.command.temperature.set',
125
+ celsius: value
126
+ },
127
+ kind: 'service#command',
128
+ deviceId: this.deviceId,
129
+ serviceDeviceType: 'cloud.smarthq.device.refrigerator.freezer',
130
+ serviceType: 'cloud.smarthq.service.temperature',
131
+ domainType: 'cloud.smarthq.domain.setpoint'
132
+ };
133
+ const response = await this.smartHqApi.command(JSON.stringify(cmdBody));
134
+ if (response == null) {
135
+ this.platform.debug('blue', 'No response from setFreezerTemperature command');
136
+ return;
137
+ }
138
+ }
139
+ ;
140
+ /**
141
+ * Handle requests to get the current value of the "Current Heating Cooling State" characteristic
142
+ */
143
+ //=====================================================================================
144
+ getCurrentHeatingCoolingState() {
145
+ // set this to a valid value for CurrentHeatingCoolingState
146
+ const currentValue = this.platform.Characteristic.CurrentHeatingCoolingState.COOL;
147
+ return currentValue;
148
+ }
149
+ /**
150
+ * Handle requests to get the current value of the "Target Heating Cooling State" characteristic
151
+ */
152
+ //=====================================================================================
153
+ setCurrentHeatingCoolingState() {
154
+ // set this to a valid value for TargetHeatingCoolingState
155
+ const currentValue = this.platform.Characteristic.TargetHeatingCoolingState.COOL;
156
+ return currentValue;
157
+ }
158
+ /**
159
+ * Handle requests to set the "Target Heating Cooling State" characteristic
160
+ */
161
+ //=====================================================================================
162
+ setTargetHeatingCoolingState(value) {
163
+ // Nothing to do since refrigerator can only be in COOL mode
164
+ const currentValue = this.platform.Characteristic.TargetHeatingCoolingState.COOL;
165
+ this.platform.debug('blue', 'setTargetHeatingCoolingState value: ' + value + ', returning: ' + currentValue);
166
+ return currentValue;
167
+ }
168
+ /**
169
+ * Handle requests to get the current value of the "Target Temperature" characteristic
170
+ */
171
+ getFreezerTargetTemperature() {
172
+ const currentValue = this.freezerTargetTemperature;
173
+ return currentValue;
174
+ }
175
+ handleTemperatureDisplayUnitsGet() {
176
+ // set this to a valid value for TemperatureDisplayUnits
177
+ const currentValue = this.platform.Characteristic.TemperatureDisplayUnits.CELSIUS;
178
+ return currentValue;
179
+ }
180
+ /**
181
+ * Handle requests to set the "Temperature Display Units" characteristic
182
+ */
183
+ //=====================================================================================
184
+ handleTemperatureDisplayUnitsSet(value) {
185
+ this.platform.debug('blue', 'handleTemperatureDisplayUnitsSet value: ' + value);
186
+ }
187
+ }
188
+ //# sourceMappingURL=freezer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freezer.js","sourceRoot":"","sources":["../../src/refrigerator/freezer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C;;;;GAIG;AACH,MAAM,OAAO,OAAO;IAUC;IACA;IACD;IACA;IAXlB,qDAAqD;IAC7C,wBAAwB,GAAG,CAAC,KAAK,CAAC,CAAI,cAAc;IAG3C,UAAU,CAAa;IAChC,GAAG,CAAW;IAEtB,YACmB,QAAyB,EACzB,SAA4B,EAC7B,cAA4B,EAC5B,QAAgB;QAHf,aAAQ,GAAR,QAAQ,CAAiB;QACzB,cAAS,GAAT,SAAS,CAAmB;QAC7B,mBAAc,GAAd,cAAc,CAAc;QAC5B,aAAQ,GAAR,QAAQ,CAAQ;QAEhC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QAExB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QAE1D,uFAAuF;QACvF,kDAAkD;QAClD,wFAAwF;QACxF,MAAM,WAAW,GAAG,SAAS,CAAC;QAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;eAC7D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC/F,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACpF,iBAAiB,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;QACxF,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAE7F,MAAM,oCAAoC,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC;QAC1I,MAAM,mCAAmC,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;QACxI,MAAM,gCAAgC,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QAC9H,MAAM,+BAA+B,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAE5H,uFAAuF;QACvF,uFAAuF;QACvF,uFAAuF;QACvF,oCAAoC,CAAC,QAAQ,CAAC;YAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,GAAG;YACrE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,IAAI;YACtE,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,IAAI,CAAC;SAC5E,CAAC,CAAC;QAEH,mCAAmC,CAAC,QAAQ,CAAC;YAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,GAAG;YACpE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI;YACrE,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC;SAC3E,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,gCAAgC,CAAC,QAAQ,CAAC;gBACxC,QAAQ,EAAE,CAAC,MAAM,EAAW,MAAM;gBAClC,QAAQ,EAAE,CAAC,IAAI,EAAa,KAAK;gBACjC,OAAO,EAAE,GAAG;aACb,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,wDAAwD,GAAG,KAAK,CAAC,CAAC;QAChG,CAAC;QACH,uFAAuF;QACvF,0HAA0H;QAC1H,iIAAiI;QACjI,uFAAuF;QACvF,IAAI,CAAC;YACH,+BAA+B,CAAC,QAAQ,CAAC;gBACvC,QAAQ,EAAE,CAAC,MAAM;gBACjB,QAAQ,EAAE,CAAC,IAAI;gBACf,OAAO,EAAE,GAAG;aACb,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,uDAAuD,GAAG,KAAK,CAAC,CAAC;QAC/F,CAAC;QAED,+CAA+C;QAC/C,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;aACzF,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAExD,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC;aACxF,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACpD,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvD,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aACjF,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhD,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;aAChF,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClD,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhD,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;aACtF,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvD,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3D,uFAAuF;QACvF,kDAAkD;QAClD,uFAAuF;QAEvF,WAAW,CAAC,GAAG,EAAE;YACf,gCAAgC;YAChC,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACzG,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,KAAK,CAAC,CAAC,CAAO,mBAAmB;IAEtC,CAAC;IAEC,uFAAuF;IACvF,KAAK,CAAC,qBAAqB;QACzB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1C,IAAK,OAAO,CAAC,iBAAiB,KAAK,2CAA2C;mBACzE,OAAO,CAAC,WAAW,KAAW,mCAAmC,EAAE,CAAC;gBAEvE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBACtF,IAAI,KAAK,EAAE,gBAAgB,IAAI,IAAI,EAAE,CAAC;oBACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,+DAA+D,CAAC,CAAC;oBAC7F,OAAO,CAAC,KAAK,CAAC,CAAE,iCAAiC;gBACnD,CAAC;gBACD,IAAI,GAAG,KAAK,EAAE,gBAAgB,CAAC;gBAC/B,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,qBAAqB,CAAC,KAA0B;QACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG;YACd,OAAO,EAAE;gBACP,WAAW,EAAE,uCAAuC;gBACpD,OAAO,EAAE,KAAe;aACzB;YACD,IAAI,EAAgB,iBAAiB;YACrC,QAAQ,EAAY,IAAI,CAAC,QAAQ;YACjC,iBAAiB,EAAG,2CAA2C;YAC/D,WAAW,EAAS,mCAAmC;YACvD,UAAU,EAAU,+BAA+B;SACpD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzE,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;IACH,CAAC;IAAA,CAAC;IAED;;MAEE;IACH,uFAAuF;IACvF,6BAA6B;QAE3B,2DAA2D;QAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,IAAI,CAAC;QAElF,OAAO,YAAY,CAAC;IACtB,CAAC;IAGD;;OAEG;IACH,uFAAuF;IACvF,6BAA6B;QAE3B,0DAA0D;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC;QAEjF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,uFAAuF;IACvF,4BAA4B,CAAC,KAA0B;QACrD,4DAA4D;QAE5D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC;QACjF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,sCAAsC,GAAG,KAAK,GAAG,eAAe,GAAG,YAAY,CAAC,CAAC;QAE7G,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IAEH,2BAA2B;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAA;QAElD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEA,gCAAgC;QAE/B,wDAAwD;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC;QAElF,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,uFAAuF;IACvF,gCAAgC,CAAC,KAA0B;QACzD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,0CAA0C,GAAG,KAAK,CAAC,CAAC;IAClF,CAAC;CAGF"}
@@ -0,0 +1,19 @@
1
+ import { CharacteristicValue, PlatformAccessory } from 'homebridge';
2
+ import { SmartHqPlatform } from '../platform.js';
3
+ import { DevService } from '../smarthq-types.js';
4
+ /**
5
+ * Platform Accessory
6
+ * An instance of this class is created for each accessory your platform registers
7
+ * Each accessory may expose multiple services of different service types.
8
+ */
9
+ export declare class IceMaker {
10
+ private readonly platform;
11
+ private readonly accessory;
12
+ readonly deviceServices: DevService[];
13
+ readonly deviceId: string;
14
+ private readonly smartHqApi;
15
+ private log;
16
+ constructor(platform: SmartHqPlatform, accessory: PlatformAccessory, deviceServices: DevService[], deviceId: string);
17
+ geticeMaker(): Promise<CharacteristicValue>;
18
+ seticeMaker(value: CharacteristicValue): Promise<void>;
19
+ }
@@ -0,0 +1,81 @@
1
+ import { SmartHqApi } from '../smartHqApi.js';
2
+ /**
3
+ * Platform Accessory
4
+ * An instance of this class is created for each accessory your platform registers
5
+ * Each accessory may expose multiple services of different service types.
6
+ */
7
+ export class IceMaker {
8
+ platform;
9
+ accessory;
10
+ deviceServices;
11
+ deviceId;
12
+ smartHqApi;
13
+ log;
14
+ constructor(platform, accessory, deviceServices, deviceId) {
15
+ this.platform = platform;
16
+ this.accessory = accessory;
17
+ this.deviceServices = deviceServices;
18
+ this.deviceId = deviceId;
19
+ this.platform = platform;
20
+ this.accessory = accessory;
21
+ this.deviceServices = deviceServices;
22
+ this.deviceId = deviceId;
23
+ this.log = platform.log;
24
+ this.smartHqApi = new SmartHqApi(this.platform);
25
+ if (!this.platform.deviceSupportsThisService(this.deviceServices, 'cloud.smarthq.device.icemaker.1', 'cloud.smarthq.service.toggle', 'cloud.smarthq.domain.power')) {
26
+ this.log.info('No supported Ice Maker service found for device: ' + this.accessory.displayName);
27
+ return;
28
+ }
29
+ this.platform.debug('green', 'Adding Ice Maker Switch');
30
+ //=====================================================================================
31
+ // create a Ice Maker switch for the Refrigerator
32
+ //=====================================================================================
33
+ const displayName = "Ice Maker";
34
+ const iceMaker = this.accessory.getService(displayName)
35
+ || this.accessory.addService(this.platform.Service.Switch, displayName, 'ice-maker-123');
36
+ iceMaker.setCharacteristic(this.platform.Characteristic.Name, displayName);
37
+ iceMaker.addOptionalCharacteristic(this.platform.Characteristic.ConfiguredName);
38
+ iceMaker.setCharacteristic(this.platform.Characteristic.ConfiguredName, displayName);
39
+ iceMaker.getCharacteristic(this.platform.Characteristic.On)
40
+ .onGet(this.geticeMaker.bind(this))
41
+ .onSet(this.seticeMaker.bind(this));
42
+ }
43
+ //=====================================================================================
44
+ async geticeMaker() {
45
+ let isOn = false;
46
+ for (const service of this.deviceServices) {
47
+ if (service.serviceDeviceType === 'cloud.smarthq.device.icemaker.1'
48
+ && service.serviceType === 'cloud.smarthq.service.toggle'
49
+ && service.domainType === 'cloud.smarthq.domain.power') {
50
+ const state = await this.smartHqApi.getServiceState(this.deviceId, service.serviceId);
51
+ if (state?.on == null) {
52
+ this.platform.debug('blue', 'No state.On returned from geticeMaker state');
53
+ return false;
54
+ }
55
+ isOn = state?.on;
56
+ }
57
+ }
58
+ return isOn;
59
+ }
60
+ //=====================================================================================
61
+ async seticeMaker(value) {
62
+ this.platform.debug('blue', "Triggered seticeMaker toggle");
63
+ const cmdBody = {
64
+ command: {
65
+ commandType: 'cloud.smarthq.command.toggle.set',
66
+ on: value
67
+ },
68
+ kind: 'service#command',
69
+ deviceId: this.deviceId,
70
+ serviceDeviceType: 'cloud.smarthq.device.icemaker.1',
71
+ serviceType: 'cloud.smarthq.service.toggle',
72
+ domainType: 'cloud.smarthq.domain.power'
73
+ };
74
+ const response = await this.smartHqApi.command(JSON.stringify(cmdBody));
75
+ if (response == null) {
76
+ this.platform.debug('blue', 'No response from seticeMaker command');
77
+ return;
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=iceMaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iceMaker.js","sourceRoot":"","sources":["../../src/refrigerator/iceMaker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { CharacteristicValue, PlatformAccessory } from 'homebridge';
2
+ import { SmartHqPlatform } from '../platform.js';
3
+ import { DevService } from '../smarthq-types.js';
4
+ /**
5
+ * Platform Accessory
6
+ * An instance of this class is created for each accessory your platform registers
7
+ * Each accessory may expose multiple services of different service types.
8
+ */
9
+ export declare class InteriorLight {
10
+ private readonly platform;
11
+ private readonly accessory;
12
+ readonly deviceServices: DevService[];
13
+ readonly deviceId: string;
14
+ private readonly smartHqApi;
15
+ private log;
16
+ constructor(platform: SmartHqPlatform, accessory: PlatformAccessory, deviceServices: DevService[], deviceId: string);
17
+ getFridgeBackLight(): Promise<CharacteristicValue>;
18
+ setFridgeBackLight(value: CharacteristicValue): Promise<void>;
19
+ getRefrigBrightnessLightOn(): Promise<boolean>;
20
+ setRefrigBrightnessLightOn(value: CharacteristicValue): Promise<void>;
21
+ }
@@ -0,0 +1,100 @@
1
+ import { SmartHqApi } from '../smartHqApi.js';
2
+ /**
3
+ * Platform Accessory
4
+ * An instance of this class is created for each accessory your platform registers
5
+ * Each accessory may expose multiple services of different service types.
6
+ */
7
+ export class InteriorLight {
8
+ platform;
9
+ accessory;
10
+ deviceServices;
11
+ deviceId;
12
+ smartHqApi;
13
+ log;
14
+ constructor(platform, accessory, deviceServices, deviceId) {
15
+ this.platform = platform;
16
+ this.accessory = accessory;
17
+ this.deviceServices = deviceServices;
18
+ this.deviceId = deviceId;
19
+ this.platform = platform;
20
+ this.accessory = accessory;
21
+ this.deviceServices = deviceServices;
22
+ this.deviceId = deviceId;
23
+ this.log = platform.log;
24
+ this.smartHqApi = new SmartHqApi(this.platform);
25
+ if (!this.platform.deviceSupportsThisService(this.deviceServices, 'cloud.smarthq.device.refrigerator', 'cloud.smarthq.service.integer', 'cloud.smarthq.domain.brightness.light')) {
26
+ this.log.info('No supported Interior Light service found for device: ' + this.accessory.displayName);
27
+ return;
28
+ }
29
+ this.platform.debug('green', 'Adding Interior Light Switch');
30
+ // set accessory information
31
+ //=====================================================================================
32
+ // create a new Lightbulb service for the Refrigerator Wall Brightness Light
33
+ //=====================================================================================
34
+ const displayName = "Fridge Light";
35
+ const refrigeratorLight = this.accessory.getService(displayName)
36
+ || this.accessory.addService(this.platform.Service.Lightbulb, displayName, 'brightness-light-2');
37
+ refrigeratorLight.setCharacteristic(this.platform.Characteristic.Name, displayName);
38
+ refrigeratorLight.addOptionalCharacteristic(this.platform.Characteristic.ConfiguredName);
39
+ refrigeratorLight.setCharacteristic(this.platform.Characteristic.ConfiguredName, displayName);
40
+ refrigeratorLight.getCharacteristic(this.platform.Characteristic.On).updateValue(true);
41
+ refrigeratorLight.getCharacteristic(this.platform.Characteristic.On)
42
+ .onGet(this.getRefrigBrightnessLightOn.bind(this))
43
+ .onSet(this.setRefrigBrightnessLightOn.bind(this));
44
+ refrigeratorLight.getCharacteristic(this.platform.Characteristic.Brightness)
45
+ .onGet(this.getFridgeBackLight.bind(this))
46
+ .onSet(this.setFridgeBackLight.bind(this));
47
+ }
48
+ //=====================================================================================
49
+ async getFridgeBackLight() {
50
+ let brightness = 0;
51
+ for (const service of this.deviceServices) {
52
+ if (service.serviceDeviceType === 'cloud.smarthq.device.refrigerator'
53
+ && service.serviceType === 'cloud.smarthq.service.integer') {
54
+ const state = await this.smartHqApi.getServiceState(this.deviceId, service.serviceId);
55
+ if (state?.value == null) {
56
+ this.platform.debug('blue', 'No state.value returned from getFridgeBackLight state');
57
+ return false;
58
+ }
59
+ brightness = state?.value;
60
+ break;
61
+ }
62
+ }
63
+ return brightness;
64
+ }
65
+ //=====================================================================================
66
+ // Set handler for Brightness characteristics for Lightbulb service
67
+ //=====================================================================================
68
+ async setFridgeBackLight(value) {
69
+ const cmdBody = {
70
+ command: {
71
+ commandType: 'cloud.smarthq.command.integer.set',
72
+ value: value
73
+ },
74
+ kind: 'service#command',
75
+ deviceId: this.deviceId,
76
+ serviceDeviceType: 'cloud.smarthq.device.refrigerator',
77
+ serviceType: 'cloud.smarthq.service.integer',
78
+ domainType: 'cloud.smarthq.domain.brightness.light'
79
+ };
80
+ const response = await this.smartHqApi.command(JSON.stringify(cmdBody));
81
+ if (response == null) {
82
+ this.platform.debug('blue', 'No response from setFridgeBackLight command');
83
+ return;
84
+ }
85
+ }
86
+ ;
87
+ //=====================================================================================
88
+ async getRefrigBrightnessLightOn() {
89
+ // SmartHQ API does not have an On/Off command for the refrigerator brightness light only brightness level 0-100
90
+ return true;
91
+ }
92
+ //=====================================================================================
93
+ async setRefrigBrightnessLightOn(value) {
94
+ // SmartHQ API does not have an On/Off command for the refrigerator brightness light only brightness level 0-100
95
+ if (value === false) {
96
+ return;
97
+ }
98
+ }
99
+ }
100
+ //# sourceMappingURL=interiorLight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interiorLight.js","sourceRoot":"","sources":["../../src/refrigerator/interiorLight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { CharacteristicValue, PlatformAccessory } from 'homebridge';
2
+ import { SmartHqPlatform } from '../platform.js';
3
+ import { DevService } from '../smarthq-types.js';
4
+ /**
5
+ * Platform Accessory
6
+ * An instance of this class is created for each accessory your platform registers
7
+ * Each accessory may expose multiple services of different service types.
8
+ */
9
+ export declare class Refrigerator {
10
+ private readonly platform;
11
+ private readonly accessory;
12
+ readonly deviceServices: DevService[];
13
+ readonly deviceId: string;
14
+ private refrigeratorTargetTemperature;
15
+ private readonly smartHqApi;
16
+ private log;
17
+ constructor(platform: SmartHqPlatform, accessory: PlatformAccessory, deviceServices: DevService[], deviceId: string);
18
+ getFridgeTemperature(): Promise<CharacteristicValue>;
19
+ setFridgeTemperature(value: CharacteristicValue): Promise<void>;
20
+ getCurrentHeatingCoolingState(): number;
21
+ /**
22
+ * Handle requests to get the current value of the "Target Heating Cooling State" characteristic
23
+ */
24
+ setCurrentHeatingCoolingState(): number;
25
+ /**
26
+ * Handle requests to set the "Target Heating Cooling State" characteristic
27
+ */
28
+ setTargetHeatingCoolingState(value: CharacteristicValue): number;
29
+ /**
30
+ * Handle requests to get the current value of the "Target Temperature" characteristic
31
+ */
32
+ getTargetTemperatureGet(): number;
33
+ /**
34
+ * Handle requests to get the current value of the "Temperature Display Units" characteristic
35
+ */
36
+ handleTemperatureDisplayUnitsGet(): number;
37
+ /**
38
+ * Handle requests to set the "Temperature Display Units" characteristic
39
+ */
40
+ handleTemperatureDisplayUnitsSet(value: CharacteristicValue): void;
41
+ }