Risposta alla domanda · Tibber · Nordpool · Tariffa dinamica · KNX · 10 min di lettura

Integrazione tariffa dinamica Tibber e Nordpool con KNX

Collegare i prezzi dell'elettricità in tempo reale di Tibber e Nordpool a KNX consente al livello di automazione dell'edificio di spostare automaticamente i carichi flessibili — pompa di calore, caricabatterie EV, lavastoviglie, ricarica della batteria — in finestre di prezzo convenienti, riducendo i costi dell'elettricità senza sacrificare il comfort degli occupanti.

API Tibber: endpoint GraphQL e query del prezzo

Tibber fornisce prezzi dell'elettricità in tempo reale e previsti tramite un'API GraphQL all'endpoint https://api.tibber.com/v1-beta/gql. L'autenticazione utilizza un token Bearer rilasciato dal portale sviluppatori Tibber (developer.tibber.com). Il token è specifico per l'account e non scade a meno che non venga revocato.

La query più utile per l'integrazione KNX recupera il prezzo dell'ora corrente e la classificazione CHEAP/NORMAL/EXPENSIVE che Tibber calcola in base alla distribuzione del prezzo spot nelle successive 24 ore. Questa classificazione è pronta per il mapping diretto a un indirizzo di gruppo del livello tariffario KNX senza calcolo aggiuntivo della soglia.

Query GraphQL Tibber — prezzo e livello correnti

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

Il campo total fornisce il prezzo tutto incluso nella valuta locale per kWh, inclusi oneri di rete, tasse e margine Tibber. Il campo level è la classificazione da utilizzare per la logica KNX — elimina la necessità di calibrazione manuale delle soglie per regione. Frequenza di polling: una volta all'ora è sufficiente poiché il prezzo cambia ogni ora. Aggiungere un ritardo di 2 minuti dopo l'ora (query alle HH:02) per garantire che Tibber abbia pubblicato il nuovo prezzo prima che il sistema KNX lo legga.

Bridge Python su Raspberry Pi: polling e scrittura KNX

Uno script Python in esecuzione su un Raspberry Pi (qualsiasi modello con Ethernet) funge da bridge tra l'API Tibber e il bus KNX. Lo script utilizza la libreria knxpy per scrivere telegrammi di gruppo tramite un'interfaccia IP KNX (ad es. MDT SCN-IP100.02 o Weinzierl KNX IP Interface 731) o tramite un demone knxd sullo stesso Pi collegato a un'interfaccia USB KNX.

Bridge Python — Tibber a 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)

Il DPT 5.010 (byte senza segno, conteggio a 8 bit) codifica il livello tariffario come un intero semplice: 1 per ECONOMICO, 2 per NORMALE, 3 per COSTOSO. Questo si mappa direttamente sugli ingressi dei comparatori dei blocchi logici KNX senza scaling. Esegui lo script come servizio systemd per assicurarti che riparta al riavvio del Pi.

Blocchi logici KNX: controllo dei carichi in base al livello tariffario

Il controllore logico MDT SCN-LCRM.01 riceve il livello tariffario DPT 5.010 su un GA KNX e utilizza blocchi comparatori per derivare segnali di controllo binari per ogni carico. Tre comparatori confrontano il byte ricevuto con le soglie 1, 2 e 3, generando telegrammi di abilitazione/disabilitazione per gli indirizzi di gruppo configurati.

Livello tariffarioAzioneIndirizzo di gruppoDPT / Valore
1 (ECONOMICO)Abilita presa lavastoviglie / lavatrice3/1/1DPT 1.001 / ON
1 (ECONOMICO)SG Ready Stato 3 — PdC aumenta setpoint3/1/2 + 3/1/3DPT 1.001 / OFF + ON
1 (ECONOMICO)Carica forzata batteria tramite scrittura Modbus3/1/4DPT 1.001 / ON
2 (NORMALE)Tutti i carichi opzionali funzionamento normaleNessuna modifica
3 (COSTOSO)Disabilita presa lavastoviglie / lavatrice3/1/1DPT 1.001 / OFF
3 (COSTOSO)Ricarica EV nel capanno (scrivi 0A al GA del caricabatterie)5/3/1DPT 5.010 / 0
3 (COSTOSO)Scarica forzata della batteria3/1/4DPT 1.001 / OFF

Cablaggio stato SG Ready 3: La logica MDT invia simultaneamente DPT 1.001 OFF al relè S1 GA e DPT 1.001 ON al relè S2 GA. L'attuatore relè MDT AKD-0800.01 converte questi telegrammi KNX in chiusura del contatto relè 230V sui terminali SG Ready della pompa di calore. Lo stato 3 aumenta tipicamente il setpoint ACS di 3-5K e il setpoint del riscaldamento ambiente di 2K.

Integrazione dei prezzi spot Nordpool: programmazione day-ahead

Nordpool pubblica i prezzi spot day-ahead intorno alle 13:00 CET ogni giorno per le successive 24 ore. A differenza di Tibber (che richiede un abbonamento e un contatore intelligente), i prezzi Nordpool sono disponibili tramite l'API pubblica Nordpool senza autenticazione per la maggior parte delle zone di offerta, o tramite l'API della piattaforma di trasparenza ENTSO-E (richiede registrazione gratuita su transparency.entsoe.eu).

Script prezzo day-ahead Nordpool — programmazione KNX del giorno successivo

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

Visualizzazione del prezzo su pannello touch KNX e ritorno dell'investimento

Il livello tariffario corrente viene visualizzato su un pannello touch KNX (Gira X1 o MDT Glastaster II) come indicatore colorato: sfondo verde per ECONOMICO (livello 1), ambra per NORMALE (livello 2), rosso per CARO (livello 3). Un oggetto scena KNX collegato al GA del livello tariffario (5/0/1) cambia il colore di sfondo del pannello tramite una scrittura di scena. Il pannello mostra anche il prezzo spot corrente come valore DPT 9.002 in EUR/kWh derivato dal campo total dell'API Tibber, consentendo agli occupanti di prendere decisioni manuali sui carichi flessibili.

Calcolo del ritorno dell'investimento per i mercati nordici: una pompa di calore che consuma 10 kWh/giorno per il riscaldamento ambientale spostata dalle ore care a quelle economiche (differenziale di prezzo tipicamente 0,05-0,15 EUR/kWh in SE3/FI) risparmia 0,50-1,50 EUR/giorno, ovvero 180-550 EUR/anno. Il Raspberry Pi, l'interfaccia KNX IP e il controller logico MDT totalizzano circa 300-500 EUR di hardware — ritorno in 1-2 anni. Nei mercati ad alto differenziale come Danimarca (DK1/DK2) e Germania (DE-LU) con differenziali superiori a 0,20 EUR/kWh, il ritorno può essere inferiore a 12 mesi.

Scelta API Tibber vs Nordpool

Utilizzare Tibber quando l'edificio ha già un contratto elettrico Tibber – la classificazione CHEAP/NORMAL/EXPENSIVE è pre-calcolata e include i costi di rete. Utilizzare Nordpool quando l'edificio ha un fornitore diverso ma vuole seguire il prezzo spot – richiede una classificazione manuale delle soglie secondo il metodo percentile sopra descritto.

ENTSO-E come alternativa a Nordpool

L'API della piattaforma di trasparenza ENTSO-E (transparency.entsoe.eu/api) fornisce i prezzi day-ahead per tutte le zone di offerta europee. Registrarsi per ottenere un token API gratuito. Interrogare l'endpoint dei prezzi day-ahead (documentType=A44, in_Domain e out_Domain con i codici area EIC). Utile per paesi al di fuori della copertura Nordpool come Spagna, Italia e Polonia.

Hai bisogno di un quadro KNX con integrazione tariffaria dinamica e logica HEMS costruito su specifica?

Progettiamo quadri a bassa tensione con ponti API Tibber/Nordpool, programmazione del controllore logico MDT, uscite relè SG Ready e documentazione completa di messa in servizio — consegnati testati presso il tuo sito.

Richiedi un preventivo →
Caricamento in corso ...
Torna all'inizio