@enyo-energy/energy-app-sdk 1.27.0 → 1.28.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 CHANGED
@@ -1759,8 +1759,17 @@ An entry may carry an optional `gridFeeGrossPerKwh`: the gross grid fee **contai
1759
1759
  `pricePerKwh`, in currency units per kWh. It is a breakdown only — `pricePerKwh` is always the
1760
1760
  total, so never compute `pricePerKwh + gridFeeGrossPerKwh`.
1761
1761
 
1762
+ It may also carry an optional `spotPricePerKwh`: the net wholesale (e.g. EPEX day-ahead) price the
1763
+ interval's price is based on, as the provider reports it — in currency units per kWh, possibly negative.
1764
+ Informational too: never add it to `pricePerKwh`.
1765
+
1762
1766
  ```typescript
1763
- entries.push({ timestampIso: '2026-05-23T10:00:00Z', pricePerKwh: 0.31, gridFeeGrossPerKwh: 0.09 });
1767
+ entries.push({
1768
+ timestampIso: '2026-05-23T10:00:00Z',
1769
+ pricePerKwh: 0.31,
1770
+ gridFeeGrossPerKwh: 0.09,
1771
+ spotPricePerKwh: 0.084,
1772
+ });
1764
1773
  ```
1765
1774
 
1766
1775
  **Calling `setTariff` is the activation signal.** Return `AuthenticationRequired` or
@@ -4175,6 +4184,8 @@ New reason types came with this surface, so a skipped row can say *why* instead
4175
4184
 
4176
4185
  A hold that keeps an appliance **off** after a stop has its own type, `RestartDelay` (category `DeviceProtection`): set `context.switching` with `hold: KeptOff`, `minOffSeconds` and `untilIso` (when it may restart), and `powerW` to the power waiting for it — e.g. "Short pause after switching off — charging resumes at 13:15 so the car isn't switched on and off too often."
4177
4186
 
4187
+ **Fluctuating PV surplus.** When the surplus jumps around (clouds passing) and the energy manager holds an appliance's power steady instead of following every dip, state `PvSurplusFluctuating` (category `PvSurplus`) with `powerW` set to the power being held — e.g. "Charging power held steady while clouds pass." / "Ladeleistung wird gehalten, solange Wolken durchziehen." It is a smoothing decision, told apart from `PvSurplusAvailable` / `PvSurplusUnavailable`.
4188
+
4178
4189
  ## Dynamic Grid Fees & Tariff Bonuses
4179
4190
 
4180
4191
  An electricity price is rarely one number. It is the energy price, plus the grid operator's network
@@ -38,6 +38,19 @@ var EnyoDataBusCommandReasonTypeEnum;
38
38
  * saying "elsewhere".
39
39
  */
40
40
  EnyoDataBusCommandReasonTypeEnum["PvSurplusAllocatedElsewhere"] = "pv-surplus-allocated-elsewhere";
41
+ /**
42
+ * The PV surplus is fluctuating (e.g. clouds passing) and the energy manager
43
+ * deliberately holds the appliance's power steady instead of following
44
+ * every dip and peak — "Ladeleistung wird gehalten, solange Wolken
45
+ * durchziehen." / "Charging power held steady while clouds pass."
46
+ *
47
+ * Says the command is a smoothing decision, not a reaction to the surplus
48
+ * being there or gone: told apart from {@link PvSurplusAvailable} and
49
+ * {@link PvSurplusUnavailable}. Set {@link EnyoDataBusCommandReason.powerW}
50
+ * to the power being held. Category
51
+ * {@link EnyoDataBusCommandReasonCategoryEnum.PvSurplus}.
52
+ */
53
+ EnyoDataBusCommandReasonTypeEnum["PvSurplusFluctuating"] = "pv-surplus-fluctuating";
41
54
  /** Command issued because battery capacity is available */
42
55
  EnyoDataBusCommandReasonTypeEnum["BatteryCapacityAvailable"] = "battery-capacity-available";
43
56
  /** Command issued because battery capacity is unavailable */
@@ -54,6 +54,19 @@ export declare enum EnyoDataBusCommandReasonTypeEnum {
54
54
  * saying "elsewhere".
55
55
  */
56
56
  PvSurplusAllocatedElsewhere = "pv-surplus-allocated-elsewhere",
57
+ /**
58
+ * The PV surplus is fluctuating (e.g. clouds passing) and the energy manager
59
+ * deliberately holds the appliance's power steady instead of following
60
+ * every dip and peak — "Ladeleistung wird gehalten, solange Wolken
61
+ * durchziehen." / "Charging power held steady while clouds pass."
62
+ *
63
+ * Says the command is a smoothing decision, not a reaction to the surplus
64
+ * being there or gone: told apart from {@link PvSurplusAvailable} and
65
+ * {@link PvSurplusUnavailable}. Set {@link EnyoDataBusCommandReason.powerW}
66
+ * to the power being held. Category
67
+ * {@link EnyoDataBusCommandReasonCategoryEnum.PvSurplus}.
68
+ */
69
+ PvSurplusFluctuating = "pv-surplus-fluctuating",
57
70
  /** Command issued because battery capacity is available */
58
71
  BatteryCapacityAvailable = "battery-capacity-available",
59
72
  /** Command issued because battery capacity is unavailable */
@@ -189,6 +189,19 @@ export interface EnyoTariffPriceEntry {
189
189
  * series declares {@link EnyoPriceComponentEnum.GridFee} in its `includes`.
190
190
  */
191
191
  gridFeeGrossPerKwh?: number;
192
+ /**
193
+ * Optional wholesale spot price per kWh this interval's price is based on,
194
+ * as the provider reports it — typically the EPEX day-ahead price for a
195
+ * dynamic tariff. In the tariff's currency (not cent), net: without grid
196
+ * fee, taxes, levies or supplier margin. May be negative.
197
+ *
198
+ * Informational only, like {@link gridFeeGrossPerKwh}: it shows what the
199
+ * price was derived from and is **never added** to {@link pricePerKwh},
200
+ * which is always the total price. Set it when the provider hands it out;
201
+ * omit it otherwise — consumers needing a spot price without it can read
202
+ * `useEpexSpotPrices()`.
203
+ */
204
+ spotPricePerKwh?: number;
192
205
  }
193
206
  /**
194
207
  * Prices for one direction over a requested range.
@@ -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.27.0';
12
+ exports.SDK_VERSION = '1.28.0';
13
13
  /**
14
14
  * Gets the current SDK version.
15
15
  * @returns The semantic version string of the SDK
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * Current version of the enyo Energy App SDK.
7
7
  */
8
- export declare const SDK_VERSION = "1.27.0";
8
+ export declare const SDK_VERSION = "1.28.0";
9
9
  /**
10
10
  * Gets the current SDK version.
11
11
  * @returns The semantic version string of the SDK
@@ -54,6 +54,19 @@ export declare enum EnyoDataBusCommandReasonTypeEnum {
54
54
  * saying "elsewhere".
55
55
  */
56
56
  PvSurplusAllocatedElsewhere = "pv-surplus-allocated-elsewhere",
57
+ /**
58
+ * The PV surplus is fluctuating (e.g. clouds passing) and the energy manager
59
+ * deliberately holds the appliance's power steady instead of following
60
+ * every dip and peak — "Ladeleistung wird gehalten, solange Wolken
61
+ * durchziehen." / "Charging power held steady while clouds pass."
62
+ *
63
+ * Says the command is a smoothing decision, not a reaction to the surplus
64
+ * being there or gone: told apart from {@link PvSurplusAvailable} and
65
+ * {@link PvSurplusUnavailable}. Set {@link EnyoDataBusCommandReason.powerW}
66
+ * to the power being held. Category
67
+ * {@link EnyoDataBusCommandReasonCategoryEnum.PvSurplus}.
68
+ */
69
+ PvSurplusFluctuating = "pv-surplus-fluctuating",
57
70
  /** Command issued because battery capacity is available */
58
71
  BatteryCapacityAvailable = "battery-capacity-available",
59
72
  /** Command issued because battery capacity is unavailable */
@@ -35,6 +35,19 @@ export var EnyoDataBusCommandReasonTypeEnum;
35
35
  * saying "elsewhere".
36
36
  */
37
37
  EnyoDataBusCommandReasonTypeEnum["PvSurplusAllocatedElsewhere"] = "pv-surplus-allocated-elsewhere";
38
+ /**
39
+ * The PV surplus is fluctuating (e.g. clouds passing) and the energy manager
40
+ * deliberately holds the appliance's power steady instead of following
41
+ * every dip and peak — "Ladeleistung wird gehalten, solange Wolken
42
+ * durchziehen." / "Charging power held steady while clouds pass."
43
+ *
44
+ * Says the command is a smoothing decision, not a reaction to the surplus
45
+ * being there or gone: told apart from {@link PvSurplusAvailable} and
46
+ * {@link PvSurplusUnavailable}. Set {@link EnyoDataBusCommandReason.powerW}
47
+ * to the power being held. Category
48
+ * {@link EnyoDataBusCommandReasonCategoryEnum.PvSurplus}.
49
+ */
50
+ EnyoDataBusCommandReasonTypeEnum["PvSurplusFluctuating"] = "pv-surplus-fluctuating";
38
51
  /** Command issued because battery capacity is available */
39
52
  EnyoDataBusCommandReasonTypeEnum["BatteryCapacityAvailable"] = "battery-capacity-available";
40
53
  /** Command issued because battery capacity is unavailable */
@@ -189,6 +189,19 @@ export interface EnyoTariffPriceEntry {
189
189
  * series declares {@link EnyoPriceComponentEnum.GridFee} in its `includes`.
190
190
  */
191
191
  gridFeeGrossPerKwh?: number;
192
+ /**
193
+ * Optional wholesale spot price per kWh this interval's price is based on,
194
+ * as the provider reports it — typically the EPEX day-ahead price for a
195
+ * dynamic tariff. In the tariff's currency (not cent), net: without grid
196
+ * fee, taxes, levies or supplier margin. May be negative.
197
+ *
198
+ * Informational only, like {@link gridFeeGrossPerKwh}: it shows what the
199
+ * price was derived from and is **never added** to {@link pricePerKwh},
200
+ * which is always the total price. Set it when the provider hands it out;
201
+ * omit it otherwise — consumers needing a spot price without it can read
202
+ * `useEpexSpotPrices()`.
203
+ */
204
+ spotPricePerKwh?: number;
192
205
  }
193
206
  /**
194
207
  * Prices for one direction over a requested range.
package/dist/version.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * Current version of the enyo Energy App SDK.
7
7
  */
8
- export declare const SDK_VERSION = "1.27.0";
8
+ export declare const SDK_VERSION = "1.28.0";
9
9
  /**
10
10
  * Gets the current SDK version.
11
11
  * @returns The semantic version string of the SDK
package/dist/version.js CHANGED
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * Current version of the enyo Energy App SDK.
7
7
  */
8
- export const SDK_VERSION = '1.27.0';
8
+ export const SDK_VERSION = '1.28.0';
9
9
  /**
10
10
  * Gets the current SDK version.
11
11
  * @returns The semantic version string of the SDK
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enyo-energy/energy-app-sdk",
3
- "version": "1.27.0",
3
+ "version": "1.28.0",
4
4
  "description": "enyo Energy App SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",