SOC аккумулятора · KNX-автоматика · Отключение нагрузок · Управление тарифами · 10 мин чтения

Автоматизация KNX по SOC аккумулятора: отключение нагрузок, ночная зарядка и управление тарифами

Уровень заряда батареи (SOC) — ключевая переменная для KNX-энергоавтоматики: он определяет, когда подключать дополнительные нагрузки, когда отключать их для защиты батареи, когда запускать ночную зарядку по дешёвому тарифу и как адаптировать стратегию между летним и зимним режимами. Грамотно настроенный слой автоматизации на основе SOC может снизить расходы на покупку электроэнергии из сети на 40–70% по сравнению с простым самопотреблением.

Таблица порогов SOC с гистерезисом

Таблица порогов SOC определяет дискретные рабочие зоны, каждая из которых запускает определённый набор KNX-команд. Гистерезис — запас восстановления выше порога — предотвращает частые переключения, когда SOC колеблется около границы зоны из-за изменений нагрузки или шума измерений.

Зона SOCРазрешённые KNX-действияВосстановление гистерезиса
> 90% AND exportingSG 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 mode

Nordpool против 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 групповой адрес тарифа на энергию: Tibber и Nordpool через HA

Для планирования работы батареи с учётом динамического тарифа текущая цена электроэнергии должна публиковаться в групповой адрес KNX, где логический модуль KNX может сравнивать её с пороговыми значениями. Home Assistant или IP-Symcon считывают тариф через API и записывают цену в групповой адрес KNX при каждом часовом обновлении.

Автоматизация HA Tibber → KNX групповой адрес тарифа

# 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 через Group Monitor ETS6 — без ожидания естественного циклического изменения состояния батареи. Проверьте каждый порог последовательно и убедитесь, что правильные действия 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-зданий с аккумуляторами — с полным тестированием и документацией.

Запросить расчёт →
Загрузка ...
Наверх