daikin-local-control 0.3.1 → 0.5.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/DESIGN.md +156 -2
- package/README.md +274 -48
- package/UNSUPPORTED.md +66 -3
- package/dist/clients/airbase.d.ts +64 -0
- package/dist/clients/airbase.d.ts.map +1 -0
- package/dist/clients/airbase.js +175 -0
- package/dist/clients/airbase.js.map +1 -0
- package/dist/clients/classic.d.ts +2 -2
- package/dist/clients/classic.d.ts.map +1 -1
- package/dist/clients/classic.js +4 -4
- package/dist/clients/classic.js.map +1 -1
- package/dist/clients/client.d.ts +7 -2
- package/dist/clients/client.d.ts.map +1 -1
- package/dist/clients/dsiot.d.ts +3 -1
- package/dist/clients/dsiot.d.ts.map +1 -1
- package/dist/clients/dsiot.js +7 -2
- package/dist/clients/dsiot.js.map +1 -1
- package/dist/codecs/airbase/capabilities.d.ts +23 -0
- package/dist/codecs/airbase/capabilities.d.ts.map +1 -0
- package/dist/codecs/airbase/capabilities.js +108 -0
- package/dist/codecs/airbase/capabilities.js.map +1 -0
- package/dist/codecs/airbase/state.d.ts +29 -0
- package/dist/codecs/airbase/state.d.ts.map +1 -0
- package/dist/codecs/airbase/state.js +166 -0
- package/dist/codecs/airbase/state.js.map +1 -0
- package/dist/codecs/airbase/tables.d.ts +7 -0
- package/dist/codecs/airbase/tables.d.ts.map +1 -0
- package/dist/codecs/airbase/tables.js +27 -0
- package/dist/codecs/airbase/tables.js.map +1 -0
- package/dist/codecs/airbase/zone.d.ts +12 -0
- package/dist/codecs/airbase/zone.d.ts.map +1 -0
- package/dist/codecs/airbase/zone.js +50 -0
- package/dist/codecs/airbase/zone.js.map +1 -0
- package/dist/codecs/classic/capabilities.d.ts.map +1 -1
- package/dist/codecs/classic/capabilities.js +5 -11
- package/dist/codecs/classic/capabilities.js.map +1 -1
- package/dist/codecs/classic/extendedControl.d.ts.map +1 -1
- package/dist/codecs/classic/extendedControl.js +10 -19
- package/dist/codecs/classic/extendedControl.js.map +1 -1
- package/dist/codecs/classic/state.d.ts.map +1 -1
- package/dist/codecs/classic/state.js +36 -95
- package/dist/codecs/classic/state.js.map +1 -1
- package/dist/codecs/classic/tables.d.ts +34 -0
- package/dist/codecs/classic/tables.d.ts.map +1 -0
- package/dist/codecs/classic/tables.js +96 -0
- package/dist/codecs/classic/tables.js.map +1 -0
- package/dist/codecs/credentials.d.ts +3 -2
- package/dist/codecs/credentials.d.ts.map +1 -1
- package/dist/codecs/credentials.js +8 -3
- package/dist/codecs/credentials.js.map +1 -1
- package/dist/codecs/device.d.ts +7 -1
- package/dist/codecs/device.d.ts.map +1 -1
- package/dist/codecs/device.js +15 -3
- package/dist/codecs/device.js.map +1 -1
- package/dist/codecs/dsiot/capabilities.d.ts.map +1 -1
- package/dist/codecs/dsiot/capabilities.js +8 -15
- package/dist/codecs/dsiot/capabilities.js.map +1 -1
- package/dist/codecs/dsiot/device.d.ts.map +1 -1
- package/dist/codecs/dsiot/device.js +4 -8
- package/dist/codecs/dsiot/device.js.map +1 -1
- package/dist/codecs/dsiot/multireq.d.ts +0 -19
- package/dist/codecs/dsiot/multireq.d.ts.map +1 -1
- package/dist/codecs/dsiot/multireq.js +2 -25
- package/dist/codecs/dsiot/multireq.js.map +1 -1
- package/dist/codecs/dsiot/state.d.ts +6 -62
- package/dist/codecs/dsiot/state.d.ts.map +1 -1
- package/dist/codecs/dsiot/state.js +29 -148
- package/dist/codecs/dsiot/state.js.map +1 -1
- package/dist/codecs/dsiot/tables.d.ts +119 -0
- package/dist/codecs/dsiot/tables.d.ts.map +1 -0
- package/dist/codecs/dsiot/tables.js +188 -0
- package/dist/codecs/dsiot/tables.js.map +1 -0
- package/dist/discovery.d.ts +20 -9
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +102 -32
- package/dist/discovery.js.map +1 -1
- package/dist/factory.d.ts +13 -7
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +16 -4
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/models/device.d.ts +3 -2
- package/dist/models/device.d.ts.map +1 -1
- package/dist/models/device.js +1 -1
- package/dist/models/device.js.map +1 -1
- package/dist/models/state.d.ts +2 -3
- package/dist/models/state.d.ts.map +1 -1
- package/dist/models/zone.d.ts +9 -0
- package/dist/models/zone.d.ts.map +1 -0
- package/dist/models/zone.js +2 -0
- package/dist/models/zone.js.map +1 -0
- package/dist/simulators/airbase.d.ts +82 -0
- package/dist/simulators/airbase.d.ts.map +1 -0
- package/dist/simulators/airbase.js +352 -0
- package/dist/simulators/airbase.js.map +1 -0
- package/dist/simulators/classic.d.ts +61 -0
- package/dist/simulators/classic.d.ts.map +1 -0
- package/dist/simulators/classic.js +473 -0
- package/dist/simulators/classic.js.map +1 -0
- package/dist/simulators/dsiot.d.ts +49 -0
- package/dist/simulators/dsiot.d.ts.map +1 -0
- package/dist/simulators/dsiot.js +519 -0
- package/dist/simulators/dsiot.js.map +1 -0
- package/dist/simulators/index.d.ts +5 -0
- package/dist/simulators/index.d.ts.map +1 -0
- package/dist/simulators/index.js +4 -0
- package/dist/simulators/index.js.map +1 -0
- package/dist/simulators/simulator.d.ts +117 -0
- package/dist/simulators/simulator.d.ts.map +1 -0
- package/dist/simulators/simulator.js +141 -0
- package/dist/simulators/simulator.js.map +1 -0
- package/dist/transport.d.ts +8 -3
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +10 -2
- package/dist/transport.js.map +1 -1
- package/package.json +11 -4
- package/src/clients/airbase.ts +274 -0
- package/src/clients/classic.ts +8 -8
- package/src/clients/client.ts +8 -1
- package/src/clients/dsiot.ts +8 -1
- package/src/codecs/airbase/capabilities.ts +150 -0
- package/src/codecs/airbase/state.ts +223 -0
- package/src/codecs/airbase/tables.ts +32 -0
- package/src/codecs/airbase/zone.ts +62 -0
- package/src/codecs/classic/capabilities.ts +8 -11
- package/src/codecs/classic/extendedControl.ts +14 -25
- package/src/codecs/classic/state.ts +49 -101
- package/src/codecs/classic/tables.ts +126 -0
- package/src/codecs/credentials.ts +11 -3
- package/src/codecs/device.ts +19 -3
- package/src/codecs/dsiot/capabilities.ts +10 -17
- package/src/codecs/dsiot/device.ts +4 -9
- package/src/codecs/dsiot/multireq.ts +2 -25
- package/src/codecs/dsiot/state.ts +57 -193
- package/src/codecs/dsiot/tables.ts +253 -0
- package/src/discovery.ts +107 -34
- package/src/factory.ts +26 -7
- package/src/index.ts +8 -0
- package/src/models/device.ts +3 -2
- package/src/models/state.ts +2 -3
- package/src/models/zone.ts +8 -0
- package/src/simulators/airbase.ts +495 -0
- package/src/simulators/classic.ts +636 -0
- package/src/simulators/dsiot.ts +736 -0
- package/src/simulators/index.ts +10 -0
- package/src/simulators/simulator.ts +282 -0
- package/src/transport.ts +15 -4
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { OPERATING_MODES, SWING_MODES, } from "../../models/state.js";
|
|
2
|
+
const ALWAYS_OFFERED_MODES = ["cool", "heat", "fan"];
|
|
3
|
+
const THREE_FAN_LEVELS = ["level1", "level3", "level5"];
|
|
4
|
+
const TWO_FAN_LEVELS = ["level1", "level5"];
|
|
5
|
+
/** Merges the `basic_info` and `get_model_info` replies of an Airbase adapter
|
|
6
|
+
* into the one field map `parseAirbaseCapabilities`, `takesAirbaseFanAuto`,
|
|
7
|
+
* `takesAirbaseAirside` and `parseAirbaseZones` read. */
|
|
8
|
+
export function mergeAirbaseCapabilityFields(basicInfo, modelInfo) {
|
|
9
|
+
return { ...basicInfo, ...modelInfo };
|
|
10
|
+
}
|
|
11
|
+
/** Turns the field map from `mergeAirbaseCapabilityFields` into
|
|
12
|
+
* `DaikinCapabilities`. A unit with zones (`en_zone`) takes no `auto` fan
|
|
13
|
+
* speed and no direction. It lists no humidity setting, louver position or
|
|
14
|
+
* special mode, and reports `energyMonitoring` and `demandControl` as
|
|
15
|
+
* `false`: which field says a unit has either is not known. */
|
|
16
|
+
export function parseAirbaseCapabilities(fields) {
|
|
17
|
+
const offeredModes = OPERATING_MODES.filter((mode) => ALWAYS_OFFERED_MODES.includes(mode) ||
|
|
18
|
+
(mode === "auto" && fields.en_auto === "1") ||
|
|
19
|
+
(mode === "dehumidify" && fields.en_dry === "1"));
|
|
20
|
+
const offered = (mode, range) => offeredModes.includes(mode) ? range : null;
|
|
21
|
+
const none = { auto: [], dehumidify: [], cool: [], heat: [], fan: [] };
|
|
22
|
+
return {
|
|
23
|
+
modes: offeredModes,
|
|
24
|
+
fanSpeeds: fanSpeeds(fields),
|
|
25
|
+
swingModes: !hasZones(fields) && fields.en_fdir === "1" ? [...SWING_MODES] : [],
|
|
26
|
+
verticalPositions: [],
|
|
27
|
+
horizontalPositions: [],
|
|
28
|
+
targetTemperaturesInC: {
|
|
29
|
+
// Auto runs from the lowest setpoint of cool to the highest of heat.
|
|
30
|
+
auto: offered("auto", range(fields.cool_l, 18, fields.heat_h, 30)),
|
|
31
|
+
cool: offered("cool", range(fields.cool_l, 18, fields.cool_h, 32)),
|
|
32
|
+
heat: offered("heat", range(fields.heat_l, 10, fields.heat_h, 30)),
|
|
33
|
+
dehumidify: null,
|
|
34
|
+
fan: null,
|
|
35
|
+
},
|
|
36
|
+
targetHumidities: none,
|
|
37
|
+
specialModes: none,
|
|
38
|
+
specialOutlet: false,
|
|
39
|
+
energyMonitoring: false,
|
|
40
|
+
demandControl: false,
|
|
41
|
+
scheduleTimer: ["1", "2"].includes(fields.en_scdltmr ?? ""),
|
|
42
|
+
model: fields.model,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Whether a unit takes fan auto, read from the field map of
|
|
46
|
+
* `mergeAirbaseCapabilityFields`: one with zones that counts its fan speeds
|
|
47
|
+
* (`frate_steps`), unless `en_frate_auto` is 0. */
|
|
48
|
+
export function takesAirbaseFanAuto(fields) {
|
|
49
|
+
return (isFanControllable(fields) &&
|
|
50
|
+
hasZones(fields) &&
|
|
51
|
+
fanLevels(fields).length > 0 &&
|
|
52
|
+
"frate_steps" in fields &&
|
|
53
|
+
(fields.en_frate_auto ?? "1") === "1");
|
|
54
|
+
}
|
|
55
|
+
/** Whether a unit takes airside, read from the field map of
|
|
56
|
+
* `mergeAirbaseCapabilityFields`: one with zones that reports
|
|
57
|
+
* `en_airside=1`. */
|
|
58
|
+
export function takesAirbaseAirside(fields) {
|
|
59
|
+
return (isFanControllable(fields) && hasZones(fields) && fields.en_airside === "1");
|
|
60
|
+
}
|
|
61
|
+
/** How many zones a unit has, read from the field map of
|
|
62
|
+
* `mergeAirbaseCapabilityFields`: `en_zone`, and none without it. */
|
|
63
|
+
export function parseAirbaseZoneCount(fields) {
|
|
64
|
+
const count = Number.parseInt(fields.en_zone ?? "", 10);
|
|
65
|
+
return count > 0 ? count : 0;
|
|
66
|
+
}
|
|
67
|
+
function hasZones(fields) {
|
|
68
|
+
return "en_zone" in fields && fields.en_zone !== "0";
|
|
69
|
+
}
|
|
70
|
+
// A unit that sets each zone's airflow itself (`en_linear_zone=1`) takes no
|
|
71
|
+
// fan speed.
|
|
72
|
+
function isFanControllable(fields) {
|
|
73
|
+
return ((fields.reg ?? "") !== "" &&
|
|
74
|
+
fields.reg !== "jp" &&
|
|
75
|
+
fields.en_frate === "1" &&
|
|
76
|
+
fields.en_linear_zone !== "1");
|
|
77
|
+
}
|
|
78
|
+
// Three levels unless `frate_steps` is 2, and none when it is not a number.
|
|
79
|
+
function fanLevels(fields) {
|
|
80
|
+
if (!("frate_steps" in fields)) {
|
|
81
|
+
return THREE_FAN_LEVELS;
|
|
82
|
+
}
|
|
83
|
+
const steps = Number.parseInt(fields.frate_steps ?? "", 10);
|
|
84
|
+
if (!Number.isFinite(steps)) {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
return steps === 2 ? TWO_FAN_LEVELS : THREE_FAN_LEVELS;
|
|
88
|
+
}
|
|
89
|
+
function fanSpeeds(fields) {
|
|
90
|
+
if (!isFanControllable(fields)) {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
const takesAuto = !hasZones(fields) && fields.en_frate_auto === "1";
|
|
94
|
+
return [...(takesAuto ? ["auto"] : []), ...fanLevels(fields)];
|
|
95
|
+
}
|
|
96
|
+
// Setpoint limits are whole °C on the wire; any fraction is dropped.
|
|
97
|
+
function range(low, fallbackMin, high, fallbackMax) {
|
|
98
|
+
return {
|
|
99
|
+
min: wholeCelsius(low, fallbackMin),
|
|
100
|
+
max: wholeCelsius(high, fallbackMax),
|
|
101
|
+
step: 1,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function wholeCelsius(value, fallback) {
|
|
105
|
+
const parsed = Number.parseFloat(value ?? "");
|
|
106
|
+
return Number.isFinite(parsed) ? Math.trunc(parsed) : fallback;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/codecs/airbase/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { DaikinControl, DaikinSensors, DaikinState } from "../../models/state.js";
|
|
2
|
+
/** Turns a `get_control_info` reply into a `DaikinState`. A `mode` or `f_rate`
|
|
3
|
+
* outside the model reads as `auto`, and an `f_dir` outside it as `off`. It
|
|
4
|
+
* reports no humidity setting, louver position or special mode: an Airbase
|
|
5
|
+
* unit is not known to have any. */
|
|
6
|
+
export declare function parseAirbaseState(fields: Record<string, string>): DaikinState;
|
|
7
|
+
export declare function parseAirbaseSensors(fields: Record<string, string>): DaikinSensors;
|
|
8
|
+
/** Whether fan auto is on in a `get_control_info` reply: the unit then picks
|
|
9
|
+
* the fan speed itself, up to the one that is set. */
|
|
10
|
+
export declare function parseAirbaseFanAuto(fields: Record<string, string>): boolean;
|
|
11
|
+
/** Whether airside is on in a `get_control_info` reply. */
|
|
12
|
+
export declare function parseAirbaseAirside(fields: Record<string, string>): boolean;
|
|
13
|
+
/** Turns `current`, the `get_control_info` reply, and a control into the
|
|
14
|
+
* `set_control_info` query: power, mode, setpoint, humidity, fan speed, fan
|
|
15
|
+
* auto, airside and direction, every time. When the mode changes, the
|
|
16
|
+
* setpoint, the fan and the direction come from what the unit remembers for
|
|
17
|
+
* cool or for heat. It drops a `targetTemperatureInC` in fan and dehumidify,
|
|
18
|
+
* every `targetHumidity` and louver position, and sends `shum` back as the
|
|
19
|
+
* unit holds it. A `fanSpeed` switches airside off and keeps fan auto. */
|
|
20
|
+
export declare function applyAirbaseControl(current: Record<string, string>, control: DaikinControl): Record<string, string>;
|
|
21
|
+
/** Turns `current`, the `get_control_info` reply, into the `set_control_info`
|
|
22
|
+
* query that switches fan auto on or off. It switches airside off, and keeps
|
|
23
|
+
* the fan speed. */
|
|
24
|
+
export declare function applyAirbaseFanAuto(current: Record<string, string>, enabled: boolean): Record<string, string>;
|
|
25
|
+
/** Turns `current`, the `get_control_info` reply, into the `set_control_info`
|
|
26
|
+
* query that switches airside on or off. Switching it on switches fan auto
|
|
27
|
+
* off and sets the lowest fan speed, which airside runs at. */
|
|
28
|
+
export declare function applyAirbaseAirside(current: Record<string, string>, enabled: boolean): Record<string, string>;
|
|
29
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/codecs/airbase/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EAIZ,MAAM,uBAAuB,CAAC;AA2C/B;;;oCAGoC;AACpC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAY7E;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,aAAa,CAMf;AAED;sDACsD;AACtD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAE3E;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAE3E;AAED;;;;;;0EAM0E;AAC1E,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,EAAE,aAAa,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED;;oBAEoB;AACpB,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED;;+DAE+D;AAC/D,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { AIRBASE_FAN_SPEED_CODES, AIRBASE_NO_SETPOINT, AIRBASE_OPERATING_MODE_CODES, AIRBASE_SWING_MODE_CODES, } from "./tables.js";
|
|
2
|
+
// Maps between `DaikinState` and an Airbase adapter's `control_info` fields,
|
|
3
|
+
// and reads `DaikinSensors` from its `get_sensor_info`.
|
|
4
|
+
//
|
|
5
|
+
// The unit remembers a setpoint, a fan and a direction for cool and for heat
|
|
6
|
+
// alone: `dt2`, `dfr2`, `dfd2`, `auto2` and `airside2` for cool, and the same
|
|
7
|
+
// fields ending in 1 for heat. Auto, fan and dehumidify run on one of the
|
|
8
|
+
// two, the one `bk_auto` names.
|
|
9
|
+
const OPERATING_MODES_BY_CODE = Object.fromEntries(Object.entries(AIRBASE_OPERATING_MODE_CODES).map(([mode, code]) => [
|
|
10
|
+
code,
|
|
11
|
+
mode,
|
|
12
|
+
]));
|
|
13
|
+
const FAN_SPEEDS_BY_CODE = Object.fromEntries(Object.entries(AIRBASE_FAN_SPEED_CODES).map(([speed, code]) => [
|
|
14
|
+
code,
|
|
15
|
+
speed,
|
|
16
|
+
]));
|
|
17
|
+
const SWING_MODES_BY_CODE = Object.fromEntries(Object.entries(AIRBASE_SWING_MODE_CODES).map(([swing, code]) => [
|
|
18
|
+
code,
|
|
19
|
+
swing,
|
|
20
|
+
]));
|
|
21
|
+
const ON = "1";
|
|
22
|
+
const OFF = "0";
|
|
23
|
+
// What airside runs the fan at.
|
|
24
|
+
const AIRSIDE_FAN_SPEED = AIRBASE_FAN_SPEED_CODES.level1;
|
|
25
|
+
/** Turns a `get_control_info` reply into a `DaikinState`. A `mode` or `f_rate`
|
|
26
|
+
* outside the model reads as `auto`, and an `f_dir` outside it as `off`. It
|
|
27
|
+
* reports no humidity setting, louver position or special mode: an Airbase
|
|
28
|
+
* unit is not known to have any. */
|
|
29
|
+
export function parseAirbaseState(fields) {
|
|
30
|
+
return {
|
|
31
|
+
power: fields.pow === ON,
|
|
32
|
+
mode: OPERATING_MODES_BY_CODE[fields.mode ?? ""] ?? "auto",
|
|
33
|
+
targetTemperatureInC: parseNumeric(fields.stemp),
|
|
34
|
+
targetHumidity: null,
|
|
35
|
+
fanSpeed: FAN_SPEEDS_BY_CODE[fields.f_rate ?? ""] ?? "auto",
|
|
36
|
+
swingMode: SWING_MODES_BY_CODE[fields.f_dir ?? ""] ?? "off",
|
|
37
|
+
verticalPosition: null,
|
|
38
|
+
horizontalPosition: null,
|
|
39
|
+
specialModes: [],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export function parseAirbaseSensors(fields) {
|
|
43
|
+
return {
|
|
44
|
+
indoorTemperatureInC: parseNumeric(fields.htemp),
|
|
45
|
+
outdoorTemperatureInC: parseNumeric(fields.otemp),
|
|
46
|
+
indoorHumidityInPercent: parseNumeric(fields.hhum),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Whether fan auto is on in a `get_control_info` reply: the unit then picks
|
|
50
|
+
* the fan speed itself, up to the one that is set. */
|
|
51
|
+
export function parseAirbaseFanAuto(fields) {
|
|
52
|
+
return fields.f_auto === ON;
|
|
53
|
+
}
|
|
54
|
+
/** Whether airside is on in a `get_control_info` reply. */
|
|
55
|
+
export function parseAirbaseAirside(fields) {
|
|
56
|
+
return fields.f_airside === ON;
|
|
57
|
+
}
|
|
58
|
+
/** Turns `current`, the `get_control_info` reply, and a control into the
|
|
59
|
+
* `set_control_info` query: power, mode, setpoint, humidity, fan speed, fan
|
|
60
|
+
* auto, airside and direction, every time. When the mode changes, the
|
|
61
|
+
* setpoint, the fan and the direction come from what the unit remembers for
|
|
62
|
+
* cool or for heat. It drops a `targetTemperatureInC` in fan and dehumidify,
|
|
63
|
+
* every `targetHumidity` and louver position, and sends `shum` back as the
|
|
64
|
+
* unit holds it. A `fanSpeed` switches airside off and keeps fan auto. */
|
|
65
|
+
export function applyAirbaseControl(current, control) {
|
|
66
|
+
return buildControl(current, control, {});
|
|
67
|
+
}
|
|
68
|
+
/** Turns `current`, the `get_control_info` reply, into the `set_control_info`
|
|
69
|
+
* query that switches fan auto on or off. It switches airside off, and keeps
|
|
70
|
+
* the fan speed. */
|
|
71
|
+
export function applyAirbaseFanAuto(current, enabled) {
|
|
72
|
+
return buildControl(current, {}, { auto: enabled });
|
|
73
|
+
}
|
|
74
|
+
/** Turns `current`, the `get_control_info` reply, into the `set_control_info`
|
|
75
|
+
* query that switches airside on or off. Switching it on switches fan auto
|
|
76
|
+
* off and sets the lowest fan speed, which airside runs at. */
|
|
77
|
+
export function applyAirbaseAirside(current, enabled) {
|
|
78
|
+
return buildControl(current, {}, { airside: enabled });
|
|
79
|
+
}
|
|
80
|
+
function buildControl(current, control, fan) {
|
|
81
|
+
const { cool, heat, fan: fanMode, dehumidify } = AIRBASE_OPERATING_MODE_CODES;
|
|
82
|
+
// A mode outside the model is sent back as it came.
|
|
83
|
+
const currentMode = current.mode ?? "";
|
|
84
|
+
const mode = control.mode === undefined
|
|
85
|
+
? currentMode
|
|
86
|
+
: AIRBASE_OPERATING_MODE_CODES[control.mode];
|
|
87
|
+
const modeChanged = mode !== currentMode;
|
|
88
|
+
// A change to cool or to heat makes that mode the one the others run on.
|
|
89
|
+
const backing = modeChanged && (mode === cool || mode === heat) ? mode : current.bk_auto;
|
|
90
|
+
// Which of the two memories applies: heat's, or cool's for anything else.
|
|
91
|
+
const memory = (backing || mode) === heat ? heat : cool;
|
|
92
|
+
const remembered = (field, memoryPrefix, fallback) => (modeChanged ? current[`${memoryPrefix}${memory}`] : undefined) ||
|
|
93
|
+
current[field] ||
|
|
94
|
+
fallback;
|
|
95
|
+
const power = control.power ?? current.pow === ON;
|
|
96
|
+
const next = { pow: power ? ON : OFF, mode };
|
|
97
|
+
if (backing) {
|
|
98
|
+
next.bk_auto = backing;
|
|
99
|
+
}
|
|
100
|
+
next.stemp =
|
|
101
|
+
mode === dehumidify
|
|
102
|
+
? AIRBASE_NO_SETPOINT
|
|
103
|
+
: control.targetTemperatureInC != null && mode !== fanMode
|
|
104
|
+
? control.targetTemperatureInC.toFixed(1)
|
|
105
|
+
: remembered("stemp", "dt", AIRBASE_NO_SETPOINT);
|
|
106
|
+
// Each mode's setpoint is written to its own memory as well, and auto's to
|
|
107
|
+
// the memory of the mode it runs on.
|
|
108
|
+
const setpointMemory = mode === cool || mode === heat || mode === fanMode || mode === dehumidify
|
|
109
|
+
? mode
|
|
110
|
+
: mode === AIRBASE_OPERATING_MODE_CODES.auto && backing
|
|
111
|
+
? memory
|
|
112
|
+
: undefined;
|
|
113
|
+
if (setpointMemory !== undefined) {
|
|
114
|
+
next[`dt${setpointMemory}`] = next.stemp;
|
|
115
|
+
}
|
|
116
|
+
next.shum = current.shum || AIRBASE_NO_SETPOINT;
|
|
117
|
+
next.f_rate =
|
|
118
|
+
control.fanSpeed === undefined
|
|
119
|
+
? remembered("f_rate", "dfr", AIRBASE_FAN_SPEED_CODES.auto)
|
|
120
|
+
: AIRBASE_FAN_SPEED_CODES[control.fanSpeed];
|
|
121
|
+
next.f_auto = remembered("f_auto", "auto", OFF);
|
|
122
|
+
next.f_airside = remembered("f_airside", "airside", OFF);
|
|
123
|
+
const fanChanged = control.fanSpeed !== undefined || fan.auto !== undefined;
|
|
124
|
+
if (fan.auto !== undefined) {
|
|
125
|
+
next.f_auto = fan.auto ? ON : OFF;
|
|
126
|
+
}
|
|
127
|
+
if (fanChanged) {
|
|
128
|
+
next.f_airside = OFF;
|
|
129
|
+
}
|
|
130
|
+
if (fan.airside !== undefined) {
|
|
131
|
+
next.f_airside = fan.airside ? ON : OFF;
|
|
132
|
+
}
|
|
133
|
+
if (fan.airside) {
|
|
134
|
+
next.f_rate = AIRSIDE_FAN_SPEED;
|
|
135
|
+
}
|
|
136
|
+
// Airside and fan auto are never on together.
|
|
137
|
+
if (next.f_airside === ON) {
|
|
138
|
+
next.f_auto = OFF;
|
|
139
|
+
}
|
|
140
|
+
// A change to the fan is written to the memory as well.
|
|
141
|
+
if (fanChanged) {
|
|
142
|
+
next[`dfr${memory}`] = next.f_rate;
|
|
143
|
+
next[`auto${memory}`] = next.f_auto;
|
|
144
|
+
}
|
|
145
|
+
if (fanChanged || fan.airside !== undefined) {
|
|
146
|
+
next[`airside${memory}`] = next.f_airside;
|
|
147
|
+
}
|
|
148
|
+
next.f_dir =
|
|
149
|
+
control.swingMode === undefined
|
|
150
|
+
? remembered("f_dir", "dfd", AIRBASE_SWING_MODE_CODES.off)
|
|
151
|
+
: AIRBASE_SWING_MODE_CODES[control.swingMode];
|
|
152
|
+
if (control.swingMode !== undefined) {
|
|
153
|
+
next[`dfd${memory}`] = next.f_dir;
|
|
154
|
+
}
|
|
155
|
+
return next;
|
|
156
|
+
}
|
|
157
|
+
function parseNumeric(value) {
|
|
158
|
+
if (value === undefined || value === "") {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
const parsed = Number(value);
|
|
162
|
+
// A reading the unit lacks is "-", and a mode without a setpoint holds
|
|
163
|
+
// "--" or a letter, none of which is a number.
|
|
164
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/codecs/airbase/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FanSpeed, OperatingMode, SwingMode } from "../../models/state.js";
|
|
2
|
+
export declare const AIRBASE_OPERATING_MODE_CODES: Record<OperatingMode, string>;
|
|
3
|
+
export declare const AIRBASE_FAN_SPEED_CODES: Record<FanSpeed, string>;
|
|
4
|
+
export declare const AIRBASE_SWING_MODE_CODES: Record<SwingMode, string>;
|
|
5
|
+
/** What `stemp` holds in a mode without a setpoint, such as dehumidify. */
|
|
6
|
+
export declare const AIRBASE_NO_SETPOINT = "--";
|
|
7
|
+
//# sourceMappingURL=tables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../src/codecs/airbase/tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKhF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAMtE,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAQ5D,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAK9D,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,OAAO,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// The codes an Airbase adapter holds each value of a model as. It numbers
|
|
2
|
+
// the modes and the fan speeds differently from a classic adapter.
|
|
3
|
+
export const AIRBASE_OPERATING_MODE_CODES = {
|
|
4
|
+
fan: "0",
|
|
5
|
+
heat: "1",
|
|
6
|
+
cool: "2",
|
|
7
|
+
auto: "3",
|
|
8
|
+
dehumidify: "7",
|
|
9
|
+
};
|
|
10
|
+
export const AIRBASE_FAN_SPEED_CODES = {
|
|
11
|
+
auto: "0",
|
|
12
|
+
silent: "B",
|
|
13
|
+
level1: "1",
|
|
14
|
+
level2: "2",
|
|
15
|
+
level3: "3",
|
|
16
|
+
level4: "4",
|
|
17
|
+
level5: "5",
|
|
18
|
+
};
|
|
19
|
+
export const AIRBASE_SWING_MODE_CODES = {
|
|
20
|
+
off: "0",
|
|
21
|
+
vertical: "1",
|
|
22
|
+
horizontal: "2",
|
|
23
|
+
both: "3",
|
|
24
|
+
};
|
|
25
|
+
/** What `stemp` holds in a mode without a setpoint, such as dehumidify. */
|
|
26
|
+
export const AIRBASE_NO_SETPOINT = "--";
|
|
27
|
+
//# sourceMappingURL=tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/codecs/airbase/tables.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,mEAAmE;AAEnE,MAAM,CAAC,MAAM,4BAA4B,GAAkC;IACzE,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAA8B;IACjE,GAAG,EAAE,GAAG;IACR,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,GAAG;IACf,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DaikinZone } from "../../models/zone.js";
|
|
2
|
+
/** Turns a `get_zone_setting` reply into the unit's zones, the first
|
|
3
|
+
* `en_zone` of them. `capabilityFields` is the field map of
|
|
4
|
+
* `mergeAirbaseCapabilityFields`. */
|
|
5
|
+
export declare function parseAirbaseZones(zoneSetting: Record<string, string>, capabilityFields: Record<string, string>): DaikinZone[];
|
|
6
|
+
/** Turns `current`, the `get_zone_setting` reply, into the `set_zone_setting`
|
|
7
|
+
* query that opens or closes the zone at `index`, counted from 0. Every name
|
|
8
|
+
* goes back as the unit holds it, with each zone's temperatures where the
|
|
9
|
+
* unit has them. It throws an `Error` for an index the unit has no zone
|
|
10
|
+
* at. */
|
|
11
|
+
export declare function applyAirbaseZone(current: Record<string, string>, capabilityFields: Record<string, string>, index: number, enabled: boolean): Record<string, string>;
|
|
12
|
+
//# sourceMappingURL=zone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone.d.ts","sourceRoot":"","sources":["../../../src/codecs/airbase/zone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAiBvD;;qCAEqC;AACrC,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,UAAU,EAAE,CAQd;AAED;;;;SAIS;AACT,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { decodeClassicText } from "../classic/keyValue.js";
|
|
2
|
+
import { parseAirbaseZoneCount } from "./capabilities.js";
|
|
3
|
+
// `get_zone_setting` answers the zones as lists joined by `;`, form-encoded:
|
|
4
|
+
// their names in `zone_name`, and 1 or 0 for each in `zone_onoff`.
|
|
5
|
+
const SEPARATOR = ";";
|
|
6
|
+
// A unit that sets a temperature for each zone answers these two as well, and
|
|
7
|
+
// takes them back with every write.
|
|
8
|
+
const ZONE_TEMPERATURE_FIELDS = ["lztemp_c", "lztemp_h"];
|
|
9
|
+
function decodeList(value) {
|
|
10
|
+
return value === undefined || value === ""
|
|
11
|
+
? []
|
|
12
|
+
: decodeClassicText(value).split(SEPARATOR);
|
|
13
|
+
}
|
|
14
|
+
/** Turns a `get_zone_setting` reply into the unit's zones, the first
|
|
15
|
+
* `en_zone` of them. `capabilityFields` is the field map of
|
|
16
|
+
* `mergeAirbaseCapabilityFields`. */
|
|
17
|
+
export function parseAirbaseZones(zoneSetting, capabilityFields) {
|
|
18
|
+
const flags = decodeList(zoneSetting.zone_onoff);
|
|
19
|
+
return decodeList(zoneSetting.zone_name)
|
|
20
|
+
.slice(0, parseAirbaseZoneCount(capabilityFields))
|
|
21
|
+
.map((name, index) => ({
|
|
22
|
+
name: name.trim(),
|
|
23
|
+
enabled: flags[index] === "1",
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
/** Turns `current`, the `get_zone_setting` reply, into the `set_zone_setting`
|
|
27
|
+
* query that opens or closes the zone at `index`, counted from 0. Every name
|
|
28
|
+
* goes back as the unit holds it, with each zone's temperatures where the
|
|
29
|
+
* unit has them. It throws an `Error` for an index the unit has no zone
|
|
30
|
+
* at. */
|
|
31
|
+
export function applyAirbaseZone(current, capabilityFields, index, enabled) {
|
|
32
|
+
const zoneCount = parseAirbaseZones(current, capabilityFields).length;
|
|
33
|
+
if (!Number.isInteger(index) || index < 0 || index >= zoneCount) {
|
|
34
|
+
throw new Error(`The unit has no zone ${index}: it has ${zoneCount}`);
|
|
35
|
+
}
|
|
36
|
+
const flags = decodeList(current.zone_onoff);
|
|
37
|
+
flags[index] = enabled ? "1" : "0";
|
|
38
|
+
const query = {
|
|
39
|
+
zone_name: decodeList(current.zone_name).join(SEPARATOR),
|
|
40
|
+
zone_onoff: flags.join(SEPARATOR),
|
|
41
|
+
};
|
|
42
|
+
for (const field of ZONE_TEMPERATURE_FIELDS) {
|
|
43
|
+
const value = current[field];
|
|
44
|
+
if (value !== undefined) {
|
|
45
|
+
query[field] = decodeClassicText(value);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return query;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=zone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone.js","sourceRoot":"","sources":["../../../src/codecs/airbase/zone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,6EAA6E;AAC7E,mEAAmE;AACnE,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,8EAA8E;AAC9E,oCAAoC;AACpC,MAAM,uBAAuB,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAEzD,SAAS,UAAU,CAAC,KAAyB;IAC3C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QACxC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED;;qCAEqC;AACrC,MAAM,UAAU,iBAAiB,CAC/B,WAAmC,EACnC,gBAAwC;IAExC,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjD,OAAO,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC;SACrC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;SACjD,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACjB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG;KAC9B,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;SAIS;AACT,MAAM,UAAU,gBAAgB,CAC9B,OAA+B,EAC/B,gBAAwC,EACxC,KAAa,EACb,OAAgB;IAEhB,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,YAAY,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACnC,MAAM,KAAK,GAA2B;QACpC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACxD,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;KAClC,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,uBAAuB,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/codecs/classic/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/codecs/classic/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,8BAA8B,CAAC;AAoDtC;;;;yBAIyB;AACzB,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED;;;qBAGqB;AACrB,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,kBAAkB,CAmCpB;AA0ED;wEACwE;AACxE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAE5E;AAoCD;wCACwC;AACxC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAY7E"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import { FIXED_LOUVER_POSITIONS, HUMIDITY_SETTINGS, OPERATING_MODES, SPECIAL_MODES, SWING_MODES, } from "../../models/state.js";
|
|
2
|
+
import { CLASSIC_COOLING_ONLY_TYPE, CLASSIC_SPECIAL_MODE_BITS, } from "./tables.js";
|
|
2
3
|
const CAPABILITY_VERSIONS = ["0", "1", "2", "3"];
|
|
3
|
-
// `en_spmode` sets one bit for each special mode the unit takes. Bit 8 is a
|
|
4
|
-
// mode outside `SpecialMode`. The powerful and econo bits count only at
|
|
5
|
-
// `cpv=3` with a `cpv_minor` other than `00`: see UNSUPPORTED.md.
|
|
6
|
-
const SPECIAL_MODE_BITS = {
|
|
7
|
-
powerful: 1,
|
|
8
|
-
econo: 2,
|
|
9
|
-
streamer: 4,
|
|
10
|
-
};
|
|
11
4
|
const COOLING_ONLY_MODES = [
|
|
12
5
|
"cool",
|
|
13
6
|
"dehumidify",
|
|
@@ -87,11 +80,12 @@ export function parseClassicCapabilities(fields) {
|
|
|
87
80
|
};
|
|
88
81
|
}
|
|
89
82
|
// Lists none for a unit that reports no `en_spmode`, and econo in every mode
|
|
90
|
-
// but fan
|
|
83
|
+
// but fan. The powerful and econo bits count only at `cpv=3` with a
|
|
84
|
+
// `cpv_minor` other than `00`: see UNSUPPORTED.md.
|
|
91
85
|
function specialModes(fields, cpv, offeredModes) {
|
|
92
86
|
const bits = Number.parseInt(fields.en_spmode ?? "", 10);
|
|
93
87
|
const followsPowerfulAndEcono = cpv === "3" && (fields.cpv_minor ?? "00") !== "00";
|
|
94
|
-
const taken = SPECIAL_MODES.filter((specialMode) => (bits &
|
|
88
|
+
const taken = SPECIAL_MODES.filter((specialMode) => (bits & CLASSIC_SPECIAL_MODE_BITS[specialMode]) !== 0 &&
|
|
95
89
|
(specialMode === "streamer" || followsPowerfulAndEcono));
|
|
96
90
|
const inMode = (mode) => offeredModes.includes(mode)
|
|
97
91
|
? taken.filter((specialMode) => mode !== "fan" || specialMode !== "econo")
|
|
@@ -111,7 +105,7 @@ function modes(fields, cpv) {
|
|
|
111
105
|
if (!CAPABILITY_VERSIONS.includes(cpv)) {
|
|
112
106
|
return [];
|
|
113
107
|
}
|
|
114
|
-
return fields.model_type ===
|
|
108
|
+
return fields.model_type === CLASSIC_COOLING_ONLY_TYPE
|
|
115
109
|
? OPERATING_MODES.filter((mode) => COOLING_ONLY_MODES.includes(mode))
|
|
116
110
|
: [...OPERATING_MODES];
|
|
117
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/codecs/classic/capabilities.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,sBAAsB,EAEtB,iBAAiB,EACjB,eAAe,EAEf,aAAa,EAEb,WAAW,GAIZ,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/codecs/classic/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extendedControl.d.ts","sourceRoot":"","sources":["../../../src/codecs/classic/extendedControl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,WAAW,EACX,cAAc,EACd,aAAa,EACd,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"extendedControl.d.ts","sourceRoot":"","sources":["../../../src/codecs/classic/extendedControl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,WAAW,EACX,cAAc,EACd,aAAa,EACd,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAkBzD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEpE;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,GAAG,IAAI,CAEhB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED;eACe;AACf,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,GAAG,IAAI,CAEhB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,GACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAED;kBACkB;AAClB,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,GAAG,IAAI,CAIhB;AAED;;yEAEyE;AACzE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,EAAE,OAAO,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB;AAED;;qBAEqB;AACrB,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE7E;AAED;;mBAEmB;AACnB,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,cAAc,CAahB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5E;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,aAAa,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB"}
|
|
@@ -1,25 +1,11 @@
|
|
|
1
1
|
import { decodeClassicText } from "./keyValue.js";
|
|
2
|
+
import { CLASSIC_REMOTE_METHODS, CLASSIC_SPECIAL_MODE_KIND_CODES, CLASSIC_TERMINAL_SCOPE_CODES, } from "./tables.js";
|
|
2
3
|
// Encodes each control outside `DaikinState` as the query its classic `set_*`
|
|
3
4
|
// endpoint takes, and reads each one back from the reply that reports it.
|
|
4
|
-
const TERMINAL_SCOPE_CODES = {
|
|
5
|
-
self: "0",
|
|
6
|
-
others: "1",
|
|
7
|
-
all: "2",
|
|
8
|
-
};
|
|
9
5
|
const DEMAND_MODE_CODES = {
|
|
10
6
|
manual: "0",
|
|
11
7
|
auto: "2",
|
|
12
8
|
};
|
|
13
|
-
// `spmode_kind` on the wire, which numbers the modes differently from the
|
|
14
|
-
// `adv` that `parseClassicState` reads.
|
|
15
|
-
const SPECIAL_MODE_KIND_CODES = {
|
|
16
|
-
powerful: "1",
|
|
17
|
-
econo: "2",
|
|
18
|
-
};
|
|
19
|
-
// `method`: the adapter is reached from outside the home network while it
|
|
20
|
-
// polls, and from inside only otherwise.
|
|
21
|
-
const REMOTE_METHOD_POLLING = "polling";
|
|
22
|
-
const REMOTE_METHOD_HOME_ONLY = "home only";
|
|
23
9
|
const REMOTE_METHOD_INTERVALS = ["notice_ip_int", "notice_sync_int"];
|
|
24
10
|
export function encodeClassicLed(on) {
|
|
25
11
|
return { led: flag(on) };
|
|
@@ -47,21 +33,26 @@ export function encodeClassicDemandControl(demand) {
|
|
|
47
33
|
export function encodeClassicSpecialMode(mode, enabled) {
|
|
48
34
|
return mode === "streamer"
|
|
49
35
|
? { en_streamer: flag(enabled) }
|
|
50
|
-
: {
|
|
36
|
+
: {
|
|
37
|
+
set_spmode: flag(enabled),
|
|
38
|
+
spmode_kind: CLASSIC_SPECIAL_MODE_KIND_CODES[mode],
|
|
39
|
+
};
|
|
51
40
|
}
|
|
52
41
|
/** Reads out-of-home access from a `basic_info` reply: `null` when it carries
|
|
53
42
|
* no `method`. */
|
|
54
43
|
export function parseClassicOutOfHomeAccess(fields) {
|
|
55
44
|
return fields.method === undefined
|
|
56
45
|
? null
|
|
57
|
-
: fields.method ===
|
|
46
|
+
: fields.method === CLASSIC_REMOTE_METHODS.polling;
|
|
58
47
|
}
|
|
59
48
|
/** Turns `current`, the `get_remote_method` reply, and `enabled` into the
|
|
60
49
|
* `set_remote_method` query. The endpoint takes the intervals back unchanged,
|
|
61
50
|
* so the reply's `notice_ip_int` and `notice_sync_int` are copied in. */
|
|
62
51
|
export function applyClassicOutOfHomeAccess(current, enabled) {
|
|
63
52
|
const query = {
|
|
64
|
-
method: enabled
|
|
53
|
+
method: enabled
|
|
54
|
+
? CLASSIC_REMOTE_METHODS.polling
|
|
55
|
+
: CLASSIC_REMOTE_METHODS.homeOnly,
|
|
65
56
|
};
|
|
66
57
|
for (const key of REMOTE_METHOD_INTERVALS) {
|
|
67
58
|
const value = current[key];
|
|
@@ -112,7 +103,7 @@ export function encodeClassicTerminalKey(key) {
|
|
|
112
103
|
return { key };
|
|
113
104
|
}
|
|
114
105
|
export function encodeClassicTerminalScope(scope) {
|
|
115
|
-
return { type:
|
|
106
|
+
return { type: CLASSIC_TERMINAL_SCOPE_CODES[scope] };
|
|
116
107
|
}
|
|
117
108
|
function flag(on) {
|
|
118
109
|
return on ? "1" : "0";
|