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}`, + ); + }, +);