]> git.basschouten.com Git - openhab-addons.git/commitdiff
Provide JavaScript example for persisting total price (#16889)
authorJacob Laursen <jacob-github@vindvejr.dk>
Thu, 20 Jun 2024 21:48:20 +0000 (23:48 +0200)
committerGitHub <noreply@github.com>
Thu, 20 Jun 2024 21:48:20 +0000 (23:48 +0200)
Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
bundles/org.openhab.binding.energidataservice/README.md

index b1a58a9eb7107117247c80e83ceab64b3b71b56a..005b897b555fa00424dd92e3cea2be1dd63941f3 100644 (file)
@@ -58,6 +58,8 @@ It will not impact channels, see [Electricity Tax](#electricity-tax) for further
 | co2-emission-prognosis   | Number:EmissionIntensity | Estimated prognosis for CO₂ emission following the day-ahead market in g/kWh           |
 | co2-emission-realtime    | Number:EmissionIntensity | Near up-to-date history for CO₂ emission from electricity consumed in Denmark in g/kWh |
 
+#### Total Price
+
 _Please note:_ There is no channel providing the total price.
 Instead, create a group item with `SUM` as aggregate function and add the individual price items as children.
 This has the following advantages:
@@ -69,6 +71,41 @@ This has the following advantages:
 If you want electricity tax included in your total price, please add either `electricity-tax` or `reduced-electricity-tax` to the group - depending on which one applies.
 See [Electricity Tax](#electricity-tax) for further information.
 
+##### Time Series
+
+Group items with aggregate functions are not automatically recalculated into the future when the time series for child items are updated.
+Therefore, the `SUM` function mentioned above will only work for the current price.
+Calculation of future total prices can be achieved with a rule (in this example file-based using Rule Builder):
+
+:::: tabs
+
+::: tab JavaScript
+
+```javascript
+rules.when()
+    .channel('energidataservice:service:energidataservice:electricity#event').triggered('DAY_AHEAD_AVAILABLE')
+    .then(event => {
+        var timeSeries = new items.TimeSeries('REPLACE');
+        var start = time.LocalDate.now().atStartOfDay().atZone(time.ZoneId.systemDefault());
+        var spotPrices = items.SpotPrice.persistence.getAllStatesBetween(start, start.plusDays(2));
+        for (var spotPrice of spotPrices) {
+            var totalPrice = spotPrice.quantityState
+                .add(items.GridTariff.persistence.persistedState(spotPrice.timestamp).quantityState)
+                .add(items.SystemTariff.persistence.persistedState(spotPrice.timestamp).quantityState)
+                .add(items.TransmissionGridTariff.persistence.persistedState(spotPrice.timestamp).quantityState)
+                .add(items.ElectricityTax.persistence.persistedState(spotPrice.timestamp).quantityState);
+
+            timeSeries.add(spotPrice.timestamp, totalPrice);
+        }
+        items.TotalPrice.persistence.persist(timeSeries);
+    })
+    .build("Calculate total price");
+```
+
+:::
+
+::::
+
 #### Currencies
 
 There are some existing limitations related to currency support.