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.
Files changed (150) hide show
  1. package/DESIGN.md +156 -2
  2. package/README.md +274 -48
  3. package/UNSUPPORTED.md +66 -3
  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/classic.d.ts +2 -2
  9. package/dist/clients/classic.d.ts.map +1 -1
  10. package/dist/clients/classic.js +4 -4
  11. package/dist/clients/classic.js.map +1 -1
  12. package/dist/clients/client.d.ts +7 -2
  13. package/dist/clients/client.d.ts.map +1 -1
  14. package/dist/clients/dsiot.d.ts +3 -1
  15. package/dist/clients/dsiot.d.ts.map +1 -1
  16. package/dist/clients/dsiot.js +7 -2
  17. package/dist/clients/dsiot.js.map +1 -1
  18. package/dist/codecs/airbase/capabilities.d.ts +23 -0
  19. package/dist/codecs/airbase/capabilities.d.ts.map +1 -0
  20. package/dist/codecs/airbase/capabilities.js +108 -0
  21. package/dist/codecs/airbase/capabilities.js.map +1 -0
  22. package/dist/codecs/airbase/state.d.ts +29 -0
  23. package/dist/codecs/airbase/state.d.ts.map +1 -0
  24. package/dist/codecs/airbase/state.js +166 -0
  25. package/dist/codecs/airbase/state.js.map +1 -0
  26. package/dist/codecs/airbase/tables.d.ts +7 -0
  27. package/dist/codecs/airbase/tables.d.ts.map +1 -0
  28. package/dist/codecs/airbase/tables.js +27 -0
  29. package/dist/codecs/airbase/tables.js.map +1 -0
  30. package/dist/codecs/airbase/zone.d.ts +12 -0
  31. package/dist/codecs/airbase/zone.d.ts.map +1 -0
  32. package/dist/codecs/airbase/zone.js +50 -0
  33. package/dist/codecs/airbase/zone.js.map +1 -0
  34. package/dist/codecs/classic/capabilities.d.ts.map +1 -1
  35. package/dist/codecs/classic/capabilities.js +5 -11
  36. package/dist/codecs/classic/capabilities.js.map +1 -1
  37. package/dist/codecs/classic/extendedControl.d.ts.map +1 -1
  38. package/dist/codecs/classic/extendedControl.js +10 -19
  39. package/dist/codecs/classic/extendedControl.js.map +1 -1
  40. package/dist/codecs/classic/state.d.ts.map +1 -1
  41. package/dist/codecs/classic/state.js +36 -95
  42. package/dist/codecs/classic/state.js.map +1 -1
  43. package/dist/codecs/classic/tables.d.ts +34 -0
  44. package/dist/codecs/classic/tables.d.ts.map +1 -0
  45. package/dist/codecs/classic/tables.js +96 -0
  46. package/dist/codecs/classic/tables.js.map +1 -0
  47. package/dist/codecs/credentials.d.ts +3 -2
  48. package/dist/codecs/credentials.d.ts.map +1 -1
  49. package/dist/codecs/credentials.js +8 -3
  50. package/dist/codecs/credentials.js.map +1 -1
  51. package/dist/codecs/device.d.ts +7 -1
  52. package/dist/codecs/device.d.ts.map +1 -1
  53. package/dist/codecs/device.js +15 -3
  54. package/dist/codecs/device.js.map +1 -1
  55. package/dist/codecs/dsiot/capabilities.d.ts.map +1 -1
  56. package/dist/codecs/dsiot/capabilities.js +8 -15
  57. package/dist/codecs/dsiot/capabilities.js.map +1 -1
  58. package/dist/codecs/dsiot/device.d.ts.map +1 -1
  59. package/dist/codecs/dsiot/device.js +4 -8
  60. package/dist/codecs/dsiot/device.js.map +1 -1
  61. package/dist/codecs/dsiot/multireq.d.ts +0 -19
  62. package/dist/codecs/dsiot/multireq.d.ts.map +1 -1
  63. package/dist/codecs/dsiot/multireq.js +2 -25
  64. package/dist/codecs/dsiot/multireq.js.map +1 -1
  65. package/dist/codecs/dsiot/state.d.ts +6 -62
  66. package/dist/codecs/dsiot/state.d.ts.map +1 -1
  67. package/dist/codecs/dsiot/state.js +29 -148
  68. package/dist/codecs/dsiot/state.js.map +1 -1
  69. package/dist/codecs/dsiot/tables.d.ts +119 -0
  70. package/dist/codecs/dsiot/tables.d.ts.map +1 -0
  71. package/dist/codecs/dsiot/tables.js +188 -0
  72. package/dist/codecs/dsiot/tables.js.map +1 -0
  73. package/dist/discovery.d.ts +20 -9
  74. package/dist/discovery.d.ts.map +1 -1
  75. package/dist/discovery.js +102 -32
  76. package/dist/discovery.js.map +1 -1
  77. package/dist/factory.d.ts +13 -7
  78. package/dist/factory.d.ts.map +1 -1
  79. package/dist/factory.js +16 -4
  80. package/dist/factory.js.map +1 -1
  81. package/dist/index.d.ts +8 -0
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +8 -0
  84. package/dist/index.js.map +1 -1
  85. package/dist/models/device.d.ts +3 -2
  86. package/dist/models/device.d.ts.map +1 -1
  87. package/dist/models/device.js +1 -1
  88. package/dist/models/device.js.map +1 -1
  89. package/dist/models/state.d.ts +2 -3
  90. package/dist/models/state.d.ts.map +1 -1
  91. package/dist/models/zone.d.ts +9 -0
  92. package/dist/models/zone.d.ts.map +1 -0
  93. package/dist/models/zone.js +2 -0
  94. package/dist/models/zone.js.map +1 -0
  95. package/dist/simulators/airbase.d.ts +82 -0
  96. package/dist/simulators/airbase.d.ts.map +1 -0
  97. package/dist/simulators/airbase.js +352 -0
  98. package/dist/simulators/airbase.js.map +1 -0
  99. package/dist/simulators/classic.d.ts +61 -0
  100. package/dist/simulators/classic.d.ts.map +1 -0
  101. package/dist/simulators/classic.js +473 -0
  102. package/dist/simulators/classic.js.map +1 -0
  103. package/dist/simulators/dsiot.d.ts +49 -0
  104. package/dist/simulators/dsiot.d.ts.map +1 -0
  105. package/dist/simulators/dsiot.js +519 -0
  106. package/dist/simulators/dsiot.js.map +1 -0
  107. package/dist/simulators/index.d.ts +5 -0
  108. package/dist/simulators/index.d.ts.map +1 -0
  109. package/dist/simulators/index.js +4 -0
  110. package/dist/simulators/index.js.map +1 -0
  111. package/dist/simulators/simulator.d.ts +117 -0
  112. package/dist/simulators/simulator.d.ts.map +1 -0
  113. package/dist/simulators/simulator.js +141 -0
  114. package/dist/simulators/simulator.js.map +1 -0
  115. package/dist/transport.d.ts +8 -3
  116. package/dist/transport.d.ts.map +1 -1
  117. package/dist/transport.js +10 -2
  118. package/dist/transport.js.map +1 -1
  119. package/package.json +11 -4
  120. package/src/clients/airbase.ts +274 -0
  121. package/src/clients/classic.ts +8 -8
  122. package/src/clients/client.ts +8 -1
  123. package/src/clients/dsiot.ts +8 -1
  124. package/src/codecs/airbase/capabilities.ts +150 -0
  125. package/src/codecs/airbase/state.ts +223 -0
  126. package/src/codecs/airbase/tables.ts +32 -0
  127. package/src/codecs/airbase/zone.ts +62 -0
  128. package/src/codecs/classic/capabilities.ts +8 -11
  129. package/src/codecs/classic/extendedControl.ts +14 -25
  130. package/src/codecs/classic/state.ts +49 -101
  131. package/src/codecs/classic/tables.ts +126 -0
  132. package/src/codecs/credentials.ts +11 -3
  133. package/src/codecs/device.ts +19 -3
  134. package/src/codecs/dsiot/capabilities.ts +10 -17
  135. package/src/codecs/dsiot/device.ts +4 -9
  136. package/src/codecs/dsiot/multireq.ts +2 -25
  137. package/src/codecs/dsiot/state.ts +57 -193
  138. package/src/codecs/dsiot/tables.ts +253 -0
  139. package/src/discovery.ts +107 -34
  140. package/src/factory.ts +26 -7
  141. package/src/index.ts +8 -0
  142. package/src/models/device.ts +3 -2
  143. package/src/models/state.ts +2 -3
  144. package/src/models/zone.ts +8 -0
  145. package/src/simulators/airbase.ts +495 -0
  146. package/src/simulators/classic.ts +636 -0
  147. package/src/simulators/dsiot.ts +736 -0
  148. package/src/simulators/index.ts +10 -0
  149. package/src/simulators/simulator.ts +282 -0
  150. package/src/transport.ts +15 -4
package/UNSUPPORTED.md CHANGED
@@ -15,7 +15,7 @@ To add one, pin down the request and reply first, then delete its row.
15
15
  | Classic `shum_asean`, the humidity setting of a `subtype=qa` unit | What each value stands for. `setState` sends such a unit no humidity setting, and `getCapabilities` lists none. | `ClassicDaikinClient.command()` |
16
16
  | Classic vertical louver value `f_dir_ud=C` | What it stands for. `getState` reports `null`. | `ClassicDaikinClient.command()` |
17
17
  | Classic schedule demand mode (`mode=1`) | The full format of the weekly table it needs (`moc`..`suc`, `<day><n>_en`/`_t`/`_p`). | `ClassicDaikinClient.command()` |
18
- | Classic special mode `spmode_kind=4` (heat plus) | Which units take it. | `ClassicDaikinClient.command()` |
18
+ | Heat plus: classic `spmode_kind=4`, DSIOT `dgc_status.e_1002.e_3003.p_1C` | Which units take it. | `ClassicDaikinClient.command()`, `DsiotDaikinClient.multireqUpdate()` |
19
19
  | Timers, weekly programs, schedule timers (`/aircon/get_timer`, `set_timer`, `get_program`, `set_program`, `get_scdltimer_info`, `get_scdltimer_body`, `set_scdltimer_info`, `set_scdltimer_body`) | Their parameters. | `ClassicDaikinClient.command()` |
20
20
  | Classic setting reads: `/aircon/get_demand_control`, `/aircon/get_price`, `/aircon/get_target`, `/common/get_holiday` | The reply fields. `getHolidayMode` reads `/common/basic_info` instead. | `ClassicDaikinClient.command()` |
21
21
  | Classic `method` in `/common/get_remote_method` | Whether the reply carries it. `getOutOfHomeAccess` reads `/common/basic_info` instead. | `ClassicDaikinClient.command()` |
@@ -24,12 +24,27 @@ To add one, pin down the request and reply first, then delete its row.
24
24
  | Compressor frequency: classic `cmpfreq` in `/aircon/get_sensor_info`, DSIOT `dgc_status.e_1003.e_2006.p_04` | The unit. | `ClassicDaikinClient.command()`, `DsiotDaikinClient.multireqGet()` |
25
25
  | Error code: classic `err` in `/aircon/get_sensor_info` and `/common/basic_info` | Which code on the unit's display each number stands for. | `ClassicDaikinClient.command()` |
26
26
  | Reading the settings of a DSIOT adapter: LED, holiday mode, icon, group | The value encoding of each `adp_d` leaf. | `DsiotDaikinClient.multireqGet()` |
27
- | Special modes through `setState`, and on a DSIOT adapter at all | Whether a DSIOT adapter accepts a write to the leaves `getState` reads, and which value turns a mode on. | `ClassicDaikinClient.setSpecialMode()`, `DsiotDaikinClient.multireqUpdate()` |
28
27
  | Classic `powerful` and `econo` on a unit whose `cpv` is not 3, or whose `cpv_minor` is `00` or missing | Whether such a unit takes them. `getCapabilities` lists neither for it, whatever its `en_spmode`. | `ClassicDaikinClient.setSpecialMode()` |
29
- | `econo` in fan mode | Whether a unit takes it. `getCapabilities` lists it in every mode but fan. | `ClassicDaikinClient.setSpecialMode()` |
28
+ | `econo` in fan mode | Whether a unit takes it. `getCapabilities` lists it in every mode but fan. | `DaikinClient.setSpecialMode()` |
29
+ | A special mode switched on while another is on | Whether the adapter switches the other off. `setSpecialMode` writes the one mode it is given. | `DaikinClient.setSpecialMode()` |
30
30
  | Classic notifications, clock and account: `/common/get_notify`, `set_notify`, `set_push_notice`, `set_timezone`, `notify_date_time`, `set_account` | Their parameters. | `ClassicDaikinClient.command()` |
31
31
  | Classic network: `/common/get_network_setting`, `set_network_setting`, `start_wifi_scan`, `get_wifi_scan_result`, `start_wifi_connection`, `permit_wifi_connection`, `set_lpw` | Their parameters. | `ClassicDaikinClient.command()` |
32
32
  | Classic firmware update: a POST to `/dkac/system/fwupdate` | The format of the upload. | Not reachable |
33
+ | A terminal uuid in another form: with dashes, uppercase, or not 32 hexadecimal digits | Whether the adapter accepts it. `createDaikinClient` throws an `Error` for one. | Not reachable |
34
+ | Telling an Airbase adapter from a classic one in a discovery reply | Whether any field of the reply differs: both report `type=aircon`. `discoverDevices` asks the adapter over HTTP instead, and takes HTTP 404 at `/common/basic_info` with `ret=OK` at `/skyfi/common/basic_info` for an Airbase adapter. What a classic adapter answers under `/skyfi` is not known, so it is never asked there. | Set `protocol` on the `DaikinDevice` by hand |
35
+ | An Airbase child lock: `lpw_flag` in its `/common/basic_info` | Whether an Airbase adapter has a child lock code, and how a request would carry one. `discoverDevices` reports `requiresLocalPassword: false` for an Airbase adapter whatever its `lpw_flag`, and `AirbaseDaikinClient` sends no `lpw`. | `AirbaseDaikinClient.command()` |
36
+ | Airbase special modes | Whether a unit takes any, and the request. `getState` reports none, and `AirbaseDaikinClient.setSpecialMode` rejects with status 501. | `AirbaseDaikinClient.command()` |
37
+ | Airbase humidity: `shum`, and `dh1` to `dhh` in `/aircon/get_control_info` | Whether a ducted unit has a humidity setting, and what each field holds. `getState` reports `null`, and `setState` sends `shum` back as the unit holds it and none of the `dh` fields. | `AirbaseDaikinClient.command()` |
38
+ | Airbase energy monitoring and demand control | Which field says a unit has either. `getCapabilities` reports `false` for both. | `AirbaseDaikinClient.command()` |
39
+ | Airbase `f_dir` values 4 and 7 | What each stands for. `getState` reports `swingMode: "off"`. | `AirbaseDaikinClient.command()` |
40
+ | Airbase `bk_auto` and `operate` in `/aircon/get_control_info`, on a unit that reports a `bk_auto` other than its mode while it runs in cool or heat | Which of the two modes such a unit remembers a fan speed for. `setState` writes it to the one `bk_auto` names. | `AirbaseDaikinClient.command()` |
41
+ | Airbase `/aircon/set_control_info` without the memory fields: `dt0` to `dt7`, `dfr1`, `dfr2`, `dfd1`, `dfd2`, `auto1`, `auto2`, `airside1` and `airside2` | Whether the adapter takes it, so `setState` sends each one a control changes. | `AirbaseDaikinClient.command()` |
42
+ | Every other Airbase endpoint: timers, programs, schedules, holiday, demand control, energy history, network and firmware | Their parameters and reply fields. | `AirbaseDaikinClient.command()` |
43
+ | A classic adapter sold in Europe: the capability fields of a unit there (`reg=eu`) | Whether such a unit reports them as a unit in the other markets does. `getCapabilities` reads them by the same rules. | `ClassicDaikinClient.command()` |
44
+ | A classic adapter sold in Europe that reports `adp_kind=3` and `en_secure=1` | Whether it speaks HTTPS, as such an adapter does in the other markets. `discoverDevices` sets `usesHttps` for it. | Set `usesHttps: false` on the `DaikinDevice` |
45
+ | A DSIOT adapter sold in Europe (BRP069C series) | Whether its `dgc_status` leaves hold the values a BRP084 holds. Its `adp_i`, `adp_d` and `dgc_status` resources are read with the same request. | `DsiotDaikinClient.multireqGet()` |
46
+ | A DSIOT adapter that answers `/dsiot/multireq` only once it is switched on, by the UDP datagram `DAIKIN_UDP/debug/en_multireq 1` sent to its port 30050 | Which adapters need it, what one answers to the datagram and to `/dsiot/multireq` before it, and how long it stays on. | Not reachable |
47
+ | An adapter whose discovery reply has a `type` other than `aircon` and `GPF`, such as `common_adp`, or none | Whether any is an air conditioner's. `discoverDevices` leaves it out. | Write the `DaikinDevice` by hand |
33
48
 
34
49
  ## Not modelled
35
50
 
@@ -42,6 +57,9 @@ These values are known, but the package's types don't represent them yet:
42
57
  | DSIOT laundry mode (`dgc_status.e_1002.e_3003.p_25` = `01`) | The mode in `dgc_status.e_1002.e_3001.p_01` |
43
58
  | Classic `f_dir=6` (heat with the special air outlet) | `swingMode: "off"` |
44
59
  | Japanese units (`reg=jp`), which follow separate rules for limits, humidity and fan, and take a humidity percentage | The rules for other regions |
60
+ | Airbase zone temperatures: `lztemp_c` and `lztemp_h` in `/aircon/get_zone_setting`, a setpoint for each zone in cool and in heat | Nothing: `getZones` leaves them out, and `setZone` sends them back as the unit holds them |
61
+ | Airbase fan auto and airside | `fanSpeed` holds `f_rate` alone. `AirbaseDaikinClient.getFanAuto` and `getAirside` report the other two |
62
+ | Airbase modes outside `OperatingMode`, such as `HUM` | `mode: "auto"`. `setState` keeps the mode unless the control sets one |
45
63
 
46
64
  These adapter codes pass through a model unchanged, because what each one
47
65
  stands for is not known:
@@ -50,3 +68,48 @@ stands for is not known:
50
68
  | --- | --- |
51
69
  | `DeviceMetadata.icon` | The `icon` that classic `/common/set_icon` takes |
52
70
  | `DaikinCapabilities.model` | The classic `model` field, or DSIOT `dgc_status.e_1002.e_A001.p_0D`, such as `0ABB` |
71
+
72
+ ## Simulators
73
+
74
+ `startClassicSimulator`, `startDsiotSimulator` and `startAirbaseSimulator`
75
+ answer HTTP 501 to every request this table leaves them without an answer
76
+ for:
77
+
78
+ | Left out | What is unknown |
79
+ | --- | --- |
80
+ | A classic endpoint without a typed method on `ClassicDaikinClient`, and any method but GET | The reply fields. |
81
+ | Classic `/common/register_terminal` on an adapter started without a `key` | What an adapter that requires no registration answers. |
82
+ | A DSIOT resource other than `adp_i`, `adp_d` and the `dgc_status` of the indoor and the outdoor unit | The leaves and their encodings. |
83
+ | A DSIOT read of a node below a resource, a read with a query other than `filter`, and a write that names a leaf the adapter does not report | What an adapter answers. |
84
+ | A `/dsiot/multireq` body that is not JSON, has no `requests`, or carries an `op` other than 2 in a POST and 3 in a PUT | What an adapter answers. |
85
+ | `setState` on a DSIOT simulator with a humidity percentage, or a fixed horizontal louver position: it throws an `Error` | The step a percentage is counted in, and which value each position is. Set the leaf in `leaves`. |
86
+ | HTTPS | The certificate an adapter presents is issued by Daikin's own CA. A simulator started with a `key` reports `adp_kind=4`, an adapter that registers terminals over HTTP. |
87
+ | An Airbase endpoint without a typed method on `AirbaseDaikinClient`, and any method but GET | The reply fields. |
88
+ | Airbase `/aircon/get_zone_setting` and `set_zone_setting` on a unit without zones | What such a unit answers. |
89
+
90
+ These answers are a simulator's own choice, where an adapter's is not known:
91
+
92
+ | A simulator | What is unknown |
93
+ | --- | --- |
94
+ | Answers HTTP 403 to a terminal that is not registered, `/common/basic_info` included, and to `/common/register_terminal` with the wrong key | Which of HTTP 401 and 403 an adapter answers, which endpoints it answers before registration, and what it answers to a wrong key. |
95
+ | Answers `ret=LPW NG` to every classic endpoint without the right `lpw` | Which endpoints an adapter answers without it. |
96
+ | Answers `rsc` 4001, with HTTP 200, to a DSIOT request without the right `Authorization` | Whether an adapter answers that or HTTP 401. |
97
+ | Answers `ret=PARAM NG` to a classic write without a parameter, or with a `spmode_kind` other than 1, 2 and 4. `/aircon/set_control_info` needs `pow`, `mode`, `stemp`, `f_rate` and, on a unit that reports it, `shum` | Which requests an adapter answers `PARAM NG`, and whether it takes a `set_control_info` without one of them. |
98
+ | Holds any value it is sent or set to, and a special mode the unit does not report taking | What an adapter answers to a value the unit does not take. |
99
+ | Drops a `/aircon/set_control_info` parameter that is not a control field or the `dt`, `dh` or `dfd` of a mode | Which other parameters an adapter takes. |
100
+ | Answers `/common/get_remote_method` with `notice_ip_int` and `notice_sync_int` alone | Whether the reply carries `method`. |
101
+ | Answers every reply's fields in one order, with no field beyond those it holds | The order of an adapter's fields, and the fields no caller of this package reads. |
102
+ | Keeps answering after `/common/reboot` and `/config/system/reboot` | How long an adapter stays away. |
103
+ | Answers `rsc` 2000 to a DSIOT read and 2004 to a write, without `fr`, and without `pc` on a write | Which `rsc` from 2000 to 2004 an adapter answers each with, and what else the reply carries. |
104
+ | Sends a leaf's `pn` and `pt` whatever a read's `filter` lists, its `pv` and `md` when the filter lists them, and all four without a filter | What an adapter sends for a filter other than `pv`, `pv,md` and `pv,pt,md`. |
105
+ | Sends `b` as the `pt` inside each `md`, and gives a leaf `pt` 2 where a write is known for it and 3 otherwise | What `md.pt` holds, and what tells `pt` 2 from 3 beyond a special mode's leaf. |
106
+ | Leaves every other leaf as it is when one is written: switching powerful on leaves econo on | Which leaves a DSIOT adapter changes on its own. |
107
+ | Holds `--` as the `stemp` and `shum` of a classic mode without a `dt` or a `dh`, when `setState` changes to it | What a unit holds in fan mode after a change on its remote control. |
108
+ | Still answers `f_dir` in `/aircon/get_control_info` on a classic simulator started with a `unit` whose `swing` is `none` | Whether a classic unit without a louver reports the field. |
109
+ | Makes a request wait while it answers another | Whether an adapter also drops a connection while it is busy. |
110
+ | Answers a discovery probe from UDP port 30050 of its address | The port an adapter answers from. |
111
+ | Answers HTTP 404 to every path outside `/skyfi`, on an Airbase simulator | Which paths besides `/common/basic_info` an Airbase adapter answers 404. |
112
+ | Answers `ret=PARAM NG` to an Airbase `/aircon/set_control_info` without `pow`, `mode`, `stemp`, `shum`, `f_rate`, `f_auto`, `f_airside` or `f_dir`, and to a `set_zone_setting` without `zone_name` or `zone_onoff` | Which requests an Airbase adapter answers `PARAM NG`, and whether it takes a write without one of them. |
113
+ | Keeps what an Airbase unit remembers for cool or for heat equal to what it holds, and names that mode in `bk_auto` once the unit is set to it | What an Airbase unit remembers on its own, and when it changes `bk_auto`. |
114
+ | Reports no `shum`, no `adp_kind` and no `adv` on an Airbase simulator, and `model=NOTSUPPORT` | Which of them an Airbase adapter reports, and what its `model` holds on each unit. |
115
+ | Holds the lists of an Airbase `get_zone_setting` with `%3B` for each `;`, and as many names as the unit has zones | The letter case an adapter sends, and whether it names more zones than `en_zone` counts. |
@@ -0,0 +1,64 @@
1
+ import type { DaikinCapabilities } from "../models/capabilities.js";
2
+ import type { DaikinDeviceInfo } from "../models/device.js";
3
+ import type { DaikinControl, DaikinSensors, DaikinState, DaikinStateAndSensors, SpecialMode } from "../models/state.js";
4
+ import type { DaikinZone } from "../models/zone.js";
5
+ import { type DaikinRequestOptions, type DaikinRetryOptions, type DaikinTransport } from "../transport.js";
6
+ import type { DaikinClient } from "./client.js";
7
+ /** Whether the adapter `transport` reaches is an Airbase adapter: one that
8
+ * answers HTTP 404 at `/common/basic_info`, where a classic adapter answers,
9
+ * and `ret=OK` at `/skyfi/common/basic_info`. It sends the second request
10
+ * only after that 404, and retries a refused or dropped connection as
11
+ * `withRetry` does by default: an adapter drops one while it answers another
12
+ * caller. It resolves with `false` when either request fails any other way.
13
+ * `discoverDevices` calls it, and `src/index.ts` does not export it. */
14
+ export declare function isAirbaseAdapter(transport: DaikinTransport): Promise<boolean>;
15
+ /** Airbase adapter (BRP15B61), on a ducted unit. Reads and writes are HTTP GET
16
+ * with query parameters, as on a classic adapter, at paths under `/skyfi`.
17
+ * It takes no terminal uuid and no local password. */
18
+ export declare class AirbaseDaikinClient implements DaikinClient {
19
+ private readonly transport;
20
+ private readonly retryOptions?;
21
+ private capabilityFields;
22
+ private readonly setStateCache;
23
+ /** `close` closes `transport`, so give each client a transport of its own.
24
+ * `maxStateAgeForSetStateInMs` defaults to 0: see
25
+ * `CreateDaikinClientOptions.maxStateAgeForSetStateInMs`. */
26
+ constructor(transport: DaikinTransport, retryOptions?: DaikinRetryOptions | undefined, maxStateAgeForSetStateInMs?: number);
27
+ close(): Promise<void>;
28
+ getDeviceInfo(): Promise<DaikinDeviceInfo>;
29
+ getCapabilities(): Promise<DaikinCapabilities>;
30
+ getState(): Promise<DaikinState>;
31
+ setState(control: DaikinControl): Promise<void>;
32
+ getSensors(): Promise<DaikinSensors>;
33
+ getStateAndSensors(): Promise<DaikinStateAndSensors>;
34
+ /** Rejects with a `DaikinError` whose status is 501: an Airbase adapter has
35
+ * no known request for a special mode. */
36
+ setSpecialMode(_mode: SpecialMode, _enabled: boolean): Promise<void>;
37
+ /** Whether fan auto is on: the unit then picks the fan speed itself, up to
38
+ * the one that is set. `null` on a unit that takes no fan auto. */
39
+ getFanAuto(): Promise<boolean | null>;
40
+ /** Switches fan auto on or off. It switches airside off, and keeps the fan
41
+ * speed. Check `getFanAuto` first: the client sends it to any unit. */
42
+ setFanAuto(enabled: boolean): Promise<void>;
43
+ /** Whether airside is on. `null` on a unit that takes no airside. */
44
+ getAirside(): Promise<boolean | null>;
45
+ /** Switches airside on or off. Switching it on switches fan auto off and
46
+ * sets the lowest fan speed. Check `getAirside` first: the client sends it
47
+ * to any unit. */
48
+ setAirside(enabled: boolean): Promise<void>;
49
+ /** The unit's zones, in the unit's order; empty on a unit without zones,
50
+ * which is not asked for any. */
51
+ getZones(): Promise<DaikinZone[]>;
52
+ /** Opens or closes the zone at `index` in `getZones`, counted from 0. It
53
+ * rejects with an `Error` for an index the unit has no zone at. */
54
+ setZone(index: number, enabled: boolean): Promise<void>;
55
+ /** Calls any endpoint by its path below `/skyfi`, such as
56
+ * `/aircon/get_control_info`, with query parameters, and returns the reply's
57
+ * `key=value` fields. It throws a `DaikinError` when the reply's `ret` is
58
+ * not `OK`. */
59
+ command(path: string, parameters?: Record<string, string>, { retry }?: DaikinRequestOptions): Promise<Record<string, string>>;
60
+ private readZoneSetting;
61
+ private readControlInfo;
62
+ private readCapabilityFields;
63
+ }
64
+ //# sourceMappingURL=airbase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"airbase.d.ts","sourceRoot":"","sources":["../../src/clients/airbase.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAmBhD;;;;;;wEAMwE;AACxE,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAED;;sDAEsD;AACtD,qBAAa,mBAAoB,YAAW,YAAY;IASpD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IARhC,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C;;iEAE6D;IAC7D,YACmB,SAAS,EAAE,eAAe,EAC1B,YAAY,CAAC,EAAE,kBAAkB,YAAA,EAClD,0BAA0B,SAAI,EAG/B;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAEK,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAE/C;IAEK,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAEnD;IAEK,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAErC;IAEK,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpD;IAEK,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAIzC;IAEK,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAEzD;IAED;8CAC0C;IACpC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;IAID;uEACmE;IAC7D,UAAU,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAI1C;IAED;2EACuE;IACjE,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhD;IAED,qEAAqE;IAC/D,UAAU,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAI1C;IAED;;sBAEkB;IACZ,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhD;IAED;qCACiC;IAC3B,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAMtC;IAED;uEACmE;IAC7D,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAO5D;IAED;;;mBAGe;IACT,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,EAAE,KAAY,EAAE,GAAE,oBAAyB,GAC1C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqBjC;YAIa,eAAe;YAQf,eAAe;IAM7B,OAAO,CAAC,oBAAoB;CAY7B"}
@@ -0,0 +1,175 @@
1
+ import { mergeAirbaseCapabilityFields, parseAirbaseCapabilities, parseAirbaseZoneCount, takesAirbaseAirside, takesAirbaseFanAuto, } from "../codecs/airbase/capabilities.js";
2
+ import { applyAirbaseAirside, applyAirbaseControl, applyAirbaseFanAuto, parseAirbaseAirside, parseAirbaseFanAuto, parseAirbaseSensors, parseAirbaseState, } from "../codecs/airbase/state.js";
3
+ import { applyAirbaseZone, parseAirbaseZones } from "../codecs/airbase/zone.js";
4
+ import { assertClassicOk, isClassicOk, parseClassicKeyValue, } from "../codecs/classic/keyValue.js";
5
+ import { parseDeviceInfo } from "../codecs/device.js";
6
+ import { DaikinError } from "../error.js";
7
+ import { withRetry, } from "../transport.js";
8
+ import { SetStateCache } from "./setStateCache.js";
9
+ // An Airbase adapter answers the endpoints of a classic adapter under this
10
+ // path, and HTTP 404 at the paths a classic adapter answers.
11
+ const AIRBASE_ROOT = "/skyfi";
12
+ const AIRBASE_ROUTES = {
13
+ basicInfo: "/common/basic_info",
14
+ getModelInfo: "/aircon/get_model_info",
15
+ getControlInfo: "/aircon/get_control_info",
16
+ setControlInfo: "/aircon/set_control_info",
17
+ getSensorInfo: "/aircon/get_sensor_info",
18
+ getZoneSetting: "/aircon/get_zone_setting",
19
+ setZoneSetting: "/aircon/set_zone_setting",
20
+ };
21
+ const NOT_FOUND = 404;
22
+ /** Whether the adapter `transport` reaches is an Airbase adapter: one that
23
+ * answers HTTP 404 at `/common/basic_info`, where a classic adapter answers,
24
+ * and `ret=OK` at `/skyfi/common/basic_info`. It sends the second request
25
+ * only after that 404, and retries a refused or dropped connection as
26
+ * `withRetry` does by default: an adapter drops one while it answers another
27
+ * caller. It resolves with `false` when either request fails any other way.
28
+ * `discoverDevices` calls it, and `src/index.ts` does not export it. */
29
+ export async function isAirbaseAdapter(transport) {
30
+ const get = (path) => withRetry(() => transport.send({ method: "GET", path }));
31
+ try {
32
+ await get(AIRBASE_ROUTES.basicInfo);
33
+ return false;
34
+ }
35
+ catch (error) {
36
+ if (!(error instanceof DaikinError) || error.httpStatusCode !== NOT_FOUND) {
37
+ return false;
38
+ }
39
+ }
40
+ try {
41
+ return isClassicOk(parseClassicKeyValue(await get(`${AIRBASE_ROOT}${AIRBASE_ROUTES.basicInfo}`)));
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ /** Airbase adapter (BRP15B61), on a ducted unit. Reads and writes are HTTP GET
48
+ * with query parameters, as on a classic adapter, at paths under `/skyfi`.
49
+ * It takes no terminal uuid and no local password. */
50
+ export class AirbaseDaikinClient {
51
+ transport;
52
+ retryOptions;
53
+ // A unit's capabilities don't change, so they are read once.
54
+ capabilityFields;
55
+ setStateCache;
56
+ /** `close` closes `transport`, so give each client a transport of its own.
57
+ * `maxStateAgeForSetStateInMs` defaults to 0: see
58
+ * `CreateDaikinClientOptions.maxStateAgeForSetStateInMs`. */
59
+ constructor(transport, retryOptions, maxStateAgeForSetStateInMs = 0) {
60
+ this.transport = transport;
61
+ this.retryOptions = retryOptions;
62
+ this.setStateCache = new SetStateCache(maxStateAgeForSetStateInMs);
63
+ }
64
+ close() {
65
+ return this.transport.close();
66
+ }
67
+ async getDeviceInfo() {
68
+ return parseDeviceInfo(await this.command(AIRBASE_ROUTES.basicInfo));
69
+ }
70
+ async getCapabilities() {
71
+ return parseAirbaseCapabilities(await this.readCapabilityFields());
72
+ }
73
+ async getState() {
74
+ return parseAirbaseState(await this.readControlInfo());
75
+ }
76
+ async setState(control) {
77
+ const current = this.setStateCache.get() ??
78
+ (await this.command(AIRBASE_ROUTES.getControlInfo));
79
+ await this.command(AIRBASE_ROUTES.setControlInfo, applyAirbaseControl(current, control));
80
+ }
81
+ async getSensors() {
82
+ return parseAirbaseSensors(await this.command(AIRBASE_ROUTES.getSensorInfo));
83
+ }
84
+ async getStateAndSensors() {
85
+ return { state: await this.getState(), sensors: await this.getSensors() };
86
+ }
87
+ /** Rejects with a `DaikinError` whose status is 501: an Airbase adapter has
88
+ * no known request for a special mode. */
89
+ async setSpecialMode(_mode, _enabled) {
90
+ throw new DaikinError("An Airbase adapter takes no special mode", 501);
91
+ }
92
+ // --- extended controls ---------------------------------------------------
93
+ /** Whether fan auto is on: the unit then picks the fan speed itself, up to
94
+ * the one that is set. `null` on a unit that takes no fan auto. */
95
+ async getFanAuto() {
96
+ return takesAirbaseFanAuto(await this.readCapabilityFields())
97
+ ? parseAirbaseFanAuto(await this.readControlInfo())
98
+ : null;
99
+ }
100
+ /** Switches fan auto on or off. It switches airside off, and keeps the fan
101
+ * speed. Check `getFanAuto` first: the client sends it to any unit. */
102
+ async setFanAuto(enabled) {
103
+ await this.command(AIRBASE_ROUTES.setControlInfo, applyAirbaseFanAuto(await this.command(AIRBASE_ROUTES.getControlInfo), enabled));
104
+ }
105
+ /** Whether airside is on. `null` on a unit that takes no airside. */
106
+ async getAirside() {
107
+ return takesAirbaseAirside(await this.readCapabilityFields())
108
+ ? parseAirbaseAirside(await this.readControlInfo())
109
+ : null;
110
+ }
111
+ /** Switches airside on or off. Switching it on switches fan auto off and
112
+ * sets the lowest fan speed. Check `getAirside` first: the client sends it
113
+ * to any unit. */
114
+ async setAirside(enabled) {
115
+ await this.command(AIRBASE_ROUTES.setControlInfo, applyAirbaseAirside(await this.command(AIRBASE_ROUTES.getControlInfo), enabled));
116
+ }
117
+ /** The unit's zones, in the unit's order; empty on a unit without zones,
118
+ * which is not asked for any. */
119
+ async getZones() {
120
+ const capabilityFields = await this.readCapabilityFields();
121
+ return parseAirbaseZones(await this.readZoneSetting(capabilityFields), capabilityFields);
122
+ }
123
+ /** Opens or closes the zone at `index` in `getZones`, counted from 0. It
124
+ * rejects with an `Error` for an index the unit has no zone at. */
125
+ async setZone(index, enabled) {
126
+ const capabilityFields = await this.readCapabilityFields();
127
+ const current = await this.readZoneSetting(capabilityFields);
128
+ await this.command(AIRBASE_ROUTES.setZoneSetting, applyAirbaseZone(current, capabilityFields, index, enabled));
129
+ }
130
+ /** Calls any endpoint by its path below `/skyfi`, such as
131
+ * `/aircon/get_control_info`, with query parameters, and returns the reply's
132
+ * `key=value` fields. It throws a `DaikinError` when the reply's `ret` is
133
+ * not `OK`. */
134
+ async command(path, parameters, { retry = true } = {}) {
135
+ const send = () => this.transport.send({
136
+ method: "GET",
137
+ path: `${AIRBASE_ROOT}${path}`,
138
+ ...(parameters ? { query: parameters } : {}),
139
+ });
140
+ try {
141
+ const fields = parseClassicKeyValue(await (retry ? withRetry(send, this.retryOptions) : send()));
142
+ assertClassicOk(fields);
143
+ return fields;
144
+ }
145
+ finally {
146
+ // Every request that changes the unit takes parameters, and any of them
147
+ // may change what `get_control_info` answers, even one that failed: a
148
+ // request that timed out may still have reached the unit.
149
+ if (parameters) {
150
+ this.setStateCache.clear();
151
+ }
152
+ }
153
+ }
154
+ // What a unit without zones answers at `get_zone_setting` is not known, so
155
+ // it is not asked.
156
+ async readZoneSetting(capabilityFields) {
157
+ return parseAirbaseZoneCount(capabilityFields) === 0
158
+ ? {}
159
+ : this.command(AIRBASE_ROUTES.getZoneSetting);
160
+ }
161
+ async readControlInfo() {
162
+ const fields = await this.command(AIRBASE_ROUTES.getControlInfo);
163
+ this.setStateCache.set(fields);
164
+ return fields;
165
+ }
166
+ readCapabilityFields() {
167
+ this.capabilityFields ??= (async () => mergeAirbaseCapabilityFields(await this.command(AIRBASE_ROUTES.basicInfo), await this.command(AIRBASE_ROUTES.getModelInfo)))();
168
+ // A failed read is not cached, so the next call tries again.
169
+ this.capabilityFields.catch(() => {
170
+ this.capabilityFields = undefined;
171
+ });
172
+ return this.capabilityFields;
173
+ }
174
+ }
175
+ //# sourceMappingURL=airbase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"airbase.js","sourceRoot":"","sources":["../../src/clients/airbase.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@ export declare class ClassicDaikinClient implements DaikinClient {
22
22
  setState(control: DaikinControl): Promise<void>;
23
23
  getSensors(): Promise<DaikinSensors>;
24
24
  getStateAndSensors(): Promise<DaikinStateAndSensors>;
25
+ /** `set_special_mode`, an endpoint of its own beside `set_control_info`. */
26
+ setSpecialMode(mode: SpecialMode, enabled: boolean): Promise<void>;
25
27
  /** Whether the adapter's status LED is on (`basic_info`): `null` when the
26
28
  * adapter does not report it. */
27
29
  getLed(): Promise<boolean | null>;
@@ -34,8 +36,6 @@ export declare class ClassicDaikinClient implements DaikinClient {
34
36
  setHolidayMode(enabled: boolean): Promise<void>;
35
37
  /** Demand control — cap the unit's power draw (`set_demand_control`). */
36
38
  setDemandControl(demand: DemandControl): Promise<void>;
37
- /** Powerful, econo or streamer (`set_special_mode`). */
38
- setSpecialMode(mode: SpecialMode, enabled: boolean): Promise<void>;
39
39
  /** Whether the unit can be operated from outside the home network
40
40
  * (`basic_info`): `null` when the adapter does not report it. */
41
41
  getOutOfHomeAccess(): Promise<boolean | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"classic.d.ts","sourceRoot":"","sources":["../../src/clients/classic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classic.d.ts","sourceRoot":"","sources":["../../src/clients/classic.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,10 @@ export class ClassicDaikinClient {
69
69
  async getStateAndSensors() {
70
70
  return { state: await this.getState(), sensors: await this.getSensors() };
71
71
  }
72
+ /** `set_special_mode`, an endpoint of its own beside `set_control_info`. */
73
+ async setSpecialMode(mode, enabled) {
74
+ await this.command(CLASSIC_ROUTES.setSpecialMode, encodeClassicSpecialMode(mode, enabled));
75
+ }
72
76
  // --- extended controls ---------------------------------------------------
73
77
  // Each write goes to its own endpoint, not `set_control_info`.
74
78
  /** Whether the adapter's status LED is on (`basic_info`): `null` when the
@@ -93,10 +97,6 @@ export class ClassicDaikinClient {
93
97
  async setDemandControl(demand) {
94
98
  await this.command(CLASSIC_ROUTES.setDemandControl, encodeClassicDemandControl(demand));
95
99
  }
96
- /** Powerful, econo or streamer (`set_special_mode`). */
97
- async setSpecialMode(mode, enabled) {
98
- await this.command(CLASSIC_ROUTES.setSpecialMode, encodeClassicSpecialMode(mode, enabled));
99
- }
100
100
  /** Whether the unit can be operated from outside the home network
101
101
  * (`basic_info`): `null` when the adapter does not report it. */
102
102
  async getOutOfHomeAccess() {
@@ -1 +1 @@
1
- {"version":3,"file":"classic.js","sourceRoot":"","sources":["../../src/clients/classic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classic.js","sourceRoot":"","sources":["../../src/clients/classic.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { DaikinCapabilities } from "../models/capabilities.js";
2
2
  import type { DaikinDeviceInfo } from "../models/device.js";
3
- import type { DaikinControl, DaikinSensors, DaikinState, DaikinStateAndSensors } from "../models/state.js";
3
+ import type { DaikinControl, DaikinSensors, DaikinState, DaikinStateAndSensors, SpecialMode } from "../models/state.js";
4
4
  /** The controls every adapter offers, whatever its wire protocol or
5
5
  * authentication. `createDaikinClient` picks the implementation, so a caller
6
6
  * needs the concrete class only for what one protocol adds, such as
@@ -18,11 +18,16 @@ export interface DaikinClient {
18
18
  * a reply to `getState` or `getStateAndSensors` younger than
19
19
  * `CreateDaikinClientOptions.maxStateAgeForSetStateInMs`. */
20
20
  setState(control: DaikinControl): Promise<void>;
21
+ /** Turn powerful, econo or streamer on or off, with a request of its own.
22
+ * `DaikinCapabilities.specialModes` lists the ones the unit takes in each
23
+ * mode, and the client sends any other as given. An `AirbaseDaikinClient`
24
+ * rejects every one with status 501. */
25
+ setSpecialMode(mode: SpecialMode, enabled: boolean): Promise<void>;
21
26
  /** Read-only temperature / humidity readings. */
22
27
  getSensors(): Promise<DaikinSensors>;
23
28
  /** What `getState` and `getSensors` resolve with, together. A DSIOT adapter
24
29
  * answers both in one request, where calling the two sends the same request
25
- * twice. A classic adapter takes one request for each. */
30
+ * twice. A classic or an Airbase adapter takes one request for each. */
26
31
  getStateAndSensors(): Promise<DaikinStateAndSensors>;
27
32
  /** Close the connection to the adapter. */
28
33
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/clients/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAE5B;;;;2CAI2C;AAC3C,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE3C,qCAAqC;IACrC,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/C,kCAAkC;IAClC,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAEjC;;;iEAG6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD,iDAAiD;IACjD,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAErC;;8DAE0D;IAC1D,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAErD,2CAA2C;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/clients/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAE5B;;;;2CAI2C;AAC3C,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE3C,qCAAqC;IACrC,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/C,kCAAkC;IAClC,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAEjC;;;iEAG6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;4CAGwC;IACxC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,iDAAiD;IACjD,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAErC;;4EAEwE;IACxE,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAErD,2CAA2C;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -1,7 +1,7 @@
1
1
  import { type DsiotUpdate } from "../codecs/dsiot/multireq.js";
2
2
  import type { DaikinCapabilities } from "../models/capabilities.js";
3
3
  import type { DaikinDeviceInfo } from "../models/device.js";
4
- import type { DaikinControl, DaikinSensors, DaikinState, DaikinStateAndSensors } from "../models/state.js";
4
+ import type { DaikinControl, DaikinSensors, DaikinState, DaikinStateAndSensors, SpecialMode } from "../models/state.js";
5
5
  import { type DaikinRequestOptions, type DaikinRetryOptions, type DaikinTransport } from "../transport.js";
6
6
  import type { DaikinClient } from "./client.js";
7
7
  /** DSIOT adapter (BRP084-style). One endpoint, `/dsiot/multireq`: POST to read
@@ -21,6 +21,8 @@ export declare class DsiotDaikinClient implements DaikinClient {
21
21
  setState(control: DaikinControl): Promise<void>;
22
22
  getSensors(): Promise<DaikinSensors>;
23
23
  getStateAndSensors(): Promise<DaikinStateAndSensors>;
24
+ /** One leaf of `dgc_status`, on the outdoor unit for powerful. */
25
+ setSpecialMode(mode: SpecialMode, enabled: boolean): Promise<void>;
24
26
  /** Reboot the adapter (`/config/system/reboot`). */
25
27
  reboot(): Promise<void>;
26
28
  /** Raw multireq read of whole resources (`DSIOT_TARGETS` values or any `to`),
@@ -1 +1 @@
1
- {"version":3,"file":"dsiot.d.ts","sourceRoot":"","sources":["../../src/clients/dsiot.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,WAAW,EAEjB,MAAM,6BAA6B,CAAC;AAMrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAUhD;6DAC6D;AAC7D,qBAAa,iBAAkB,YAAW,YAAY;IAOlD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAPhC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C;;iEAE6D;IAC7D,YACmB,SAAS,EAAE,eAAe,EAC1B,YAAY,CAAC,EAAE,kBAAkB,YAAA,EAClD,0BAA0B,SAAI,EAG/B;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAEK,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAO/C;IAEK,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAQnD;IAEK,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAErC;IAEK,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpD;IAEK,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAOzC;IAEK,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAMzD;IAID,oDAAoD;IAC9C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAK5B;IAED;4CACwC;IAClC,WAAW,CACf,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEjC;IAED;iFAC6E;IACvE,cAAc,CAClB,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEjC;YAEa,QAAQ;YAoBR,UAAU;CAQzB"}
1
+ {"version":3,"file":"dsiot.d.ts","sourceRoot":"","sources":["../../src/clients/dsiot.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,6BAA6B,CAAC;AAQrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAUhD;6DAC6D;AAC7D,qBAAa,iBAAkB,YAAW,YAAY;IAOlD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAPhC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C;;iEAE6D;IAC7D,YACmB,SAAS,EAAE,eAAe,EAC1B,YAAY,CAAC,EAAE,kBAAkB,YAAA,EAClD,0BAA0B,SAAI,EAG/B;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAEK,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAO/C;IAEK,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAQnD;IAEK,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAErC;IAEK,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpD;IAEK,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAOzC;IAEK,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAMzD;IAED,kEAAkE;IAC5D,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;IAID,oDAAoD;IAC9C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAK5B;IAED;4CACwC;IAClC,WAAW,CACf,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEjC;IAED;iFAC6E;IACvE,cAAc,CAClB,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEjC;YAEa,QAAQ;YAoBR,UAAU;CAQzB"}
@@ -1,7 +1,8 @@
1
1
  import { parseDsiotCapabilities } from "../codecs/dsiot/capabilities.js";
2
2
  import { parseDsiotDeviceInfo } from "../codecs/dsiot/device.js";
3
- import { buildDsiotMultireqGet, buildDsiotMultireqUpdate, DSIOT_TARGETS, parseDsiotMultireqReply, } from "../codecs/dsiot/multireq.js";
4
- import { applyDsiotControl, parseDsiotSensors, parseDsiotState, } from "../codecs/dsiot/state.js";
3
+ import { buildDsiotMultireqGet, buildDsiotMultireqUpdate, parseDsiotMultireqReply, } from "../codecs/dsiot/multireq.js";
4
+ import { applyDsiotControl, buildDsiotSpecialModeUpdate, parseDsiotSensors, parseDsiotState, } from "../codecs/dsiot/state.js";
5
+ import { DSIOT_TARGETS } from "../codecs/dsiot/tables.js";
5
6
  import { withRetry, } from "../transport.js";
6
7
  import { SetStateCache } from "./setStateCache.js";
7
8
  // DSIOT endpoints (BRP084-style). Climate state is a POST (read) or PUT (write)
@@ -61,6 +62,10 @@ export class DsiotDaikinClient {
61
62
  sensors: parseDsiotSensors(values),
62
63
  };
63
64
  }
65
+ /** One leaf of `dgc_status`, on the outdoor unit for powerful. */
66
+ async setSpecialMode(mode, enabled) {
67
+ await this.multireq("PUT", buildDsiotSpecialModeUpdate(mode, enabled));
68
+ }
64
69
  // --- extended controls ---------------------------------------------------
65
70
  /** Reboot the adapter (`/config/system/reboot`). */
66
71
  async reboot() {
@@ -1 +1 @@
1
- {"version":3,"file":"dsiot.js","sourceRoot":"","sources":["../../src/clients/dsiot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dsiot.js","sourceRoot":"","sources":["../../src/clients/dsiot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EAExB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAU1D,OAAO,EAIL,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,gFAAgF;AAChF,yCAAyC;AACzC,MAAM,YAAY,GAAG;IACnB,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,uBAAuB;CACvB,CAAC;AAEX;6DAC6D;AAC7D,MAAM,OAAO,iBAAiB;IAOT,SAAS;IACT,YAAY;IAPd,aAAa,CAAgB;IAE9C;;iEAE6D;IAC7D,YACmB,SAA0B,EAC1B,YAAiC,EAClD,0BAA0B,GAAG,CAAC;yBAFb,SAAS;4BACT,YAAY;QAG7B,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,0BAA0B,CAAC,CAAC;IACrE,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,oBAAoB,CACzB,MAAM,IAAI,CAAC,WAAW,CAAC;YACrB,aAAa,CAAC,WAAW;YACzB,aAAa,CAAC,eAAe;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,sBAAsB,CAC3B,MAAM,IAAI,CAAC,WAAW,CAAC;YACrB,aAAa,CAAC,WAAW;YACzB,aAAa,CAAC,YAAY;YAC1B,aAAa,CAAC,aAAa;SAC5B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,eAAe,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAsB;QACnC,MAAM,MAAM,GACV,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;YACxB,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,iBAAiB,CACtB,MAAM,IAAI,CAAC,WAAW,CAAC;YACrB,aAAa,CAAC,YAAY;YAC1B,aAAa,CAAC,aAAa;SAC5B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,OAAO;YACL,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC;SACnC,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,cAAc,CAAC,IAAiB,EAAE,OAAgB;QACtD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,4EAA4E;IAE5E,oDAAoD;IACpD,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACxB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,YAAY,CAAC,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC;IAED;4CACwC;IACxC,KAAK,CAAC,WAAW,CACf,OAAiB,EACjB,OAA8B;QAE9B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAED;iFAC6E;IAC7E,KAAK,CAAC,cAAc,CAClB,OAAsB,EACtB,OAA8B;QAE9B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAEO,KAAK,CAAC,QAAQ,CACpB,MAAsB,EACtB,QAAiB,EACjB,EAAE,KAAK,GAAG,IAAI,EAAE,GAAyB,EAAE;QAE3C,MAAM,IAAI,GAAG,GAAG,EAAE,CAChB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC;YACH,OAAO,uBAAuB,CAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAC5D,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,sEAAsE;YACtE,YAAY;YACZ,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YACpC,aAAa,CAAC,YAAY;YAC1B,aAAa,CAAC,aAAa;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import type { DaikinCapabilities } from "../../models/capabilities.js";
2
+ /** Merges the `basic_info` and `get_model_info` replies of an Airbase adapter
3
+ * into the one field map `parseAirbaseCapabilities`, `takesAirbaseFanAuto`,
4
+ * `takesAirbaseAirside` and `parseAirbaseZones` read. */
5
+ export declare function mergeAirbaseCapabilityFields(basicInfo: Record<string, string>, modelInfo: Record<string, string>): Record<string, string>;
6
+ /** Turns the field map from `mergeAirbaseCapabilityFields` into
7
+ * `DaikinCapabilities`. A unit with zones (`en_zone`) takes no `auto` fan
8
+ * speed and no direction. It lists no humidity setting, louver position or
9
+ * special mode, and reports `energyMonitoring` and `demandControl` as
10
+ * `false`: which field says a unit has either is not known. */
11
+ export declare function parseAirbaseCapabilities(fields: Record<string, string>): DaikinCapabilities;
12
+ /** Whether a unit takes fan auto, read from the field map of
13
+ * `mergeAirbaseCapabilityFields`: one with zones that counts its fan speeds
14
+ * (`frate_steps`), unless `en_frate_auto` is 0. */
15
+ export declare function takesAirbaseFanAuto(fields: Record<string, string>): boolean;
16
+ /** Whether a unit takes airside, read from the field map of
17
+ * `mergeAirbaseCapabilityFields`: one with zones that reports
18
+ * `en_airside=1`. */
19
+ export declare function takesAirbaseAirside(fields: Record<string, string>): boolean;
20
+ /** How many zones a unit has, read from the field map of
21
+ * `mergeAirbaseCapabilityFields`: `en_zone`, and none without it. */
22
+ export declare function parseAirbaseZoneCount(fields: Record<string, string>): number;
23
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/codecs/airbase/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,8BAA8B,CAAC;AAYtC;;yDAEyD;AACzD,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,CAExB;AAED;;;;+DAI+D;AAC/D,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,kBAAkB,CAkCpB;AAED;;mDAEmD;AACnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAQ3E;AAED;;qBAEqB;AACrB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAI3E;AAED;qEACqE;AACrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAG5E"}