house/son: placeholder config for son's installation

All house-specific values (IPs, coordinates, Viessmann credentials, kWp)
replaced with <...> placeholders. Ready to fill in once hardware is known.
Notable differences from house/lutz template:
- installation_id left empty (disables WW boost until credentials obtained)
- base_load_w set to 400W (adjust after measuring)
- forecast lat/lon/declination/azimuth/kwp all require local values

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-06 11:19:30 +02:00
parent 0b51ce5240
commit ca0f9ed1c3

View File

@@ -1,10 +1,11 @@
# EMS Configuration # EMS Configuration — house/son
# Fill in all values marked with <...> before deploying.
# All thresholds and timing parameters are configurable here. # All thresholds and timing parameters are configurable here.
prometheus: prometheus:
url: "http://192.168.0.23:9090" url: "http://<prometheus-ip>:9090"
# Metric names from the custom Viessmann exporter # Metric names from the custom Viessmann exporter (same as house/lutz)
metrics: metrics:
grid_power_exchange: "pcc_transfer_power_exchange_value" # positive = import, negative = export grid_power_exchange: "pcc_transfer_power_exchange_value" # positive = import, negative = export
battery_soc: "ess_stateOfCharge_value" # 0-100% battery_soc: "ess_stateOfCharge_value" # 0-100%
@@ -19,32 +20,33 @@ prometheus:
# Shelly actuators # Shelly actuators
shelly: shelly:
sg_ready: sg_ready:
ip: "192.168.42.90" ip: "<shelly-sg-ready-ip>"
gen: 1 # Gen1: /relay/0?turn=on|off gen: 1 # Gen1: /relay/0?turn=on|off
wallbox_a: wallbox_a:
ip: "192.168.42.185" ip: "<shelly-wallbox-a-ip>"
gen: 2 # Gen2: /rpc/Switch.Set gen: 2 # Gen2: /rpc/Switch.Set
power_w: 2000 power_w: 2000 # rated power of the wallbox (W)
password: "" # set Shelly admin password if auth is enabled password: "" # set Shelly admin password if auth is enabled
wallbox_b: wallbox_b:
ip: "192.168.42.51" ip: "<shelly-wallbox-b-ip>"
gen: 2 # Gen2: /rpc/Switch.Set gen: 2 # Gen2: /rpc/Switch.Set
power_w: 4000 power_w: 4000 # rated power of the wallbox (W)
password: "" # set Shelly admin password if auth is enabled password: "" # set Shelly admin password if auth is enabled
# Viessmann API (write access for WW temperature) # Viessmann API (write access for WW temperature)
# Leave installation_id empty to disable WW boost (EMS runs without it)
viessmann: viessmann:
token_file: "/etc/ems/viessmann-token.json" # OAuth2 refresh token token_file: "/etc/ems/viessmann-token.json" # OAuth2 refresh token
client_id: "5d1235548dfaa01ce37db8f865d2df4d" client_id: "<viessmann-oauth2-client-id>"
installation_id: "1253124" installation_id: "" # leave empty to disable WW boost
gateway_serial: "7637415006796210" gateway_serial: "<gateway-serial>"
device_id: "0" device_id: "0"
# SOC thresholds — which consumers are allowed at which battery level # SOC thresholds — which consumers are allowed at which battery level
soc_thresholds: soc_thresholds:
block_all: 50 # below 50%: no consumers block_all: 50 # below 50%: no consumers
sg_ready_only: 70 # 50-70%: only SG-Ready (heating period) sg_ready_only: 70 # 50-70%: only SG-Ready (heating period)
plus_wallbox_a: 90 # 70-90%: + Wallbox A (2kW) plus_wallbox_a: 90 # 70-90%: + Wallbox A
all_consumers: 90 # above 90%: all consumers all_consumers: 90 # above 90%: all consumers
# Hysteresis settings # Hysteresis settings
@@ -68,7 +70,7 @@ thresholds:
strategic: strategic:
forecast_high_kwh: 25 forecast_high_kwh: 25
forecast_mid_kwh: 15 forecast_mid_kwh: 15
ww_base_c: 48 # normal WW setpoint (°C) ww_base_c: 48 # normal WW setpoint (°C) — adjust to your heat pump
ww_boost_high_c: 5 # +5°C on high-forecast days (>25 kWh) ww_boost_high_c: 5 # +5°C on high-forecast days (>25 kWh)
ww_boost_mid_c: 3 # +3°C on medium-forecast days (>15 kWh) ww_boost_mid_c: 3 # +3°C on medium-forecast days (>15 kWh)
ww_window_start: "12:30" # WW boost only allowed from 12:30 ww_window_start: "12:30" # WW boost only allowed from 12:30
@@ -91,16 +93,16 @@ season:
# PV forecast — forecast.solar (free, no API key required) # PV forecast — forecast.solar (free, no API key required)
forecast: forecast:
enabled: true enabled: true
lat: 48.7839 lat: <latitude> # decimal degrees, e.g. 48.7839
lon: 9.3889 lon: <longitude> # decimal degrees, e.g. 9.3889
declination: 20 # panel tilt in degrees declination: <tilt> # panel tilt in degrees from horizontal (0=flat, 90=vertical)
azimuth: 5 # degrees from south (south=0, west=90, east=-90) azimuth: <azimuth> # degrees from south (south=0, west=90, east=-90)
kwp: 7.0 # installed peak power kwp: <kwp> # installed peak power in kWp, e.g. 8.5
fetch_interval: "4h" # re-fetch during the day (free tier: 12 req/day → 3 fetches) fetch_interval: "4h" # re-fetch during the day (free tier: 12 req/day → 3 fetches)
fetch_window_start: "07:00" fetch_window_start: "07:00"
fetch_window_end: "19:00" fetch_window_end: "19:00"
base_load_w: 450 # steady-state house consumption (W) — spikes from kettle/dishwasher are hourly averages and negligible base_load_w: 400 # steady-state house consumption (W) — measure and adjust
min_surplus_w: 1800 # min export surplus to trigger wallbox — matches wallbox_a threshold min_surplus_w: 1800 # min export surplus to trigger wallbox charging (W)
# EMS operational settings # EMS operational settings
ems: ems: