@enyo-energy/energy-app-sdk 1.34.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/dist/cjs/implementations/energy-manager-settings/energy-manager-settings-validators.cjs +2 -1
- package/dist/cjs/types/enyo-data-bus-value.d.cts +5 -0
- package/dist/cjs/types/enyo-energy-manager-settings.cjs +12 -2
- package/dist/cjs/types/enyo-energy-manager-settings.d.cts +44 -2
- package/dist/cjs/version.cjs +1 -1
- package/dist/cjs/version.d.cts +1 -1
- package/dist/implementations/energy-manager-settings/energy-manager-settings-validators.js +2 -1
- package/dist/types/enyo-data-bus-value.d.ts +5 -0
- package/dist/types/enyo-energy-manager-settings.d.ts +44 -2
- package/dist/types/enyo-energy-manager-settings.js +12 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1653,6 +1653,7 @@ A closed, SDK-defined set of user-facing controls the active energy manager hono
|
|
|
1653
1653
|
| `BatteryPvPriorityTargetSocPercent` | number \| `null`, **%** target the battery is charged to from PV before other surplus consumers (absent / `null` = disabled) |
|
|
1654
1654
|
| `BatteryDischargeBlockAboveHomeConsumptionW` | number \| `null`, **W** home consumption above which the battery may not discharge (absent / `null` = disabled) |
|
|
1655
1655
|
| `HeatpumpControl` | boolean |
|
|
1656
|
+
| `HeatpumpEcoModeInExpensiveTimes` | boolean, off by default — switch the heat pump to its eco setpoint while electricity is expensive |
|
|
1656
1657
|
| `HeatingRodControl` | boolean |
|
|
1657
1658
|
| `HeatingRodMode` | `pv-surplus-only` \| `boost` |
|
|
1658
1659
|
| `HeatingRodBatteryDischargeSocLimitPercent` | number \| `null`, **%** floor the battery may feed the heating rod down to (absent / `null` = disabled) |
|
|
@@ -1706,7 +1707,8 @@ Three things to get right:
|
|
|
1706
1707
|
- **The heating rod may draw from the battery only down to a floor, and only when asked.** `HeatingRodBatteryDischargeSocLimitPercent` (`80` = the rod may use the battery while it holds more than 80 %) is disabled while absent or `null`. It applies under both heating rod modes — under `pv-surplus-only` the battery above the floor counts as supply alongside PV, still never a grid import. It needs `batteryControl` to be enforced, and should not lie below `BatteryPvPriorityTargetSocPercent`; the validator warns on both. A consumer held back by it carries the command reason `BatteryPvPriority` (category `PvSurplus`) with `context.batteryPvPriority.targetSocPercent` and `socPercent`.
|
|
1707
1708
|
- **The battery can be blocked from discharging under a heavy load.** `BatteryDischargeBlockAboveHomeConsumptionW` (`11000` = no discharge while the house draws more than 11 kW) keeps a sauna or an oven from emptying the battery in minutes. It is in **watts** — the validator warns below 100 W, which catches a kW value. Home consumption means the household plus every appliance the energy manager does **not** track — the same quantity as `homeConsumptionW` in the home consumption timeseries. Tracked appliances (wallbox, heat pump, heating rod, …) and the battery's own charging are excluded, so a charging car alone never trips the block. The block wins over the EV and heating rod discharge permissions; charging is unaffected. Disabled while absent or `null`. A battery held by it carries `HomeConsumptionHigh` with `context.batteryDischargeBlock.thresholdW` and `powerW` set to the current consumption.
|
|
1708
1709
|
- **Grid-optimised EV charging is about the grid, not the bill.** `GridOptimizedEvCharging` adds no charge mode. It only affects `cost-optimized` sessions while the tariff is static or time-of-use (no effect under a dynamic one): the grid energy PV does not cover is placed in the hours with the lowest EPEX spot price before the deadline — the spot price as a proxy for grid load — instead of as late as possible or in the tariff's cheap windows. PV still comes first, the deadline still holds, and a session's price ceiling still applies against the customer's own tariff. On a time-of-use tariff a low-load hour can be a more expensive one; that is the trade the owner opts into.
|
|
1709
|
-
- **
|
|
1710
|
+
- **Eco mode in expensive times switches setpoints, not temperatures.** `HeatpumpEcoModeInExpensiveTimes` (needs `heatpumpControl`) lets the energy manager send `HeatpumpProgramSwitchV3` with `mode: Eco` to every zone listing `eco` in `supportedProgramModes` while the tariff is expensive, and `mode: Program` once it is not. The user's own eco temperature applies (`programModeTemperaturesC`); the energy manager only chooses *when*. "Expensive" comes from the consumption tariff — the dearest slots under a dynamic tariff, the high-price windows under a time-of-use one; under a static tariff the setting has no effect, as it has on heat pumps without `ProgramSwitch`. Each such switch carries `ElectricityPriceAboveThreshold` (category `EnergyPrice`) with `electricityPricePerKwh`.
|
|
1711
|
+
- **Sixteen settings are gated by another** (`heatingRodMode` needs `heatingRodControl`, `priceLimitCtPerKwh` only applies under `priceLimitMode: 'ct-per-kwh'`, …). The tree is exported as `ENERGY_MANAGER_SETTING_DEPENDENCIES`, with two helpers over it: `getEnergyManagerSettingDependency(setting)` returns the direct gate and the value it must hold (or `null` for an ungated root), and `isEnergyManagerSettingActive(setting, values)` walks the whole chain — the gates are now two deep, so a Wh budget is live only when the mode is `fixed-wh` *and* battery control is on.
|
|
1710
1712
|
- **`priceLimitCtPerKwh` is in cents**, unlike the SDK's machine-readable price fields (`electricityPricePerKwh`, EUR/kWh). Divide by 100 when comparing. `validateEnergyManagerSettingsState()` warns on values outside a plausible ct band, which catches the mix-up.
|
|
1711
1713
|
- **A price ceiling is one mode plus its parameter**, the same shape as the battery-to-EV one. `PriceLimitMode` picks how the ceiling is expressed — an absolute `ct-per-kwh` or a relative `cheapest-share` — and each value is read only under its own mode; the mode being absent means no ceiling at all. A relative ceiling ranks the price intervals *known* for the day and treats the cheapest `n` % as importable (the same rule as the `cheapest-share-of-day` automation trigger), so its effective threshold moves when tomorrow's prices publish — re-evaluate it rather than resolving it once.
|
|
1712
1714
|
|
|
@@ -3216,6 +3218,7 @@ Switches one heating circuit or DHW zone to its **comfort** or **eco** setpoint
|
|
|
3216
3218
|
- **One zone per message**, answered with a plain `CommandAcknowledgeV1`.
|
|
3217
3219
|
- **Ending and safety net.** `mode: Program` ends a switch (idempotent). A switch to comfort or eco holds until `untilIso` (at most `HEATPUMP_PROGRAM_SWITCH_MAX_MINUTES` = 30 min ahead); the energy manager re-sends about every 15 min while it should hold. When `untilIso` passes without a newer message, the base class calls `handleHeatpumpProgramSwitch` with `mode: Program` and `cause: HeatpumpProgramSwitchCauseEnum.Expired` — so after a restart of either side a zone is back on its program within 30 min, and the app stores nothing.
|
|
3218
3220
|
- **Alongside `HeatpumpControlV3`.** The two run side by side: the mode sets the base, an action raises above it (eco 20 °C + room action +1 K = 21 °C).
|
|
3221
|
+
- **Owner's consent for price-driven eco.** An energy manager switches zones to eco for price reasons only while the general setting `heatpumpEcoModeInExpensiveTimes` (and `heatpumpControl`) is `true` — see [General settings](#general-settings).
|
|
3219
3222
|
- **Validation** (run by the base class before the handler, or `validateHeatpumpProgramSwitch(data, metadata)` directly): target `Room` / `Dhw`, a known mode, a valid `untilIso` for comfort / eco (`Rejected`); `ProgramSwitch` declared and the mode listed for the zone (`NotSupported`); a known zone index (`Rejected`).
|
|
3220
3223
|
|
|
3221
3224
|
#### HeatpumpFlexibilityAnnouncementV3
|
package/dist/cjs/implementations/energy-manager-settings/energy-manager-settings-validators.cjs
CHANGED
|
@@ -208,7 +208,8 @@ function validateEnergyManagerSettingsState(state) {
|
|
|
208
208
|
const values = state.values ?? {};
|
|
209
209
|
// ── value formats ──────────────────────────────────────────────────────
|
|
210
210
|
for (const key of ['batteryControl', 'batteryChargeFromGrid', 'heatpumpControl',
|
|
211
|
-
'
|
|
211
|
+
'heatpumpEcoModeInExpensiveTimes', 'heatingRodControl', 'chargerControl',
|
|
212
|
+
'gridOptimizedEvCharging']) {
|
|
212
213
|
if (values[key] !== undefined && typeof values[key] !== 'boolean') {
|
|
213
214
|
errors.push(`\`${key}\` must be a boolean when set.`);
|
|
214
215
|
}
|
|
@@ -4583,6 +4583,11 @@ export interface EnyoDataBusHeatpumpControlStatusV3 extends EnyoDataBusMessage {
|
|
|
4583
4583
|
* with a fresh `untilIso`. So if the energy manager or the app restarts, a
|
|
4584
4584
|
* zone is back on its program after at most that long.
|
|
4585
4585
|
*
|
|
4586
|
+
* **Price-driven eco needs the owner's consent.** Switch a zone to eco because
|
|
4587
|
+
* electricity is expensive only while the general setting
|
|
4588
|
+
* {@link EnergyManagerSettingValues.heatpumpEcoModeInExpensiveTimes} (and
|
|
4589
|
+
* {@link EnergyManagerSettingValues.heatpumpControl}) is `true`.
|
|
4590
|
+
*
|
|
4586
4591
|
* **Together with {@link EnyoDataBusHeatpumpControlV3}.** The two run side by
|
|
4587
4592
|
* side. The mode sets the base and an action raises above it: eco at 20 °C
|
|
4588
4593
|
* plus a room action of +1 K gives 21 °C.
|
|
@@ -61,8 +61,13 @@ var EnergyManagerSettingEnum;
|
|
|
61
61
|
*/
|
|
62
62
|
EnergyManagerSettingEnum["BatteryDischargeBlockAboveHomeConsumptionW"] = "battery-discharge-block-above-home-consumption-w";
|
|
63
63
|
// ── Heat pump ──────────────────────────────────────────────────────────
|
|
64
|
-
/** Whether the energy manager may steer the heat pump. */
|
|
64
|
+
/** Whether the energy manager may steer the heat pump. Gates {@link HeatpumpEcoModeInExpensiveTimes}. */
|
|
65
65
|
EnergyManagerSettingEnum["HeatpumpControl"] = "heatpump-control";
|
|
66
|
+
/**
|
|
67
|
+
* Whether the heat pump is switched to its eco / reduced setpoint while
|
|
68
|
+
* electricity is expensive.
|
|
69
|
+
*/
|
|
70
|
+
EnergyManagerSettingEnum["HeatpumpEcoModeInExpensiveTimes"] = "heatpump-eco-mode-in-expensive-times";
|
|
66
71
|
// ── Heating rod ────────────────────────────────────────────────────────
|
|
67
72
|
/** Whether the energy manager may steer the heating rod. Gates {@link HeatingRodMode}. */
|
|
68
73
|
EnergyManagerSettingEnum["HeatingRodControl"] = "heating-rod-control";
|
|
@@ -238,7 +243,7 @@ var EnergyManagerHeatingRodModeEnum;
|
|
|
238
243
|
/**
|
|
239
244
|
* Which settings are gated by which, as data.
|
|
240
245
|
*
|
|
241
|
-
*
|
|
246
|
+
* Sixteen of the twenty settings only mean anything while another one holds a specific
|
|
242
247
|
* value. Encoding that here rather than in prose gives the cockpit a single
|
|
243
248
|
* source of truth for greying out dependent controls, and lets
|
|
244
249
|
* `validateEnergyManagerSettingsState()` flag values that can never take effect.
|
|
@@ -280,6 +285,10 @@ exports.ENERGY_MANAGER_SETTING_DEPENDENCIES = {
|
|
|
280
285
|
requires: EnergyManagerSettingEnum.BatteryControl,
|
|
281
286
|
equals: true,
|
|
282
287
|
},
|
|
288
|
+
[EnergyManagerSettingEnum.HeatpumpEcoModeInExpensiveTimes]: {
|
|
289
|
+
requires: EnergyManagerSettingEnum.HeatpumpControl,
|
|
290
|
+
equals: true,
|
|
291
|
+
},
|
|
283
292
|
[EnergyManagerSettingEnum.HeatingRodMode]: {
|
|
284
293
|
requires: EnergyManagerSettingEnum.HeatingRodControl,
|
|
285
294
|
equals: true,
|
|
@@ -332,6 +341,7 @@ exports.ENERGY_MANAGER_SETTING_VALUE_KEYS = {
|
|
|
332
341
|
'batteryDischargeBlockAboveHomeConsumptionW',
|
|
333
342
|
],
|
|
334
343
|
[EnergyManagerSettingEnum.HeatpumpControl]: ['heatpumpControl'],
|
|
344
|
+
[EnergyManagerSettingEnum.HeatpumpEcoModeInExpensiveTimes]: ['heatpumpEcoModeInExpensiveTimes'],
|
|
335
345
|
[EnergyManagerSettingEnum.HeatingRodControl]: ['heatingRodControl'],
|
|
336
346
|
[EnergyManagerSettingEnum.HeatingRodMode]: ['heatingRodMode'],
|
|
337
347
|
[EnergyManagerSettingEnum.HeatingRodBatteryDischargeSocLimitPercent]: [
|
|
@@ -56,8 +56,13 @@ export declare enum EnergyManagerSettingEnum {
|
|
|
56
56
|
* Unset or `null` means no such block.
|
|
57
57
|
*/
|
|
58
58
|
BatteryDischargeBlockAboveHomeConsumptionW = "battery-discharge-block-above-home-consumption-w",
|
|
59
|
-
/** Whether the energy manager may steer the heat pump. */
|
|
59
|
+
/** Whether the energy manager may steer the heat pump. Gates {@link HeatpumpEcoModeInExpensiveTimes}. */
|
|
60
60
|
HeatpumpControl = "heatpump-control",
|
|
61
|
+
/**
|
|
62
|
+
* Whether the heat pump is switched to its eco / reduced setpoint while
|
|
63
|
+
* electricity is expensive.
|
|
64
|
+
*/
|
|
65
|
+
HeatpumpEcoModeInExpensiveTimes = "heatpump-eco-mode-in-expensive-times",
|
|
61
66
|
/** Whether the energy manager may steer the heating rod. Gates {@link HeatingRodMode}. */
|
|
62
67
|
HeatingRodControl = "heating-rod-control",
|
|
63
68
|
/** What the heating rod is allowed to do — see {@link EnergyManagerHeatingRodModeEnum}. */
|
|
@@ -373,6 +378,43 @@ export interface EnergyManagerSettingValues {
|
|
|
373
378
|
* allow control before the energy manager acts.
|
|
374
379
|
*/
|
|
375
380
|
heatpumpControl?: boolean;
|
|
381
|
+
/**
|
|
382
|
+
* Whether the energy manager switches the heat pump to the user's **eco**
|
|
383
|
+
* setpoint while electricity is expensive. **Off by default** — absent or
|
|
384
|
+
* `false` means off.
|
|
385
|
+
*
|
|
386
|
+
* While on, the energy manager sends
|
|
387
|
+
* {@link EnyoDataBusHeatpumpProgramSwitchV3} with
|
|
388
|
+
* {@link EnyoHeatpumpProgramModeEnum.Eco} to every zone (heating circuit or
|
|
389
|
+
* DHW zone) that lists `eco` in its `supportedProgramModes`, for the hours
|
|
390
|
+
* the active consumption tariff makes expensive, and
|
|
391
|
+
* {@link EnyoHeatpumpProgramModeEnum.Program} once they are over. The
|
|
392
|
+
* temperatures are the user's own
|
|
393
|
+
* ({@link EnyoHeatpumpApplianceHeatingCircuit.programModeTemperaturesC}) —
|
|
394
|
+
* the energy manager chooses only *when* eco applies, never how low it is.
|
|
395
|
+
*
|
|
396
|
+
* Which hours count as expensive is the energy manager's call, taken from
|
|
397
|
+
* the tariff: the dearest slots of the day under a
|
|
398
|
+
* {@link EnyoTariffPricingTypeEnum.Dynamic} tariff, the high-price windows
|
|
399
|
+
* under a {@link EnyoTariffPricingTypeEnum.TimeVariable} one. Under a
|
|
400
|
+
* {@link EnyoTariffPricingTypeEnum.Static} tariff no hour is dearer than
|
|
401
|
+
* another, so the setting has no effect. While PV surplus covers the heat
|
|
402
|
+
* pump, the grid price does not apply and the energy manager may leave the
|
|
403
|
+
* zone on its program.
|
|
404
|
+
*
|
|
405
|
+
* Only heat pumps declaring
|
|
406
|
+
* {@link EnyoHeatpumpApplianceAvailableFeaturesEnum.ProgramSwitch} can
|
|
407
|
+
* follow it; on all others the setting has no effect.
|
|
408
|
+
*
|
|
409
|
+
* Each switch to eco because of this setting carries the reason
|
|
410
|
+
* {@link EnyoDataBusCommandReasonTypeEnum.ElectricityPriceAboveThreshold}
|
|
411
|
+
* (category {@link EnyoDataBusCommandReasonCategoryEnum.EnergyPrice}), with
|
|
412
|
+
* {@link EnyoDataBusCommandReason.electricityPricePerKwh} set to the price
|
|
413
|
+
* of the current slot.
|
|
414
|
+
*
|
|
415
|
+
* Only meaningful while {@link heatpumpControl} is `true`.
|
|
416
|
+
*/
|
|
417
|
+
heatpumpEcoModeInExpensiveTimes?: boolean;
|
|
376
418
|
/** Whether the energy manager may steer the heating rod. */
|
|
377
419
|
heatingRodControl?: boolean;
|
|
378
420
|
/** What the heating rod may do. Only meaningful while {@link heatingRodControl} is `true`. */
|
|
@@ -586,7 +628,7 @@ export interface EnergyManagerSettingDependency {
|
|
|
586
628
|
/**
|
|
587
629
|
* Which settings are gated by which, as data.
|
|
588
630
|
*
|
|
589
|
-
*
|
|
631
|
+
* Sixteen of the twenty settings only mean anything while another one holds a specific
|
|
590
632
|
* value. Encoding that here rather than in prose gives the cockpit a single
|
|
591
633
|
* source of truth for greying out dependent controls, and lets
|
|
592
634
|
* `validateEnergyManagerSettingsState()` flag values that can never take effect.
|
package/dist/cjs/version.cjs
CHANGED
|
@@ -9,7 +9,7 @@ exports.getSdkVersion = getSdkVersion;
|
|
|
9
9
|
/**
|
|
10
10
|
* Current version of the enyo Energy App SDK.
|
|
11
11
|
*/
|
|
12
|
-
exports.SDK_VERSION = '1.
|
|
12
|
+
exports.SDK_VERSION = '1.35.0';
|
|
13
13
|
/**
|
|
14
14
|
* Gets the current SDK version.
|
|
15
15
|
* @returns The semantic version string of the SDK
|
package/dist/cjs/version.d.cts
CHANGED
|
@@ -202,7 +202,8 @@ export function validateEnergyManagerSettingsState(state) {
|
|
|
202
202
|
const values = state.values ?? {};
|
|
203
203
|
// ── value formats ──────────────────────────────────────────────────────
|
|
204
204
|
for (const key of ['batteryControl', 'batteryChargeFromGrid', 'heatpumpControl',
|
|
205
|
-
'
|
|
205
|
+
'heatpumpEcoModeInExpensiveTimes', 'heatingRodControl', 'chargerControl',
|
|
206
|
+
'gridOptimizedEvCharging']) {
|
|
206
207
|
if (values[key] !== undefined && typeof values[key] !== 'boolean') {
|
|
207
208
|
errors.push(`\`${key}\` must be a boolean when set.`);
|
|
208
209
|
}
|
|
@@ -4583,6 +4583,11 @@ export interface EnyoDataBusHeatpumpControlStatusV3 extends EnyoDataBusMessage {
|
|
|
4583
4583
|
* with a fresh `untilIso`. So if the energy manager or the app restarts, a
|
|
4584
4584
|
* zone is back on its program after at most that long.
|
|
4585
4585
|
*
|
|
4586
|
+
* **Price-driven eco needs the owner's consent.** Switch a zone to eco because
|
|
4587
|
+
* electricity is expensive only while the general setting
|
|
4588
|
+
* {@link EnergyManagerSettingValues.heatpumpEcoModeInExpensiveTimes} (and
|
|
4589
|
+
* {@link EnergyManagerSettingValues.heatpumpControl}) is `true`.
|
|
4590
|
+
*
|
|
4586
4591
|
* **Together with {@link EnyoDataBusHeatpumpControlV3}.** The two run side by
|
|
4587
4592
|
* side. The mode sets the base and an action raises above it: eco at 20 °C
|
|
4588
4593
|
* plus a room action of +1 K gives 21 °C.
|
|
@@ -56,8 +56,13 @@ export declare enum EnergyManagerSettingEnum {
|
|
|
56
56
|
* Unset or `null` means no such block.
|
|
57
57
|
*/
|
|
58
58
|
BatteryDischargeBlockAboveHomeConsumptionW = "battery-discharge-block-above-home-consumption-w",
|
|
59
|
-
/** Whether the energy manager may steer the heat pump. */
|
|
59
|
+
/** Whether the energy manager may steer the heat pump. Gates {@link HeatpumpEcoModeInExpensiveTimes}. */
|
|
60
60
|
HeatpumpControl = "heatpump-control",
|
|
61
|
+
/**
|
|
62
|
+
* Whether the heat pump is switched to its eco / reduced setpoint while
|
|
63
|
+
* electricity is expensive.
|
|
64
|
+
*/
|
|
65
|
+
HeatpumpEcoModeInExpensiveTimes = "heatpump-eco-mode-in-expensive-times",
|
|
61
66
|
/** Whether the energy manager may steer the heating rod. Gates {@link HeatingRodMode}. */
|
|
62
67
|
HeatingRodControl = "heating-rod-control",
|
|
63
68
|
/** What the heating rod is allowed to do — see {@link EnergyManagerHeatingRodModeEnum}. */
|
|
@@ -373,6 +378,43 @@ export interface EnergyManagerSettingValues {
|
|
|
373
378
|
* allow control before the energy manager acts.
|
|
374
379
|
*/
|
|
375
380
|
heatpumpControl?: boolean;
|
|
381
|
+
/**
|
|
382
|
+
* Whether the energy manager switches the heat pump to the user's **eco**
|
|
383
|
+
* setpoint while electricity is expensive. **Off by default** — absent or
|
|
384
|
+
* `false` means off.
|
|
385
|
+
*
|
|
386
|
+
* While on, the energy manager sends
|
|
387
|
+
* {@link EnyoDataBusHeatpumpProgramSwitchV3} with
|
|
388
|
+
* {@link EnyoHeatpumpProgramModeEnum.Eco} to every zone (heating circuit or
|
|
389
|
+
* DHW zone) that lists `eco` in its `supportedProgramModes`, for the hours
|
|
390
|
+
* the active consumption tariff makes expensive, and
|
|
391
|
+
* {@link EnyoHeatpumpProgramModeEnum.Program} once they are over. The
|
|
392
|
+
* temperatures are the user's own
|
|
393
|
+
* ({@link EnyoHeatpumpApplianceHeatingCircuit.programModeTemperaturesC}) —
|
|
394
|
+
* the energy manager chooses only *when* eco applies, never how low it is.
|
|
395
|
+
*
|
|
396
|
+
* Which hours count as expensive is the energy manager's call, taken from
|
|
397
|
+
* the tariff: the dearest slots of the day under a
|
|
398
|
+
* {@link EnyoTariffPricingTypeEnum.Dynamic} tariff, the high-price windows
|
|
399
|
+
* under a {@link EnyoTariffPricingTypeEnum.TimeVariable} one. Under a
|
|
400
|
+
* {@link EnyoTariffPricingTypeEnum.Static} tariff no hour is dearer than
|
|
401
|
+
* another, so the setting has no effect. While PV surplus covers the heat
|
|
402
|
+
* pump, the grid price does not apply and the energy manager may leave the
|
|
403
|
+
* zone on its program.
|
|
404
|
+
*
|
|
405
|
+
* Only heat pumps declaring
|
|
406
|
+
* {@link EnyoHeatpumpApplianceAvailableFeaturesEnum.ProgramSwitch} can
|
|
407
|
+
* follow it; on all others the setting has no effect.
|
|
408
|
+
*
|
|
409
|
+
* Each switch to eco because of this setting carries the reason
|
|
410
|
+
* {@link EnyoDataBusCommandReasonTypeEnum.ElectricityPriceAboveThreshold}
|
|
411
|
+
* (category {@link EnyoDataBusCommandReasonCategoryEnum.EnergyPrice}), with
|
|
412
|
+
* {@link EnyoDataBusCommandReason.electricityPricePerKwh} set to the price
|
|
413
|
+
* of the current slot.
|
|
414
|
+
*
|
|
415
|
+
* Only meaningful while {@link heatpumpControl} is `true`.
|
|
416
|
+
*/
|
|
417
|
+
heatpumpEcoModeInExpensiveTimes?: boolean;
|
|
376
418
|
/** Whether the energy manager may steer the heating rod. */
|
|
377
419
|
heatingRodControl?: boolean;
|
|
378
420
|
/** What the heating rod may do. Only meaningful while {@link heatingRodControl} is `true`. */
|
|
@@ -586,7 +628,7 @@ export interface EnergyManagerSettingDependency {
|
|
|
586
628
|
/**
|
|
587
629
|
* Which settings are gated by which, as data.
|
|
588
630
|
*
|
|
589
|
-
*
|
|
631
|
+
* Sixteen of the twenty settings only mean anything while another one holds a specific
|
|
590
632
|
* value. Encoding that here rather than in prose gives the cockpit a single
|
|
591
633
|
* source of truth for greying out dependent controls, and lets
|
|
592
634
|
* `validateEnergyManagerSettingsState()` flag values that can never take effect.
|
|
@@ -58,8 +58,13 @@ export var EnergyManagerSettingEnum;
|
|
|
58
58
|
*/
|
|
59
59
|
EnergyManagerSettingEnum["BatteryDischargeBlockAboveHomeConsumptionW"] = "battery-discharge-block-above-home-consumption-w";
|
|
60
60
|
// ── Heat pump ──────────────────────────────────────────────────────────
|
|
61
|
-
/** Whether the energy manager may steer the heat pump. */
|
|
61
|
+
/** Whether the energy manager may steer the heat pump. Gates {@link HeatpumpEcoModeInExpensiveTimes}. */
|
|
62
62
|
EnergyManagerSettingEnum["HeatpumpControl"] = "heatpump-control";
|
|
63
|
+
/**
|
|
64
|
+
* Whether the heat pump is switched to its eco / reduced setpoint while
|
|
65
|
+
* electricity is expensive.
|
|
66
|
+
*/
|
|
67
|
+
EnergyManagerSettingEnum["HeatpumpEcoModeInExpensiveTimes"] = "heatpump-eco-mode-in-expensive-times";
|
|
63
68
|
// ── Heating rod ────────────────────────────────────────────────────────
|
|
64
69
|
/** Whether the energy manager may steer the heating rod. Gates {@link HeatingRodMode}. */
|
|
65
70
|
EnergyManagerSettingEnum["HeatingRodControl"] = "heating-rod-control";
|
|
@@ -235,7 +240,7 @@ export var EnergyManagerHeatingRodModeEnum;
|
|
|
235
240
|
/**
|
|
236
241
|
* Which settings are gated by which, as data.
|
|
237
242
|
*
|
|
238
|
-
*
|
|
243
|
+
* Sixteen of the twenty settings only mean anything while another one holds a specific
|
|
239
244
|
* value. Encoding that here rather than in prose gives the cockpit a single
|
|
240
245
|
* source of truth for greying out dependent controls, and lets
|
|
241
246
|
* `validateEnergyManagerSettingsState()` flag values that can never take effect.
|
|
@@ -277,6 +282,10 @@ export const ENERGY_MANAGER_SETTING_DEPENDENCIES = {
|
|
|
277
282
|
requires: EnergyManagerSettingEnum.BatteryControl,
|
|
278
283
|
equals: true,
|
|
279
284
|
},
|
|
285
|
+
[EnergyManagerSettingEnum.HeatpumpEcoModeInExpensiveTimes]: {
|
|
286
|
+
requires: EnergyManagerSettingEnum.HeatpumpControl,
|
|
287
|
+
equals: true,
|
|
288
|
+
},
|
|
280
289
|
[EnergyManagerSettingEnum.HeatingRodMode]: {
|
|
281
290
|
requires: EnergyManagerSettingEnum.HeatingRodControl,
|
|
282
291
|
equals: true,
|
|
@@ -329,6 +338,7 @@ export const ENERGY_MANAGER_SETTING_VALUE_KEYS = {
|
|
|
329
338
|
'batteryDischargeBlockAboveHomeConsumptionW',
|
|
330
339
|
],
|
|
331
340
|
[EnergyManagerSettingEnum.HeatpumpControl]: ['heatpumpControl'],
|
|
341
|
+
[EnergyManagerSettingEnum.HeatpumpEcoModeInExpensiveTimes]: ['heatpumpEcoModeInExpensiveTimes'],
|
|
332
342
|
[EnergyManagerSettingEnum.HeatingRodControl]: ['heatingRodControl'],
|
|
333
343
|
[EnergyManagerSettingEnum.HeatingRodMode]: ['heatingRodMode'],
|
|
334
344
|
[EnergyManagerSettingEnum.HeatingRodBatteryDischargeSocLimitPercent]: [
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED