Управление спросом · Tibber · Nordpool · Динамический тариф · KNX · 10 мин чтения

Интеграция динамических тарифов Tibber и Nordpool с KNX

Подключение реальных цен на электроэнергию Tibber и Nordpool к KNX позволяет уровню автоматизации здания автоматически смещать гибкие нагрузки — тепловой насос, зарядное устройство для электромобиля, посудомоечную машину, зарядку аккумулятора — в дешёвые временные окна, снижая затраты на электроэнергию без ущерба для комфорта.

Tibber API: конечная точка GraphQL и запрос цен

Tibber предоставляет реальные и прогнозные цены на электроэнергию через GraphQL API по адресу https://api.tibber.com/v1-beta/gql. Аутентификация использует Bearer-токен, полученный из портала разработчика Tibber (developer.tibber.com). Токен привязан к учётной записи и не истекает, если не отозван.

Наиболее полезный запрос для интеграции с KNX получает цену текущего часа и классификацию CHEAP/NORMAL/EXPENSIVE, которую Tibber рассчитывает на основе распределения спотовых цен за следующие 24 часа. Эта классификация готова к прямому отображению на групповой адрес уровня тарифа KNX без дополнительного расчёта порогов.

Запрос GraphQL Tibber — текущая цена и уровень

POST https://api.tibber.com/v1-beta/gql
Authorization: Bearer <your-tibber-token>
Content-Type: application/json

{
  "query": "{ viewer { homes { currentSubscription { priceInfo { current { total level } } } } } }"
}

Response:
{
  "data": {
    "viewer": {
      "homes": [{
        "currentSubscription": {
          "priceInfo": {
            "current": {
              "total": 0.1842,
              "level": "CHEAP"
            }
          }
        }
      }]
    }
  }
}

Possible level values: VERY_CHEAP, CHEAP, NORMAL, EXPENSIVE, VERY_EXPENSIVE

Поле total даёт полную цену в местной валюте за кВт·ч, включая сетевые сборы, налоги и наценку Tibber. Поле level — это классификация для использования в логике KNX — она устраняет необходимость ручной калибровки порогов для каждого региона. Частота опроса: достаточно одного раза в час, так как цена меняется каждый час. Добавьте задержку в 2 минуты после часа (запрос в HH:02), чтобы Tibber успел опубликовать новую цену до того, как система KNX её прочитает.

Python-мост на Raspberry Pi: опрос и запись в KNX

Скрипт Python, работающий на Raspberry Pi (любая модель с Ethernet), выступает в качестве моста между API Tibber и шиной KNX. Скрипт использует библиотеку knxpy для отправки групповых телеграмм через KNX IP-интерфейс (например, MDT SCN-IP100.02 или Weinzierl KNX IP Interface 731) или через демон knxd на том же Pi, подключённый к KNX USB-интерфейсу.

Python-мост — Tibber в KNX DPT 5.010

#!/usr/bin/env python3
import requests, time, schedule
import knxpy

TIBBER_TOKEN = "your-tibber-token"
KNX_IP = "192.168.1.50"   # KNX IP Interface address
TARIFF_GA = "5/0/1"       # DPT 5.010 — tariff level GA

LEVEL_MAP = {
    "VERY_CHEAP":  1,
    "CHEAP":       1,
    "NORMAL":      2,
    "EXPENSIVE":   3,
    "VERY_EXPENSIVE": 3,
}

def get_tibber_level():
    query = '{"query":"{ viewer { homes { currentSubscription { priceInfo { current { level } } } } } }"}'
    r = requests.post(
        "https://api.tibber.com/v1-beta/gql",
        headers={"Authorization": f"Bearer {TIBBER_TOKEN}", "Content-Type": "application/json"},
        data=query, timeout=10
    )
    level = r.json()["data"]["viewer"]["homes"][0]["currentSubscription"]["priceInfo"]["current"]["level"]
    return LEVEL_MAP.get(level, 2)

def update_knx_tariff():
    level = get_tibber_level()
    knx = knxpy.KNXIPTunnel(KNX_IP, 3671)
    knx.connect()
    knx.group_write(TARIFF_GA, [level], dpt="DPT_Value_1_Ucount")
    knx.close()
    print(f"KNX tariff level written: {level}")

schedule.every().hour.at(":02").do(update_knx_tariff)
update_knx_tariff()  # run on startup
while True:
    schedule.run_pending()
    time.sleep(30)

DPT 5.010 (беззнаковый байт, 8-битный счётчик) кодирует уровень тарифа как целое число: 1 для CHEAP, 2 для NORMAL, 3 для EXPENSIVE. Это напрямую отображается на входы компараторов логических блоков KNX без масштабирования. Запустите скрипт как службу systemd, чтобы он перезапускался при перезагрузке Pi.

Логические блоки KNX: управление нагрузкой на основе уровня тарифа

Логический контроллер MDT SCN-LCRM.01 получает уровень тарифа DPT 5.010 через групповой адрес KNX и использует блоки компараторов для получения двоичных сигналов управления для каждой нагрузки. Три компаратора сравнивают полученный байт с порогами 1, 2 и 3, генерируя телеграммы включения/отключения для настроенных групповых адресов.

Уровень тарифаДействиеГрупповой адресDPT / Значение
1 (ДЕШЕВО)Включить розетку посудомоечной/стиральной машины3/1/1DPT 1.001 / ВКЛ
1 (ДЕШЕВО)SG Ready Состояние 3 — ТН увеличивает уставку3/1/2 + 3/1/3DPT 1.001 / ВЫКЛ + ВКЛ
1 (ДЕШЕВО)Принудительный заряд батареи через Modbus запись3/1/4DPT 1.001 / ВКЛ
2 (НОРМАЛЬНО)Нормальная работа всех опциональных нагрузокБез изменений
3 (ДОРОГО)Отключить розетку посудомоечной/стиральной машины3/1/1DPT 1.001 / ВЫКЛ
3 (ДОРОГО)Снизить зарядку ЭМ (запись 0A в GA зарядного устройства)5/3/1DPT 5.010 / 0
3 (ДОРОГО)Принудительный разряд батареи3/1/4DPT 1.001 / ВЫКЛ

Подключение SG Ready Состояние 3: логика MDT отправляет DPT 1.001 ВЫКЛ на реле S1 GA и DPT 1.001 ВКЛ на реле S2 GA одновременно. Привод реле MDT AKD-0800.01 преобразует эти KNX-телеграммы в замыкание контактов реле 230В на клеммах SG Ready теплового насоса. Состояние 3 обычно повышает уставку ГВС на 3-5К и уставку отопления на 2К.

Интеграция спотовых цен Nordpool: график на сутки вперед

Nordpool публикует спотовые цены на сутки вперед примерно в 13:00 CET каждый день на следующие 24 часа. В отличие от Tibber (требующего подписки и умного счетчика), цены Nordpool доступны через публичный API Nordpool без аутентификации для большинства ценовых зон или через API платформы ENTSO-E Transparency (требуется бесплатная регистрация на transparency.entsoe.eu).

Скрипт цен Nordpool на сутки вперед — KNX расписание на следующий день

# Runs at 13:30 daily — downloads next-day prices and creates KNX schedule
import requests, json
from datetime import date, timedelta

BIDDING_ZONE = "SE3"   # Sweden zone 3 — change per country
CURRENCY = "SEK"

def fetch_nordpool_prices():
    tomorrow = (date.today() + timedelta(days=1)).strftime("%Y-%m-%d")
    url = f"https://dataportal-api.nordpoolgroup.com/api/DayAheadPrices?market=N2EX_DayAhead&deliveryArea={BIDDING_ZONE}&currency={CURRENCY}&date={tomorrow}"
    r = requests.get(url, timeout=15)
    return r.json()["multiAreaEntries"]

def classify_price(price_eur, prices_list):
    sorted_prices = sorted(prices_list)
    p33 = sorted_prices[len(sorted_prices) // 3]
    p66 = sorted_prices[2 * len(sorted_prices) // 3]
    if price_eur <= p33:
        return 1  # CHEAP
    elif price_eur <= p66:
        return 2  # NORMAL
    else:
        return 3  # EXPENSIVE

# Output: list of 24 (hour, level) tuples written to KNX time-scheduled GA
# Use MDT SCN-LCRM.01 weekly timer or Home Assistant KNX time schedule

The classification thresholds (33rd and 66th percentile of tomorrow's 24 prices) ensure that approximately 8 hours are classified as CHEAP, 8 as NORMAL, and 8 as EXPENSIVE each day — balanced regardless of absolute price level. This is preferable to fixed EUR/kWh thresholds that may become stale as energy markets evolve. The resulting 24-entry schedule is written to a KNX time program on the MDT logic controller, replacing the current-hour Tibber poll for installations without a Tibber contract.

Визуализация цен на сенсорной панели KNX и окупаемость

Текущий уровень тарифа отображается на сенсорной панели KNX (Gira X1 или MDT Glastaster II) в виде цветового индикатора: зеленый фон для ДЕШЕВОГО (уровень 1), янтарный для НОРМАЛЬНОГО (уровень 2), красный для ДОРОГОГО (уровень 3). Объект сцены KNX, связанный с групповым адресом тарифа (5/0/1), изменяет цвет фона панели через запись сцены. Панель также отображает текущую спотовую цену как значение DPT 9.002 в EUR/кВт·ч, полученное из поля total API Tibber, что позволяет пользователям вручную принимать решения о гибких нагрузках.

Расчет окупаемости для скандинавских рынков: тепловой насос, потребляющий 10 кВт·ч/день для отопления, переключенный с дорогих на дешевые часы (спред цен обычно 0,05-0,15 EUR/кВт·ч в SE3/FI), экономит 0,50-1,50 EUR/день, или 180-550 EUR/год. Raspberry Pi, KNX IP Interface и логический контроллер MDT в сумме составляют примерно 300-500 EUR за оборудование — окупаемость за 1-2 года. На рынках с высоким спредом, таких как Дания (DK1/DK2) и Германия (DE-LU), где спред превышает 0,20 EUR/кВт·ч, окупаемость может быть менее 12 месяцев.

Выбор между Tibber и Nordpool API

Используйте Tibber, если в здании уже есть контракт на электроэнергию с Tibber — классификация ДЕШЕВЫЙ/НОРМАЛЬНЫЙ/ДОРОГОЙ предварительно рассчитана и включает компоненты сетевого тарифа. Используйте Nordpool, если у здания другой поставщик, но требуется следование спотовым ценам — требуется ручная классификация порогов по описанному выше перцентильному методу.

ENTSO-E как альтернатива Nordpool

API платформы прозрачности ENTSO-E (transparency.entsoe.eu/api) предоставляет цены на сутки вперед для всех европейских ценовых зон. Зарегистрируйтесь для получения бесплатного API-токена. Запросите конечную точку Day Ahead Prices (documentType=A44, in_Domain и out_Domain с использованием кодов зон EIC). Полезно для стран за пределами покрытия Nordpool, таких как Испания, Италия и Польша.

Нужна панель KNX с интеграцией динамического тарифа и логикой HEMS, спроектированная под ваши требования?

Мы проектируем низковольтные щиты с мостами API Tibber/Nordpool, программированием логического контроллера MDT, релейными выходами SG Ready и полной документацией по вводу в эксплуатацию — поставляем протестированными на ваш объект.

Запросить предложение →
Загрузка ...
Наверх