@mp-consulting/homebridge-daikin-cloud 1.5.2 → 1.6.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.
- package/README.md +40 -27
- package/config.schema.json +66 -12
- package/dist/src/accessories/air-conditioning-accessory.js +1 -1
- package/dist/src/accessories/air-conditioning-accessory.js.map +1 -1
- package/dist/src/accessories/altherma-accessory.js +1 -1
- package/dist/src/accessories/altherma-accessory.js.map +1 -1
- package/dist/src/accessories/base-accessory.d.ts +5 -4
- package/dist/src/accessories/base-accessory.d.ts.map +1 -1
- package/dist/src/accessories/base-accessory.js +9 -10
- package/dist/src/accessories/base-accessory.js.map +1 -1
- package/dist/src/api/daikin-api.d.ts +22 -6
- package/dist/src/api/daikin-api.d.ts.map +1 -1
- package/dist/src/api/daikin-api.js +49 -23
- package/dist/src/api/daikin-api.js.map +1 -1
- package/dist/src/api/daikin-controller.d.ts +4 -48
- package/dist/src/api/daikin-controller.d.ts.map +1 -1
- package/dist/src/api/daikin-controller.js +14 -84
- package/dist/src/api/daikin-controller.js.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.d.ts +11 -40
- package/dist/src/api/daikin-mobile-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.js +36 -160
- package/dist/src/api/daikin-mobile-oauth.js.map +1 -1
- package/dist/src/api/daikin-oauth.d.ts +10 -37
- package/dist/src/api/daikin-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-oauth.js +36 -166
- package/dist/src/api/daikin-oauth.js.map +1 -1
- package/dist/src/api/daikin-schemas.d.ts +20 -22
- package/dist/src/api/daikin-schemas.d.ts.map +1 -1
- package/dist/src/api/daikin-schemas.js +17 -49
- package/dist/src/api/daikin-schemas.js.map +1 -1
- package/dist/src/api/daikin-types.d.ts +11 -23
- package/dist/src/api/daikin-types.d.ts.map +1 -1
- package/dist/src/api/daikin-types.js.map +1 -1
- package/dist/src/api/daikin-websocket.d.ts +4 -5
- package/dist/src/api/daikin-websocket.d.ts.map +1 -1
- package/dist/src/api/daikin-websocket.js +62 -34
- package/dist/src/api/daikin-websocket.js.map +1 -1
- package/dist/src/api/http-defaults.d.ts +3 -2
- package/dist/src/api/http-defaults.d.ts.map +1 -1
- package/dist/src/api/http-defaults.js.map +1 -1
- package/dist/src/api/http-transport.d.ts +14 -2
- package/dist/src/api/http-transport.d.ts.map +1 -1
- package/dist/src/api/http-transport.js +32 -9
- package/dist/src/api/http-transport.js.map +1 -1
- package/dist/src/api/token-client.d.ts +82 -0
- package/dist/src/api/token-client.d.ts.map +1 -0
- package/dist/src/api/token-client.js +188 -0
- package/dist/src/api/token-client.js.map +1 -0
- package/dist/src/api/token-storage.d.ts +6 -0
- package/dist/src/api/token-storage.d.ts.map +1 -1
- package/dist/src/api/token-storage.js +27 -1
- package/dist/src/api/token-storage.js.map +1 -1
- package/dist/src/config/config-manager.d.ts +69 -125
- package/dist/src/config/config-manager.d.ts.map +1 -1
- package/dist/src/config/config-manager.js +288 -225
- package/dist/src/config/config-manager.js.map +1 -1
- package/dist/src/constants/api.constants.d.ts +6 -0
- package/dist/src/constants/api.constants.d.ts.map +1 -1
- package/dist/src/constants/api.constants.js +7 -1
- package/dist/src/constants/api.constants.js.map +1 -1
- package/dist/src/constants/auth.constants.d.ts +11 -0
- package/dist/src/constants/auth.constants.d.ts.map +1 -1
- package/dist/src/constants/auth.constants.js +12 -1
- package/dist/src/constants/auth.constants.js.map +1 -1
- package/dist/src/constants/device.constants.d.ts +1 -7
- package/dist/src/constants/device.constants.d.ts.map +1 -1
- package/dist/src/constants/device.constants.js +2 -11
- package/dist/src/constants/device.constants.js.map +1 -1
- package/dist/src/constants/time.constants.d.ts +0 -2
- package/dist/src/constants/time.constants.d.ts.map +1 -1
- package/dist/src/constants/time.constants.js +1 -3
- package/dist/src/constants/time.constants.js.map +1 -1
- package/dist/src/device/accessory-factory.d.ts +0 -5
- package/dist/src/device/accessory-factory.d.ts.map +1 -1
- package/dist/src/device/accessory-factory.js +0 -7
- package/dist/src/device/accessory-factory.js.map +1 -1
- package/dist/src/device/capability-detector.d.ts +9 -1
- package/dist/src/device/capability-detector.d.ts.map +1 -1
- package/dist/src/device/capability-detector.js +32 -28
- package/dist/src/device/capability-detector.js.map +1 -1
- package/dist/src/device/capability-docs.d.ts.map +1 -1
- package/dist/src/device/capability-docs.js +3 -0
- package/dist/src/device/capability-docs.js.map +1 -1
- package/dist/src/device/data-paths.d.ts +18 -0
- package/dist/src/device/data-paths.d.ts.map +1 -0
- package/dist/src/device/data-paths.js +20 -0
- package/dist/src/device/data-paths.js.map +1 -0
- package/dist/src/device/profiles/device-profile.d.ts +0 -5
- package/dist/src/device/profiles/device-profile.d.ts.map +1 -1
- package/dist/src/device/profiles/device-profile.js +0 -21
- package/dist/src/device/profiles/device-profile.js.map +1 -1
- package/dist/src/features/base-feature.d.ts +53 -9
- package/dist/src/features/base-feature.d.ts.map +1 -1
- package/dist/src/features/base-feature.js +93 -40
- package/dist/src/features/base-feature.js.map +1 -1
- package/dist/src/features/feature-manager.d.ts +27 -15
- package/dist/src/features/feature-manager.d.ts.map +1 -1
- package/dist/src/features/feature-manager.js +27 -24
- package/dist/src/features/feature-manager.js.map +1 -1
- package/dist/src/features/index.d.ts +1 -0
- package/dist/src/features/index.d.ts.map +1 -1
- package/dist/src/features/index.js +1 -0
- package/dist/src/features/index.js.map +1 -1
- package/dist/src/features/modes/auto-fan-mode.feature.d.ts +16 -10
- package/dist/src/features/modes/auto-fan-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/auto-fan-mode.feature.js +16 -40
- package/dist/src/features/modes/auto-fan-mode.feature.js.map +1 -1
- package/dist/src/features/modes/dry-operation-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/dry-operation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/dry-operation-mode.feature.js +11 -30
- package/dist/src/features/modes/dry-operation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/econo-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/econo-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/econo-mode.feature.js +11 -31
- package/dist/src/features/modes/econo-mode.feature.js.map +1 -1
- package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/fan-only-operation-mode.feature.js +11 -30
- package/dist/src/features/modes/fan-only-operation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/firmware-update.feature.d.ts +7 -6
- package/dist/src/features/modes/firmware-update.feature.d.ts.map +1 -1
- package/dist/src/features/modes/firmware-update.feature.js +15 -22
- package/dist/src/features/modes/firmware-update.feature.js.map +1 -1
- package/dist/src/features/modes/holiday-mode.feature.d.ts +2 -1
- package/dist/src/features/modes/holiday-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/holiday-mode.feature.js +5 -15
- package/dist/src/features/modes/holiday-mode.feature.js.map +1 -1
- package/dist/src/features/modes/indoor-silent-mode.feature.d.ts +15 -12
- package/dist/src/features/modes/indoor-silent-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/indoor-silent-mode.feature.js +15 -39
- package/dist/src/features/modes/indoor-silent-mode.feature.js.map +1 -1
- package/dist/src/features/modes/oscillation-mode.feature.d.ts +5 -6
- package/dist/src/features/modes/oscillation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/oscillation-mode.feature.js +14 -36
- package/dist/src/features/modes/oscillation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/outdoor-silent-mode.feature.js +11 -31
- package/dist/src/features/modes/outdoor-silent-mode.feature.js.map +1 -1
- package/dist/src/features/modes/powerful-mode.feature.d.ts +14 -10
- package/dist/src/features/modes/powerful-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/powerful-mode.feature.js +13 -32
- package/dist/src/features/modes/powerful-mode.feature.js.map +1 -1
- package/dist/src/features/modes/streamer-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/streamer-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/streamer-mode.feature.js +11 -31
- package/dist/src/features/modes/streamer-mode.feature.js.map +1 -1
- package/dist/src/features/on-off-data-point-feature.d.ts +43 -0
- package/dist/src/features/on-off-data-point-feature.d.ts.map +1 -0
- package/dist/src/features/on-off-data-point-feature.js +49 -0
- package/dist/src/features/on-off-data-point-feature.js.map +1 -0
- package/dist/src/platform.d.ts +56 -9
- package/dist/src/platform.d.ts.map +1 -1
- package/dist/src/platform.js +248 -128
- package/dist/src/platform.js.map +1 -1
- package/dist/src/services/climate-control/fan-speed.d.ts +45 -0
- package/dist/src/services/climate-control/fan-speed.d.ts.map +1 -0
- package/dist/src/services/climate-control/fan-speed.js +104 -0
- package/dist/src/services/climate-control/fan-speed.js.map +1 -0
- package/dist/src/services/climate-control/separate-fan.service.d.ts +45 -0
- package/dist/src/services/climate-control/separate-fan.service.d.ts.map +1 -0
- package/dist/src/services/climate-control/separate-fan.service.js +82 -0
- package/dist/src/services/climate-control/separate-fan.service.js.map +1 -0
- package/dist/src/services/climate-control/setpoint-resolver.d.ts +68 -0
- package/dist/src/services/climate-control/setpoint-resolver.d.ts.map +1 -0
- package/dist/src/services/climate-control/setpoint-resolver.js +170 -0
- package/dist/src/services/climate-control/setpoint-resolver.js.map +1 -0
- package/dist/src/services/climate-control/swing-controller.d.ts +28 -0
- package/dist/src/services/climate-control/swing-controller.d.ts.map +1 -0
- package/dist/src/services/climate-control/swing-controller.js +65 -0
- package/dist/src/services/climate-control/swing-controller.js.map +1 -0
- package/dist/src/services/climate-control.service.d.ts +39 -48
- package/dist/src/services/climate-control.service.d.ts.map +1 -1
- package/dist/src/services/climate-control.service.js +223 -554
- package/dist/src/services/climate-control.service.js.map +1 -1
- package/dist/src/services/hot-water-tank.service.d.ts +17 -8
- package/dist/src/services/hot-water-tank.service.d.ts.map +1 -1
- package/dist/src/services/hot-water-tank.service.js +102 -157
- package/dist/src/services/hot-water-tank.service.js.map +1 -1
- package/dist/src/types/daikin-enums.d.ts +0 -5
- package/dist/src/types/daikin-enums.d.ts.map +1 -1
- package/dist/src/types/daikin-enums.js +1 -7
- package/dist/src/types/daikin-enums.js.map +1 -1
- package/dist/src/types/device-capabilities.d.ts +1 -0
- package/dist/src/types/device-capabilities.d.ts.map +1 -1
- package/dist/src/utils/errors.d.ts +9 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +25 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/hap-write.d.ts +22 -0
- package/dist/src/utils/hap-write.d.ts.map +1 -0
- package/dist/src/utils/hap-write.js +33 -0
- package/dist/src/utils/hap-write.js.map +1 -0
- package/dist/src/utils/sleep.d.ts +5 -0
- package/dist/src/utils/sleep.d.ts.map +1 -0
- package/dist/src/utils/sleep.js +10 -0
- package/dist/src/utils/sleep.js.map +1 -0
- package/homebridge-ui/README.md +25 -2
- package/homebridge-ui/public/index.html +19 -17
- package/homebridge-ui/public/script.js +95 -32
- package/homebridge-ui/public/styles.css +109 -0
- package/homebridge-ui/server.js +321 -125
- package/package.json +2 -3
- package/dist/src/utils/log-context.d.ts +0 -105
- package/dist/src/utils/log-context.d.ts.map +0 -1
- package/dist/src/utils/log-context.js +0 -206
- package/dist/src/utils/log-context.js.map +0 -1
- package/dist/src/utils/update-mapper.d.ts +0 -59
- package/dist/src/utils/update-mapper.d.ts.map +0 -1
- package/dist/src/utils/update-mapper.js +0 -192
- package/dist/src/utils/update-mapper.js.map +0 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swing Controller
|
|
3
|
+
*
|
|
4
|
+
* Reads and writes the fan swing (fanDirection vertical/horizontal) state for
|
|
5
|
+
* the current operation mode. Shared by the HeaterCooler SwingMode, the
|
|
6
|
+
* separate Fan service and the Oscillation switch so all three agree on what
|
|
7
|
+
* "swinging" means and which axes get written.
|
|
8
|
+
*/
|
|
9
|
+
import type { DaikinCloudDevice } from '../../api';
|
|
10
|
+
import type { FanAxis } from '../../device/data-paths';
|
|
11
|
+
export declare class SwingController {
|
|
12
|
+
private readonly getDevice;
|
|
13
|
+
private readonly managementPointId;
|
|
14
|
+
constructor(getDevice: () => DaikinCloudDevice, managementPointId: string);
|
|
15
|
+
/** Current swing value of an axis, or undefined when the axis doesn't exist in this mode. */
|
|
16
|
+
axisValue(axis: FanAxis): string | undefined;
|
|
17
|
+
hasAxis(axis: FanAxis): boolean;
|
|
18
|
+
isSupported(): boolean;
|
|
19
|
+
/** Off only when an axis that exists is stopped. */
|
|
20
|
+
isSwinging(): boolean;
|
|
21
|
+
describe(): string;
|
|
22
|
+
/** Axes whose current value differs from the requested state (equality guard). */
|
|
23
|
+
axesToWrite(enabled: boolean): FanAxis[];
|
|
24
|
+
/** Write the requested swing state to every axis that isn't already there. */
|
|
25
|
+
set(enabled: boolean): Promise<void>;
|
|
26
|
+
private operationMode;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=swing-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swing-controller.d.ts","sourceRoot":"","sources":["../../../../src/services/climate-control/swing-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAUvD,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBADjB,SAAS,EAAE,MAAM,iBAAiB,EAClC,iBAAiB,EAAE,MAAM;IAG5C,6FAA6F;IAC7F,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAO5C,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAI/B,WAAW,IAAI,OAAO;IAItB,oDAAoD;IACpD,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI,MAAM;IAIlB,kFAAkF;IAClF,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE;IAQxC,8EAA8E;IACxE,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,OAAO,CAAC,aAAa;CAItB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Swing Controller
|
|
4
|
+
*
|
|
5
|
+
* Reads and writes the fan swing (fanDirection vertical/horizontal) state for
|
|
6
|
+
* the current operation mode. Shared by the HeaterCooler SwingMode, the
|
|
7
|
+
* separate Fan service and the Oscillation switch so all three agree on what
|
|
8
|
+
* "swinging" means and which axes get written.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.SwingController = void 0;
|
|
12
|
+
const data_paths_1 = require("../../device/data-paths");
|
|
13
|
+
const types_1 = require("../../types");
|
|
14
|
+
const SWING = types_1.DaikinFanDirectionHorizontalModes.SWING;
|
|
15
|
+
const STOP = types_1.DaikinFanDirectionHorizontalModes.STOP;
|
|
16
|
+
// Horizontal first: matches the historical PATCH order.
|
|
17
|
+
const AXES = ['horizontal', 'vertical'];
|
|
18
|
+
class SwingController {
|
|
19
|
+
getDevice;
|
|
20
|
+
managementPointId;
|
|
21
|
+
constructor(getDevice, managementPointId) {
|
|
22
|
+
this.getDevice = getDevice;
|
|
23
|
+
this.managementPointId = managementPointId;
|
|
24
|
+
}
|
|
25
|
+
/** Current swing value of an axis, or undefined when the axis doesn't exist in this mode. */
|
|
26
|
+
axisValue(axis) {
|
|
27
|
+
const value = this.getDevice().getData(this.managementPointId, 'fanControl', data_paths_1.DataPaths.fanDirection(this.operationMode(), axis)).value;
|
|
28
|
+
return value === undefined ? undefined : String(value);
|
|
29
|
+
}
|
|
30
|
+
hasAxis(axis) {
|
|
31
|
+
return this.axisValue(axis) !== undefined;
|
|
32
|
+
}
|
|
33
|
+
isSupported() {
|
|
34
|
+
return this.hasAxis('vertical') || this.hasAxis('horizontal');
|
|
35
|
+
}
|
|
36
|
+
/** Off only when an axis that exists is stopped. */
|
|
37
|
+
isSwinging() {
|
|
38
|
+
return AXES.every(axis => this.axisValue(axis) !== STOP);
|
|
39
|
+
}
|
|
40
|
+
describe() {
|
|
41
|
+
return `vertical: ${this.axisValue('vertical') ?? null}, horizontal: ${this.axisValue('horizontal') ?? null}`;
|
|
42
|
+
}
|
|
43
|
+
/** Axes whose current value differs from the requested state (equality guard). */
|
|
44
|
+
axesToWrite(enabled) {
|
|
45
|
+
const target = enabled ? SWING : STOP;
|
|
46
|
+
return AXES.filter(axis => {
|
|
47
|
+
const current = this.axisValue(axis);
|
|
48
|
+
return current !== undefined && current !== target;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/** Write the requested swing state to every axis that isn't already there. */
|
|
52
|
+
async set(enabled) {
|
|
53
|
+
const target = enabled ? SWING : STOP;
|
|
54
|
+
const operationMode = this.operationMode();
|
|
55
|
+
for (const axis of this.axesToWrite(enabled)) {
|
|
56
|
+
await this.getDevice().setData(this.managementPointId, 'fanControl', data_paths_1.DataPaths.fanDirection(operationMode, axis), target);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
operationMode() {
|
|
60
|
+
const value = this.getDevice().getData(this.managementPointId, 'operationMode', undefined).value;
|
|
61
|
+
return typeof value === 'string' && value ? value : types_1.DaikinOperationModes.AUTO;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.SwingController = SwingController;
|
|
65
|
+
//# sourceMappingURL=swing-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swing-controller.js","sourceRoot":"","sources":["../../../../src/services/climate-control/swing-controller.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAIH,wDAAoD;AACpD,uCAAsF;AAEtF,MAAM,KAAK,GAAG,yCAAiC,CAAC,KAAK,CAAC;AACtD,MAAM,IAAI,GAAG,yCAAiC,CAAC,IAAI,CAAC;AAEpD,wDAAwD;AACxD,MAAM,IAAI,GAAuB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAE5D,MAAa,eAAe;IAEP;IACA;IAFnB,YACmB,SAAkC,EAClC,iBAAyB;QADzB,cAAS,GAAT,SAAS,CAAyB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAQ;IACzC,CAAC;IAEJ,6FAA6F;IAC7F,SAAS,CAAC,IAAa;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CACpC,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE,sBAAS,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,CACzF,CAAC,KAAK,CAAC;QACR,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,CAAC,IAAa;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IAC5C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC;IAED,oDAAoD;IACpD,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,QAAQ;QACN,OAAO,aAAa,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,iBAAiB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC;IAChH,CAAC;IAED,kFAAkF;IAClF,WAAW,CAAC,OAAgB;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,MAAM,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,GAAG,CAAC,OAAgB;QACxB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAC5B,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE,sBAAS,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAC1F,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC;QACjG,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,4BAAoB,CAAC,IAAI,CAAC;IAChF,CAAC;CACF;AAvDD,0CAuDC"}
|
|
@@ -1,38 +1,35 @@
|
|
|
1
1
|
import type { CharacteristicValue, PlatformAccessory } from 'homebridge';
|
|
2
2
|
import type { DaikinCloudAccessoryContext, DaikinCloudPlatform } from '../platform';
|
|
3
|
-
import {
|
|
3
|
+
import { DaikinOperationModes } from '../types';
|
|
4
|
+
import type { DaikinControlModes } from '../types';
|
|
4
5
|
import { FeatureManager } from '../features';
|
|
6
|
+
import { FanSpeedController } from './climate-control/fan-speed';
|
|
7
|
+
import { SwingController } from './climate-control/swing-controller';
|
|
8
|
+
import { SetpointResolver } from './climate-control/setpoint-resolver';
|
|
5
9
|
export declare class ClimateControlService {
|
|
6
10
|
readonly platform: DaikinCloudPlatform;
|
|
7
11
|
readonly accessory: PlatformAccessory<DaikinCloudAccessoryContext>;
|
|
8
12
|
readonly managementPointId: string;
|
|
9
13
|
private readonly name;
|
|
10
|
-
private readonly service
|
|
11
|
-
private fanService?;
|
|
14
|
+
private readonly service;
|
|
12
15
|
readonly featureManager: FeatureManager;
|
|
16
|
+
readonly swing: SwingController;
|
|
17
|
+
readonly fanSpeed: FanSpeedController;
|
|
18
|
+
readonly setpoints: SetpointResolver;
|
|
19
|
+
private readonly autoSetpointSync;
|
|
20
|
+
private readonly separateFan;
|
|
21
|
+
private lastOperationMode?;
|
|
13
22
|
constructor(platform: DaikinCloudPlatform, accessory: PlatformAccessory<DaikinCloudAccessoryContext>, managementPointId: string);
|
|
23
|
+
private get device();
|
|
24
|
+
private getData;
|
|
25
|
+
private setData;
|
|
26
|
+
private write;
|
|
14
27
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* HomeKit hides the HeaterCooler's RotationSpeed slider and SwingMode toggle
|
|
18
|
-
* when the accessory is grouped into a single tile in the Home app — they're
|
|
19
|
-
* only reachable by opening the device directly. Exposing a separate Fanv2
|
|
20
|
-
* service gives the fan speed slider and oscillation toggle their own tile that
|
|
21
|
-
* stays visible even when grouped.
|
|
22
|
-
*
|
|
23
|
-
* Gated behind the `showSeparateFanControl` config option, and only added when
|
|
24
|
-
* the device actually exposes a fixed fan speed and/or a swing mode. The fan's
|
|
25
|
-
* Active characteristic mirrors the unit on/off state, and its RotationSpeed /
|
|
26
|
-
* SwingMode reuse the same handlers as the HeaterCooler so both services stay
|
|
27
|
-
* in sync.
|
|
28
|
+
* Threshold characteristics. getData() always returns a wrapper, so these are
|
|
29
|
+
* always present; the props come from the device's setpoint constraints.
|
|
28
30
|
*/
|
|
31
|
+
private setupThreshold;
|
|
29
32
|
setupSeparateFanService(): void;
|
|
30
|
-
/**
|
|
31
|
-
* Execute a device write operation with proper HAP error handling.
|
|
32
|
-
* Catches errors, logs a warning, and throws HapStatusError(SERVICE_COMMUNICATION_FAILURE)
|
|
33
|
-
* so HomeKit shows "No Response" instead of Homebridge logging "plugin threw an error".
|
|
34
|
-
*/
|
|
35
|
-
private setDeviceData;
|
|
36
33
|
/**
|
|
37
34
|
* Push current device state to all HAP characteristics via updateValue().
|
|
38
35
|
* Called after every poll/WebSocket update so HomeKit has an accurate view of
|
|
@@ -40,47 +37,41 @@ export declare class ClimateControlService {
|
|
|
40
37
|
* scene commands before they ever reach onSet.
|
|
41
38
|
*/
|
|
42
39
|
refreshValues(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Add/refresh RotationSpeed for the current operation mode's fixed fan speed,
|
|
42
|
+
* or remove it when that mode has none (getData() returns `{ value: undefined }`
|
|
43
|
+
* for a missing path; setting it would fail at the API).
|
|
44
|
+
*
|
|
45
|
+
* The characteristic stays in percentage space (see fan-speed.ts). setProps
|
|
46
|
+
* runs FIRST to widen any narrow range left over from a prior session, or the
|
|
47
|
+
* updateValue below trips HAP's validateUserInput; minValue=0 (not
|
|
48
|
+
* stepPercent) keeps HAP happy for cached values below one step —
|
|
49
|
+
* percentToDeviceSpeed clamps writes up to the device minValue anyway.
|
|
50
|
+
*/
|
|
43
51
|
addOrUpdateCharacteristicRotationSpeed(): void;
|
|
44
52
|
handleActiveStateGet(): Promise<CharacteristicValue>;
|
|
45
53
|
handleActiveStateSet(value: CharacteristicValue): Promise<void>;
|
|
46
54
|
handleCurrentTemperatureGet(): Promise<CharacteristicValue>;
|
|
55
|
+
private currentTemperature;
|
|
47
56
|
handleCoolingThresholdTemperatureGet(): Promise<CharacteristicValue>;
|
|
48
57
|
handleCoolingThresholdTemperatureSet(value: CharacteristicValue): Promise<void>;
|
|
49
|
-
handleRotationSpeedGet(): Promise<CharacteristicValue>;
|
|
50
|
-
handleRotationSpeedSet(value: CharacteristicValue): Promise<void>;
|
|
51
58
|
handleHeatingThresholdTemperatureGet(): Promise<CharacteristicValue>;
|
|
52
59
|
handleHeatingThresholdTemperatureSet(value: CharacteristicValue): Promise<void>;
|
|
60
|
+
private thresholdGet;
|
|
53
61
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* when the device was last in auto mode, regardless of what the user picks
|
|
58
|
-
* in HomeKit. Mirror the midpoint of the current heating/cooling thresholds
|
|
59
|
-
* to /operationModes/auto/setpoints/roomTemperature whenever either
|
|
60
|
-
* threshold is set, so the Daikin app and HomeKit stay in sync.
|
|
61
|
-
*
|
|
62
|
-
* No-op when the device doesn't expose an auto setpoint (e.g. devices
|
|
63
|
-
* without an auto operationMode at all).
|
|
62
|
+
* Write a threshold, then mirror the heating/cooling midpoint to Daikin's
|
|
63
|
+
* single AUTO setpoint — once, after concurrent threshold writes settle
|
|
64
|
+
* (see AutoSetpointSync).
|
|
64
65
|
*/
|
|
65
|
-
private
|
|
66
|
+
private thresholdSet;
|
|
67
|
+
handleRotationSpeedGet(): Promise<CharacteristicValue>;
|
|
68
|
+
handleRotationSpeedSet(value: CharacteristicValue): Promise<void>;
|
|
66
69
|
handleTargetHeaterCoolerStateGet(): Promise<CharacteristicValue>;
|
|
70
|
+
private targetHeaterCoolerState;
|
|
67
71
|
handleTargetHeaterCoolerStateSet(value: CharacteristicValue): Promise<void>;
|
|
68
72
|
handleSwingModeSet(value: CharacteristicValue): Promise<void>;
|
|
69
73
|
handleSwingModeGet(): Promise<CharacteristicValue>;
|
|
70
74
|
getCurrentOperationMode(): DaikinOperationModes;
|
|
71
75
|
getCurrentControlMode(): DaikinControlModes;
|
|
72
|
-
getSetpointMode(): DaikinSetpointModes | null;
|
|
73
|
-
getSetpoint(operationMode: DaikinOperationModes): DaikinTemperatureControlSetpoints;
|
|
74
|
-
hasSwingModeVerticalFeature(): boolean;
|
|
75
|
-
hasSwingModeHorizontalFeature(): boolean;
|
|
76
|
-
hasSwingModeFeature(): boolean;
|
|
77
|
-
hasPowerfulModeFeature(): boolean;
|
|
78
|
-
hasEconoModeFeature(): boolean;
|
|
79
|
-
hasStreamerModeFeature(): boolean;
|
|
80
|
-
hasOutdoorSilentModeFeature(): boolean;
|
|
81
|
-
hasIndoorSilentModeFeature(): boolean;
|
|
82
|
-
hasOperationMode(operationMode: DaikinOperationModes): boolean;
|
|
83
|
-
hasDryOperationModeFeature(): boolean;
|
|
84
|
-
hasFanOnlyOperationModeFeature(): boolean;
|
|
85
76
|
}
|
|
86
77
|
//# sourceMappingURL=climate-control.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"climate-control.service.d.ts","sourceRoot":"","sources":["../../../src/services/climate-control.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"climate-control.service.d.ts","sourceRoot":"","sources":["../../../src/services/climate-control.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,mBAAmB,EAAE,iBAAiB,EAAqB,MAAM,YAAY,CAAC;AAC5G,OAAO,KAAK,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEpF,OAAO,EAAoB,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAU7C,OAAO,EAAE,kBAAkB,EAAe,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAoB,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAMzF,qBAAa,qBAAqB;IAChC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;IACnE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,iBAAiB,CAAC,CAAuB;gBAG/C,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,iBAAiB,CAAC,2BAA2B,CAAC,EACzD,iBAAiB,EAAE,MAAM;IA2D3B,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAIb;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoBtB,uBAAuB,IAAI,IAAI;IAe/B;;;;;OAKG;IACH,aAAa,IAAI,IAAI;IAmErB;;;;;;;;;;OAUG;IACH,sCAAsC;IAwBhC,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAMpD,oBAAoB,CAAC,KAAK,EAAE,mBAAmB;IAW/C,2BAA2B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAMjE,OAAO,CAAC,kBAAkB;IAIpB,oCAAoC,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIpE,oCAAoC,CAAC,KAAK,EAAE,mBAAmB;IAI/D,oCAAoC,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIpE,oCAAoC,CAAC,KAAK,EAAE,mBAAmB;IAIrE,OAAO,CAAC,YAAY;IAOpB;;;;OAIG;YACW,YAAY;IAapB,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAQtD,sBAAsB,CAAC,KAAK,EAAE,mBAAmB;IAmBjD,gCAAgC,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAQtE,OAAO,CAAC,uBAAuB;IAYzB,gCAAgC,CAAC,KAAK,EAAE,mBAAmB;IAqB3D,kBAAkB,CAAC,KAAK,EAAE,mBAAmB;IAU7C,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAOxD,uBAAuB,IAAI,oBAAoB;IAI/C,qBAAqB,IAAI,kBAAkB;CAG5C"}
|