Автоматизация KNX на основе SOC аккумулятора: отключение нагрузки, ночная зарядка и планирование тарифов
Состояние заряда аккумулятора — самый важный входной параметр для энергетической автоматизации KNX: он определяет, когда разрешить дополнительные нагрузки, когда отключить нагрузки для защиты аккумулятора, когда запустить ночную зарядку вне пика и как адаптировать стратегию между летними и зимними условиями эксплуатации. Хорошо спроектированный уровень автоматизации SOC может снизить затраты на импорт из сети на 40–70% по сравнению с базовым управлением собственным потреблением.
Таблица порогов SOC с гистерезисными зонами
Таблица порогов SOC определяет дискретные рабочие зоны, каждая из которых запускает определенный набор действий KNX. Гистерезис — смещение восстановления выше порога — предотвращает быстрое переключение, когда SOC колеблется вблизи границы порога из-за колебаний нагрузки или шума измерения SOC.
| Зона SOC | Разрешенные действия KNX | Восстановление гистерезиса |
|---|---|---|
| > 90% AND exporting | SG Ready State 4 + макс. ток EV + нагрев водонагревателя ВКЛ | Активно, пока SOC не снизится до 85% или не прекратится экспорт |
| 50–90% | Нормальное собственное потребление: SG Ready State 3 + приоритетный режим EV | Оставаться в зоне — без отключения |
| 20–50% | Только базовое собственное потребление — без SG Ready State 4, EV на мин. 6 А | Восстановление до зоны 50-90%, когда солнечная батарея зарядит аккумулятор выше 55% |
| < 20% | Приостановить все управляемые нагрузки: EV отключен, SG Ready → State 2 | Возобновить нагрузки, когда SOC восстановится выше 25% (гистерезис 5%) |
| < 10% | Аварийный режим: уставка HVAC −2°C + сигнал нагрузки на визуализацию KNX | Отменить аварийное снижение уставки, когда SOC восстановится выше 15% |
Логический модуль MDT — реализация диапазонов SOC с гистерезисом
Logic channel 1: SOC band flags (set on GA 9/1/0 change)
Flag "soc_critical": SOC < 20 → set; clear when SOC > 25
Flag "soc_low": SOC < 10 → set; clear when SOC > 15
Flag "soc_full": SOC > 90 → set; clear when SOC < 85
On-delay timer: 60s before setting any flag (noise rejection)
Logic channel 2: Load enable gate
IF soc_critical: disable EV (write 0 to GA 10/0/1)
set SG Ready → State 2 (S1=0, S2=0)
IF NOT soc_critical AND surplus > 2500W:
EV: enable + set current from surplus/230
SG Ready: State 3 if surplus > 3000W
Logic channel 3: Emergency HVAC setback
IF soc_low: send HVAC setback scene (reduce setpoint −2°C)
write 1 to alarm GA 9/9/0 (battery emergency alert)
IF NOT soc_low AND NOT soc_critical: restore HVAC setpointТриггер ночной зарядки в непиковое время
Динамические тарифы на электроэнергию (Tibber, Nordpool, Octopus Agile) предлагают периоды, когда стоимость электроэнергии из сети ниже 0,10 EUR/кВт·ч — обычно с 00:00 до 06:00. Запуск зарядки аккумулятора в эти окна снижает ежедневные затраты на энергию, когда солнечной генерации недостаточно для полной зарядки аккумулятора в течение дня.
Логика ночной зарядки в непиковое время
KNX time-based trigger (IP-Symcon or HA schedule):
Trigger time: 01:00 local time
Condition: GA 9/1/0 (Battery SOC) < 40%
AND KNX tariff GA 9/9/1 < 10 (price < 0.10 €/kWh)
Action: Set MultiPlus to forced battery charge mode
Victron (via Cerbo GX Modbus write):
Write 4 to register 37 (unit ID 227) → force bulk charge
Fronius GEN24 (via webserver API or EVCC):
evcc.yaml: scheduled charging at 01:00 with "now" mode
KNX tariff GA update (source: HA automation reading Tibber API):
HA script (runs at 22:00 daily):
GET https://api.tibber.com/v1-beta/gql (Tibber price API)
Find minimum price in next 8 hours
Write min_price × 100 (integer cents) to GA 9/9/1
GA 9/9/1 = current electricity price in euro cents (DPT 9.002)
GA 9/9/2 = off-peak start hour (DPT 5.010)
Cancel condition: 06:00 OR GA 9/1/0 > 90%
→ Stop forced charge → return to normal ESS modeNordpool против Tibber для интеграции с KNX: Nordpool публикует цены на сутки вперед в 13:00 CET — подходит для автоматизаций Home Assistant, которые получают цены раз в день и планируют зарядку соответственно. Tibber предоставляет API более высокого уровня с почасовыми прогнозами цен и поддерживает WebSocket-подписки для обновлений цен в реальном времени, что позволяет динамически настраивать пороги в групповом адресе тарифа KNX без опроса.
Утренняя предзарядка перед пиковым тарифом
Тарифы, дифференцированные по времени суток, часто имеют пиковые окна с 07:00 до 11:00, когда утренняя нагрузка здания высока, а солнечная генерация еще нарастает. Предварительная зарядка аккумулятора до уровня SOC не менее 50% до начала пикового окна с использованием более дешевой непиковой энергии гарантирует, что здание будет потреблять энергию из аккумулятора, а не из дорогой сети в часы пик.
Автоматизация утренней предзарядки (скрипт IP-Symcon)
// IP-Symcon PHP script — runs at 06:00 daily
$soc = GetValueFloat(IPS_GetVariableIDByName("Battery SOC", $parentID));
$pvForecast = GetValueFloat($pvForecastVariableID); // from PV forecast API
// PV forecast integration: HA reads forecast.solar API
// GET https://api.forecast.solar/estimate/<lat>/<lon>/<dec>/<az>/<kwp>
// Forecast for today: energy in kWh — high forecast means skip pre-charge
if ($soc < 30 && $pvForecast < 15) {
// Low SOC and low solar forecast — pre-charge to 50% before peak
SetValueInteger($multiPlusMode, 4); // Force bulk charge
IPS_RunScriptEx($chargeStopScript, ["targetSOC" => 50]);
}
// In HA automation:
automation:
- alias: "Morning pre-charge if low SOC"
trigger:
- platform: time
at: "06:00:00"
condition:
- condition: numeric_state
entity_id: sensor.battery_soc
below: 30
- condition: template
value_template: "{{ states('sensor.pv_forecast_today_kwh')|float < 15 }}"
action:
- service: script.force_battery_charge_to_50_percentСезонная стратегия SOC
Стратегия эксплуатации аккумулятора должна адаптироваться к сезонной доступности солнечной энергии. Летом аккумулятор циклически разряжается почти до нуля и заряжается почти до полного — глубокие ежедневные циклы максимизируют собственное потребление, но требуют хорошей химии аккумулятора (LFP предпочтительнее NMC для долговечности при глубоких ежедневных циклах). Зимой, при меньшей генерации, аккумулятор может редко полностью заряжаться, поэтому его следует поддерживать на среднем уровне SOC для сохранения резервной емкости.
| Сезон | Целевой диапазон SOC | Стратегия | Триггер расписания KNX |
|---|---|---|---|
| Лето (апрель–сентябрь) | 20–95% | Deep daily cycling — max self-consumption. Allow EV + HP loads when SOC > 80%. | Переключение сезонного режима 1 апреля + 1 октября |
| Зима (октябрь–март) | 40–80% | Поддержание среднего SOC для резерва. Предзарядка до 80% перед утренним пиком. Без глубокого разряда. | Переключение режима 1 октября на зимнюю стратегию |
| Длительные пасмурные периоды | 60–80% | Приостановить глубокие циклы — предпочтительнее импорт из сети во внепиковое время, чем разряд батареи ниже 60%. | Automatic: if SOC < 60% at 09:00 for 3+ days |
| Heatwave (>35°C) | 20–80% | Снизить верхний предел для защиты температуры батареи (термическое снижение мощности BMS) | If GA 9/1/2 (battery temp) > 35°C |
Сезонное переключение режима по расписанию KNX
KNX time schedule (Gira X1 or MDT Logic Module timer):
April 1 — summer mode:
Write "summer" flag → GA 9/9/5 value 1
SOC shedding threshold: 20% (allow deep cycling)
EV enable threshold SOC: 40% (lower than winter)
Morning pre-charge: disabled (sufficient solar expected)
October 1 — winter mode:
Write "winter" flag → GA 9/9/5 value 0
SOC shedding threshold: 40% (protect from deep discharge)
EV enable threshold SOC: 60% (higher — conserve battery)
Morning pre-charge: enabled (low solar, pre-charge from grid)
IP-Symcon monthly schedule (runs on 1st of each month):
$month = date("n"); // PHP month number
if ($month >= 4 && $month <= 9) {
SetValue($seasonMode, "summer");
} else {
SetValue($seasonMode, "winter");
}KNX энергетический тариф GA: Tibber и Nordpool через HA
Для планирования работы батареи с учетом динамического тарифа текущая цена электроэнергии должна публиковаться в групповой адрес KNX, где логический модуль KNX может сравнивать ее с пороговыми значениями. Home Assistant или IP-Symcon считывает API тарифа и записывает цену в KNX GA при каждом часовом обновлении.
Автоматизация HA Tibber → KNX тариф GA
# HA configuration.yaml — Tibber integration
tibber:
access_token: !secret tibber_access_token
# sensor: current electricity price in EUR/kWh
sensor:
- platform: tibber
name: tibber_current_price
# automation: write current price to KNX GA every hour
automation:
- alias: "Tibber price → KNX tariff GA"
trigger:
- platform: time_pattern
minutes: "0" # Run at :00 of every hour
action:
- service: knx.send
data:
address: "9/9/1"
payload: >
{{ (states('sensor.tibber_current_price')|float * 1000)|int }}
# Scale: multiply by 1000 to get milli-EUR (DPT 9.002 compatible)
type: "2byte_float"
# KNX logic uses GA 9/9/1 value:
# < 100 (0.10 EUR/kWh): trigger off-peak battery charge
# > 300 (0.30 EUR/kWh): enable all self-consumption loads aggressively
# > 500 (0.50 EUR/kWh): emergency: maximise battery discharge, no grid importПусконаладка с реальными тестовыми сценариями SOC
Пусконаладка автоматизации SOC требует проверки каждого порогового диапазона путем инжекции имитированных значений SOC через ETS6 Group Monitor — без ожидания естественного циклического прохождения батареей каждого состояния. Проверьте каждый порог последовательно и убедитесь, что правильные действия KNX срабатывают и прекращаются при правильных значениях SOC, включая гистерезис.
Тестовые сценарии пусконаладки автоматизации SOC
Prerequisite: disconnect real battery SOC input to KNX
(remove Intesis IN701KNX poll for register 843 temporarily)
→ manually write SOC test values to GA 9/1/0 via ETS6
Test 1 — Normal operation (SOC 75%):
Write 75 to GA 9/1/0
Expected: no load shedding, self-consumption logic active
Verify: EV and SG Ready loads enabled (if surplus present)
Test 2 — Enter low SOC zone (SOC 18%):
Write 18 to GA 9/1/0
Expected: after 60s on-delay, soc_critical flag sets
Verify: GA 10/0/1 (EV enable) → 0 (EV disabled)
SG Ready relays → State 2 (both contacts open)
Test 3 — Hysteresis: recovery insufficient (SOC 22%):
Write 22 to GA 9/1/0 (above 20% threshold but below 25% recovery)
Expected: soc_critical flag remains set (hysteresis holds)
Verify: loads remain disabled — confirm hysteresis working
Test 4 — Hysteresis: recovery sufficient (SOC 27%):
Write 27 to GA 9/1/0 (above 25% recovery threshold)
Expected: soc_critical flag clears after 60s
Verify: loads re-enable (if surplus still present)
Test 5 — Emergency zone (SOC 8%):
Write 8 to GA 9/1/0
Expected: HVAC setback scene activates (HVAC −2°C)
Alarm GA 9/9/0 → 1 (alert fires in Gira X1)
Verify in HVAC setpoint display: temperature reduced by 2°C
Test 6 — Off-peak charging trigger:
Write 35 to GA 9/1/0 (SOC 35% — below 40% threshold)
Set time to 01:05 (test time via IP-Symcon or HA test trigger)
Write 8 to GA 9/9/1 (price 0.008 EUR/kWh — very cheap)
Expected: forced battery charge mode activates
Verify: MultiPlus/GEN24 starts charging from gridВосстановление подключения живого SOC после тестирования
После завершения имитированных тестов SOC снова включите опрос Intesis для регистра SOC батареи. Убедитесь, что значение живого SOC соответствует показаниям BMS батареи. Подтвердите правильность переключения логики с живыми данными SOC перед сдачей системы.
Проверка сезонного режима
Проверьте сезонное переключение режима, временно записав флаги лета и зимы в GA 9/9/5. Убедитесь, что пороги SOC изменились как ожидалось: летний порог включения EV (40% SOC) должен быть ниже зимнего порога (60% SOC). После тестирования восстановите правильный сезонный режим.
Нужна автоматизация KNX на основе SOC для управления энергопотреблением?
Мы проектируем и настраиваем автоматизацию по порогам SOC, графики зарядки вне пиковых часов, логику сезонных стратегий и интеграцию тарифов Tibber/Nordpool для зданий с KNX и аккумуляторными системами — полностью протестировано и задокументировано.
Запросить расчёт →