Reakcja na zapotrzebowanie · Tibber · Nordpool · Taryfa dynamiczna · KNX · 10 min czytania

Integracja taryf dynamicznych Tibber i Nordpool z KNX

Połączenie rzeczywistych cen energii elektrycznej Tibber i Nordpool z KNX umożliwia warstwie automatyki budynkowej automatyczne przesuwanie elastycznych odbiorów – pompy ciepła, ładowarki EV, zmywarki, ładowania akumulatorów – w tanie okna cenowe, obniżając koszty energii bez utraty komfortu mieszkańców.

Tibber API: Endpoint GraphQL i zapytanie o cenę

Tibber udostępnia bieżące i prognozowane ceny energii elektrycznej przez interfejs GraphQL pod adresem https://api.tibber.com/v1-beta/gql. Uwierzytelnianie odbywa się za pomocą tokena Bearer wydanego przez portal dewelopera Tibber (developer.tibber.com). Token jest specyficzny dla konta i nie wygasa, chyba że zostanie unieważniony.

Najbardziej przydatne zapytanie do integracji z KNX pobiera bieżącą cenę za godzinę oraz klasyfikację CHEAP/NORMAL/EXPENSIVE, którą Tibber oblicza na podstawie rozkładu cen spot w ciągu najbliższych 24 godzin. Ta klasyfikacja jest gotowa do bezpośredniego mapowania na adres grupowy poziomu taryfy KNX bez dodatkowego obliczania progów.

Zapytanie GraphQL Tibber – bieżąca cena i poziom

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

Pole total podaje cenę całkowitą w lokalnej walucie za kWh, w tym opłaty sieciowe, podatki i marżę Tibber. Pole level to klasyfikacja do wykorzystania w logice KNX – eliminuje potrzebę ręcznej kalibracji progów dla każdego regionu. Częstotliwość odpytywania: wystarczy raz na godzinę, ponieważ cena zmienia się z godziny na godzinę. Dodaj 2-minutowe opóźnienie po pełnej godzinie (zapytanie o HH:02), aby upewnić się, że Tibber opublikował nową cenę, zanim system KNX ją odczyta.

Mostek Python na Raspberry Pi: odpytywanie i zapis do KNX

Skrypt Python działający na Raspberry Pi (dowolny model z Ethernetem) działa jako mostek między API Tibber a magistralą KNX. Skrypt używa biblioteki knxpy do wysyłania telegramów grupowych przez interfejs IP KNX (np. MDT SCN-IP100.02 lub Weinzierl KNX IP Interface 731) lub przez demona knxd na tym samym Pi podłączonego do interfejsu USB KNX.

Mostek Python – Tibber do 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 (liczba bez znaku, 8-bitowy licznik) koduje poziom taryfy jako zwykłą liczbę całkowitą: 1 dla TANIO, 2 dla NORMALNIE, 3 dla DROGO. Odwzorowuje się to bezpośrednio na wejścia komparatorów bloków logicznych KNX bez skalowania. Uruchom skrypt jako usługę systemd, aby zapewnić jego ponowne uruchomienie po restarcie Pi.

Bloki logiczne KNX: sterowanie obciążeniem na podstawie poziomu taryfy

Kontroler logiczny MDT SCN-LCRM.01 odbiera poziom taryfy DPT 5.010 na adresie grupowym KNX i wykorzystuje bloki komparatorów do wyprowadzenia binarnych sygnałów sterujących dla każdego obciążenia. Trzy komparatory porównują odebrany bajt z progami 1, 2 i 3, generując telegramy załącz/wyłącz dla skonfigurowanych adresów grupowych.

Poziom taryfyAkcjaAdres grupowyDPT / Wartość
1 (TANIO)Włącz gniazdo zmywarki / pralki3/1/1DPT 1.001 / WŁ.
1 (TANIO)SG Ready Stan 3 — PC podwyższa nastawę3/1/2 + 3/1/3DPT 1.001 / WYŁ. + WŁ.
1 (TANIO)Wymuszone ładowanie baterii przez zapis Modbus3/1/4DPT 1.001 / WŁ.
2 (NORMALNY)Wszystkie obciążenia opcjonalne praca normalnaBez zmian
3 (DROGI)Wyłącz gniazdo zmywarki / pralki3/1/1DPT 1.001 / WYŁ.
3 (DROGI)Ładowanie EV w szopie (zapisz 0A do GA ładowarki)5/3/1DPT 5.010 / 0
3 (DROGI)Wymuszone rozładowanie baterii3/1/4DPT 1.001 / WYŁ.

Okablowanie stanu SG Ready 3: Logika MDT wysyła jednocześnie DPT 1.001 WYŁ. do przekaźnika S1 GA i DPT 1.001 WŁ. do przekaźnika S2 GA. Aktor przekaźnikowy MDT AKD-0800.01 konwertuje te telegramy KNX na zamknięcie styku przekaźnika 230V na zaciskach SG Ready pompy ciepła. Stan 3 zazwyczaj podnosi temperaturę zadaną CWU o 3-5K i temperaturę zadaną ogrzewania pomieszczeń o 2K.

Integracja cen spot Nordpool: harmonogram dnia następnego

Nordpool publikuje ceny spot dnia następnego codziennie około 13:00 CET na kolejne 24 godziny. W przeciwieństwie do Tibber (który wymaga subskrypcji i inteligentnego licznika), ceny Nordpool są dostępne przez publiczne API Nordpool bez uwierzytelniania dla większości stref ofertowych lub przez API platformy przejrzystości ENTSO-E (wymagana bezpłatna rejestracja na transparency.entsoe.eu).

Skrypt ceny dnia następnego Nordpool – harmonogram KNX na następny dzień

# 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.

Wizualizacja ceny na panelu dotykowym KNX i zwrot kosztów

Bieżący poziom taryfy jest wyświetlany na panelu dotykowym KNX (Gira X1 lub MDT Glastaster II) jako kolorowy wskaźnik: zielone tło dla TANIEJ (poziom 1), bursztynowe dla NORMALNEJ (poziom 2), czerwone dla DROGIEJ (poziom 3). Obiekt sceny KNX powiązany z GA poziomu taryfy (5/0/1) zmienia kolor tła panelu poprzez zapis sceny. Panel pokazuje również bieżącą cenę spot jako wartość DPT 9.002 w EUR/kWh pochodzącą z pola total API Tibber, umożliwiając mieszkańcom podejmowanie ręcznych decyzji dotyczących elastycznych obciążeń.

Obliczenie zwrotu kosztów dla rynków nordyckich: Pompa ciepła zużywająca 10 kWh/dzień na ogrzewanie pomieszczeń przeniesiona z drogich na tanie godziny (różnica cen typowo 0,05-0,15 EUR/kWh w SE3/FI) oszczędza 0,50-1,50 EUR/dzień, czyli 180-550 EUR/rok. Raspberry Pi, interfejs KNX IP i kontroler logiczny MDT kosztują łącznie około 300-500 EUR za sprzęt – zwrot w ciągu 1-2 lat. Na rynkach z dużą różnicą, takich jak Dania (DK1/DK2) i Niemcy (DE-LU) z różnicami przekraczającymi 0,20 EUR/kWh, zwrot może nastąpić w ciągu 12 miesięcy.

Wybór API Tibber vs Nordpool

Użyj Tibber, gdy budynek ma już umowę na energię z Tibber – klasyfikacja CHEAP/NORMAL/EXPENSIVE jest wstępnie obliczona i uwzględnia opłaty sieciowe. Użyj Nordpool, gdy budynek ma innego dostawcę, ale chce śledzić ceny spot – wymaga ręcznej klasyfikacji progów według powyższej metody percentylowej.

ENTSO-E jako alternatywa dla Nordpool

API platformy przejrzystości ENTSO-E (transparency.entsoe.eu/api) udostępnia ceny dnia następnego dla wszystkich europejskich stref ofertowych. Zarejestruj się, aby uzyskać darmowy token API. Zapytaj punkt końcowy cen dnia następnego (documentType=A44, in_Domain i out_Domain z kodami obszarów EIC). Przydatne dla krajów spoza zasięgu Nordpool, takich jak Hiszpania, Włochy i Polska.

Potrzebujesz szafy KNX z integracją dynamicznych taryf i logiką HEMS wykonaną według specyfikacji?

Projektujemy szafy niskiego napięcia z mostkami API Tibber/Nordpool, programowaniem sterownika logicznego MDT, wyjściami przekaźnikowymi SG Ready oraz pełną dokumentacją uruchomieniową – dostarczane przetestowane na miejsce.

Poproś o wycenę →
Ładowanie...
Powrót do góry