diff --git a/blog/2024-11-22/highlights-charts-stats.mdx b/blog/2024-11-22/highlights-charts-stats.mdx
index 4749eba23..82cbfe954 100644
--- a/blog/2024-11-22/highlights-charts-stats.mdx
+++ b/blog/2024-11-22/highlights-charts-stats.mdx
@@ -46,7 +46,7 @@ Zusätzliche Einstellmöglichkeiten wie das Festlegen von Ladegrenzen und eine p
## Flexible Stromtarife
-Die Liste der [unterschiedlichen Stromtarife](/docs/devices/tariffs) wächst stetig.
+Die Liste der [unterschiedlichen Stromtarife](/docs/tariffs) wächst stetig.
Gerade im nächsten Jahr wird das Thema dynamische Stromtarife weiter an Bedeutung gewinnen.
Digital-first Anbieter wie Tibber, Awattar, Octopus oder Ostrom stellen APIs für den aktuellen Preis und Preisprognosen für den nächsten Tag zur Verfügung.
diff --git a/docs/devices/heating.mdx b/docs/devices/heating.mdx
new file mode 100644
index 000000000..07d849cb1
--- /dev/null
+++ b/docs/devices/heating.mdx
@@ -0,0 +1,129 @@
+---
+sidebar_position: 3
+---
+
+import Tabs from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+import SponsorshipRequired from "/docs/_sponsorship_required.mdx";
+import PhaseSwitchSupported from "/docs/_phase_switch_supported.mdx";
+import DeviceConfig from "../../src/components/DeviceConfig";
+import DeviceFeatures from "../../src/components/DeviceFeatures";
+import DeviceFeatureFilter from "../../src/components/DeviceFeatureFilter";
+
+# Wärmeerzeuger
+
+:::warning Experimentell
+Integration mit Wärmeerzeugern ist noch in der Erprobungsphase.
+Für die hier aufgeführten Geräte wird später ein [Sponsoring erforderlich](/docs/sponsorship) sein.
+:::
+
+evcc unterstützt unterschiedliche Arten von Wärmeerzeugern.
+Einfache Geräte wie Heizlüfter oder Ventilatoren können über [Smarte Schalter](./smartswitches) ein/ausgeschaltet werden.
+Auf dieser Seite erfährst du, wie du auch Wärmepumpen oder Heizstäbe regeln kannst.
+
+---
+
+
+
+
+
+## Wärmeerzeuger
+
+### my-PV AC ELWA 2
+
+
+
+
+
+
+
+
+
+### Stiebel Eltron
+
+#### LWA/LWZ (SG Ready)
+
+
+
+
+
+
+
+#### WPM (SG Ready)
+
+
+
+
+
+
+
+### Tecalor THZ (SG Ready)
+
+
+
+
+
+
+
+### Vaillant SensoNET (SG Ready)
+
+Die Boost Funktion erwärmt Warmwasser und optional eine Boostzone. Die Boostzone wird durch die ID identifiziert. Die Boost Temperatur wird in Grad Celsius angegeben.
+
+
+
+
+
diff --git a/docs/devices/meters.mdx b/docs/devices/meters.mdx
index d44359063..10f807624 100644
--- a/docs/devices/meters.mdx
+++ b/docs/devices/meters.mdx
@@ -1,5 +1,5 @@
---
-sidebar_position: 2
+sidebar_position: 4
---
import Tabs from "@theme/Tabs";
diff --git a/docs/devices/smartswitches.mdx b/docs/devices/smartswitches.mdx
index 888226c5b..50c8a54ca 100644
--- a/docs/devices/smartswitches.mdx
+++ b/docs/devices/smartswitches.mdx
@@ -1,5 +1,5 @@
---
-sidebar_position: 1
+sidebar_position: 2
---
import Tabs from "@theme/Tabs";
diff --git a/docs/devices/vehicles.mdx b/docs/devices/vehicles.mdx
index 090713ea9..e3c310399 100644
--- a/docs/devices/vehicles.mdx
+++ b/docs/devices/vehicles.mdx
@@ -1,5 +1,5 @@
---
-sidebar_position: 3
+sidebar_position: 5
---
import Tabs from "@theme/Tabs";
diff --git a/docs/faq.mdx b/docs/faq.mdx
index 4992f39fa..f441c87bb 100644
--- a/docs/faq.mdx
+++ b/docs/faq.mdx
@@ -306,7 +306,7 @@ tariffs:
price: 0.08 # [currency]/kWh
```
-Mehr Details zur Konfiguration findest du in [`tariffs`](/docs/devices/tariffs).
+Mehr Details zur Konfiguration findest du in [`tariffs`](/docs/tariffs).
Für die Berechnung der Einsparungen erfasst evcc grob die Gesamtmenge der geladenen Energie und die verwendeten Energiequellen (Netz, Batterie, PV).
diff --git a/docs/installation/configuration.mdx b/docs/installation/configuration.mdx
index c84c6d83c..4f250e4da 100644
--- a/docs/installation/configuration.mdx
+++ b/docs/installation/configuration.mdx
@@ -166,7 +166,7 @@ vehicles:
capacity: 50 # in kWh
# enter your real grid tariff and feed-in price
-# see https://docs.evcc.io/docs/devices/tariffs
+# see https://docs.evcc.io/docs/tariffs
tariffs:
currency: EUR
grid:
diff --git a/docs/reference/configuration/tariffs.md b/docs/reference/configuration/tariffs.md
index ccfcb4fda..af9c6176b 100644
--- a/docs/reference/configuration/tariffs.md
+++ b/docs/reference/configuration/tariffs.md
@@ -36,4 +36,4 @@ tariffs:
price: 0.08 # [currency]/kWh
```
-Mehr Beispiele und eine Übersicht der verfügbaren Anbieter findest du unter [Stromtarife](/docs/devices/tariffs).
+Mehr Beispiele und eine Übersicht der verfügbaren Anbieter findest du unter [Stromtarife](/docs/tariffs).
diff --git a/docs/devices/tariffs.mdx b/docs/tariffs.mdx
similarity index 99%
rename from docs/devices/tariffs.mdx
rename to docs/tariffs.mdx
index e8407cec1..44493813d 100644
--- a/docs/devices/tariffs.mdx
+++ b/docs/tariffs.mdx
@@ -1,10 +1,10 @@
---
-sidebar_position: 4
+sidebar_position: 5
---
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
-import DeviceConfig from "../../src/components/DeviceConfig";
+import DeviceConfig from "../src/components/DeviceConfig";
# Stromtarife
diff --git a/docs/devices/tariffs/_category_.json b/docs/tariffs/_category_.json
similarity index 100%
rename from docs/devices/tariffs/_category_.json
rename to docs/tariffs/_category_.json
diff --git a/docs/devices/tariffs/_dynamischer_strompreis.mdx b/docs/tariffs/_dynamischer_strompreis.mdx
similarity index 100%
rename from docs/devices/tariffs/_dynamischer_strompreis.mdx
rename to docs/tariffs/_dynamischer_strompreis.mdx
diff --git a/i18n/en/docusaurus-plugin-content-blog/2024-11-22/highlights-charts-stats.mdx b/i18n/en/docusaurus-plugin-content-blog/2024-11-22/highlights-charts-stats.mdx
index 9dc72c430..f205cc17b 100644
--- a/i18n/en/docusaurus-plugin-content-blog/2024-11-22/highlights-charts-stats.mdx
+++ b/i18n/en/docusaurus-plugin-content-blog/2024-11-22/highlights-charts-stats.mdx
@@ -46,7 +46,7 @@ Additional settings like setting charging limits and a more prominent placement
## Flexible Tariffs
-The list of [different tariffs](/docs/devices/tariffs) is growing steadily.
+The list of [different tariffs](/docs/tariffs) is growing steadily.
Especially in the coming years, the topic of dynamic tariffs will gain in importance.
Digital-first providers like Tibber, Awattar, Octopus or Ostrom offer APIs for the current price and price forecasts for the next day.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/devices/heating.mdx b/i18n/en/docusaurus-plugin-content-docs/current/devices/heating.mdx
new file mode 100644
index 000000000..05a1cc5b4
--- /dev/null
+++ b/i18n/en/docusaurus-plugin-content-docs/current/devices/heating.mdx
@@ -0,0 +1,129 @@
+---
+sidebar_position: 1
+---
+
+import Tabs from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+import SponsorshipRequired from "/docs/_sponsorship_required.mdx";
+import PhaseSwitchSupported from "/docs/_phase_switch_supported.mdx";
+import DeviceConfig from "../../src/components/DeviceConfig";
+import DeviceFeatures from "../../src/components/DeviceFeatures";
+import DeviceFeatureFilter from "../../src/components/DeviceFeatureFilter";
+
+# Heating
+
+:::warning Experimentell
+Integration mit Wärmeerzeugern ist noch in der Erprobungsphase.
+Für die hier aufgeführten Geräte wird später ein **[Sponsoring](/docs/sponsoring) erforderlich** sein.
+:::
+
+evcc unterstützt unterschiedliche Arten von Wärmeerzeugern.
+Einfache Geräte wie Heizlüfter oder Ventilatoren können über [Smarte Schalter](./smartswitches) ein/ausgeschaltet werden.
+Auf dieser Seite erfährst du, wie du auch Wärmepumpen oder Heizstäbe regeln kannst.
+
+---
+
+
+
+
+
+## Heating devices
+
+### my-PV AC ELWA 2
+
+
+
+
+
+
+
+
+
+### Stiebel Eltron
+
+#### LWA/LWZ (SG Ready)
+
+
+
+
+
+
+
+#### WPM (SG Ready)
+
+
+
+
+
+
+
+### Tecalor THZ (SG Ready)
+
+
+
+
+
+
+
+### Vaillant SensoNET (SG Ready)
+
+The boost function heats hot water and optionally a boost zone. The boost zone is identified by the ID. The boost temperature is specified in degrees Celsius.
+
+
+
+
+
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/faq.mdx b/i18n/en/docusaurus-plugin-content-docs/current/faq.mdx
index 0410909cc..7911310ad 100644
--- a/i18n/en/docusaurus-plugin-content-docs/current/faq.mdx
+++ b/i18n/en/docusaurus-plugin-content-docs/current/faq.mdx
@@ -315,7 +315,7 @@ tariffs:
price: 0.08 # [currency]/kWh
```
-More details, including on how to use variable rate tariffs (such as those from Octopus Energy) can be found in [Configuration - Tariffs](/docs/devices/tariffs).
+More details, including on how to use variable rate tariffs (such as those from Octopus Energy) can be found in [Configuration - Tariffs](/docs/tariffs).
_Please note that these statistics are rough and shouldn't be treated as perfectly accurate._
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/installation/configuration.mdx b/i18n/en/docusaurus-plugin-content-docs/current/installation/configuration.mdx
index b3273d9cf..30c5c8ea7 100644
--- a/i18n/en/docusaurus-plugin-content-docs/current/installation/configuration.mdx
+++ b/i18n/en/docusaurus-plugin-content-docs/current/installation/configuration.mdx
@@ -166,7 +166,7 @@ vehicles:
capacity: 50 # in kWh
# enter your real grid tariff and feed-in price
-# see https://docs.evcc.io/docs/devices/tariffs
+# see https://docs.evcc.io/docs/tariffs
tariffs:
currency: EUR
grid:
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/reference/configuration/tariffs.md b/i18n/en/docusaurus-plugin-content-docs/current/reference/configuration/tariffs.md
index c98a1e724..50b8a7ed7 100644
--- a/i18n/en/docusaurus-plugin-content-docs/current/reference/configuration/tariffs.md
+++ b/i18n/en/docusaurus-plugin-content-docs/current/reference/configuration/tariffs.md
@@ -36,4 +36,4 @@ tariffs:
price: 0.08 # [currency]/kWh
```
-More examples and a list of available providers can be found in the section [Tariffs](/docs/devices/tariffs).
+More examples and a list of available providers can be found in the section [Tariffs](/docs/tariffs).
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/devices/tariffs.mdx b/i18n/en/docusaurus-plugin-content-docs/current/tariffs.mdx
similarity index 93%
rename from i18n/en/docusaurus-plugin-content-docs/current/devices/tariffs.mdx
rename to i18n/en/docusaurus-plugin-content-docs/current/tariffs.mdx
index 692c08c90..cfc8b9c7a 100644
--- a/i18n/en/docusaurus-plugin-content-docs/current/devices/tariffs.mdx
+++ b/i18n/en/docusaurus-plugin-content-docs/current/tariffs.mdx
@@ -4,7 +4,7 @@ sidebar_position: 4
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
-import DeviceConfig from "../../../../../src/components/DeviceConfig";
+import DeviceConfig from "../../../../src/components/DeviceConfig";
# Tariffs
@@ -207,48 +207,6 @@ Only available for the United Kingdom.
## Dynamic electricity price
-### Custom Plugin
-
-Use the plugin mechanism to connect a custom tariff source.
-
-**Example: Current price via HTTP**
-
-```yaml
-tariffs:
- grid:
- type: custom
- price:
- source: http
- uri: https://example.com/api/price
-```
-
-The value returned by the endpoint is used as the grid price.
-
-**Example: Forecasts via HTTP**
-
-```yaml
-tariffs:
- grid:
- type: custom
- forecast:
- source: http
- uri: https://api.allinpower.nl/troodon/api/p/spot_market/prices/?product_type=ELK
- jq: '[.timestamps, .prices] | transpose | map({ "start": (.[0] | strptime("%Y-%m-%dT%H:%M:%S.%f%z") | strftime("%Y-%m-%dT%H:%M:%SZ")), "end": (.[0] | strptime("%Y-%m-%dT%H:%M:%S.%f%z") | mktime + 3600 | strftime("%Y-%m-%dT%H:%M:%SZ")), "price": .[1] }) | tostring'
-```
-
-The plugin must return a JSON structure containing a list of time periods and prices.
-The date fields must be in the form `YYYY-MM-DDTHH:MM:SSZ` and the price in the correct currency unit (e.g. EUR).
-See the following example:
-
-```js
-[
- { "start": "2025-01-01T00:00:00Z", "end": "2025-01-01T01:00:00Z", "price": 25.0 },
- { "start": "2025-01-01T01:00:00Z", "end": "2025-01-01T02:00:00Z", "price": 30.0 },
-]
-```
-
-The plugin is updated once per hour.
-
### Amber Electric
Only available for Australia.
diff --git a/src/generateFromTemplate.js b/src/generateFromTemplate.js
index 89078e652..94dd5d189 100644
--- a/src/generateFromTemplate.js
+++ b/src/generateFromTemplate.js
@@ -16,10 +16,16 @@ const CHARGER_GROUPS = {
"Schaltbare Steckdosen": "smartswitch",
};
+const HEATING_GROUPS = {
+ Wärmeerzeuger: "heating",
+ "Heating devices": "heating",
+};
+
const CODE_PREAMBLES = {
vehicle: "vehicles:\n - name: my_car",
charger: "chargers:\n - name: my_charger",
smartswitch: "chargers:\n - name: my_smartswitch",
+ heating: "chargers:\n - name: my_heating",
meter: "meters:\n - name: my_meter",
grid: "meters:\n - name: my_grid",
pv: "meters:\n - name: my_pv",
@@ -164,10 +170,16 @@ function generateMarkdown(data, type, translations, target) {
);
}
- // remove smart switches from chargers
+ // heating devices only
+ if (type === "heating") {
+ data = data.filter((x) => HEATING_GROUPS[x.product.group] === "heating");
+ }
+
+ // remove smart switches and heating devices from chargers
if (type === "charger") {
data = data.filter(
- (x) => CHARGER_GROUPS[x.product.group] !== "smartswitch",
+ (x) =>
+ !["smartswitch", "heating"].includes(CHARGER_GROUPS[x.product.group]),
);
}
@@ -231,28 +243,34 @@ function generateMarkdown(data, type, translations, target) {
fs.writeFileSync(target, content, "utf-8");
}
-["vehicle", "meter", "charger", "tariff", "smartswitch"].forEach((type) => {
- let templates = type;
- let markdown = `${type}s.mdx`;
+["vehicle", "meter", "charger", "tariff", "smartswitch", "heating"].forEach(
+ (type) => {
+ let templates = type;
+ let markdown = `devices/${type}s.mdx`;
- if (type === "smartswitch") {
- templates = "charger";
- markdown = "smartswitches.mdx";
- }
+ if (type === "smartswitch") {
+ templates = "charger";
+ markdown = "devices/smartswitches.mdx";
+ }
- const templatesDe = readTemplates(`./templates/release/de/${templates}`);
- const templatesEn = readTemplates(`./templates/release/en/${templates}`);
-
- generateMarkdown(
- templatesDe,
- type,
- TRANSLATIONS_DE,
- `./docs/devices/${markdown}`,
- );
- generateMarkdown(
- templatesEn,
- type,
- TRANSLATIONS_EN,
- `./i18n/en/docusaurus-plugin-content-docs/current/devices/${markdown}`,
- );
-});
+ if (type === "heating") {
+ templates = "charger";
+ markdown = "devices/heating.mdx";
+ }
+
+ if (type === "tariff") {
+ markdown = "tariffs.mdx";
+ }
+
+ const templatesDe = readTemplates(`./templates/release/de/${templates}`);
+ const templatesEn = readTemplates(`./templates/release/en/${templates}`);
+
+ generateMarkdown(templatesDe, type, TRANSLATIONS_DE, `./docs/${markdown}`);
+ generateMarkdown(
+ templatesEn,
+ type,
+ TRANSLATIONS_EN,
+ `./i18n/en/docusaurus-plugin-content-docs/current/${markdown}`,
+ );
+ },
+);