daikin-local-control 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/DESIGN.md +113 -2
  2. package/README.md +129 -11
  3. package/UNSUPPORTED.md +41 -3
  4. package/dist/clients/classic.d.ts +2 -2
  5. package/dist/clients/classic.d.ts.map +1 -1
  6. package/dist/clients/classic.js +4 -4
  7. package/dist/clients/classic.js.map +1 -1
  8. package/dist/clients/client.d.ts +5 -1
  9. package/dist/clients/client.d.ts.map +1 -1
  10. package/dist/clients/dsiot.d.ts +3 -1
  11. package/dist/clients/dsiot.d.ts.map +1 -1
  12. package/dist/clients/dsiot.js +7 -2
  13. package/dist/clients/dsiot.js.map +1 -1
  14. package/dist/codecs/classic/capabilities.d.ts.map +1 -1
  15. package/dist/codecs/classic/capabilities.js +5 -11
  16. package/dist/codecs/classic/capabilities.js.map +1 -1
  17. package/dist/codecs/classic/extendedControl.d.ts.map +1 -1
  18. package/dist/codecs/classic/extendedControl.js +10 -19
  19. package/dist/codecs/classic/extendedControl.js.map +1 -1
  20. package/dist/codecs/classic/state.d.ts.map +1 -1
  21. package/dist/codecs/classic/state.js +36 -95
  22. package/dist/codecs/classic/state.js.map +1 -1
  23. package/dist/codecs/classic/tables.d.ts +32 -0
  24. package/dist/codecs/classic/tables.d.ts.map +1 -0
  25. package/dist/codecs/classic/tables.js +94 -0
  26. package/dist/codecs/classic/tables.js.map +1 -0
  27. package/dist/codecs/credentials.d.ts +3 -2
  28. package/dist/codecs/credentials.d.ts.map +1 -1
  29. package/dist/codecs/credentials.js +8 -3
  30. package/dist/codecs/credentials.js.map +1 -1
  31. package/dist/codecs/device.js +2 -2
  32. package/dist/codecs/device.js.map +1 -1
  33. package/dist/codecs/dsiot/capabilities.d.ts.map +1 -1
  34. package/dist/codecs/dsiot/capabilities.js +8 -15
  35. package/dist/codecs/dsiot/capabilities.js.map +1 -1
  36. package/dist/codecs/dsiot/device.d.ts.map +1 -1
  37. package/dist/codecs/dsiot/device.js +4 -8
  38. package/dist/codecs/dsiot/device.js.map +1 -1
  39. package/dist/codecs/dsiot/multireq.d.ts +0 -19
  40. package/dist/codecs/dsiot/multireq.d.ts.map +1 -1
  41. package/dist/codecs/dsiot/multireq.js +2 -25
  42. package/dist/codecs/dsiot/multireq.js.map +1 -1
  43. package/dist/codecs/dsiot/state.d.ts +6 -62
  44. package/dist/codecs/dsiot/state.d.ts.map +1 -1
  45. package/dist/codecs/dsiot/state.js +29 -148
  46. package/dist/codecs/dsiot/state.js.map +1 -1
  47. package/dist/codecs/dsiot/tables.d.ts +116 -0
  48. package/dist/codecs/dsiot/tables.d.ts.map +1 -0
  49. package/dist/codecs/dsiot/tables.js +185 -0
  50. package/dist/codecs/dsiot/tables.js.map +1 -0
  51. package/dist/discovery.d.ts +2 -1
  52. package/dist/discovery.d.ts.map +1 -1
  53. package/dist/discovery.js +9 -5
  54. package/dist/discovery.js.map +1 -1
  55. package/dist/factory.d.ts +7 -4
  56. package/dist/factory.d.ts.map +1 -1
  57. package/dist/factory.js +4 -2
  58. package/dist/factory.js.map +1 -1
  59. package/dist/index.d.ts +2 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +2 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/models/state.d.ts +2 -3
  64. package/dist/models/state.d.ts.map +1 -1
  65. package/dist/simulators/classic.d.ts +61 -0
  66. package/dist/simulators/classic.d.ts.map +1 -0
  67. package/dist/simulators/classic.js +473 -0
  68. package/dist/simulators/classic.js.map +1 -0
  69. package/dist/simulators/dsiot.d.ts +49 -0
  70. package/dist/simulators/dsiot.d.ts.map +1 -0
  71. package/dist/simulators/dsiot.js +519 -0
  72. package/dist/simulators/dsiot.js.map +1 -0
  73. package/dist/simulators/index.d.ts +4 -0
  74. package/dist/simulators/index.d.ts.map +1 -0
  75. package/dist/simulators/index.js +3 -0
  76. package/dist/simulators/index.js.map +1 -0
  77. package/dist/simulators/simulator.d.ts +116 -0
  78. package/dist/simulators/simulator.d.ts.map +1 -0
  79. package/dist/simulators/simulator.js +141 -0
  80. package/dist/simulators/simulator.js.map +1 -0
  81. package/dist/transport.d.ts +6 -2
  82. package/dist/transport.d.ts.map +1 -1
  83. package/dist/transport.js +7 -2
  84. package/dist/transport.js.map +1 -1
  85. package/package.json +5 -2
  86. package/src/clients/classic.ts +8 -8
  87. package/src/clients/client.ts +6 -0
  88. package/src/clients/dsiot.ts +8 -1
  89. package/src/codecs/classic/capabilities.ts +8 -11
  90. package/src/codecs/classic/extendedControl.ts +14 -25
  91. package/src/codecs/classic/state.ts +49 -101
  92. package/src/codecs/classic/tables.ts +123 -0
  93. package/src/codecs/credentials.ts +11 -3
  94. package/src/codecs/device.ts +2 -2
  95. package/src/codecs/dsiot/capabilities.ts +10 -17
  96. package/src/codecs/dsiot/device.ts +4 -9
  97. package/src/codecs/dsiot/multireq.ts +2 -25
  98. package/src/codecs/dsiot/state.ts +57 -193
  99. package/src/codecs/dsiot/tables.ts +249 -0
  100. package/src/discovery.ts +9 -5
  101. package/src/factory.ts +7 -4
  102. package/src/index.ts +2 -0
  103. package/src/models/state.ts +2 -3
  104. package/src/simulators/classic.ts +635 -0
  105. package/src/simulators/dsiot.ts +736 -0
  106. package/src/simulators/index.ts +9 -0
  107. package/src/simulators/simulator.ts +281 -0
  108. package/src/transport.ts +10 -3
@@ -1,16 +1,9 @@
1
1
  import { FAN_SPEEDS, FIXED_LOUVER_POSITIONS, HORIZONTAL_POSITIONS, HUMIDITY_SETTINGS, OPERATING_MODES, SPECIAL_MODES, SWING_MODES, VERTICAL_POSITIONS, } from "../../models/state.js";
2
- import { DSIOT_HORIZONTAL_POSITION_VALUES, DSIOT_MODE_PATHS, DSIOT_PATHS, DSIOT_SPECIAL_MODE_PATHS, DSIOT_VERTICAL_POSITION_VALUES, decodeDsiotLittleEndian, } from "./state.js";
2
+ import { decodeDsiotLittleEndian } from "./state.js";
3
+ import { DSIOT_ADAPTER_PATHS, DSIOT_COOLING_ONLY_MODEL_TYPE, DSIOT_HORIZONTAL_POSITION_VALUES, DSIOT_MODE_PATHS, DSIOT_PATHS, DSIOT_SPECIAL_MODE_PATHS, DSIOT_VERTICAL_POSITION_VALUES, } from "./tables.js";
3
4
  const MODE_PATHS = Object.values(DSIOT_MODE_PATHS);
4
- const ADAPTER_PATHS = {
5
- region: "adp_i.reg",
6
- kind: "adp_i.kind",
7
- energyMonitoring: "adp_i.func.en_ipower",
8
- demandControl: "adp_i.func.en_demand",
9
- scheduleTimer: "adp_i.func.en_scdltmr",
10
- };
11
5
  // The `pt` of a special mode's leaf on a unit that takes the mode.
12
6
  const SPECIAL_MODE_OFFERED_TYPE = "2";
13
- const COOLING_ONLY_MODEL_TYPE = "01";
14
7
  const COOLING_ONLY_MODES = [
15
8
  "dehumidify",
16
9
  "cool",
@@ -24,7 +17,7 @@ const FIXED_POSITIONS = FIXED_LOUVER_POSITIONS;
24
17
  * degrees. Without the outdoor tree, `specialModes` lists no `powerful`. It
25
18
  * lists econo in every mode but fan: see UNSUPPORTED.md. */
26
19
  export function parseDsiotCapabilities(values) {
27
- const modes = values[DSIOT_PATHS.modelType] === COOLING_ONLY_MODEL_TYPE
20
+ const modes = values[DSIOT_PATHS.modelType] === DSIOT_COOLING_ONLY_MODEL_TYPE
28
21
  ? [...COOLING_ONLY_MODES]
29
22
  : [...OPERATING_MODES];
30
23
  const offered = (mode, range) => modes.includes(mode) ? range : null;
@@ -42,7 +35,7 @@ export function parseDsiotCapabilities(values) {
42
35
  : [];
43
36
  const vertical = hasLouver(values, "vertical");
44
37
  const horizontal = hasLouver(values, "horizontal");
45
- const energyMonitoring = values[ADAPTER_PATHS.energyMonitoring] === "1" &&
38
+ const energyMonitoring = values[DSIOT_ADAPTER_PATHS.energyMonitoring] === "1" &&
46
39
  values[DSIOT_PATHS.energyMonitoring] === "01";
47
40
  return {
48
41
  modes,
@@ -81,9 +74,9 @@ export function parseDsiotCapabilities(values) {
81
74
  specialOutlet: false,
82
75
  energyMonitoring,
83
76
  demandControl: energyMonitoring &&
84
- values[ADAPTER_PATHS.kind] === "4" &&
85
- values[ADAPTER_PATHS.demandControl] === "1",
86
- scheduleTimer: ["1", "2"].includes(values[ADAPTER_PATHS.scheduleTimer] ?? ""),
77
+ values[DSIOT_ADAPTER_PATHS.kind] === "4" &&
78
+ values[DSIOT_ADAPTER_PATHS.demandControl] === "1",
79
+ scheduleTimer: ["1", "2"].includes(values[DSIOT_ADAPTER_PATHS.scheduleTimer] ?? ""),
87
80
  model: values[DSIOT_PATHS.model],
88
81
  };
89
82
  }
@@ -99,7 +92,7 @@ function takes(mask, value) {
99
92
  }
100
93
  // Japanese units (`jp`) follow other rules: see UNSUPPORTED.md.
101
94
  function fanSpeeds(values) {
102
- const region = values[ADAPTER_PATHS.region];
95
+ const region = values[DSIOT_ADAPTER_PATHS.region];
103
96
  if (!region || region === "jp") {
104
97
  return [];
105
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/codecs/dsiot/capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/codecs/dsiot/capabilities.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,UAAU,EAEV,sBAAsB,EACtB,oBAAoB,EAEpB,iBAAiB,EACjB,eAAe,EAEf,aAAa,EACb,WAAW,EAEX,kBAAkB,GAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,gCAAgC,EAChC,gBAAgB,EAChB,WAAW,EACX,wBAAwB,EACxB,8BAA8B,GAE/B,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEnD,mEAAmE;AACnE,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC,MAAM,kBAAkB,GAA6B;IACnD,YAAY;IACZ,MAAM;IACN,KAAK;CACN,CAAC;AAEF,yDAAyD;AACzD,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,eAAe,GAAsB,sBAAsB,CAAC;AAIlE;;;4DAG4D;AAC5D,MAAM,UAAU,sBAAsB,CACpC,MAA8B;IAE9B,MAAM,KAAK,GACT,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,6BAA6B;QAC7D,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;QACzB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,KAAuB,EAAE,EAAE,CAC/D,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,yEAAyE;IACzE,MAAM,gBAAgB,GAAG,CAAC,IAAmB,EAAE,EAAE;QAC/C,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC;QACnD,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,MAAM;YACjE,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;YACxB,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC;IACF,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAC5C,CAAC,WAAW,EAAE,EAAE,CACd,MAAM,CAAC,GAAG,wBAAwB,CAAC,WAAW,CAAC,KAAK,CAAC;QACrD,yBAAyB,CAC5B,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,IAAmB,EAAE,EAAE,CAC3C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClB,CAAC,CAAC,iBAAiB,CAAC,MAAM,CACtB,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,WAAW,KAAK,OAAO,CAC3D;QACH,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,gBAAgB,GACpB,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,KAAK,GAAG;QACpD,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAEhD,OAAO;QACL,KAAK;QACL,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC;QAC5B,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC5C,iBAAiB,EAAE,QAAQ;YACzB,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACnD,CAAC,CAAC,EAAE;QACN,mBAAmB,EAAE,UAAU;YAC7B,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACvD,CAAC,CAAC,EAAE;QACN,qBAAqB,EAAE;YACrB,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACtD,IAAI,EAAE,OAAO,CACX,MAAM,EACN,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CACtD;YACD,IAAI,EAAE,OAAO,CACX,MAAM,EACN,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CACtD;YACD,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,IAAI;SACV;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAC9B,2BAA2B;YAC3B,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,MAAM,CAC/C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,CAC/B;YACD,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAC9B,GAAG,EAAE,EAAE;SACR;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;YAC1B,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC;YACtC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;YAC1B,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC;SACzB;QACD,8DAA8D;QAC9D,kBAAkB;QAClB,aAAa,EAAE,KAAK;QACpB,gBAAgB;QAChB,aAAa,EACX,gBAAgB;YAChB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,GAAG;YACxC,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,GAAG;QACnD,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAChC,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,EAAE,CAChD;QACD,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAA8B,EAAE,IAAgB;IACjE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,sEAAsE;AACtE,SAAS,UAAU,CAAC,MAA8B,EAAE,IAAgB;IAClE,OAAO,UAAU,CAAC,MAAM,CACtB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EACtE,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,KAAyB;IACpD,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,gEAAgE;AAChE,SAAS,SAAS,CAAC,MAA8B;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,IAAI,MAAM,CAAC;QAC1D,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QACjB,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,UAAU,CAAC,QAAiB,EAAE,UAAmB;IACxD,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,0EAA0E;AAC1E,wCAAwC;AACxC,SAAS,iBAAiB,CAAC,IAAY;IACrC,uDAAuD;IACvD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC;IACtD,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAI,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,8BAA8B,CAAC,QAAQ,CAAC,CAAC;YACvD,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,+BAA+B;AAC/B,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,oBAAoB,CAAC,MAAM,CAChC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,KAAK,MAAM;QACnB,KAAK,CAAC,IAAI,EAAE,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACrD,CAAC;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,SAAS,KAAK,CACZ,MAA8B,EAC9B,QAAmC,EACnC,WAAmB,EACnB,OAAe;IAEf,MAAM,GAAG,GACP,uBAAuB,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACvE,MAAM,GAAG,GACP,uBAAuB,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9D,OAAO;QACL,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW;QACjC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;QAChD,IAAI,EAAE,GAAG;KACV,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/codecs/dsiot/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAS/D;;;8BAG8B;AAC9B,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,gBAAgB,CAQlB"}
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/codecs/dsiot/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D;;;8BAG8B;AAC9B,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,gBAAgB,CAQlB"}
@@ -1,18 +1,14 @@
1
1
  import { decodeFirmwareVersion, decodeMacAddress } from "../device.js";
2
- const ADAPTER_PATHS = {
3
- name: "adp_d.name",
4
- macAddress: "adp_i.mac",
5
- firmwareVersion: "adp_i.ver",
6
- };
2
+ import { DSIOT_ADAPTER_PATHS } from "./tables.js";
7
3
  /** Reads what the flattened `adp_i` and `adp_d` trees say to identify the
8
4
  * adapter. Both `adp_i` leaves hold the value a classic adapter sends in
9
5
  * `basic_info`. `adp_d.name` holds the name as plain text, where a classic
10
6
  * adapter form-encodes it. */
11
7
  export function parseDsiotDeviceInfo(values) {
12
8
  return {
13
- name: values[ADAPTER_PATHS.name],
14
- macAddress: decodeMacAddress(values[ADAPTER_PATHS.macAddress]),
15
- firmwareVersion: decodeFirmwareVersion(values[ADAPTER_PATHS.firmwareVersion]),
9
+ name: values[DSIOT_ADAPTER_PATHS.name],
10
+ macAddress: decodeMacAddress(values[DSIOT_ADAPTER_PATHS.macAddress]),
11
+ firmwareVersion: decodeFirmwareVersion(values[DSIOT_ADAPTER_PATHS.firmwareVersion]),
16
12
  };
17
13
  }
18
14
  //# sourceMappingURL=device.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/codecs/dsiot/device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,YAAY;IAClB,UAAU,EAAE,WAAW;IACvB,eAAe,EAAE,WAAW;CACpB,CAAC;AAEX;;;8BAG8B;AAC9B,MAAM,UAAU,oBAAoB,CAClC,MAA8B;IAE9B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QAChC,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC9D,eAAe,EAAE,qBAAqB,CACpC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CACtC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/codecs/dsiot/device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;8BAG8B;AAC9B,MAAM,UAAU,oBAAoB,CAClC,MAA8B;IAE9B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACtC,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACpE,eAAe,EAAE,qBAAqB,CACpC,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAC5C;KACF,CAAC;AACJ,CAAC"}
@@ -1,22 +1,3 @@
1
- export declare const DSIOT_OPERATIONS: {
2
- readonly get: 2;
3
- readonly update: 3;
4
- readonly delete: 4;
5
- };
6
- /** The indoor and the outdoor unit are separate edges on the adapter. */
7
- export declare const DSIOT_EDGES: {
8
- readonly indoor: "adr_0100";
9
- readonly outdoor: "adr_0200";
10
- };
11
- /** What a read fetches, as the `to` of a request: whole trees, never single
12
- * leaves. The status trees come with `pt`, which `parseDsiotCapabilities`
13
- * reads. */
14
- export declare const DSIOT_TARGETS: {
15
- readonly adapterInfo: "/dsiot/edge.adp_i?filter=pv";
16
- readonly adapterSettings: "/dsiot/edge.adp_d?filter=pv";
17
- readonly indoorStatus: "/dsiot/edge/adr_0100.dgc_status?filter=pv,pt,md";
18
- readonly outdoorStatus: "/dsiot/edge/adr_0200.dgc_status?filter=pv,pt,md";
19
- };
20
1
  /** One leaf to write: `path` is dotted from its resource, such as
21
2
  * `dgc_status.e_1002.e_A002.p_01`, and `value` is the leaf's hex string. */
22
3
  export interface DsiotUpdate {
@@ -1 +1 @@
1
- {"version":3,"file":"multireq.d.ts","sourceRoot":"","sources":["../../../src/codecs/dsiot/multireq.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,gBAAgB;aAC3B,GAAG,EAAE,CAAC;aACN,MAAM,EAAE,CAAC;aACT,MAAM,EAAE,CAAC;CACD,CAAC;AAEX,yEAAyE;AACzE,eAAO,MAAM,WAAW;aACtB,MAAM,EAAE,UAAU;aAClB,OAAO,EAAE,UAAU;CACX,CAAC;AAIX;;YAEY;AACZ,eAAO,MAAM,aAAa;aACxB,WAAW;aACX,eAAe;aACf,YAAY;aACZ,aAAa;CACL,CAAC;AAeX;4EAC4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAIxE;AAED;;8BAE8B;AAC9B,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,EAAE,EACtB,IAAI,GAAE,MAA2B,GAChC,MAAM,CAqBR;AAWD;;;;;;;uDAOuD;AACvD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB5E"}
1
+ {"version":3,"file":"multireq.d.ts","sourceRoot":"","sources":["../../../src/codecs/dsiot/multireq.ts"],"names":[],"mappings":"AAqBA;4EAC4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAIxE;AAED;;8BAE8B;AAC9B,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,EAAE,EACtB,IAAI,GAAE,MAA2B,GAChC,MAAM,CAqBR;AAWD;;;;;;;uDAOuD;AACvD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB5E"}
@@ -1,28 +1,5 @@
1
1
  import { DaikinError } from "../../error.js";
2
- // The DSIOT (BRP084, `type=GPF`) protocol speaks one endpoint, `/dsiot/multireq`,
3
- // carrying operations on property trees. A request addresses a resource (`to`);
4
- // a tree node has pn (name) / pt (type) / pch (children) / pv (value) / md
5
- // (metadata: mi min, mx max, st step).
6
- export const DSIOT_OPERATIONS = {
7
- get: 2,
8
- update: 3,
9
- delete: 4,
10
- };
11
- /** The indoor and the outdoor unit are separate edges on the adapter. */
12
- export const DSIOT_EDGES = {
13
- indoor: "adr_0100",
14
- outdoor: "adr_0200",
15
- };
16
- const EDGE_ROOT = "/dsiot/edge";
17
- /** What a read fetches, as the `to` of a request: whole trees, never single
18
- * leaves. The status trees come with `pt`, which `parseDsiotCapabilities`
19
- * reads. */
20
- export const DSIOT_TARGETS = {
21
- adapterInfo: `${EDGE_ROOT}.adp_i?filter=pv`,
22
- adapterSettings: `${EDGE_ROOT}.adp_d?filter=pv`,
23
- indoorStatus: `${EDGE_ROOT}/${DSIOT_EDGES.indoor}.dgc_status?filter=pv,pt,md`,
24
- outdoorStatus: `${EDGE_ROOT}/${DSIOT_EDGES.outdoor}.dgc_status?filter=pv,pt,md`,
25
- };
2
+ import { DSIOT_EDGE_ROOT, DSIOT_EDGES, DSIOT_OPERATIONS } from "./tables.js";
26
3
  export function buildDsiotMultireqGet(targets) {
27
4
  return {
28
5
  requests: targets.map((to) => ({ op: DSIOT_OPERATIONS.get, to })),
@@ -48,7 +25,7 @@ export function buildDsiotMultireqUpdate(updates, edge = DSIOT_EDGES.indoor) {
48
25
  return {
49
26
  requests: roots.map((pc) => ({
50
27
  op: DSIOT_OPERATIONS.update,
51
- to: `${EDGE_ROOT}/${edge}.${pc.pn}`,
28
+ to: `${DSIOT_EDGE_ROOT}/${edge}.${pc.pn}`,
52
29
  pc,
53
30
  })),
54
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"multireq.js","sourceRoot":"","sources":["../../../src/codecs/dsiot/multireq.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multireq.js","sourceRoot":"","sources":["../../../src/codecs/dsiot/multireq.ts"],"names":[],"mappings":"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"}
@@ -1,47 +1,9 @@
1
- import { type DaikinControl, type DaikinSensors, type DaikinState, type FanSpeed, type HorizontalPosition, type OperatingMode, type SpecialMode, type VerticalPosition } from "../../models/state.js";
2
- import type { DsiotUpdate } from "./multireq.js";
3
- /** Full dotted paths into the `dgc_status` trees. `e_1002` lives on the indoor
4
- * edge and `e_1003` on the outdoor edge. */
5
- export declare const DSIOT_PATHS: {
6
- readonly power: "dgc_status.e_1002.e_A002.p_01";
7
- /** Sent with every control. */
8
- readonly powerTransition: "dgc_status.e_1002.e_3003.p_2D";
9
- readonly mode: "dgc_status.e_1002.e_3001.p_01";
10
- readonly indoorTemperature: "dgc_status.e_1002.e_A00B.p_01";
11
- readonly indoorHumidity: "dgc_status.e_1002.e_A00B.p_02";
12
- readonly outdoorTemperature: "dgc_status.e_1003.e_A00D.p_01";
13
- readonly model: "dgc_status.e_1002.e_A001.p_0D";
14
- readonly modelType: "dgc_status.e_1002.e_A001.p_07";
15
- readonly energyMonitoring: "dgc_status.e_1002.e_A011.p_01";
16
- };
17
- /** Each leaf holds `01` while its mode is on. Powerful is on the outdoor
18
- * edge. */
19
- export declare const DSIOT_SPECIAL_MODE_PATHS: Record<SpecialMode, string>;
20
- export interface DsiotSetpoint {
21
- path: string;
22
- /** Auto and dehumidify are a signed byte; cool and heat are little-endian. */
23
- signed: boolean;
24
- /** The dehumidify setpoint is read-only. */
25
- writable: boolean;
26
- }
27
- export interface DsiotHumidity {
28
- /** Counted in steps of the leaf's `md.st`. */
29
- value: string;
30
- /** The setting: `00` or `05` off, `01` the percentage in `value`, and one
31
- * value for each `HumiditySetting`. */
32
- flag: string;
33
- }
34
- export interface DsiotModePaths {
35
- /** Absent in fan mode. */
36
- setpoint?: DsiotSetpoint;
37
- /** Absent in fan mode. */
38
- humidity?: DsiotHumidity;
39
- fanSpeed: string;
40
- vertical: string;
41
- horizontal: string;
42
- }
43
- export declare const DSIOT_MODE_NODE = "dgc_status.e_1002.e_3001";
44
- export declare const DSIOT_MODE_PATHS: Record<OperatingMode, DsiotModePaths>;
1
+ import { type DaikinControl, type DaikinSensors, type DaikinState, type FanSpeed, type OperatingMode, type SpecialMode } from "../../models/state.js";
2
+ import { type DsiotUpdate } from "./multireq.js";
3
+ /** Builds the body of the multireq write that turns a special mode on or off:
4
+ * its one leaf, on the outdoor edge for powerful and on the indoor edge for
5
+ * the rest. */
6
+ export declare function buildDsiotSpecialModeUpdate(mode: SpecialMode, enabled: boolean): object;
45
7
  export declare function encodeDsiotBoolean(on: boolean): string;
46
8
  export declare function decodeDsiotBoolean(pv: string | undefined): boolean;
47
9
  export declare function decodeDsiotLittleEndian(pv: string): number;
@@ -57,25 +19,7 @@ export declare function encodeDsiotMode(mode: OperatingMode): string;
57
19
  export declare function decodeDsiotMode(pv: string | undefined): OperatingMode | undefined;
58
20
  export declare function encodeDsiotFanSpeed(speed: FanSpeed): string;
59
21
  export declare function decodeDsiotFanSpeed(pv: string | undefined): FanSpeed | undefined;
60
- /** The values a louver leaf holds besides a fixed position, which is 1-14.
61
- * The leaf is three bytes, little-endian, and bit n of its `md.mx` is set
62
- * when the unit takes value n. */
63
- export declare const DSIOT_LOUVER_VALUES: {
64
- readonly stop: 0;
65
- readonly swing: 15;
66
- readonly auto: 16;
67
- readonly naturalWind: 19;
68
- readonly floorWarming: 25;
69
- };
70
- export declare const DSIOT_LOUVER_STOP = "000000";
71
- export declare const DSIOT_LOUVER_SWING = "0F0000";
72
22
  export declare function isDsiotLouverSwinging(pv: string | undefined): boolean;
73
- /** The value each `VerticalPosition` is held as. A fixed position has none: it
74
- * is held as the value at its rank among the fixed values the unit takes. */
75
- export declare const DSIOT_VERTICAL_POSITION_VALUES: Partial<Record<VerticalPosition, number>>;
76
- /** The value each `HorizontalPosition` is held as. `stop` and a fixed position
77
- * have none: see UNSUPPORTED.md. */
78
- export declare const DSIOT_HORIZONTAL_POSITION_VALUES: Partial<Record<HorizontalPosition, number>>;
79
23
  /** Turns the flattened indoor `dgc_status` tree, read with `md`, into a
80
24
  * `DaikinState`. Every value is per mode: the setpoint, humidity, fan speed and
81
25
  * louvers each have a leaf for each mode, and the state reads the current
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/codecs/dsiot/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/codecs/dsiot/state.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EAKb,KAAK,aAAa,EAElB,KAAK,WAAW,EAKjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAuB3E;;eAEe;AACf,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,OAAO,GACf,MAAM,CAUR;AAMD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAElE;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,MAAM,EAAE,OAAO,GACd,MAAM,GAAG,IAAI,CAMf;AAED,qDAAqD;AACrD,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,MAAM,GAAG,IAAI,CAEf;AAED,8CAA8C;AAC9C,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,MAAM,GAAG,IAAI,CAEf;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,MAAM,GAAG,IAAI,CAOf;AAqBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAE3D;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,aAAa,GAAG,SAAS,CAE3B;AASD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAE3D;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,QAAQ,GAAG,SAAS,CAEtB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAErE;AA0LD;;;;SAIS;AACT,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAkB3E;AAED;;;;;;;;mEAQmE;AACnE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,EAAE,aAAa,GACrB,WAAW,EAAE,CA4Ff;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,aAAa,CAYf"}
@@ -1,91 +1,22 @@
1
1
  import { FIXED_LOUVER_POSITIONS, HORIZONTAL_POSITIONS, SPECIAL_MODES, VERTICAL_POSITIONS, } from "../../models/state.js";
2
- /** Full dotted paths into the `dgc_status` trees. `e_1002` lives on the indoor
3
- * edge and `e_1003` on the outdoor edge. */
4
- export const DSIOT_PATHS = {
5
- power: "dgc_status.e_1002.e_A002.p_01",
6
- /** Sent with every control. */
7
- powerTransition: "dgc_status.e_1002.e_3003.p_2D",
8
- mode: "dgc_status.e_1002.e_3001.p_01",
9
- indoorTemperature: "dgc_status.e_1002.e_A00B.p_01",
10
- indoorHumidity: "dgc_status.e_1002.e_A00B.p_02",
11
- outdoorTemperature: "dgc_status.e_1003.e_A00D.p_01",
12
- model: "dgc_status.e_1002.e_A001.p_0D",
13
- modelType: "dgc_status.e_1002.e_A001.p_07",
14
- energyMonitoring: "dgc_status.e_1002.e_A011.p_01",
15
- };
16
- /** Each leaf holds `01` while its mode is on. Powerful is on the outdoor
17
- * edge. */
18
- export const DSIOT_SPECIAL_MODE_PATHS = {
19
- powerful: "dgc_status.e_1003.e_3002.p_44",
20
- econo: "dgc_status.e_1002.e_3003.p_24",
21
- streamer: "dgc_status.e_1002.e_3003.p_20",
22
- };
23
- const SPECIAL_MODE_ON = "01";
24
- export const DSIOT_MODE_NODE = "dgc_status.e_1002.e_3001";
25
- export const DSIOT_MODE_PATHS = {
26
- auto: {
27
- setpoint: { path: `${DSIOT_MODE_NODE}.p_1D`, signed: true, writable: true },
28
- humidity: {
29
- value: `${DSIOT_MODE_NODE}.p_2E`,
30
- flag: `${DSIOT_MODE_NODE}.p_2F`,
31
- },
32
- fanSpeed: `${DSIOT_MODE_NODE}.p_26`,
33
- vertical: `${DSIOT_MODE_NODE}.p_20`,
34
- horizontal: `${DSIOT_MODE_NODE}.p_21`,
35
- },
36
- dehumidify: {
37
- setpoint: {
38
- path: `${DSIOT_MODE_NODE}.p_1E`,
39
- signed: true,
40
- writable: false,
41
- },
42
- humidity: {
43
- value: `${DSIOT_MODE_NODE}.p_30`,
44
- flag: `${DSIOT_MODE_NODE}.p_31`,
45
- },
46
- fanSpeed: `${DSIOT_MODE_NODE}.p_27`,
47
- vertical: `${DSIOT_MODE_NODE}.p_22`,
48
- horizontal: `${DSIOT_MODE_NODE}.p_23`,
49
- },
50
- cool: {
51
- setpoint: {
52
- path: `${DSIOT_MODE_NODE}.p_02`,
53
- signed: false,
54
- writable: true,
55
- },
56
- humidity: {
57
- value: `${DSIOT_MODE_NODE}.p_0B`,
58
- flag: `${DSIOT_MODE_NODE}.p_0C`,
59
- },
60
- fanSpeed: `${DSIOT_MODE_NODE}.p_09`,
61
- vertical: `${DSIOT_MODE_NODE}.p_05`,
62
- horizontal: `${DSIOT_MODE_NODE}.p_06`,
63
- },
64
- heat: {
65
- setpoint: {
66
- path: `${DSIOT_MODE_NODE}.p_03`,
67
- signed: false,
68
- writable: true,
69
- },
70
- humidity: {
71
- value: `${DSIOT_MODE_NODE}.p_2C`,
72
- flag: `${DSIOT_MODE_NODE}.p_2D`,
2
+ import { buildDsiotMultireqUpdate } from "./multireq.js";
3
+ import { DSIOT_EDGES, DSIOT_FAN_SPEED_CODES, DSIOT_FIXED_LOUVER_VALUES, DSIOT_HORIZONTAL_POSITION_VALUES, DSIOT_HUMIDITY_OFF, DSIOT_HUMIDITY_OFF_KEPT, DSIOT_HUMIDITY_PERCENTAGE, DSIOT_HUMIDITY_SETTING_FLAGS, DSIOT_LOUVER_STOP, DSIOT_LOUVER_SWING, DSIOT_LOUVER_VALUES, DSIOT_MODE_PATHS, DSIOT_OFF, DSIOT_ON, DSIOT_OPERATING_MODE_CODES, DSIOT_PATHS, DSIOT_SPECIAL_MODE_PATHS, DSIOT_VERTICAL_POSITION_VALUES, } from "./tables.js";
4
+ /** Builds the body of the multireq write that turns a special mode on or off:
5
+ * its one leaf, on the outdoor edge for powerful and on the indoor edge for
6
+ * the rest. */
7
+ export function buildDsiotSpecialModeUpdate(mode, enabled) {
8
+ return buildDsiotMultireqUpdate([
9
+ {
10
+ path: DSIOT_SPECIAL_MODE_PATHS[mode],
11
+ value: encodeDsiotBoolean(enabled),
73
12
  },
74
- fanSpeed: `${DSIOT_MODE_NODE}.p_0A`,
75
- vertical: `${DSIOT_MODE_NODE}.p_07`,
76
- horizontal: `${DSIOT_MODE_NODE}.p_08`,
77
- },
78
- fan: {
79
- fanSpeed: `${DSIOT_MODE_NODE}.p_28`,
80
- vertical: `${DSIOT_MODE_NODE}.p_24`,
81
- horizontal: `${DSIOT_MODE_NODE}.p_25`,
82
- },
83
- };
13
+ ], mode === "powerful" ? DSIOT_EDGES.outdoor : DSIOT_EDGES.indoor);
14
+ }
84
15
  // --- value encodings -------------------------------------------------------
85
16
  // Leaf values are hex strings. Multi-byte values are little-endian, and
86
17
  // temperatures count half degrees.
87
18
  export function encodeDsiotBoolean(on) {
88
- return on ? "01" : "00";
19
+ return on ? DSIOT_ON : DSIOT_OFF;
89
20
  }
90
21
  export function decodeDsiotBoolean(pv) {
91
22
  return pv !== undefined && Number.parseInt(pv, 16) > 0;
@@ -128,13 +59,6 @@ function signedByte(pv) {
128
59
  function nullIfNaN(value) {
129
60
  return Number.isFinite(value) ? value : null;
130
61
  }
131
- const OPERATING_MODE_CODES = {
132
- fan: "0000",
133
- heat: "0100",
134
- cool: "0200",
135
- auto: "0300",
136
- dehumidify: "0500",
137
- };
138
62
  const OPERATING_MODES_BY_CODE = {
139
63
  "0000": "fan",
140
64
  "0100": "heat",
@@ -145,62 +69,25 @@ const OPERATING_MODES_BY_CODE = {
145
69
  "0A00": "heat",
146
70
  };
147
71
  export function encodeDsiotMode(mode) {
148
- return OPERATING_MODE_CODES[mode];
72
+ return DSIOT_OPERATING_MODE_CODES[mode];
149
73
  }
150
74
  export function decodeDsiotMode(pv) {
151
75
  return OPERATING_MODES_BY_CODE[(pv ?? "").toUpperCase()];
152
76
  }
153
- const FAN_SPEED_CODES = {
154
- auto: "0A00",
155
- silent: "0B00",
156
- level1: "0300",
157
- level2: "0400",
158
- level3: "0500",
159
- level4: "0600",
160
- level5: "0700",
161
- };
162
- const FAN_SPEEDS_BY_CODE = Object.fromEntries(Object.entries(FAN_SPEED_CODES).map(([speed, code]) => [
77
+ const FAN_SPEEDS_BY_CODE = Object.fromEntries(Object.entries(DSIOT_FAN_SPEED_CODES).map(([speed, code]) => [
163
78
  code,
164
79
  speed,
165
80
  ]));
166
81
  export function encodeDsiotFanSpeed(speed) {
167
- return FAN_SPEED_CODES[speed];
82
+ return DSIOT_FAN_SPEED_CODES[speed];
168
83
  }
169
84
  export function decodeDsiotFanSpeed(pv) {
170
85
  return FAN_SPEEDS_BY_CODE[(pv ?? "").toUpperCase()];
171
86
  }
172
- /** The values a louver leaf holds besides a fixed position, which is 1-14.
173
- * The leaf is three bytes, little-endian, and bit n of its `md.mx` is set
174
- * when the unit takes value n. */
175
- export const DSIOT_LOUVER_VALUES = {
176
- stop: 0,
177
- swing: 15,
178
- auto: 16,
179
- naturalWind: 19,
180
- floorWarming: 25,
181
- };
182
- const FIXED_LOUVER_VALUES = Array.from({ length: 14 }, (_, index) => index + 1);
183
- export const DSIOT_LOUVER_STOP = "000000";
184
- export const DSIOT_LOUVER_SWING = "0F0000";
185
87
  export function isDsiotLouverSwinging(pv) {
186
88
  return (pv ?? "").toUpperCase() === DSIOT_LOUVER_SWING;
187
89
  }
188
- /** The value each `VerticalPosition` is held as. A fixed position has none: it
189
- * is held as the value at its rank among the fixed values the unit takes. */
190
- export const DSIOT_VERTICAL_POSITION_VALUES = {
191
- stop: DSIOT_LOUVER_VALUES.stop,
192
- swing: DSIOT_LOUVER_VALUES.swing,
193
- naturalWind: DSIOT_LOUVER_VALUES.naturalWind,
194
- auto: DSIOT_LOUVER_VALUES.auto,
195
- floorWarming: DSIOT_LOUVER_VALUES.floorWarming,
196
- };
197
90
  const FIXED_VERTICAL_POSITIONS = FIXED_LOUVER_POSITIONS;
198
- /** The value each `HorizontalPosition` is held as. `stop` and a fixed position
199
- * have none: see UNSUPPORTED.md. */
200
- export const DSIOT_HORIZONTAL_POSITION_VALUES = {
201
- swing: DSIOT_LOUVER_VALUES.swing,
202
- auto: DSIOT_LOUVER_VALUES.auto,
203
- };
204
91
  function positionOf(positions, held, value) {
205
92
  return positions.find((position) => held[position] === value) ?? null;
206
93
  }
@@ -209,7 +96,7 @@ function isFixedLouverValue(value) {
209
96
  }
210
97
  function fixedLouverValues(values, path) {
211
98
  const mask = decodeDsiotLittleEndian(values[`${path}.md.mx`] ?? "");
212
- return FIXED_LOUVER_VALUES.filter((value) => mask & (1 << value));
99
+ return DSIOT_FIXED_LOUVER_VALUES.filter((value) => mask & (1 << value));
213
100
  }
214
101
  function encodeLouver(value) {
215
102
  return `${value.toString(16).toUpperCase().padStart(2, "0")}0000`;
@@ -259,17 +146,7 @@ function encodeHorizontalPosition(position, current) {
259
146
  const value = DSIOT_HORIZONTAL_POSITION_VALUES[position];
260
147
  return value === undefined ? undefined : encodeLouver(value);
261
148
  }
262
- const HUMIDITY_OFF = "00";
263
- const HUMIDITY_ON = "01";
264
- // Also reads as off, and a control that switches humidity off leaves it.
265
- const HUMIDITY_OFF_KEPT = "05";
266
- const HUMIDITY_SETTING_FLAGS = {
267
- auto: "02",
268
- autoHigh: "03",
269
- autoLow: "04",
270
- continuous: "06",
271
- };
272
- const HUMIDITY_SETTINGS_BY_FLAG = Object.fromEntries(Object.entries(HUMIDITY_SETTING_FLAGS).map(([setting, flag]) => [
149
+ const HUMIDITY_SETTINGS_BY_FLAG = Object.fromEntries(Object.entries(DSIOT_HUMIDITY_SETTING_FLAGS).map(([setting, flag]) => [
273
150
  flag,
274
151
  setting,
275
152
  ]));
@@ -286,10 +163,10 @@ function decodeStep(st) {
286
163
  }
287
164
  function parseTargetHumidity(values, humidity) {
288
165
  const flag = humidity && values[humidity.flag];
289
- if (flag === HUMIDITY_OFF || flag === HUMIDITY_OFF_KEPT) {
166
+ if (flag === DSIOT_HUMIDITY_OFF || flag === DSIOT_HUMIDITY_OFF_KEPT) {
290
167
  return "off";
291
168
  }
292
- if (humidity === undefined || flag !== HUMIDITY_ON) {
169
+ if (humidity === undefined || flag !== DSIOT_HUMIDITY_PERCENTAGE) {
293
170
  return HUMIDITY_SETTINGS_BY_FLAG[flag ?? ""] ?? null;
294
171
  }
295
172
  const count = Number.parseInt(values[humidity.value] ?? "", 16);
@@ -304,16 +181,20 @@ function applyTargetHumidity(values, { value, flag }, targetHumidity) {
304
181
  return [
305
182
  {
306
183
  path: flag,
307
- value: values[flag] === HUMIDITY_OFF_KEPT ? HUMIDITY_OFF_KEPT : HUMIDITY_OFF,
184
+ value: values[flag] === DSIOT_HUMIDITY_OFF_KEPT
185
+ ? DSIOT_HUMIDITY_OFF_KEPT
186
+ : DSIOT_HUMIDITY_OFF,
308
187
  },
309
188
  ];
310
189
  }
311
190
  if (typeof targetHumidity === "string") {
312
- return [{ path: flag, value: HUMIDITY_SETTING_FLAGS[targetHumidity] }];
191
+ return [
192
+ { path: flag, value: DSIOT_HUMIDITY_SETTING_FLAGS[targetHumidity] },
193
+ ];
313
194
  }
314
195
  const count = Math.trunc(targetHumidity.percent / decodeStep(values[`${value}.md.st`]));
315
196
  return [
316
- { path: flag, value: HUMIDITY_ON },
197
+ { path: flag, value: DSIOT_HUMIDITY_PERCENTAGE },
317
198
  { path: value, value: count.toString(16).toUpperCase().padStart(2, "0") },
318
199
  ];
319
200
  }
@@ -324,7 +205,7 @@ function isHumidityOn(values, humidity, targetHumidity) {
324
205
  return false;
325
206
  }
326
207
  return targetHumidity == null
327
- ? flag !== HUMIDITY_OFF && flag !== HUMIDITY_OFF_KEPT
208
+ ? flag !== DSIOT_HUMIDITY_OFF && flag !== DSIOT_HUMIDITY_OFF_KEPT
328
209
  : targetHumidity !== "off";
329
210
  }
330
211
  const POWER_TRANSITIONS = {
@@ -351,7 +232,7 @@ export function parseDsiotState(values) {
351
232
  swingMode: decodeSwing(values[paths.vertical], values[paths.horizontal]),
352
233
  verticalPosition: parseVerticalPosition(values, paths.vertical),
353
234
  horizontalPosition: parseHorizontalPosition(values[paths.horizontal]),
354
- specialModes: SPECIAL_MODES.filter((mode) => values[DSIOT_SPECIAL_MODE_PATHS[mode]] === SPECIAL_MODE_ON),
235
+ specialModes: SPECIAL_MODES.filter((mode) => values[DSIOT_SPECIAL_MODE_PATHS[mode]] === DSIOT_ON),
355
236
  };
356
237
  }
357
238
  /** Turns `values`, the flattened indoor `dgc_status` tree read with `md`, and