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