daikin-local-control 0.4.0 → 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.
Files changed (96) hide show
  1. package/DESIGN.md +47 -4
  2. package/README.md +154 -46
  3. package/UNSUPPORTED.md +27 -2
  4. package/dist/clients/airbase.d.ts +64 -0
  5. package/dist/clients/airbase.d.ts.map +1 -0
  6. package/dist/clients/airbase.js +175 -0
  7. package/dist/clients/airbase.js.map +1 -0
  8. package/dist/clients/client.d.ts +3 -2
  9. package/dist/clients/client.d.ts.map +1 -1
  10. package/dist/codecs/airbase/capabilities.d.ts +23 -0
  11. package/dist/codecs/airbase/capabilities.d.ts.map +1 -0
  12. package/dist/codecs/airbase/capabilities.js +108 -0
  13. package/dist/codecs/airbase/capabilities.js.map +1 -0
  14. package/dist/codecs/airbase/state.d.ts +29 -0
  15. package/dist/codecs/airbase/state.d.ts.map +1 -0
  16. package/dist/codecs/airbase/state.js +166 -0
  17. package/dist/codecs/airbase/state.js.map +1 -0
  18. package/dist/codecs/airbase/tables.d.ts +7 -0
  19. package/dist/codecs/airbase/tables.d.ts.map +1 -0
  20. package/dist/codecs/airbase/tables.js +27 -0
  21. package/dist/codecs/airbase/tables.js.map +1 -0
  22. package/dist/codecs/airbase/zone.d.ts +12 -0
  23. package/dist/codecs/airbase/zone.d.ts.map +1 -0
  24. package/dist/codecs/airbase/zone.js +50 -0
  25. package/dist/codecs/airbase/zone.js.map +1 -0
  26. package/dist/codecs/classic/tables.d.ts +2 -0
  27. package/dist/codecs/classic/tables.d.ts.map +1 -1
  28. package/dist/codecs/classic/tables.js +2 -0
  29. package/dist/codecs/classic/tables.js.map +1 -1
  30. package/dist/codecs/device.d.ts +7 -1
  31. package/dist/codecs/device.d.ts.map +1 -1
  32. package/dist/codecs/device.js +14 -2
  33. package/dist/codecs/device.js.map +1 -1
  34. package/dist/codecs/dsiot/tables.d.ts +3 -0
  35. package/dist/codecs/dsiot/tables.d.ts.map +1 -1
  36. package/dist/codecs/dsiot/tables.js +3 -0
  37. package/dist/codecs/dsiot/tables.js.map +1 -1
  38. package/dist/discovery.d.ts +20 -10
  39. package/dist/discovery.d.ts.map +1 -1
  40. package/dist/discovery.js +96 -30
  41. package/dist/discovery.js.map +1 -1
  42. package/dist/factory.d.ts +8 -5
  43. package/dist/factory.d.ts.map +1 -1
  44. package/dist/factory.js +13 -3
  45. package/dist/factory.js.map +1 -1
  46. package/dist/index.d.ts +6 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +6 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/models/device.d.ts +3 -2
  51. package/dist/models/device.d.ts.map +1 -1
  52. package/dist/models/device.js +1 -1
  53. package/dist/models/device.js.map +1 -1
  54. package/dist/models/zone.d.ts +9 -0
  55. package/dist/models/zone.d.ts.map +1 -0
  56. package/dist/models/zone.js +2 -0
  57. package/dist/models/zone.js.map +1 -0
  58. package/dist/simulators/airbase.d.ts +82 -0
  59. package/dist/simulators/airbase.d.ts.map +1 -0
  60. package/dist/simulators/airbase.js +352 -0
  61. package/dist/simulators/airbase.js.map +1 -0
  62. package/dist/simulators/classic.d.ts.map +1 -1
  63. package/dist/simulators/classic.js +2 -2
  64. package/dist/simulators/classic.js.map +1 -1
  65. package/dist/simulators/index.d.ts +1 -0
  66. package/dist/simulators/index.d.ts.map +1 -1
  67. package/dist/simulators/index.js +1 -0
  68. package/dist/simulators/index.js.map +1 -1
  69. package/dist/simulators/simulator.d.ts +11 -10
  70. package/dist/simulators/simulator.d.ts.map +1 -1
  71. package/dist/simulators/simulator.js +2 -2
  72. package/dist/simulators/simulator.js.map +1 -1
  73. package/dist/transport.d.ts +3 -2
  74. package/dist/transport.d.ts.map +1 -1
  75. package/dist/transport.js +4 -1
  76. package/dist/transport.js.map +1 -1
  77. package/package.json +7 -3
  78. package/src/clients/airbase.ts +274 -0
  79. package/src/clients/client.ts +3 -2
  80. package/src/codecs/airbase/capabilities.ts +150 -0
  81. package/src/codecs/airbase/state.ts +223 -0
  82. package/src/codecs/airbase/tables.ts +32 -0
  83. package/src/codecs/airbase/zone.ts +62 -0
  84. package/src/codecs/classic/tables.ts +3 -0
  85. package/src/codecs/device.ts +18 -2
  86. package/src/codecs/dsiot/tables.ts +4 -0
  87. package/src/discovery.ts +101 -32
  88. package/src/factory.ts +21 -5
  89. package/src/index.ts +6 -0
  90. package/src/models/device.ts +3 -2
  91. package/src/models/zone.ts +8 -0
  92. package/src/simulators/airbase.ts +495 -0
  93. package/src/simulators/classic.ts +2 -1
  94. package/src/simulators/index.ts +1 -0
  95. package/src/simulators/simulator.ts +13 -12
  96. package/src/transport.ts +7 -3
@@ -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"}
@@ -19,6 +19,8 @@ export declare const CLASSIC_SPECIAL_MODE_KIND_CODES: Record<Exclude<SpecialMode
19
19
  /** `en_spmode` sets one bit for each special mode the unit takes. Bit 8 is a
20
20
  * mode outside `SpecialMode`. */
21
21
  export declare const CLASSIC_SPECIAL_MODE_BITS: Record<SpecialMode, number>;
22
+ /** `type` in a discovery reply from an air conditioner's classic adapter. */
23
+ export declare const CLASSIC_ADAPTER_TYPE = "aircon";
22
24
  /** `type` in `get_model_info` on a unit that only cools. */
23
25
  export declare const CLASSIC_COOLING_ONLY_TYPE = "C";
24
26
  /** `type` in `unregister_terminal`. */
@@ -1 +1 @@
1
- {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../src/codecs/classic/tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAK/B,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;AAIF,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAY1E,CAAC;AACJ,eAAO,MAAM,iCAAiC,EAAE,MAAM,CACpD,kBAAkB,EAClB,MAAM,CAUP,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAM1E,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC;UACU;AACV,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAItE,CAAC;AAEF;yEACyE;AACzE,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAClD,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,EAChC,MAAM,CAIP,CAAC;AAEF;iCACiC;AACjC,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAIjE,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,uCAAuC;AACvC,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAItE,CAAC;AAEF;4CAC4C;AAC5C,eAAO,MAAM,sBAAsB;aACjC,OAAO,EAAE,SAAS;aAClB,QAAQ,EAAE,WAAW;CACb,CAAC"}
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../src/codecs/classic/tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAK/B,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;AAIF,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAY1E,CAAC;AACJ,eAAO,MAAM,iCAAiC,EAAE,MAAM,CACpD,kBAAkB,EAClB,MAAM,CAUP,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAM1E,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC;UACU;AACV,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAItE,CAAC;AAEF;yEACyE;AACzE,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAClD,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,EAChC,MAAM,CAIP,CAAC;AAEF;iCACiC;AACjC,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAIjE,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAE7C,4DAA4D;AAC5D,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,uCAAuC;AACvC,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAItE,CAAC;AAEF;4CAC4C;AAC5C,eAAO,MAAM,sBAAsB;aACjC,OAAO,EAAE,SAAS;aAClB,QAAQ,EAAE,WAAW;CACb,CAAC"}
@@ -77,6 +77,8 @@ export const CLASSIC_SPECIAL_MODE_BITS = {
77
77
  econo: 2,
78
78
  streamer: 4,
79
79
  };
80
+ /** `type` in a discovery reply from an air conditioner's classic adapter. */
81
+ export const CLASSIC_ADAPTER_TYPE = "aircon";
80
82
  /** `type` in `get_model_info` on a unit that only cools. */
81
83
  export const CLASSIC_COOLING_ONLY_TYPE = "C";
82
84
  /** `type` in `unregister_terminal`. */
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/codecs/classic/tables.ts"],"names":[],"mappings":"AAWA,6EAA6E;AAC7E,qEAAqE;AAErE,MAAM,CAAC,MAAM,4BAA4B,GAAkC;IACzE,IAAI,EAAE,GAAG;IACT,UAAU,EAAE,GAAG;IACf,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,GAAG;CACT,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,gFAAgF;AAChF,yBAAyB;AACzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,+BAA+B,GAC1C;IACE,IAAI,EAAE,mBAAmB;IACzB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,GAAG;IAChB,IAAI,EAAE,GAAG;IACT,YAAY,EAAE,GAAG;CAClB,CAAC;AACJ,MAAM,CAAC,MAAM,iCAAiC,GAG1C;IACF,IAAI,EAAE,mBAAmB;IACzB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,oBAAoB;IAC3B,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAoC;IAC7E,GAAG,EAAE,GAAG;IACR,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,UAAU;CACvB,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC;UACU;AACV,MAAM,CAAC,MAAM,8BAA8B,GAAgC;IACzE,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF;yEACyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAGxC;IACF,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;CACX,CAAC;AAEF;iCACiC;AACjC,MAAM,CAAC,MAAM,yBAAyB,GAAgC;IACpE,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C,uCAAuC;AACvC,MAAM,CAAC,MAAM,4BAA4B,GAAkC;IACzE,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;CACT,CAAC;AAEF;4CAC4C;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,WAAW;CACb,CAAC"}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/codecs/classic/tables.ts"],"names":[],"mappings":"AAWA,6EAA6E;AAC7E,qEAAqE;AAErE,MAAM,CAAC,MAAM,4BAA4B,GAAkC;IACzE,IAAI,EAAE,GAAG;IACT,UAAU,EAAE,GAAG;IACf,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,GAAG;CACT,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,gFAAgF;AAChF,yBAAyB;AACzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,+BAA+B,GAC1C;IACE,IAAI,EAAE,mBAAmB;IACzB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,GAAG;IAChB,IAAI,EAAE,GAAG;IACT,YAAY,EAAE,GAAG;CAClB,CAAC;AACJ,MAAM,CAAC,MAAM,iCAAiC,GAG1C;IACF,IAAI,EAAE,mBAAmB;IACzB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,oBAAoB;IAC3B,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAoC;IAC7E,GAAG,EAAE,GAAG;IACR,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,UAAU;CACvB,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC;UACU;AACV,MAAM,CAAC,MAAM,8BAA8B,GAAgC;IACzE,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF;yEACyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAGxC;IACF,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;CACX,CAAC;AAEF;iCACiC;AACjC,MAAM,CAAC,MAAM,yBAAyB,GAAgC;IACpE,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAE7C,4DAA4D;AAC5D,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C,uCAAuC;AACvC,MAAM,CAAC,MAAM,4BAA4B,GAAkC;IACzE,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;CACT,CAAC;AAEF;4CAC4C;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,WAAW;CACb,CAAC"}
@@ -1,7 +1,13 @@
1
1
  import type { DaikinDevice, DaikinDeviceInfo } from "../models/device.js";
2
+ /** Whether a `basic_info` reply comes from the adapter of an air conditioner:
3
+ * `type=aircon`, or `type=GPF` with a `cdev` that is not an air cleaner's. The
4
+ * adapter of another appliance answers the discovery probe as well, such as
5
+ * an air cleaner (`type=cleaner`) or a water heater (`type=Water Heater`). */
6
+ export declare function isAirConditioner(basicInfo: Record<string, string>): boolean;
2
7
  /** Turns a `basic_info` reply into a `DaikinDevice`: `type=GPF` marks a DSIOT
3
8
  * adapter, and `api_port`, when present, is the HTTP port and is appended to
4
- * `host`, the address the reply came from. */
9
+ * `host`, the address the reply came from. It reads any reply as an air
10
+ * conditioner's: check the reply with `isAirConditioner` first. */
5
11
  export declare function parseDevice(host: string, basicInfo: Record<string, string>): DaikinDevice;
6
12
  /** Reads what a `basic_info` reply says to identify the adapter. The name
7
13
  * arrives form-encoded. */
@@ -1 +1 @@
1
- {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/codecs/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM1E;;8CAE8C;AAC9C,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,YAAY,CAiBd;AAED;2BAC2B;AAC3B,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,gBAAgB,CASlB;AAED;kBACkB;AAClB,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,GAAG,SAAS,CAEpB;AAED;;+DAE+D;AAC/D,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,GAAG,SAAS,CAOpB"}
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/codecs/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAU1E;;;8EAG8E;AAC9E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAK3E;AAED;;;mEAGmE;AACnE,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,YAAY,CAiBd;AAED;2BAC2B;AAC3B,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,gBAAgB,CASlB;AAED;kBACkB;AAClB,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,GAAG,SAAS,CAEpB;AAED;;+DAE+D;AAC/D,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,GAAG,SAAS,CAOpB"}
@@ -1,9 +1,21 @@
1
1
  import { decodeClassicText } from "./classic/keyValue.js";
2
- import { DSIOT_ADAPTER_TYPE } from "./dsiot/tables.js";
2
+ import { CLASSIC_ADAPTER_TYPE } from "./classic/tables.js";
3
+ import { DSIOT_ADAPTER_TYPE, DSIOT_AIR_CLEANER_DEVICES, } from "./dsiot/tables.js";
3
4
  const MARVELL_ADP_KIND = "3";
5
+ /** Whether a `basic_info` reply comes from the adapter of an air conditioner:
6
+ * `type=aircon`, or `type=GPF` with a `cdev` that is not an air cleaner's. The
7
+ * adapter of another appliance answers the discovery probe as well, such as
8
+ * an air cleaner (`type=cleaner`) or a water heater (`type=Water Heater`). */
9
+ export function isAirConditioner(basicInfo) {
10
+ if (basicInfo.type === DSIOT_ADAPTER_TYPE) {
11
+ return !DSIOT_AIR_CLEANER_DEVICES.includes(basicInfo.cdev ?? "");
12
+ }
13
+ return basicInfo.type === CLASSIC_ADAPTER_TYPE;
14
+ }
4
15
  /** Turns a `basic_info` reply into a `DaikinDevice`: `type=GPF` marks a DSIOT
5
16
  * adapter, and `api_port`, when present, is the HTTP port and is appended to
6
- * `host`, the address the reply came from. */
17
+ * `host`, the address the reply came from. It reads any reply as an air
18
+ * conditioner's: check the reply with `isAirConditioner` first. */
7
19
  export function parseDevice(host, basicInfo) {
8
20
  const protocol = basicInfo.type === DSIOT_ADAPTER_TYPE ? "dsiot" : "classic";
9
21
  const secure = basicInfo.en_secure === "1";
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/codecs/device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;8CAE8C;AAC9C,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,SAAiC;IAEjC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,KAAK,GAAG,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QACjE,QAAQ;QACR,4CAA4C;QAC5C,oBAAoB,EAAE,MAAM,IAAI,QAAQ,KAAK,SAAS;QACtD,yEAAyE;QACzE,2DAA2D;QAC3D,SAAS,EACP,MAAM;YACN,QAAQ,KAAK,SAAS;YACtB,SAAS,CAAC,QAAQ,KAAK,gBAAgB;QACzC,qBAAqB,EAAE,SAAS,CAAC,QAAQ,KAAK,GAAG;QACjD,GAAG,eAAe,CAAC,SAAS,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED;2BAC2B;AAC3B,MAAM,UAAU,eAAe,CAC7B,SAAiC;IAEjC,OAAO;QACL,IAAI,EACF,SAAS,CAAC,IAAI,KAAK,SAAS;YAC1B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC;QACvC,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC;QAC3C,eAAe,EAAE,qBAAqB,CAAC,SAAS,CAAC,GAAG,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;kBACkB;AAClB,MAAM,UAAU,gBAAgB,CAC9B,KAAyB;IAEzB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED;;+DAE+D;AAC/D,MAAM,UAAU,qBAAqB,CACnC,KAAyB;IAEzB,MAAM,KAAK,GAAG,kCAAkC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACnE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/codecs/device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;8EAG8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,SAAiC;IAChE,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC1C,OAAO,CAAC,yBAAyB,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,KAAK,oBAAoB,CAAC;AACjD,CAAC;AAED;;;mEAGmE;AACnE,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,SAAiC;IAEjC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,KAAK,GAAG,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;QACjE,QAAQ;QACR,4CAA4C;QAC5C,oBAAoB,EAAE,MAAM,IAAI,QAAQ,KAAK,SAAS;QACtD,yEAAyE;QACzE,2DAA2D;QAC3D,SAAS,EACP,MAAM;YACN,QAAQ,KAAK,SAAS;YACtB,SAAS,CAAC,QAAQ,KAAK,gBAAgB;QACzC,qBAAqB,EAAE,SAAS,CAAC,QAAQ,KAAK,GAAG;QACjD,GAAG,eAAe,CAAC,SAAS,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED;2BAC2B;AAC3B,MAAM,UAAU,eAAe,CAC7B,SAAiC;IAEjC,OAAO;QACL,IAAI,EACF,SAAS,CAAC,IAAI,KAAK,SAAS;YAC1B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC;QACvC,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC;QAC3C,eAAe,EAAE,qBAAqB,CAAC,SAAS,CAAC,GAAG,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;kBACkB;AAClB,MAAM,UAAU,gBAAgB,CAC9B,KAAyB;IAEzB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED;;+DAE+D;AAC/D,MAAM,UAAU,qBAAqB,CACnC,KAAyB;IAEzB,MAAM,KAAK,GAAG,kCAAkC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACnE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACzD,CAAC"}
@@ -23,6 +23,9 @@ export declare const DSIOT_TARGETS: {
23
23
  };
24
24
  /** `type` in a discovery reply from a DSIOT adapter. */
25
25
  export declare const DSIOT_ADAPTER_TYPE = "GPF";
26
+ /** `cdev` in a discovery reply from a DSIOT adapter whose unit is an air
27
+ * cleaner. */
28
+ export declare const DSIOT_AIR_CLEANER_DEVICES: readonly string[];
26
29
  /** Dotted paths into the `adp_i` and `adp_d` trees. The MAC address and the
27
30
  * version hold the value a classic adapter sends in `basic_info`, and the
28
31
  * name is plain text, where a classic adapter form-encodes it. */
@@ -1 +1 @@
1
- {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../src/codecs/dsiot/tables.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../src/codecs/dsiot/tables.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,9 @@ export const DSIOT_TARGETS = {
25
25
  };
26
26
  /** `type` in a discovery reply from a DSIOT adapter. */
27
27
  export const DSIOT_ADAPTER_TYPE = "GPF";
28
+ /** `cdev` in a discovery reply from a DSIOT adapter whose unit is an air
29
+ * cleaner. */
30
+ export const DSIOT_AIR_CLEANER_DEVICES = ["1D", "CJ"];
28
31
  /** Dotted paths into the `adp_i` and `adp_d` trees. The MAC address and the
29
32
  * version hold the value a classic adapter sends in `basic_info`, and the
30
33
  * name is plain text, where a classic adapter form-encodes it. */
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/codecs/dsiot/tables.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/codecs/dsiot/tables.ts"],"names":[],"mappings":"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"}
@@ -3,16 +3,26 @@ export interface DiscoverDevicesOptions {
3
3
  /** How long to listen for replies, in milliseconds. Defaults to 3000. */
4
4
  timeoutInMs?: number;
5
5
  }
6
- /** Finds the adapters on the LAN: broadcasts `DAIKIN_UDP/common/basic_info` to
7
- * UDP port 30050 and collects the `basic_info` replies, which carry the same
8
- * `key=value` payload as the HTTP `/common/basic_info`. Classic and DSIOT
9
- * adapters both answer, and `parseDevice` picks the protocol from the reply.
10
- * Anything on the LAN can send to the port it listens on, so it ignores a
11
- * datagram whose `ret` is not `OK`.
6
+ /** Finds the air conditioners' adapters on the LAN: broadcasts
7
+ * `DAIKIN_UDP/common/basic_info` to UDP port 30050 and collects the
8
+ * `basic_info` replies, which carry the same `key=value` payload as the HTTP
9
+ * `/common/basic_info`. Classic and DSIOT adapters both answer, and
10
+ * `parseDevice` picks the protocol from the reply. Anything on the LAN can
11
+ * send to the port it listens on, so it ignores a datagram whose `ret` is not
12
+ * `OK`. The adapter of another appliance answers the probe as well, such as an
13
+ * air cleaner's, so it ignores a reply `isAirConditioner` does not pass.
12
14
  *
13
- * It resolves once `timeoutInMs` has passed, never earlier, with one device
14
- * for each `host` that replied: the address a reply came from, with the port
15
- * the reply announces. It binds UDP port 30000, and rejects with the socket's
16
- * error when the socket fails. */
15
+ * An Airbase adapter replies as a classic adapter does, so it sends each
16
+ * adapter that replies as one an HTTP request, or two, to tell which it is:
17
+ * an Airbase adapter answers HTTP 404 at `/common/basic_info` and `ret=OK`
18
+ * at `/skyfi/common/basic_info`. An adapter that does not answer in 3000 ms
19
+ * is reported as classic. An Airbase adapter takes no registration and no
20
+ * local password, so its device requires neither, whatever its reply says.
21
+ *
22
+ * It resolves once `timeoutInMs` has passed and each of those requests has
23
+ * finished, never earlier, with one device for each `host` that replied: the
24
+ * address a reply came from, with the port the reply announces. It binds the
25
+ * first free UDP port from 30000 to 30050, and rejects with the socket's
26
+ * error when none is free or the socket fails. */
17
27
  export declare function discoverDevices(options?: DiscoverDevicesOptions): Promise<DaikinDevice[]>;
18
28
  //# sourceMappingURL=discovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAcvD,MAAM,WAAW,sBAAsB;IACrC,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;kCAUkC;AAClC,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,YAAY,EAAE,CAAC,CAkDzB"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAsBvD,MAAM,WAAW,sBAAsB;IACrC,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;kDAoBkD;AAClD,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,YAAY,EAAE,CAAC,CAgDzB"}
package/dist/discovery.js CHANGED
@@ -1,37 +1,65 @@
1
1
  import { createSocket } from "node:dgram";
2
+ import { once } from "node:events";
3
+ import { isAirbaseAdapter } from "./clients/airbase.js";
2
4
  import { isClassicOk, parseClassicKeyValue, } from "./codecs/classic/keyValue.js";
3
- import { parseDevice } from "./codecs/device.js";
5
+ import { isAirConditioner, parseDevice } from "./codecs/device.js";
6
+ import { DaikinTransport } from "./transport.js";
4
7
  // The UDP discovery probe: broadcast this to :30050, listen for `basic_info`
5
8
  // replies.
6
9
  const DISCOVERY_PROBE = "DAIKIN_UDP/common/basic_info";
7
- const DISCOVERY_SEND_PORT = 30000;
8
10
  const DISCOVERY_LISTEN_PORT = 30050;
11
+ // An adapter answers the port a probe came from. The probe leaves from the
12
+ // first of these ports that is free: see DESIGN.md#discovery.
13
+ const FIRST_DISCOVERY_SEND_PORT = 30000;
14
+ const LAST_DISCOVERY_SEND_PORT = 30050;
9
15
  const DEFAULT_DISCOVERY_TIMEOUT_IN_MS = 3_000;
10
16
  const BROADCAST_ADDRESS = "255.255.255.255";
11
17
  // UDP drops packets, so the probe goes out 10 times, 200 ms apart.
12
18
  const PROBE_COUNT = 10;
13
19
  const PROBE_INTERVAL_IN_MS = 200;
14
- /** Finds the adapters on the LAN: broadcasts `DAIKIN_UDP/common/basic_info` to
15
- * UDP port 30050 and collects the `basic_info` replies, which carry the same
16
- * `key=value` payload as the HTTP `/common/basic_info`. Classic and DSIOT
17
- * adapters both answer, and `parseDevice` picks the protocol from the reply.
18
- * Anything on the LAN can send to the port it listens on, so it ignores a
19
- * datagram whose `ret` is not `OK`.
20
+ // How long each of the HTTP requests that tell an Airbase adapter from a
21
+ // classic one may take. An adapter that takes longer is reported as classic,
22
+ // so this only bounds how long after `timeoutInMs` a discovery resolves.
23
+ const IDENTIFY_TIMEOUT_IN_MS = 3_000;
24
+ /** Finds the air conditioners' adapters on the LAN: broadcasts
25
+ * `DAIKIN_UDP/common/basic_info` to UDP port 30050 and collects the
26
+ * `basic_info` replies, which carry the same `key=value` payload as the HTTP
27
+ * `/common/basic_info`. Classic and DSIOT adapters both answer, and
28
+ * `parseDevice` picks the protocol from the reply. Anything on the LAN can
29
+ * send to the port it listens on, so it ignores a datagram whose `ret` is not
30
+ * `OK`. The adapter of another appliance answers the probe as well, such as an
31
+ * air cleaner's, so it ignores a reply `isAirConditioner` does not pass.
20
32
  *
21
- * It resolves once `timeoutInMs` has passed, never earlier, with one device
22
- * for each `host` that replied: the address a reply came from, with the port
23
- * the reply announces. It binds UDP port 30000, and rejects with the socket's
24
- * error when the socket fails. */
33
+ * An Airbase adapter replies as a classic adapter does, so it sends each
34
+ * adapter that replies as one an HTTP request, or two, to tell which it is:
35
+ * an Airbase adapter answers HTTP 404 at `/common/basic_info` and `ret=OK`
36
+ * at `/skyfi/common/basic_info`. An adapter that does not answer in 3000 ms
37
+ * is reported as classic. An Airbase adapter takes no registration and no
38
+ * local password, so its device requires neither, whatever its reply says.
39
+ *
40
+ * It resolves once `timeoutInMs` has passed and each of those requests has
41
+ * finished, never earlier, with one device for each `host` that replied: the
42
+ * address a reply came from, with the port the reply announces. It binds the
43
+ * first free UDP port from 30000 to 30050, and rejects with the socket's
44
+ * error when none is free or the socket fails. */
25
45
  export async function discoverDevices(options = {}) {
26
- const socket = createSocket({ type: "udp4", reuseAddr: true });
46
+ const socket = await bindFirstFreePort();
27
47
  const devices = new Map();
28
48
  return new Promise((resolve, reject) => {
29
49
  let probesSent = 0;
30
- let probeTimer;
50
+ const probe = Buffer.from(DISCOVERY_PROBE, "utf8");
51
+ const sendProbe = () => {
52
+ socket.send(probe, DISCOVERY_LISTEN_PORT, BROADCAST_ADDRESS);
53
+ probesSent += 1;
54
+ if (probesSent >= PROBE_COUNT) {
55
+ clearInterval(probeTimer);
56
+ }
57
+ };
58
+ const probeTimer = setInterval(sendProbe, PROBE_INTERVAL_IN_MS);
31
59
  const listenTimer = setTimeout(() => {
32
60
  clearInterval(probeTimer);
33
61
  socket.close();
34
- resolve([...devices.values()]);
62
+ resolve(Promise.all(devices.values()));
35
63
  }, options.timeoutInMs ?? DEFAULT_DISCOVERY_TIMEOUT_IN_MS);
36
64
  socket.on("error", (error) => {
37
65
  clearInterval(probeTimer);
@@ -42,7 +70,7 @@ export async function discoverDevices(options = {}) {
42
70
  });
43
71
  socket.on("message", (message, remote) => {
44
72
  const fields = parseClassicKeyValue(message.toString("utf8"));
45
- if (!isClassicOk(fields)) {
73
+ if (!isClassicOk(fields) || !isAirConditioner(fields)) {
46
74
  return;
47
75
  }
48
76
  // An adapter answers each of the probes, so the first reply from a
@@ -50,22 +78,60 @@ export async function discoverDevices(options = {}) {
50
78
  // are, differ by the port they announce.
51
79
  const device = parseDevice(remote.address, fields);
52
80
  if (!devices.has(device.host)) {
53
- devices.set(device.host, device);
81
+ devices.set(device.host, identifyProtocol(device));
54
82
  }
55
83
  });
56
- socket.bind(DISCOVERY_SEND_PORT, () => {
57
- socket.setBroadcast(true);
58
- const probe = Buffer.from(DISCOVERY_PROBE, "utf8");
59
- const sendProbe = () => {
60
- socket.send(probe, DISCOVERY_LISTEN_PORT, BROADCAST_ADDRESS);
61
- probesSent += 1;
62
- if (probesSent >= PROBE_COUNT) {
63
- clearInterval(probeTimer);
64
- }
65
- };
66
- sendProbe();
67
- probeTimer = setInterval(sendProbe, PROBE_INTERVAL_IN_MS);
68
- });
84
+ socket.setBroadcast(true);
85
+ sendProbe();
86
+ });
87
+ }
88
+ // A reply does not say whether a classic adapter is an Airbase adapter, so
89
+ // the adapter is asked over HTTP.
90
+ async function identifyProtocol(device) {
91
+ if (device.protocol !== "classic") {
92
+ return device;
93
+ }
94
+ const transport = new DaikinTransport({
95
+ host: device.host,
96
+ usesHttps: device.usesHttps,
97
+ timeoutInMs: IDENTIFY_TIMEOUT_IN_MS,
69
98
  });
99
+ try {
100
+ // `parseDevice` read the reply as a classic adapter's, which may require
101
+ // registration or a local password. An Airbase adapter takes neither.
102
+ // `usesHttps` stays: the adapter has just answered over that scheme.
103
+ return (await isAirbaseAdapter(transport))
104
+ ? {
105
+ ...device,
106
+ protocol: "airbase",
107
+ requiresRegistration: false,
108
+ requiresLocalPassword: false,
109
+ }
110
+ : device;
111
+ }
112
+ finally {
113
+ await transport.close();
114
+ }
115
+ }
116
+ // Binds without `reuseAddr`: with it, a second socket binds a port that is
117
+ // held, and each reply then reaches one of the two alone.
118
+ async function bindFirstFreePort() {
119
+ for (let port = FIRST_DISCOVERY_SEND_PORT;; port += 1) {
120
+ const socket = createSocket("udp4");
121
+ try {
122
+ socket.bind(port);
123
+ // `once` rejects when the socket emits `error` first, as it does for a
124
+ // port that is held.
125
+ await once(socket, "listening");
126
+ return socket;
127
+ }
128
+ catch (error) {
129
+ socket.close();
130
+ if (error.code !== "EADDRINUSE" ||
131
+ port === LAST_DISCOVERY_SEND_PORT) {
132
+ throw error;
133
+ }
134
+ }
135
+ }
70
136
  }
71
137
  //# sourceMappingURL=discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
package/dist/factory.d.ts CHANGED
@@ -4,9 +4,11 @@ import { type DaikinRetryOptions, type DaikinTlsOptions } from "./transport.js";
4
4
  export interface CreateDaikinClientOptions {
5
5
  /** The terminal uuid, sent as `X-Daikin-uuid`: 32 lowercase hexadecimal
6
6
  * digits, a UUID without its dashes. Generate one and reuse it: an adapter
7
- * that requires registration remembers it. */
7
+ * that requires registration remembers it. An Airbase adapter takes none,
8
+ * so it is neither checked nor sent to one. */
8
9
  terminalUuid: string;
9
- /** The child lock code, for a device whose `requiresLocalPassword` is true. */
10
+ /** The child lock code, for a device whose `requiresLocalPassword` is true.
11
+ * It is not sent to an Airbase adapter, which takes none. */
10
12
  localPassword?: string;
11
13
  /** How long, in milliseconds, a request waits for the adapter. Defaults to
12
14
  * 10000: see `DaikinTransportOptions.timeoutInMs`. */
@@ -26,9 +28,10 @@ export interface CreateDaikinClientOptions {
26
28
  tls?: DaikinTlsOptions;
27
29
  }
28
30
  /** Builds the client for a device: a `DsiotDaikinClient` when
29
- * `device.protocol` is `dsiot`, a `ClassicDaikinClient` otherwise. The client
30
- * sends over HTTPS when `device.usesHttps` is set, and sends the local
31
- * password when `options.localPassword` is given. It throws an `Error` when
31
+ * `device.protocol` is `dsiot`, an `AirbaseDaikinClient` when it is
32
+ * `airbase`, and a `ClassicDaikinClient` otherwise. The client sends over
33
+ * HTTPS when `device.usesHttps` is set, and sends the local password when
34
+ * `options.localPassword` is given. It throws an `Error` when
32
35
  * `options.terminalUuid` is not in the form
33
36
  * `CreateDaikinClientOptions.terminalUuid` describes. Call `close` on the
34
37
  * client when done with the unit. */
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,yBAAyB;IACxC;;kDAE8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;0DACsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;0CAEsC;IACtC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;;;;4CAKwC;IACxC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,kFAAkF;IAClF,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;;;qCAMqC;AACrC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,GACjC,YAAY,CAqBd"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,yBAAyB;IACxC;;;mDAG+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB;iEAC6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;0DACsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;0CAEsC;IACtC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;;;;4CAKwC;IACxC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,kFAAkF;IAClF,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;;;;qCAOqC;AACrC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,GACjC,YAAY,CAiCd"}
package/dist/factory.js CHANGED
@@ -1,15 +1,25 @@
1
1
  import { ClassicLocalPasswordAuthentication, DsiotLocalPasswordAuthentication, } from "./authentication.js";
2
+ import { AirbaseDaikinClient } from "./clients/airbase.js";
2
3
  import { ClassicDaikinClient } from "./clients/classic.js";
3
4
  import { DsiotDaikinClient } from "./clients/dsiot.js";
4
5
  import { DaikinTransport, } from "./transport.js";
5
6
  /** Builds the client for a device: a `DsiotDaikinClient` when
6
- * `device.protocol` is `dsiot`, a `ClassicDaikinClient` otherwise. The client
7
- * sends over HTTPS when `device.usesHttps` is set, and sends the local
8
- * password when `options.localPassword` is given. It throws an `Error` when
7
+ * `device.protocol` is `dsiot`, an `AirbaseDaikinClient` when it is
8
+ * `airbase`, and a `ClassicDaikinClient` otherwise. The client sends over
9
+ * HTTPS when `device.usesHttps` is set, and sends the local password when
10
+ * `options.localPassword` is given. It throws an `Error` when
9
11
  * `options.terminalUuid` is not in the form
10
12
  * `CreateDaikinClientOptions.terminalUuid` describes. Call `close` on the
11
13
  * client when done with the unit. */
12
14
  export function createDaikinClient(device, options) {
15
+ if (device.protocol === "airbase") {
16
+ return new AirbaseDaikinClient(new DaikinTransport({
17
+ host: device.host,
18
+ usesHttps: device.usesHttps,
19
+ timeoutInMs: options.timeoutInMs,
20
+ tls: options.tls,
21
+ }), options.retry, options.maxStateAgeForSetStateInMs);
22
+ }
13
23
  const transport = new DaikinTransport({
14
24
  host: device.host,
15
25
  usesHttps: device.usesHttps,
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAElC,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAGL,eAAe,GAChB,MAAM,gBAAgB,CAAC;AA2BxB;;;;;;qCAMqC;AACrC,MAAM,UAAU,kBAAkB,CAChC,MAAoB,EACpB,OAAkC;IAElC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;QACpC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC;QAC1E,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,QAAQ,KAAK,OAAO;QAChC,CAAC,CAAC,IAAI,iBAAiB,CACnB,SAAS,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,0BAA0B,CACnC;QACH,CAAC,CAAC,IAAI,mBAAmB,CACrB,SAAS,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,0BAA0B,CACnC,CAAC;AACR,CAAC;AAED,SAAS,2BAA2B,CAClC,MAAoB,EACpB,aAAiC;IAEjC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,KAAK,OAAO;QAChC,CAAC,CAAC,IAAI,gCAAgC,CAAC,aAAa,CAAC;QACrD,CAAC,CAAC,IAAI,kCAAkC,CAAC,aAAa,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAElC,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAGL,eAAe,GAChB,MAAM,gBAAgB,CAAC;AA6BxB;;;;;;;qCAOqC;AACrC,MAAM,UAAU,kBAAkB,CAChC,MAAoB,EACpB,OAAkC;IAElC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,IAAI,mBAAmB,CAC5B,IAAI,eAAe,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,EACF,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,0BAA0B,CACnC,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;QACpC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC;QAC1E,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,QAAQ,KAAK,OAAO;QAChC,CAAC,CAAC,IAAI,iBAAiB,CACnB,SAAS,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,0BAA0B,CACnC;QACH,CAAC,CAAC,IAAI,mBAAmB,CACrB,SAAS,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,0BAA0B,CACnC,CAAC;AACR,CAAC;AAED,SAAS,2BAA2B,CAClC,MAAoB,EACpB,aAAiC;IAEjC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,KAAK,OAAO;QAChC,CAAC,CAAC,IAAI,gCAAgC,CAAC,aAAa,CAAC;QACrD,CAAC,CAAC,IAAI,kCAAkC,CAAC,aAAa,CAAC,CAAC;AAC5D,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  export type { DaikinAuthentication } from "./authentication.js";
2
+ export { AirbaseDaikinClient } from "./clients/airbase.js";
2
3
  export * from "./clients/classic.js";
3
4
  export * from "./clients/client.js";
4
5
  export * from "./clients/dsiot.js";
6
+ export * from "./codecs/airbase/capabilities.js";
7
+ export * from "./codecs/airbase/state.js";
8
+ export * from "./codecs/airbase/tables.js";
9
+ export * from "./codecs/airbase/zone.js";
5
10
  export * from "./codecs/classic/capabilities.js";
6
11
  export * from "./codecs/classic/extendedControl.js";
7
12
  export * from "./codecs/classic/keyValue.js";
@@ -21,5 +26,6 @@ export * from "./models/capabilities.js";
21
26
  export * from "./models/device.js";
22
27
  export * from "./models/extendedControl.js";
23
28
  export * from "./models/state.js";
29
+ export * from "./models/zone.js";
24
30
  export * from "./transport.js";
25
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,11 @@
1
+ export { AirbaseDaikinClient } from "./clients/airbase.js";
1
2
  export * from "./clients/classic.js";
2
3
  export * from "./clients/client.js";
3
4
  export * from "./clients/dsiot.js";
5
+ export * from "./codecs/airbase/capabilities.js";
6
+ export * from "./codecs/airbase/state.js";
7
+ export * from "./codecs/airbase/tables.js";
8
+ export * from "./codecs/airbase/zone.js";
4
9
  export * from "./codecs/classic/capabilities.js";
5
10
  export * from "./codecs/classic/extendedControl.js";
6
11
  export * from "./codecs/classic/keyValue.js";
@@ -20,5 +25,6 @@ export * from "./models/capabilities.js";
20
25
  export * from "./models/device.js";
21
26
  export * from "./models/extendedControl.js";
22
27
  export * from "./models/state.js";
28
+ export * from "./models/zone.js";
23
29
  export * from "./transport.js";
24
30
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
@@ -1,7 +1,8 @@
1
- export declare const DAIKIN_PROTOCOLS: readonly ["classic", "dsiot"];
1
+ export declare const DAIKIN_PROTOCOLS: readonly ["classic", "dsiot", "airbase"];
2
2
  /** The wire protocol an adapter speaks, and the only difference between
3
3
  * adapters that takes a separate `DaikinClient` implementation: `classic` for
4
- * a CGI adapter such as the BRP069 or BRP072, `dsiot` for a BRP084. */
4
+ * a CGI adapter such as the BRP069 or BRP072, `dsiot` for a BRP084, and
5
+ * `airbase` for the BRP15B61 of a ducted unit. */
5
6
  export type DaikinProtocol = (typeof DAIKIN_PROTOCOLS)[number];
6
7
  /** What an adapter reports to identify itself. `discoverDevices` fills it into
7
8
  * each `DaikinDevice`, and `DaikinClient.getDeviceInfo` reads it for a device
@@ -1 +1 @@
1
- {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/models/device.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,YAAI,SAAS,EAAE,OAAO,CAAU,CAAC;AAE9D;;uEAEuE;AACvE,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D;;sBAEsB;AACtB,MAAM,WAAW,gBAAgB;IAC/B;+BAC2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;sEACkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;8DAC0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;iBAGiB;AACjB,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB;wEACoE;IACpE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;2BACuB;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC"}
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/models/device.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,YAAI,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAEzE;;;kDAGkD;AAClD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D;;sBAEsB;AACtB,MAAM,WAAW,gBAAgB;IAC/B;+BAC2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;sEACkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;8DAC0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;iBAGiB;AACjB,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB;wEACoE;IACpE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;2BACuB;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC"}
@@ -1,2 +1,2 @@
1
- export const DAIKIN_PROTOCOLS = ["classic", "dsiot"];
1
+ export const DAIKIN_PROTOCOLS = ["classic", "dsiot", "airbase"];
2
2
  //# sourceMappingURL=device.js.map