diff --git a/docs/features/dynamic-feedin.mdx b/docs/features/dynamic-feedin.mdx new file mode 100644 index 0000000000..f849a169de --- /dev/null +++ b/docs/features/dynamic-feedin.mdx @@ -0,0 +1,24 @@ +--- +sidebar_position: 4 +--- + +import Screenshot from "../../src/components/Screenshot"; + +# Dynamische Einspeisung + +Diese Funktionen sind relevant, wenn du einen [dynamischen Einspeisetarif](../tariffs) (bspw. Direktvermarktung, Niederlande, Australien, ...) hast. + +## Einspeisung priorisieren + +Standardmäßig wird PV-Überschuss zuerst verwendet, um das Auto zu laden. +Erst danach wird Sonnenenergie ins Netz eingespeist. +In Zeiten mit hohen Vergütungen kann es vorteilhaft sein die Netzeinspeisung zu priorisieren und das Laden des Autos auf später zu verschieben. + + + +Mit dem Feature *Einspeisung priorisieren* kannst du eine Preisschwelle pro Ladepunkt festlegen. +Sind die Einspeisevergütungen hoch (oranger Balken), wird das Laden pausiert (**PV-Modus**) oder auf ein Minimum reduziert (**Min+PV-Modus**). + diff --git a/docs/features/screenshots/feedin-priority-modal-dark-1x.webp b/docs/features/screenshots/feedin-priority-modal-dark-1x.webp new file mode 100644 index 0000000000..d9b0aad271 Binary files /dev/null and b/docs/features/screenshots/feedin-priority-modal-dark-1x.webp differ diff --git a/docs/features/screenshots/feedin-priority-modal-dark-2x.webp b/docs/features/screenshots/feedin-priority-modal-dark-2x.webp new file mode 100644 index 0000000000..8f84bef6fe Binary files /dev/null and b/docs/features/screenshots/feedin-priority-modal-dark-2x.webp differ diff --git a/docs/features/screenshots/feedin-priority-modal-light-1x.webp b/docs/features/screenshots/feedin-priority-modal-light-1x.webp new file mode 100644 index 0000000000..1c2fa35207 Binary files /dev/null and b/docs/features/screenshots/feedin-priority-modal-light-1x.webp differ diff --git a/docs/features/screenshots/feedin-priority-modal-light-2x.webp b/docs/features/screenshots/feedin-priority-modal-light-2x.webp new file mode 100644 index 0000000000..80dc9dc67b Binary files /dev/null and b/docs/features/screenshots/feedin-priority-modal-light-2x.webp differ diff --git a/docs/tariffs.mdx b/docs/tariffs.mdx index f1d8dffa81..908bb4360c 100644 --- a/docs/tariffs.mdx +++ b/docs/tariffs.mdx @@ -28,14 +28,18 @@ Der einfachste Fall sind feste Werte für Netzbezug (`grid`) und Einspeisung (`f ```yaml tariffs: currency: EUR # (default EUR) - grid: + grid: # Preis für Netzbezug type: fixed price: 0.294 # EUR/kWh - feedin: + feedin: # Einspeisevergütung type: fixed - price: 0.08 # EUR/kWh + price: 0.08 # EUR/kWh (positive Werte = Einnahme) ``` +:::info +Alle Tariftypen (`fixed`, `template`, `custom`), können sowohl für `grid` als auch `feedin` verwendet werden. +::: + ## Zeitabhängiger Strompreis Stromtarife mit festen zeitabhängigen Preisen können ebenfalls definiert werden. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/features/dynamic-feedin.mdx b/i18n/en/docusaurus-plugin-content-docs/current/features/dynamic-feedin.mdx new file mode 100644 index 0000000000..6f9677db74 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/features/dynamic-feedin.mdx @@ -0,0 +1,23 @@ +--- +sidebar_position: 4 +--- + +import Screenshot from "../../../../../src/components/Screenshot"; + +# Dynamic Feed-In + +These features are relevant if you have a [dynamic feed-in tariff](../tariffs) (e.g., direct marketing, Netherlands, Australia, etc.). + +## Feed-in priority + +By default, evcc uses solar surplus first to charge the car. +Only then is the solar energy fed into the grid. +During times of high feed-in rewards, it can be beneficial to prioritize the feed-in and charge the car later. + + + +With the *Feed-in priority* feature, you can set a price threshold per charging point. +When the feed-in tariffs are high (shown as orange bars), charging is paused (**solar mode**) or reduced to a minimum (**min+solar mode**). diff --git a/i18n/en/docusaurus-plugin-content-docs/current/features/dynamic-prices.mdx b/i18n/en/docusaurus-plugin-content-docs/current/features/dynamic-prices.mdx index fffc631710..3542b067da 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/features/dynamic-prices.mdx +++ b/i18n/en/docusaurus-plugin-content-docs/current/features/dynamic-prices.mdx @@ -61,6 +61,13 @@ tariffs: You can find a list of all supported tariffs under [tariffs](../tariffs). If your provider has an interface but is not yet supported by evcc, please submit a [Feature Request](https://github.com/evcc-io/evcc/issues/new/choose). +## Smart feed-in + +During certain periods of the day and in specific regions, there might be an abundance of solar power. At the same time, there may be almost no load on the grid. +During these periods your energy provider might apply a cost for injecting your PV-power to the grid as supply is high but demand is low and the grid is overloaded. +EVCC supports smart feed-in and allows you to define a set point at which it will throttle PV inverters to prevent feed-in. + + ## Cheap grid charging If you have configured a time-dependent or dynamic electricity tariff, the "Cheap grid charging" section will appear in the settings dialog at the charging point. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-dark-1x.webp b/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-dark-1x.webp new file mode 100644 index 0000000000..b83a78691e Binary files /dev/null and b/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-dark-1x.webp differ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-dark-2x.webp b/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-dark-2x.webp new file mode 100644 index 0000000000..9c1a9d8467 Binary files /dev/null and b/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-dark-2x.webp differ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-light-1x.webp b/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-light-1x.webp new file mode 100644 index 0000000000..2ebd2c48a2 Binary files /dev/null and b/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-light-1x.webp differ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-light-2x.webp b/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-light-2x.webp new file mode 100644 index 0000000000..457af74399 Binary files /dev/null and b/i18n/en/docusaurus-plugin-content-docs/current/features/screenshots/feedin-priority-modal-light-2x.webp differ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/tariffs.mdx b/i18n/en/docusaurus-plugin-content-docs/current/tariffs.mdx index e17a9e0f9f..ae8593ce96 100644 --- a/i18n/en/docusaurus-plugin-content-docs/current/tariffs.mdx +++ b/i18n/en/docusaurus-plugin-content-docs/current/tariffs.mdx @@ -28,14 +28,18 @@ The simplest case is fixed values for grid consumption (`grid`) and feed-in (`fe ```yaml tariffs: currency: EUR # (default EUR) - grid: + grid: # grid consumption price type: fixed price: 0.294 # EUR/kWh - feedin: + feedin: # feed-in revenue type: fixed - price: 0.08 # EUR/kWh + price: 0.08 # EUR/kWh (positive values = income) ``` +:::info +All tariff types (`fixed`, `template`, `custom`) can be used for both `grid` and `feedin`. +::: + ## Time-based Electricity Price Electricity tariffs with fixed time-based prices can also be defined. diff --git a/screenshot-generator/recipes/dynamicprice.spec.js b/screenshot-generator/recipes/dynamicprice.spec.js index 4c1162c3a7..9f901d9ad1 100644 --- a/screenshot-generator/recipes/dynamicprice.spec.js +++ b/screenshot-generator/recipes/dynamicprice.spec.js @@ -1,6 +1,5 @@ -const { test, expect } = require("@playwright/test"); +const { test } = require("@playwright/test"); import { loop } from "./utils/loop"; -import { CURSOR, ARROW, placeOverlay } from "./utils/overlay"; const { start, stop } = require("./utils/evcc"); const BASE_PATH = "features/screenshots"; diff --git a/screenshot-generator/recipes/feedinpriority.evcc.yaml b/screenshot-generator/recipes/feedinpriority.evcc.yaml new file mode 100755 index 0000000000..d16520c4a8 --- /dev/null +++ b/screenshot-generator/recipes/feedinpriority.evcc.yaml @@ -0,0 +1,40 @@ +tariffs: + currency: EUR + feedin: + type: fixed + price: 0.3 + zones: + - hours: 0-1 + price: 0.15 + - hours: 1-2 + price: 0.10 + - hours: 2-3 + price: 0.08 + - hours: 3-6 + price: 0.05 + - hours: 6-7 + price: 0.12 + - hours: 7-8 + price: 0.30 + - hours: 8-9 + price: 0.40 + - hours: 9-10 + price: 0.19 + - hours: 10-11 + price: 0.07 + - hours: 11-14 + price: 0.02 + - hours: 14-15 + price: 0.12 + - hours: 15-17 + price: 0.22 + - hours: 17-18 + price: 0.38 + - hours: 18-19 + price: 0.45 + - hours: 19-20 + price: 0.32 + - hours: 20-22 + price: 0.24 + - hours: 22-0 + price: 0.18 diff --git a/screenshot-generator/recipes/feedinpriority.spec.js b/screenshot-generator/recipes/feedinpriority.spec.js new file mode 100644 index 0000000000..080c2d1605 --- /dev/null +++ b/screenshot-generator/recipes/feedinpriority.spec.js @@ -0,0 +1,35 @@ +const { test } = require("@playwright/test"); +import { loop } from "./utils/loop"; +const { start, stop } = require("./utils/evcc"); + +const BASE_PATH = "features/screenshots"; + +test.beforeAll(async () => { + await start(["basics.evcc.yaml", "feedinpriority.evcc.yaml"], "password.sql"); +}); +test.afterAll(async () => { + await stop(); +}); + +const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +loop((screenshot) => { + test("feedin priority", async ({ page }) => { + await page.goto("/"); + await page.getByTestId("loadpoint-settings-button").nth(1).click(); + await wait(300); + + await page.locator("#smartFeedInPriority-1").selectOption("0.3"); + + await screenshot( + page, + `${BASE_PATH}/feedin-priority-modal`, + "#loadpointSettingsModal_1 .modal-body > .container > div:first-child", + { + all: 50, + top: 110, + right: 70, + }, + ); + }); +});