@homebridge-plugins/homebridge-smarthq 0.5.0-beta.5 → 0.5.0-beta.7
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.
- package/.github/ISSUE_TEMPLATE/config.yml +1 -1
- package/.github/copilot-instructions.md +90 -0
- package/.github/scripts/branch-helper.sh +41 -0
- package/.github/workflows/beta-release.yml +1 -1
- package/.github/workflows/release.yml +53 -17
- package/CHANGELOG.md +563 -18
- package/README.md +15 -0
- package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.d.ts +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.d.ts.map +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.js +9 -5
- package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.js.map +1 -1
- package/dist/devices/advantium.d.ts +10 -0
- package/dist/devices/advantium.d.ts.map +1 -0
- package/dist/devices/advantium.js +75 -0
- package/dist/devices/advantium.js.map +1 -0
- package/dist/devices/beverageCenter.d.ts +10 -0
- package/dist/devices/beverageCenter.d.ts.map +1 -0
- package/dist/devices/beverageCenter.js +125 -0
- package/dist/devices/beverageCenter.js.map +1 -0
- package/dist/devices/clothesDryer.d.ts +10 -0
- package/dist/devices/clothesDryer.d.ts.map +1 -0
- package/dist/devices/clothesDryer.js +84 -0
- package/dist/devices/clothesDryer.js.map +1 -0
- package/dist/devices/clothesWasher.d.ts +10 -0
- package/dist/devices/clothesWasher.d.ts.map +1 -0
- package/dist/devices/clothesWasher.js +84 -0
- package/dist/devices/clothesWasher.js.map +1 -0
- package/dist/devices/coffeeMaker.d.ts +10 -0
- package/dist/devices/coffeeMaker.d.ts.map +1 -0
- package/dist/devices/coffeeMaker.js +79 -0
- package/dist/devices/coffeeMaker.js.map +1 -0
- package/dist/devices/device.js +1 -1
- package/dist/devices/device.js.map +1 -1
- package/dist/devices/dishwasher.d.ts +0 -1
- package/dist/devices/dishwasher.d.ts.map +1 -1
- package/dist/devices/dishwasher.js +47 -12
- package/dist/devices/dishwasher.js.map +1 -1
- package/dist/devices/hood.d.ts +34 -0
- package/dist/devices/hood.d.ts.map +1 -0
- package/dist/devices/hood.js +306 -0
- package/dist/devices/hood.js.map +1 -0
- package/dist/devices/microwave.d.ts +10 -0
- package/dist/devices/microwave.d.ts.map +1 -0
- package/dist/devices/microwave.js +84 -0
- package/dist/devices/microwave.js.map +1 -0
- package/dist/devices/oven.d.ts.map +1 -1
- package/dist/devices/oven.js +78 -32
- package/dist/devices/oven.js.map +1 -1
- package/dist/devices/refrigerator.d.ts.map +1 -1
- package/dist/devices/refrigerator.js +142 -13
- package/dist/devices/refrigerator.js.map +1 -1
- package/dist/devices/waterFilter.d.ts +10 -0
- package/dist/devices/waterFilter.d.ts.map +1 -0
- package/dist/devices/waterFilter.js +67 -0
- package/dist/devices/waterFilter.js.map +1 -0
- package/dist/devices/waterHeater.d.ts +10 -0
- package/dist/devices/waterHeater.d.ts.map +1 -0
- package/dist/devices/waterHeater.js +95 -0
- package/dist/devices/waterHeater.js.map +1 -0
- package/dist/devices/waterSoftener.d.ts +10 -0
- package/dist/devices/waterSoftener.d.ts.map +1 -0
- package/dist/devices/waterSoftener.js +67 -0
- package/dist/devices/waterSoftener.js.map +1 -0
- package/dist/platform.d.ts +10 -0
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +383 -0
- package/dist/platform.js.map +1 -1
- package/dist/settings.d.ts +13 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +3 -0
- package/dist/settings.js.map +1 -1
- package/docs/assets/highlight.css +7 -0
- package/docs/assets/main.js +5 -5
- package/docs/assets/navigation.js +1 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +248 -226
- package/docs/classes/SmartHQPlatform.html +45 -56
- package/docs/hierarchy.html +1 -0
- package/docs/index.html +22 -12
- package/docs/interfaces/DeviceOptions.html +2 -3
- package/docs/interfaces/SmartHQPlatformConfig.html +6 -17
- package/docs/interfaces/SmartHqContext.html +6 -4
- package/docs/interfaces/SmartHqERDResponse.html +7 -8
- package/docs/interfaces/credentials.html +3 -4
- package/docs/interfaces/devicesConfig.html +7 -8
- package/docs/interfaces/options.html +7 -8
- package/docs/media/copilot-instructions.md +90 -0
- package/docs/modules.html +1 -2
- package/docs/variables/API_URL.html +1 -2
- package/docs/variables/ERD_CODES.html +1 -2
- package/docs/variables/ERD_TYPES.html +1 -2
- package/docs/variables/KEEPALIVE_TIMEOUT.html +1 -2
- package/docs/variables/LOGIN_URL.html +2 -3
- package/docs/variables/OAUTH2_CLIENT_ID.html +1 -2
- package/docs/variables/OAUTH2_CLIENT_SECRET.html +1 -2
- package/docs/variables/OAUTH2_REDIRECT_URI.html +1 -2
- package/docs/variables/PLATFORM_NAME.html +2 -3
- package/docs/variables/PLUGIN_NAME.html +2 -3
- package/docs/variables/SECURE_URL.html +2 -3
- package/docs/variables/default.html +1 -0
- package/package.json +21 -28
- package/typedoc.json +0 -4
- package/vitest.config.ts +6 -5
- package/.github/workflows/build.yml +0 -18
- package/.github/workflows/changerelease.yml +0 -11
- package/.github/workflows/labeler.yml +0 -9
- package/.github/workflows/release-drafter.yml +0 -14
- package/docs/assets/dmt/dmt-component-data.js +0 -1
- package/docs/assets/dmt/dmt-components.css +0 -20
- package/docs/assets/dmt/dmt-components.js +0 -67
- package/docs/assets/dmt/dmt-search.cmp +0 -0
- package/docs/assets/dmt/dmt-theme.css +0 -1
- package/docs/functions/default.html +0 -2
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer';
|
|
2
|
-
import { ERD_TYPES } from '../../../index.js';
|
|
3
2
|
import { OpalDeviceBase } from '../OpalDeviceBase.js';
|
|
3
|
+
import { ERD_TYPES } from '../../../index.js';
|
|
4
4
|
export class OpalProgressSvcManager extends OpalDeviceBase {
|
|
5
5
|
platform;
|
|
6
6
|
accessory;
|
|
7
7
|
device;
|
|
8
8
|
advancedOptionQueryStrs = [
|
|
9
9
|
'device=opal&label=Production_Duration_Minutes&indicator=opalProductionLimit&type=number&defaultValue=0&placeholder=Number._0_for_Infinite',
|
|
10
|
-
'device=opal&label=HKC_Progress_Complete_Notification_Path&indicator=oplHKCProgressCompleteNotificationPath'
|
|
10
|
+
'device=opal&label=HKC_Progress_Complete_Notification_Path&indicator=oplHKCProgressCompleteNotificationPath',
|
|
11
11
|
];
|
|
12
12
|
serviceName = 'Opal Progress';
|
|
13
13
|
service = null;
|
|
@@ -45,7 +45,7 @@ export class OpalProgressSvcManager extends OpalDeviceBase {
|
|
|
45
45
|
// Configure Active characteristic
|
|
46
46
|
this.service.getCharacteristic(this.platform.Characteristic.Active)
|
|
47
47
|
.setProps({
|
|
48
|
-
perms: [
|
|
48
|
+
perms: ['ev', 'pr'],
|
|
49
49
|
});
|
|
50
50
|
// Configure RotationSpeed characteristic
|
|
51
51
|
this.service.getCharacteristic(this.platform.Characteristic.RotationSpeed)
|
|
@@ -55,7 +55,7 @@ export class OpalProgressSvcManager extends OpalDeviceBase {
|
|
|
55
55
|
minStep: 1,
|
|
56
56
|
minValue: 0,
|
|
57
57
|
maxValue: 100,
|
|
58
|
-
perms: [
|
|
58
|
+
perms: ['ev', 'pr'],
|
|
59
59
|
})
|
|
60
60
|
.removeOnGet()
|
|
61
61
|
.removeOnSet()
|
|
@@ -92,7 +92,11 @@ export class OpalProgressSvcManager extends OpalDeviceBase {
|
|
|
92
92
|
const productionValueMinutes = Buffer.from(erdVal, 'hex').readUInt8(0);
|
|
93
93
|
const completionistMsg = productionValueMinutes > 100 ? `, Completion: ${productionValueMinutes}` : '';
|
|
94
94
|
this.platform.debugSuccessLog(`Production: ${productionValueMinutes}, Limit: ${this.platform.config.deviceOptions?.opal?.opalProductionLimit}${completionistMsg}`);
|
|
95
|
-
const
|
|
95
|
+
const opalProductionLimit = this.platform.config.deviceOptions?.opal?.opalProductionLimit;
|
|
96
|
+
let productionValueProgressBar = 0;
|
|
97
|
+
if (typeof opalProductionLimit === 'number' && opalProductionLimit > 0) {
|
|
98
|
+
productionValueProgressBar = Math.floor((100 / opalProductionLimit) * productionValueMinutes);
|
|
99
|
+
}
|
|
96
100
|
return [productionValueProgressBar, productionValueMinutes];
|
|
97
101
|
}
|
|
98
102
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalProgressSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalProgressSvcManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"OpalProgressSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalProgressSvcManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 SmartHQAdvantium extends deviceBase {
|
|
6
|
+
readonly platform: SmartHQPlatform;
|
|
7
|
+
readonly device: SmartHqContext['device'] & devicesConfig;
|
|
8
|
+
constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=advantium.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advantium.d.ts","sourceRoot":"","sources":["../../src/devices/advantium.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;IAE5C,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;CAkE5D"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { deviceBase } from './device.js';
|
|
2
|
+
export class SmartHQAdvantium extends deviceBase {
|
|
3
|
+
platform;
|
|
4
|
+
device;
|
|
5
|
+
constructor(platform, accessory, device) {
|
|
6
|
+
super(platform, accessory, device);
|
|
7
|
+
this.platform = platform;
|
|
8
|
+
this.device = device;
|
|
9
|
+
this.debugLog(`Advantium Features: ${JSON.stringify(accessory.context.device.features)}`);
|
|
10
|
+
// Advantium Light
|
|
11
|
+
const light = this.accessory.getService('Advantium Light') ?? this.accessory.addService(this.platform.Service.Lightbulb, 'Advantium Light', 'AdvantiumLight');
|
|
12
|
+
light.setCharacteristic(this.platform.Characteristic.Name, 'Advantium Light');
|
|
13
|
+
light
|
|
14
|
+
.getCharacteristic(this.platform.Characteristic.On)
|
|
15
|
+
.onGet(async () => {
|
|
16
|
+
try {
|
|
17
|
+
// TODO: Implement light state ERD
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
this.warnLog?.(`Advantium Light error: ${error?.message ?? error}`);
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
.onSet(async (value) => {
|
|
26
|
+
try {
|
|
27
|
+
// TODO: Implement light control ERD
|
|
28
|
+
this.debugLog(`Advantium Light set to: ${value}`);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
this.warnLog?.(`Advantium Light set error: ${error?.message ?? error}`);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
// Advantium Temperature Sensor
|
|
35
|
+
const tempSensor = this.accessory.getService('Advantium Temperature') ?? this.accessory.addService(this.platform.Service.TemperatureSensor, 'Advantium Temperature', 'AdvantiumTemp');
|
|
36
|
+
tempSensor.setCharacteristic(this.platform.Characteristic.Name, 'Advantium Temperature');
|
|
37
|
+
tempSensor
|
|
38
|
+
.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
|
|
39
|
+
.onGet(async () => {
|
|
40
|
+
try {
|
|
41
|
+
// TODO: Implement current temperature ERD
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
this.warnLog?.(`Advantium Temperature error: ${error?.message ?? error}`);
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// Advantium Running State (Switch)
|
|
50
|
+
const runningSwitch = this.accessory.getService('Advantium Running') ?? this.accessory.addService(this.platform.Service.Switch, 'Advantium Running', 'AdvantiumRunning');
|
|
51
|
+
runningSwitch.setCharacteristic(this.platform.Characteristic.Name, 'Advantium Running');
|
|
52
|
+
runningSwitch
|
|
53
|
+
.getCharacteristic(this.platform.Characteristic.On)
|
|
54
|
+
.onGet(async () => {
|
|
55
|
+
try {
|
|
56
|
+
// TODO: Implement running state ERD
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
this.warnLog?.(`Advantium Running error: ${error?.message ?? error}`);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
.onSet(async (value) => {
|
|
65
|
+
try {
|
|
66
|
+
// TODO: Implement running control ERD
|
|
67
|
+
this.debugLog(`Advantium Running set to: ${value}`);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
this.warnLog?.(`Advantium Running set error: ${error?.message ?? error}`);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=advantium.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advantium.js","sourceRoot":"","sources":["../../src/devices/advantium.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 SmartHQBeverageCenter extends deviceBase {
|
|
6
|
+
readonly platform: SmartHQPlatform;
|
|
7
|
+
readonly device: SmartHqContext['device'] & devicesConfig;
|
|
8
|
+
constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=beverageCenter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beverageCenter.d.ts","sourceRoot":"","sources":["../../src/devices/beverageCenter.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,qBAAsB,SAAQ,UAAU;IAEjD,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;CAqH5D"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { deviceBase } from './device.js';
|
|
2
|
+
export class SmartHQBeverageCenter extends deviceBase {
|
|
3
|
+
platform;
|
|
4
|
+
device;
|
|
5
|
+
constructor(platform, accessory, device) {
|
|
6
|
+
super(platform, accessory, device);
|
|
7
|
+
this.platform = platform;
|
|
8
|
+
this.device = device;
|
|
9
|
+
this.debugLog(`Beverage Center Features: ${JSON.stringify(accessory.context.device.features)}`);
|
|
10
|
+
// Beverage Center Temperature Sensor
|
|
11
|
+
const tempSensor = this.accessory.getService('Beverage Temperature') ?? this.accessory.addService(this.platform.Service.TemperatureSensor, 'Beverage Temperature', 'BeverageTemp');
|
|
12
|
+
tempSensor.setCharacteristic(this.platform.Characteristic.Name, 'Beverage Temperature');
|
|
13
|
+
tempSensor
|
|
14
|
+
.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
|
|
15
|
+
.onGet(async () => {
|
|
16
|
+
try {
|
|
17
|
+
// TODO: Implement current temperature ERD
|
|
18
|
+
return 4;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
this.warnLog?.(`Beverage Center Temperature error: ${error?.message ?? error}`);
|
|
22
|
+
return 4;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
// Beverage Center Door Sensor
|
|
26
|
+
const doorSensor = this.accessory.getService('Beverage Door') ?? this.accessory.addService(this.platform.Service.ContactSensor, 'Beverage Door', 'BeverageDoor');
|
|
27
|
+
doorSensor.setCharacteristic(this.platform.Characteristic.Name, 'Beverage Door');
|
|
28
|
+
doorSensor
|
|
29
|
+
.getCharacteristic(this.platform.Characteristic.ContactSensorState)
|
|
30
|
+
.onGet(async () => {
|
|
31
|
+
try {
|
|
32
|
+
// TODO: Implement door status ERD
|
|
33
|
+
return this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
this.warnLog?.(`Beverage Center Door error: ${error?.message ?? error}`);
|
|
37
|
+
return this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// Beverage Center Thermostat Control
|
|
41
|
+
const thermostat = this.accessory.getService('Beverage Thermostat') ?? this.accessory.addService(this.platform.Service.Thermostat, 'Beverage Thermostat', 'BeverageThermostat');
|
|
42
|
+
thermostat.setCharacteristic(this.platform.Characteristic.Name, 'Beverage Thermostat');
|
|
43
|
+
thermostat
|
|
44
|
+
.getCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState)
|
|
45
|
+
.onGet(async () => {
|
|
46
|
+
try {
|
|
47
|
+
// TODO: Implement cooling state ERD
|
|
48
|
+
return this.platform.Characteristic.CurrentHeatingCoolingState.COOL;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
this.warnLog?.(`Beverage Center State error: ${error?.message ?? error}`);
|
|
52
|
+
return this.platform.Characteristic.CurrentHeatingCoolingState.OFF;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
thermostat
|
|
56
|
+
.getCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState)
|
|
57
|
+
.setProps({
|
|
58
|
+
validValues: [this.platform.Characteristic.TargetHeatingCoolingState.OFF, this.platform.Characteristic.TargetHeatingCoolingState.COOL],
|
|
59
|
+
})
|
|
60
|
+
.onGet(async () => {
|
|
61
|
+
try {
|
|
62
|
+
// TODO: Implement target state ERD
|
|
63
|
+
return this.platform.Characteristic.TargetHeatingCoolingState.COOL;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
this.warnLog?.(`Beverage Center Target State error: ${error?.message ?? error}`);
|
|
67
|
+
return this.platform.Characteristic.TargetHeatingCoolingState.OFF;
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
.onSet(async (value) => {
|
|
71
|
+
try {
|
|
72
|
+
// TODO: Implement target state control ERD
|
|
73
|
+
this.debugLog(`Beverage Center set to: ${value}`);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
this.warnLog?.(`Beverage Center Target State set error: ${error?.message ?? error}`);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
thermostat
|
|
80
|
+
.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
|
|
81
|
+
.onGet(async () => {
|
|
82
|
+
try {
|
|
83
|
+
// TODO: Implement current temperature ERD
|
|
84
|
+
return 4;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
this.warnLog?.(`Beverage Center Current Temp error: ${error?.message ?? error}`);
|
|
88
|
+
return 4;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
thermostat
|
|
92
|
+
.getCharacteristic(this.platform.Characteristic.TargetTemperature)
|
|
93
|
+
.setProps({
|
|
94
|
+
minValue: 2,
|
|
95
|
+
maxValue: 8,
|
|
96
|
+
minStep: 1,
|
|
97
|
+
})
|
|
98
|
+
.onGet(async () => {
|
|
99
|
+
try {
|
|
100
|
+
// TODO: Implement target temperature ERD
|
|
101
|
+
return 4;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
this.warnLog?.(`Beverage Center Target Temp error: ${error?.message ?? error}`);
|
|
105
|
+
return 4;
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
.onSet(async (value) => {
|
|
109
|
+
try {
|
|
110
|
+
// TODO: Implement target temperature control ERD
|
|
111
|
+
this.debugLog(`Beverage Center temperature set to: ${value}°C`);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
this.warnLog?.(`Beverage Center Target Temp set error: ${error?.message ?? error}`);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
thermostat
|
|
118
|
+
.getCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits)
|
|
119
|
+
.onGet(async () => this.platform.Characteristic.TemperatureDisplayUnits.CELSIUS)
|
|
120
|
+
.onSet(async (value) => {
|
|
121
|
+
this.debugLog(`Beverage Center display units set to: ${value}`);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=beverageCenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beverageCenter.js","sourceRoot":"","sources":["../../src/devices/beverageCenter.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IAExC;IAEA;IAHX,YACW,QAAyB,EAClC,SAA4C,EACnC,MAAgD;QAEzD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAJzB,aAAQ,GAAR,QAAQ,CAAiB;QAEzB,WAAM,GAAN,MAAM,CAA0C;QAGzD,IAAI,CAAC,QAAQ,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAE/F,qCAAqC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,cAAc,CAAC,CAAA;QAClL,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAA;QACvF,UAAU;aACP,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aAClE,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,OAAO,CAAC,CAAA;YACV,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC,sCAAsC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;gBAC/E,OAAO,CAAC,CAAA;YACV,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,8BAA8B;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE,cAAc,CAAC,CAAA;QAChK,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;QAChF,UAAU;aACP,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aAClE,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,kCAAkC;gBAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,gBAAgB,CAAA;YACzE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC,+BAA+B,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;gBACxE,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,gBAAgB,CAAA;YACzE,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,qCAAqC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,CAAA;QAC/K,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;QACtF,UAAU;aACP,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;aAC1E,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,oCAAoC;gBACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,IAAI,CAAA;YACrE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC,gCAAgC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;gBACzE,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,GAAG,CAAA;YACpE,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,UAAU;aACP,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC;aACzE,QAAQ,CAAC;YACR,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC;SACvI,CAAC;aACD,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,mCAAmC;gBACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAA;YACpE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC,uCAAuC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;gBAChF,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,GAAG,CAAA;YACnE,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,IAAI,CAAC;gBACH,2CAA2C;gBAC3C,IAAI,CAAC,QAAQ,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAA;YACnD,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC,2CAA2C,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;YACtF,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,UAAU;aACP,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aAClE,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,OAAO,CAAC,CAAA;YACV,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC,uCAAuC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;gBAChF,OAAO,CAAC,CAAA;YACV,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,UAAU;aACP,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;aACjE,QAAQ,CAAC;YACR,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;SACX,CAAC;aACD,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,yCAAyC;gBACzC,OAAO,CAAC,CAAA;YACV,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC,sCAAsC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;gBAC/E,OAAO,CAAC,CAAA;YACV,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,IAAI,CAAC;gBACH,iDAAiD;gBACjD,IAAI,CAAC,QAAQ,CAAC,uCAAuC,KAAK,IAAI,CAAC,CAAA;YACjE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,EAAE,CAAC,0CAA0C,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;YACrF,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,UAAU;aACP,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;aACvE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO,CAAC;aAC/E,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,IAAI,CAAC,QAAQ,CAAC,yCAAyC,KAAK,EAAE,CAAC,CAAA;QACjE,CAAC,CAAC,CAAA;IACN,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CharacteristicValue, PlatformAccessory } from 'homebridge';
|
|
2
|
+
import type { SmartHqContext } from '../settings.js';
|
|
3
|
+
import { deviceBase } from './device.js';
|
|
4
|
+
export declare class SmartHQClothesDryer extends deviceBase {
|
|
5
|
+
private ClothesDryer;
|
|
6
|
+
constructor(platform: any, accessory: PlatformAccessory<SmartHqContext>, device: any);
|
|
7
|
+
handleGetOn(): Promise<CharacteristicValue>;
|
|
8
|
+
handleSetOn(value: CharacteristicValue): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=clothesDryer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clothesDryer.d.ts","sourceRoot":"","sources":["../../src/devices/clothesDryer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,OAAO,CAAC,YAAY,CAEnB;gBAGC,QAAQ,EAAE,GAAG,EACb,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,GAAG;IA4DP,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAY3C,WAAW,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAU7D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { deviceBase } from './device.js';
|
|
2
|
+
export class SmartHQClothesDryer extends deviceBase {
|
|
3
|
+
ClothesDryer;
|
|
4
|
+
constructor(platform, accessory, device) {
|
|
5
|
+
super(platform, accessory, device);
|
|
6
|
+
this.debugLog(`Clothes Dryer Features: ${JSON.stringify(accessory.context.device.features)}`);
|
|
7
|
+
// Initialize ClothesDryer state (restore from cache if available)
|
|
8
|
+
this.ClothesDryer = {
|
|
9
|
+
On: accessory.context.ClothesDryer?.On ?? false,
|
|
10
|
+
};
|
|
11
|
+
// Dryer Running State (Valve)
|
|
12
|
+
const dryerValve = this.accessory.getService('Dryer') ?? this.accessory.addService(this.platform.Service.Valve, 'Dryer', 'Dryer');
|
|
13
|
+
dryerValve.setCharacteristic(this.platform.Characteristic.Name, 'Dryer');
|
|
14
|
+
dryerValve.setCharacteristic(this.platform.Characteristic.ValveType, this.platform.Characteristic.ValveType.GENERIC_VALVE);
|
|
15
|
+
dryerValve
|
|
16
|
+
.getCharacteristic(this.platform.Characteristic.Active)
|
|
17
|
+
.onGet(async () => {
|
|
18
|
+
try {
|
|
19
|
+
return this.ClothesDryer?.On ? this.platform.Characteristic.Active.ACTIVE : this.platform.Characteristic.Active.INACTIVE;
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
this.warnLog?.(`Dryer Active error: ${error?.message ?? error}`);
|
|
23
|
+
return this.platform.Characteristic.Active.INACTIVE;
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
.onSet(this.handleSetOn.bind(this));
|
|
27
|
+
dryerValve
|
|
28
|
+
.getCharacteristic(this.platform.Characteristic.InUse)
|
|
29
|
+
.onGet(async () => {
|
|
30
|
+
try {
|
|
31
|
+
return this.ClothesDryer?.On ? this.platform.Characteristic.InUse.IN_USE : this.platform.Characteristic.InUse.NOT_IN_USE;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
this.warnLog?.(`Dryer InUse error: ${error?.message ?? error}`);
|
|
35
|
+
return this.platform.Characteristic.InUse.NOT_IN_USE;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
// Door Lock
|
|
39
|
+
const doorLock = this.accessory.getService('Dryer Door Lock') ?? this.accessory.addService(this.platform.Service.LockMechanism, 'Dryer Door Lock', 'DryerDoorLock');
|
|
40
|
+
doorLock.setCharacteristic(this.platform.Characteristic.Name, 'Dryer Door Lock');
|
|
41
|
+
doorLock
|
|
42
|
+
.getCharacteristic(this.platform.Characteristic.LockCurrentState)
|
|
43
|
+
.onGet(async () => {
|
|
44
|
+
try {
|
|
45
|
+
// TODO: Implement door lock state when ERD available
|
|
46
|
+
return this.platform.Characteristic.LockCurrentState.UNSECURED;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
this.warnLog?.(`Dryer Door Lock error: ${error?.message ?? error}`);
|
|
50
|
+
return this.platform.Characteristic.LockCurrentState.UNSECURED;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
doorLock
|
|
54
|
+
.getCharacteristic(this.platform.Characteristic.LockTargetState)
|
|
55
|
+
.onGet(async () => this.platform.Characteristic.LockTargetState.UNSECURED)
|
|
56
|
+
.onSet(async (value) => {
|
|
57
|
+
this.debugLog(`Dryer Door Lock set to: ${value}`);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async handleGetOn() {
|
|
61
|
+
try {
|
|
62
|
+
// TODO: Replace with actual ERD code for dryer On state if available
|
|
63
|
+
// const erdValue = await this.readErd(ERD_TYPES.CLOTHES_DRYER_ON)
|
|
64
|
+
// return Number.parseInt(erdValue) !== 0
|
|
65
|
+
return this.ClothesDryer?.On ?? false;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
this.warnLog?.(`ClothesDryer handleGetOn error: ${error?.message ?? error}`);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async handleSetOn(value) {
|
|
73
|
+
try {
|
|
74
|
+
// TODO: Replace with actual ERD code for dryer On state if available
|
|
75
|
+
// await this.writeErd(ERD_TYPES.CLOTHES_DRYER_ON, value as boolean)
|
|
76
|
+
this.ClothesDryer.On = value;
|
|
77
|
+
this.accessory.context.ClothesDryer = this.ClothesDryer;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
this.warnLog?.(`ClothesDryer handleSetOn error: ${error?.message ?? error}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=clothesDryer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clothesDryer.js","sourceRoot":"","sources":["../../src/devices/clothesDryer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CharacteristicValue, PlatformAccessory } from 'homebridge';
|
|
2
|
+
import type { SmartHqContext } from '../settings.js';
|
|
3
|
+
import { deviceBase } from './device.js';
|
|
4
|
+
export declare class SmartHQClothesWasher extends deviceBase {
|
|
5
|
+
private ClothesWasher;
|
|
6
|
+
constructor(platform: any, accessory: PlatformAccessory<SmartHqContext>, device: any);
|
|
7
|
+
handleGetOn(): Promise<CharacteristicValue>;
|
|
8
|
+
handleSetOn(value: CharacteristicValue): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=clothesWasher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clothesWasher.d.ts","sourceRoot":"","sources":["../../src/devices/clothesWasher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,OAAO,CAAC,aAAa,CAEpB;gBAGC,QAAQ,EAAE,GAAG,EACb,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,GAAG;IA4DP,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAY3C,WAAW,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAU7D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { deviceBase } from './device.js';
|
|
2
|
+
export class SmartHQClothesWasher extends deviceBase {
|
|
3
|
+
ClothesWasher;
|
|
4
|
+
constructor(platform, accessory, device) {
|
|
5
|
+
super(platform, accessory, device);
|
|
6
|
+
this.debugLog(`Clothes Washer Features: ${JSON.stringify(accessory.context.device.features)}`);
|
|
7
|
+
// Initialize ClothesWasher state (restore from cache if available)
|
|
8
|
+
this.ClothesWasher = {
|
|
9
|
+
On: accessory.context.ClothesWasher?.On ?? false,
|
|
10
|
+
};
|
|
11
|
+
// Washer Running State (Valve)
|
|
12
|
+
const washerValve = this.accessory.getService('Washer') ?? this.accessory.addService(this.platform.Service.Valve, 'Washer', 'Washer');
|
|
13
|
+
washerValve.setCharacteristic(this.platform.Characteristic.Name, 'Washer');
|
|
14
|
+
washerValve.setCharacteristic(this.platform.Characteristic.ValveType, this.platform.Characteristic.ValveType.GENERIC_VALVE);
|
|
15
|
+
washerValve
|
|
16
|
+
.getCharacteristic(this.platform.Characteristic.Active)
|
|
17
|
+
.onGet(async () => {
|
|
18
|
+
try {
|
|
19
|
+
return this.ClothesWasher?.On ? this.platform.Characteristic.Active.ACTIVE : this.platform.Characteristic.Active.INACTIVE;
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
this.warnLog(`Washer Active error: ${error?.message ?? error}`);
|
|
23
|
+
return this.platform.Characteristic.Active.INACTIVE;
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
.onSet(this.handleSetOn.bind(this));
|
|
27
|
+
washerValve
|
|
28
|
+
.getCharacteristic(this.platform.Characteristic.InUse)
|
|
29
|
+
.onGet(async () => {
|
|
30
|
+
try {
|
|
31
|
+
return this.ClothesWasher?.On ? this.platform.Characteristic.InUse.IN_USE : this.platform.Characteristic.InUse.NOT_IN_USE;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
this.warnLog(`Washer InUse error: ${error?.message ?? error}`);
|
|
35
|
+
return this.platform.Characteristic.InUse.NOT_IN_USE;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
// Door Lock
|
|
39
|
+
const doorLock = this.accessory.getService('Washer Door Lock') ?? this.accessory.addService(this.platform.Service.LockMechanism, 'Washer Door Lock', 'WasherDoorLock');
|
|
40
|
+
doorLock.setCharacteristic(this.platform.Characteristic.Name, 'Washer Door Lock');
|
|
41
|
+
doorLock
|
|
42
|
+
.getCharacteristic(this.platform.Characteristic.LockCurrentState)
|
|
43
|
+
.onGet(async () => {
|
|
44
|
+
try {
|
|
45
|
+
// TODO: Implement door lock state when ERD available
|
|
46
|
+
return this.platform.Characteristic.LockCurrentState.UNSECURED;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
this.warnLog(`Washer Door Lock error: ${error?.message ?? error}`);
|
|
50
|
+
return this.platform.Characteristic.LockCurrentState.UNSECURED;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
doorLock
|
|
54
|
+
.getCharacteristic(this.platform.Characteristic.LockTargetState)
|
|
55
|
+
.onGet(async () => this.platform.Characteristic.LockTargetState.UNSECURED)
|
|
56
|
+
.onSet(async (value) => {
|
|
57
|
+
this.debugLog(`Washer Door Lock set to: ${value}`);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
async handleGetOn() {
|
|
61
|
+
try {
|
|
62
|
+
// TODO: Replace with actual ERD code for washer On state if available
|
|
63
|
+
// const erdValue = await this.readErd(ERD_TYPES.CLOTHES_WASHER_ON)
|
|
64
|
+
// return Number.parseInt(erdValue) !== 0
|
|
65
|
+
return this.ClothesWasher?.On ?? false;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
this.warnLog(`ClothesWasher handleGetOn error: ${error?.message ?? error}`);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async handleSetOn(value) {
|
|
73
|
+
try {
|
|
74
|
+
// TODO: Replace with actual ERD code for washer On state if available
|
|
75
|
+
// await this.writeErd(ERD_TYPES.CLOTHES_WASHER_ON, value as boolean)
|
|
76
|
+
this.ClothesWasher.On = value;
|
|
77
|
+
this.accessory.context.ClothesWasher = this.ClothesWasher;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
this.warnLog(`ClothesWasher handleSetOn error: ${error?.message ?? error}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=clothesWasher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clothesWasher.js","sourceRoot":"","sources":["../../src/devices/clothesWasher.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAC1C,aAAa,CAEpB;IAED,YACE,QAAa,EACb,SAA4C,EAC5C,MAAW;QAEX,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAClC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAE9F,mEAAmE;QACnE,IAAI,CAAC,aAAa,GAAG;YACnB,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,IAAI,KAAK;SACjD,CAAA;QAED,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACrI,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC1E,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QAC3H,WAAW;aACR,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;aACtD,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAA;YAC3H,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,wBAAwB,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;gBAC/D,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAA;YACrD,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAErC,WAAW;aACR,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;aACrD,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAA;YAC3H,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,uBAAuB,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;gBAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAA;YACtD,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,YAAY;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;QACtK,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;QACjF,QAAQ;aACL,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;aAChE,KAAK,CAAC,KAAK,IAAI,EAAE;YAChB,IAAI,CAAC;gBACH,qDAAqD;gBACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAA;YAChE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,2BAA2B,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;gBAClE,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAA;YAChE,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,QAAQ;aACL,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC;aAC/D,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC;aACzE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,IAAI,CAAC,QAAQ,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,sEAAsE;YACtE,mEAAmE;YACnE,yCAAyC;YACzC,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,KAAK,CAAA;QACxC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,oCAAoC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;YAC3E,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAA0B;QAC1C,IAAI,CAAC;YACH,sEAAsE;YACtE,qEAAqE;YACrE,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,KAAK,CAAA;YAC7B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QAC3D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,oCAAoC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 SmartHQCoffeeMaker extends deviceBase {
|
|
6
|
+
readonly platform: SmartHQPlatform;
|
|
7
|
+
readonly device: SmartHqContext['device'] & devicesConfig;
|
|
8
|
+
constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=coffeeMaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coffeeMaker.d.ts","sourceRoot":"","sources":["../../src/devices/coffeeMaker.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,kBAAmB,SAAQ,UAAU;IAE9C,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;CAuE5D"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { deviceBase } from './device.js';
|
|
2
|
+
export class SmartHQCoffeeMaker extends deviceBase {
|
|
3
|
+
platform;
|
|
4
|
+
device;
|
|
5
|
+
constructor(platform, accessory, device) {
|
|
6
|
+
super(platform, accessory, device);
|
|
7
|
+
this.platform = platform;
|
|
8
|
+
this.device = device;
|
|
9
|
+
this.debugLog(`Coffee Maker Features: ${JSON.stringify(accessory.context.device.features)}`);
|
|
10
|
+
// Coffee Maker Brewing State (Valve)
|
|
11
|
+
const brewValve = this.accessory.getService('Coffee Maker') ?? this.accessory.addService(this.platform.Service.Valve, 'Coffee Maker', 'CoffeeMaker');
|
|
12
|
+
brewValve.setCharacteristic(this.platform.Characteristic.Name, 'Coffee Maker');
|
|
13
|
+
brewValve.setCharacteristic(this.platform.Characteristic.ValveType, this.platform.Characteristic.ValveType.GENERIC_VALVE);
|
|
14
|
+
brewValve
|
|
15
|
+
.getCharacteristic(this.platform.Characteristic.Active)
|
|
16
|
+
.onGet(async () => {
|
|
17
|
+
try {
|
|
18
|
+
// TODO: Implement brewing state ERD
|
|
19
|
+
return this.platform.Characteristic.Active.INACTIVE;
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
this.warnLog?.(`Coffee Maker Active error: ${error?.message ?? error}`);
|
|
23
|
+
return this.platform.Characteristic.Active.INACTIVE;
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
.onSet(async (value) => {
|
|
27
|
+
try {
|
|
28
|
+
// TODO: Implement brew control ERD
|
|
29
|
+
this.debugLog(`Coffee Maker brew set to: ${value}`);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
this.warnLog?.(`Coffee Maker brew set error: ${error?.message ?? error}`);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
brewValve
|
|
36
|
+
.getCharacteristic(this.platform.Characteristic.InUse)
|
|
37
|
+
.onGet(async () => {
|
|
38
|
+
try {
|
|
39
|
+
// TODO: Implement brewing state ERD
|
|
40
|
+
return this.platform.Characteristic.InUse.NOT_IN_USE;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
this.warnLog?.(`Coffee Maker InUse error: ${error?.message ?? error}`);
|
|
44
|
+
return this.platform.Characteristic.InUse.NOT_IN_USE;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// Water Level Sensor (Humidity as proxy)
|
|
48
|
+
const waterLevel = this.accessory.getService('Water Level') ?? this.accessory.addService(this.platform.Service.HumiditySensor, 'Water Level', 'WaterLevel');
|
|
49
|
+
waterLevel.setCharacteristic(this.platform.Characteristic.Name, 'Water Level');
|
|
50
|
+
waterLevel
|
|
51
|
+
.getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
|
|
52
|
+
.onGet(async () => {
|
|
53
|
+
try {
|
|
54
|
+
// TODO: Implement water level ERD (0-100%)
|
|
55
|
+
return 100;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
this.warnLog?.(`Coffee Maker Water Level error: ${error?.message ?? error}`);
|
|
59
|
+
return 0;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// Filter/Cleaning Status
|
|
63
|
+
const filterService = this.accessory.getService('Coffee Filter') ?? this.accessory.addService(this.platform.Service.FilterMaintenance, 'Coffee Filter', 'CoffeeFilter');
|
|
64
|
+
filterService.setCharacteristic(this.platform.Characteristic.Name, 'Coffee Filter');
|
|
65
|
+
filterService
|
|
66
|
+
.getCharacteristic(this.platform.Characteristic.FilterChangeIndication)
|
|
67
|
+
.onGet(async () => {
|
|
68
|
+
try {
|
|
69
|
+
// TODO: Implement filter/cleaning status ERD
|
|
70
|
+
return this.platform.Characteristic.FilterChangeIndication.FILTER_OK;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.warnLog?.(`Coffee Filter Status error: ${error?.message ?? error}`);
|
|
74
|
+
return this.platform.Characteristic.FilterChangeIndication.FILTER_OK;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=coffeeMaker.js.map
|