Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
f86e134
chore: Update version prefix to 0.3.35 for develop workflow and 0.3 f…
ohAnd May 1, 2026
91fc85d
fix: Remove redundant debug logging for disabled MQTT configuration
ohAnd May 1, 2026
480bed3
feat(price): Add negative_price_switch support for fixed_24h price so…
ohAnd May 1, 2026
a71b7be
[AUTO] Update version to 0.3.35.295-develop
ohAnd May 1, 2026
81bff39
feat: startup error helper with scoped alerts and actionable config l…
ohAnd May 10, 2026
1b02019
[AUTO] Update version to 0.3.35.296-develop
ohAnd May 10, 2026
e7c058c
fix: add metadata markers to runtime data fetch errors
ohAnd May 20, 2026
0b6b62b
[AUTO] Update version to 0.3.35.297-develop
ohAnd May 20, 2026
3627500
fix: MQTT state labels for EVCC discharge modes (issue #252)
ohAnd May 21, 2026
f88cc30
feat: Dynamic Feed-In Pricing with Multi-Source Support (Issue #219)
ohAnd May 22, 2026
61d30d7
[AUTO] Update version to 0.3.35.298-develop
ohAnd May 22, 2026
8f5b81a
feat(data-source): Add ssl_ignore option for self-signed certificates
May 23, 2026
f4b1f5b
document ssl-ignore config switch
May 23, 2026
776fbb0
feat: Add local_evopt built-in MILP optimizer backend
ohAnd Jun 1, 2026
b71a225
git commit -m "fix: trigger immediate optimization run on dyn_overrid…
ohAnd Jun 1, 2026
3926513
docs: position local_evopt as built-in default, not external-only
ohAnd Jun 1, 2026
77f13a0
fix: hot-reload feed-in price changes now take effect on next run
ohAnd Jun 1, 2026
0c8dc0c
fix: pylint W0718/C0301/C0411/C0305 fixes to pass CI (was 8.98/10)
ohAnd Jun 1, 2026
156b424
fix: install pytest in CI pylint workflow to resolve E0401 errors
ohAnd Jun 2, 2026
77a97d3
fix: display-only inverter mode warning and pylint violations
ohAnd Jun 2, 2026
d3d88e7
docs: clarify grid import/export limit documentation
ohAnd Jun 2, 2026
eceb015
refactor(optimizer): improve code quality with pylint/mypy fixes
ohAnd Jun 2, 2026
23fd39a
feat: teach optimizer day/night cycle with smart forecast extension
ohAnd Jun 3, 2026
830e994
fix: add negative_price_switch to FeedInPriceInterface (Issue #255)
paulelsner Jun 4, 2026
d75a287
Fix chart grid display for local_evopt backend
ohAnd Jun 4, 2026
46011c5
fix(local_evopt): restore penalty_base floor to np.max() matching ups…
ohAnd Jun 4, 2026
7976cc8
docs: redefine EOS Connect as a full-stack energy management system
ohAnd Jun 4, 2026
ff0d1b6
Merge pull request #258 from ohAnd/local_opt
ohAnd Jun 4, 2026
54e0404
[AUTO] Update version to 0.3.35.299-develop
ohAnd Jun 4, 2026
882b459
fix: prevent startup crash on incomplete config - enable web UI access
ohAnd Jun 6, 2026
4ba4cba
fix: implement PV forecast fallback caching on API failures
ohAnd Jun 6, 2026
1c20dda
[AUTO] Update version to 0.3.35.300-develop
ohAnd Jun 6, 2026
5247162
docs: add troubleshooting notes for local_evopt users on Proxmox
ohAnd Jun 6, 2026
c7c135a
Merge remote-tracking branch 'origin/develop' into pr/paulelsner/257-3
ohAnd Jun 8, 2026
74b4193
fix: add negative_price_switch to FeedInPriceInterface (Issue #255)
ohAnd Jun 9, 2026
a655f27
fix: update description for Home Assistant URL in inverter configuration
ohAnd Jun 9, 2026
3b3babd
Merge pull request #257 from paulelsner/fix/negative-price-switch
ohAnd Jun 11, 2026
82c5b9c
[AUTO] Update version to 0.3.35.301-develop
ohAnd Jun 11, 2026
57d0aff
Merge branch 'develop' of https://github.com/ohAnd/EOS_connect into d…
ohAnd Jun 11, 2026
b13a5a9
[AUTO] Update version to 0.3.35.302-develop
ohAnd Jun 11, 2026
a99543e
feat: implement fully configurable Home Assistant inverter service ca…
ohAnd Jun 11, 2026
4aac81f
[AUTO] Update version to 0.3.35.303-develop
ohAnd Jun 11, 2026
34a40cf
feat(data-source): Add ssl_ignore option for self-signed certificates
May 23, 2026
35f42e1
document ssl-ignore config switch
May 23, 2026
b52c152
feat: extend ssl_ignore support to all HomeAssistant interfaces
ohAnd Jun 12, 2026
b2dba55
Merge branch 'feature/add_ssl_ignore_switch' of https://github.com/bu…
ohAnd Jun 12, 2026
4b6c3d6
Merge pull request #254 from busche/feature/add_ssl_ignore_switch
ohAnd Jun 12, 2026
28b2690
[AUTO] Update version to 0.3.35.304-develop
ohAnd Jun 12, 2026
b225c85
feat: unified timeseries data source for prices and PV forecasts
ohAnd Jun 15, 2026
da9016f
[AUTO] Update version to 0.3.35.305-develop
ohAnd Jun 15, 2026
0243655
feat: refactor PV source configuration with code quality improvements
ohAnd Jun 15, 2026
1bdf1c1
[AUTO] Update version to 0.3.35.306-develop
ohAnd Jun 15, 2026
a7c6c81
feat: add EVCC price source with fallback strategy and fix hot-reload…
ohAnd Jun 16, 2026
358d7f8
feat: add EVCC as feed-in source + hot reload support
ohAnd Jun 16, 2026
6aa9a24
refactor: improve Price section UI clarity - reorganize display groups
ohAnd Jun 16, 2026
02275be
refactor: mark Grid Price Forecast feature as stable - remove experim…
ohAnd Jun 16, 2026
a21ab3b
[AUTO] Update version to 0.3.35.307-develop
ohAnd Jun 16, 2026
fd56222
refactor: reduce config.py to bootstrap-only, clean up legacy full co…
ohAnd Jun 21, 2026
aeb1d01
[AUTO] Update version to 0.3.35.308-develop
ohAnd Jun 21, 2026
b52d34c
fix: display correct backend label for local_evopt in info menu
ohAnd Jun 23, 2026
d9e70cc
[AUTO] Update version to 0.3.35.309-develop
ohAnd Jun 23, 2026
944cd51
fix: improve error logging for Home Assistant connection failures
ohAnd Jun 23, 2026
fea0f34
[AUTO] Update version to 0.3.35.310-develop
ohAnd Jun 23, 2026
53ef5f6
fix: enhance logging and break taint chains in PvInterface initializa…
ohAnd Jun 23, 2026
ccaadfb
[AUTO] Update version to 0.3.35.311-develop
ohAnd Jun 23, 2026
2ad752a
Merge branch 'main' into develop
ohAnd Jun 23, 2026
51a3687
[AUTO] Update version to 0.3.35.312-develop
ohAnd Jun 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
323 changes: 299 additions & 24 deletions .github/copilot-instructions.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .github/workflows/docker_develop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ on:
workflow_dispatch: # allows manual triggering of the workflow

env:
VERSION_PREFIX: 0.3.34.
VERSION_PREFIX: 0.3.35.
VERSION_SUFFIX: -develop

jobs:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker_main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ on:
workflow_dispatch: # allows manual triggering of the workflow

env:
VERSION_PREFIX: 0.2.
VERSION_PREFIX: 0.3.

jobs:
pytest:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pylint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pylint astroid
pip install pylint astroid pytest
pip install -r requirements.txt
sudo apt-get update && sudo apt-get install -y bc # Install bc
- name: Analysing the code with pylint
Expand Down
34 changes: 34 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,40 @@ Guidelines
- Document new config keys / API / MQTT topics
- Prefer clarity over cleverness

## Key Architectural Patterns

### Interface Creation & Startup Error Handling

When adding new interfaces or modifying interface initialization:

- **Use `InterfaceFactory`** (`src/interface_factory.py`) for centralized creation with integrated error handling
- Reduces boilerplate error catching in the main app
- Automatically registers errors with `StartupValidator`
- Categorizes critical vs non-critical interfaces

- **Use `StartupValidator`** (`src/startup_validator.py`) to register startup errors
- Errors appear in the web UI's startup panel within 1-2 seconds
- Include metadata markers: `| Config: #section | ACTION REQUIRED`
- Enables users to quickly fix configuration issues

**Example:**
```python
# In eos_connect.py
from interface_factory import InterfaceFactory
from startup_validator import StartupValidator

validator = StartupValidator()
factory = InterfaceFactory(validator)

battery_interface = factory.create_battery_interface(
config=config['battery'],
time_zone=time_zone,
critical=True, # Halt startup if fails
)
```

For detailed architecture and design patterns, see the [Developer Guide → Interface Creation & Startup Error Handling](docs/developer/index.html#architecture).

## Code Ownership

Some components have designated owners who maintain and review changes to those areas. This is documented in the [CODEOWNERS](/.github/CODEOWNERS) file.
Expand Down
71 changes: 45 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,45 @@
</tr>
</table>

**For full documentation, guides, and configuration details, visit:**
**For full documentation, guides, and configuration details, visit:**
[https://ohAnd.github.io/EOS_connect/](https://ohAnd.github.io/EOS_connect/)

---

## Overview
EOS Connect is an open-source tool for intelligent energy management and optimization. It acts as the orchestration layer between your energy hardware (inverters, batteries, PV forecasts) and external optimization engines. EOS Connect is an integration and control platform—not an optimizer. Optimization calculations are performed by external servers:
- [Akkudoktor EOS](https://github.com/Akkudoktor-EOS/EOS)
- [EVopt](https://github.com/thecem/hassio-evopt)
EOS Connect is a comprehensive energy management and optimization platform. While it remains a flexible orchestration layer between your hardware and various optimization engines, it has evolved from a pure "data gateway" into a full-featured, self-contained optimization solution.

EOS Connect fetches real-time and forecast data, processes it via your chosen optimizer, and controls devices to optimize your energy usage and costs.
EOS Connect now ships with a **built-in MILP optimizer** (`local_evopt`) — providing a complete, high-performance energy management system out of the box. For specialized needs, it maintains its open nature by allowing connections to external backends:
- **Built-in (Recommended):** [local_evopt](https://ohAnd.github.io/EOS_connect/user-guide/configuration.html#local-evopt) — A high-performance, local optimizer based on [evcc-io/optimizer](https://github.com/evcc-io/optimizer).
- **External:** [Akkudoktor EOS](https://github.com/Akkudoktor-EOS/EOS) or [EVopt](https://github.com/thecem/hassio-evopt).

EOS Connect fetches real-time and forecast data (solar, prices), runs the integrated optimization (or delegates it), and automatically controls your devices to maximize self-consumption and minimize grid costs.

---

## Key Features
- **Automated Energy Optimization:** Uses real-time and forecast data to maximize self-consumption and minimize grid costs.
- **Battery and Inverter Management:** Charge/discharge control, grid/PV modes, dynamic charging curves.
- **Integration with Smart Home Platforms:** Home Assistant (MQTT auto discovery), OpenHAB, EVCC, and MQTT for seamless data exchange and automation.
- **Dynamic Web Dashboard:** Live monitoring, manual control, and visualization of your energy system.
- **Cost Optimization:** Aligns energy usage with dynamic electricity prices (Tibber, smartenergy.at, Stromligning.dk) with hourly or quarterly distribution.
- **Smart Price Prediction:** Energyforecast.de integration automatically learns your grid fees and taxes to provide accurate price predictions when your primary source lacks tomorrow's prices. [Learn more →](https://ohAnd.github.io/EOS_connect/user-guide/configuration.html#energyforecast)
- **Dynamic PV Override:** Automatically allows discharge when solar production exceeds load, preventing unwanted grid input during cloud shadows. [Learn more →](https://ohAnd.github.io/EOS_connect/user-guide/configuration.html#dyn-override)
- **Flexible Configuration:** Easy to set up and extend for a wide range of energy systems and user needs.
- **All-in-One Optimization Solution:** No external servers required for standard energy optimization.
- **Privacy & Reliability:** With `local_evopt`, all calculations happen on your device, ensuring faster response times and no dependency on external network reachability.
- **Automated Energy Management:** Uses real-time and forecast data into a cohesive control strategy to maximize self-consumption.
- **Battery and Inverter Management:** Precise charge/discharge control, grid/PV modes, and manufacturer-validated dynamic charging curves.
- **Integration with Smart Home Platforms:** Home Assistant (MQTT auto discovery, native inverter control via service calls), OpenHAB, EVCC, and REST APIs.
- **Dynamic Web Dashboard:** Live monitoring, manual overrides, and visualization of the optimization process.
- **Cost Optimization:** Automatic alignment with dynamic electricity prices (Tibber, smartenergy.at, EVCC, timeseries, etc.) with configurable resolution. [Learn more →](https://ohAnd.github.io/EOS_connect/user-guide/configuration.html#price)
- **Dynamic Feed-In Pricing:** Optimize battery discharge for maximum profit when export prices are favorable. Switch feed-in sources live without restart via hot reload. Supports fixed, Elpris DK, EPEX Spot, and EVCC. [Learn more →](https://ohAnd.github.io/EOS_connect/user-guide/configuration.html#price)
- **Smart Price Prediction:** Learned grid fees and taxes for accurate planning even when future prices aren't yet available. [Learn more →](https://ohAnd.github.io/EOS_connect/user-guide/configuration.html#energyforecast)
- **Dynamic PV Override:** Intelligent discharge prevention during high solar production or intermittent clouds. [Learn more →](https://ohAnd.github.io/EOS_connect/user-guide/configuration.html#dyn-override)

---


## How It Works
EOS Connect periodically collects:
- Local energy consumption data
- PV solar forecasts for the next 48 hours
- Upcoming energy prices
EOS Connect acts as the central brain of your energy system:
1. **Data Collection:** Periodically collects local consumption, battery states, and inverter data.
2. **Forecasting:** Fetches PV solar forecasts and upcoming energy prices for the next 48 hours.
3. **Internal Optimization:** The built-in optimizer processes this data locally to generate the most cost-efficient power strategy.
4. **Active Control:** Applies targeted commands to your devices (inverters, batteries, wallboxes) based on the calculated strategy.

It sends this data to the optimizer (EOS or EVopt), which returns a prediction and recommended control strategy. EOS Connect then applies these controls to your devices (inverter, battery, EVCC, etc.). All scheduling and timing is managed by EOS Connect.
All scheduling, logic, and interface management is handled by EOS Connect, providing a unified and reliable energy management experience.

<div align="center">
<img src="docs\assets\images\eos_connect_flow.png" alt="EOS Connect process flow" width="450"/>
Expand All @@ -61,13 +66,14 @@ Supported data sources and integrations:
- Home Assistant (latest version recommended)
- EOS or EVopt server (can be installed as part of the setup; see below)

2. **Option A: Install EOS Connect Add-on:**
2. **Install EOS Connect Add-on:**
- Add the [ohAnd/ha_addons](https://github.com/ohAnd/ha_addons) repository to your Home Assistant add-on store.
- Install the **EOS Connect** add-on from the store.

3. **Option B: Install EOS Connect Add-on:**
- If you want to use EOS as your optimization backend, add the [Duetting/ha_eos_addon](https://github.com/Duetting/ha_eos_addon) or [thecem/ha_eos_addon](https://github.com/thecem/ha_eos_addon) repository to your Home Assistant add-on store and install the EOS add-on, or ensure your EOS server is running and reachable.
- If you prefer the lightweight EVopt backend, install [thecem/hassio-evopt](https://github.com/thecem/hassio-evopt) and make sure it is running.
- The built-in optimizer (`local_evopt`) works out of the box — no additional add-ons required.

3. **(Optional) External optimization backend:**
- To use Akkudoktor EOS as backend, add the [Duetting/ha_eos_addon](https://github.com/Duetting/ha_eos_addon) or [thecem/ha_eos_addon](https://github.com/thecem/ha_eos_addon) repository and install the EOS add-on.
- To use EVopt, install [thecem/hassio-evopt](https://github.com/thecem/hassio-evopt) and make sure it is running.

4. **Configure:**
- On first start, a **Setup Wizard** guides you through initial configuration via the web UI.
Expand All @@ -93,6 +99,17 @@ If the add-on crashes with a Segmentation Fault on startup, your VM might be usi

This allows the add-on to correctly see and use your physical CPU's instructions.

**Note for Proxmox / local_evopt Users:**
If local_evopt fails with "CBC file not found" in Proxmox, force a full container rebuild:
```bash
docker rmi ghcr.io/ohand/ha-addon-eos_connect_develop_amd64:VERSION
# Then restart the addon from Home Assistant UI to pull and rebuild
```
Cached images may use system Python instead of the venv.

**Note on SSL Certificate Verification:**
By default, EOS Connect validates SSL certificates when connecting to Home Assistant or OpenHAB. If you use a setup with **self-signed or private CA certificates**, you can disable verification in Settings → Data Source → **SSL Ignore** (expert level, requires restart). Only enable this in **trusted private networks** where you fully control the network path. Currently, EOS Connect does not support supplying custom root CA certificates — this feature is planned for future releases. For production setups, we recommend obtaining a valid certificate through Let's Encrypt (free) or your organization's certificate authority.

---

**Other Installation Options:**
Expand All @@ -106,18 +123,20 @@ EOS Connect uses a **web-based configuration system**. All settings are managed

### First Start (Setup Wizard)
On first launch, a **Setup Wizard** guides you through the essential configuration steps in optimal order:
1. **Optimizer** — Select your optimization backend (EOS Server or EVopt)
1. **Optimizer** — Select your optimization backend (built-in Local EVopt, EOS Server, or external EVopt)
2. **EVCC** (Optional) — Configure if you want to use EVCC for PV forecasts, inverter control gateway, or car charging dependent control. Can be skipped if not using EVCC.
3. **Inverter** — Select your inverter type for battery control (display-only if not using hardware control). Can use EVCC as controller if configured in step 2.
4. **Data Source** — Connect to Home Assistant, OpenHAB, or use default sensors
5. **Battery** — Set capacity and SOC limits
6. **Load** — Connect your load sensor
7. **Price** — Choose your electricity pricing provider
8. **PV Installations** — Configure your solar forecast provider and PV systems
8. **PV Installations** — Configure your solar forecast provider and PV systems (location-based sources only)

After the wizard completes, restart EOS Connect to apply the settings.

**Note:** EVCC configuration must come before Inverter so you can select EVCC as your inverter controller type. If EVCC URL is not configured, the option will be greyed out in both the Inverter and PV Source selection fields.
**Note:**
- EVCC configuration must come before Inverter so you can select EVCC as your inverter controller type. If EVCC URL is not configured, the option will be greyed out in both the Inverter and PV Source selection fields.
- PV Installations configuration is only required for location-based forecast sources (Akkudoktor, OpenMeteo, Forecast.Solar). Other sources (Default, Solcast, Victron, EVCC, Timeseries) configure their data elsewhere and do not need PV Installations defined.

### Bootstrap Config (`config.yaml`)
Only 3 infrastructure settings live in `config.yaml` — everything else is stored in the database and managed via the web UI:
Expand Down
4 changes: 2 additions & 2 deletions README_OLD.md
Original file line number Diff line number Diff line change
Expand Up @@ -644,8 +644,8 @@ Override the system mode, duration, and grid charge power.
| `Avoid Discharge` | 1 | Prevent battery discharge |
| `Discharge Allowed` | 2 | Allow battery discharge |
| `Avoid Discharge EVCC FAST` | 3 | Avoid discharge with EVCC fast charge |
| `Avoid Discharge EVCC PV` | 4 | Avoid discharge with EVCC PV mode |
| `Avoid Discharge EVCC MIN+PV` | 5 | Avoid discharge with EVCC MIN+PV mode |
| `Discharge Allowed EVCC PV` | 4 | Discharge allowed with EVCC PV mode |
| `Discharge Allowed EVCC MIN+PV` | 5 | Discharge allowed with EVCC MIN+PV mode |

</details>

Expand Down
62 changes: 61 additions & 1 deletion docs/advanced/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<a href="../index.html" class="nav-logo">
<img src="../assets/images/icon.png" alt="EOS Connect" style="height: 48px; vertical-align: middle; margin-right: 8px;">
<span>EOS Connect</span>
<span class="version-badge">v0.3.34</span>
<span class="version-badge">v0.3.35</span>
</a>
<button class="mobile-menu-toggle" onclick="toggleMobileMenu()" aria-label="Toggle menu">
<i class="fas fa-bars"></i>
Expand Down Expand Up @@ -50,6 +50,7 @@ <h3>On This Page</h3>
<a href="#stored-energy" class="toc-link toc-sub">→ stored_energy</a>
<a href="#charging-sessions" class="toc-link toc-sub">→ charging_sessions</a>
<a href="#opt-request-response" class="toc-link toc-sub">→ Optimization Request/Response</a>
<a href="#feedin-pricing-details" class="toc-link toc-sub">→ Feed-In Pricing Details</a>
<a href="#system-mode-ref" class="toc-link toc-sub">→ System Modes</a>
<a href="#logging-api" class="toc-link toc-sub">→ Logging API</a>
<a href="#mqtt" class="toc-link">MQTT Integration</a>
Expand Down Expand Up @@ -182,6 +183,10 @@ <h3 id="api-examples">API Examples</h3>

<h4>Get Current Control States</h4>
<pre><code>curl http://localhost:8081/json/current_controls.json</code></pre>

<h4>Get Startup-Scoped Alerts</h4>
<pre><code>curl "http://localhost:8081/logs/alerts?startup_only=1&amp;limit=20"</code></pre>
<p>This returns only warning/error alerts created since the current EOS Connect process started. Useful for startup troubleshooting without older noise.</p>

<p><strong>Response Example:</strong></p>
<pre><code>{
Expand Down Expand Up @@ -754,6 +759,61 @@ <h6>EMS (Energy Management System) Fields</h6>
</tbody>
</table>

<h6 id="feedin-pricing-details">Feed-In Pricing Calculation Details</h6>
<p>The <code>einspeiseverguetung_euro_pro_wh</code> array is calculated from your feed-in price configuration and updated every 15 minutes:</p>

<table>
<thead>
<tr>
<th>Source</th>
<th>Formula</th>
<th>Update Frequency</th>
<th>Example Calculation</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Fixed</strong></td>
<td><code>(price_ct_kwh + static_adder_ct) × multiplier ÷ 100000 = €/Wh</code></td>
<td>Manual</td>
<td><code>(8 + 2) × 1.0 ÷ 100000 = 0.0001 €/Wh</code></td>
</tr>
<tr>
<td><strong>Elpris DK</strong></td>
<td><code>(DKK/kWh × 100 ÷ 7.46 + static_adder_ct) × multiplier ÷ 100000 = €/Wh</code></td>
<td>Daily ~13:00 UTC</td>
<td><code>(3.0 × 100 ÷ 7.46 + 2) × 0.95 ÷ 100000 = 0.000372 €/Wh</code></td>
</tr>
<tr>
<td><strong>EPEX-Spot</strong></td>
<td><code>(api_price_ct + static_adder_ct) × multiplier ÷ 100000 = €/Wh</code></td>
<td>Every 15 min</td>
<td><code>(32.5 - 1.0) × 1.0 ÷ 100000 = 0.000315 €/Wh</code></td>
</tr>
</tbody>
</table>

<p><strong>Configuration Parameters:</strong></p>
<ul>
<li><code>feed_in_source</code>: Select pricing source (fixed, elpris_dk, epex_spot)</li>
<li><code>feed_in_price</code> or API rate: Base feed-in price in ct/kWh</li>
<li><code>feed_in_static_adder</code> (hot-reloadable): Additional fixed cost/benefit in ct/kWh (e.g., +2.5 for transport)</li>
<li><code>feed_in_multiplier</code> (hot-reloadable): Percentage factor (0.5-1.5) for discount/premium strategy</li>
<li><code>feed_in_zone</code>: Zone selection for Elpris DK (DK1/DK2)</li>
</ul>

<p><strong>Hot-Reload Note:</strong> Changes to <code>feed_in_static_adder</code> and <code>feed_in_multiplier</code> take effect immediately in the next optimization cycle without restarting EOS Connect.</p>

<h6>Background Update Process</h6>
<p><strong>Feed-in pricing updates run continuously in the background:</strong></p>
<ul>
<li><strong>EPEX-Spot:</strong> Updated every 15 minutes, automatically aligned to market update times</li>
<li><strong>Elpris DK:</strong> Updated once daily at 13:00 UTC (next day's prices)</li>
<li><strong>Fixed:</strong> Manual - requires configuration change</li>
<li><strong>Failure Handling:</strong> Up to 24 consecutive failures before falling back to last successful prices</li>
<li><strong>Logging:</strong> Update status logged to file for troubleshooting</li>
</ul>

<h6>Battery (pv_akku) Fields</h6>
<table>
<thead>
Expand Down
Loading