Respuesta a la demanda · Tibber · Nordpool · Tarifa dinámica · KNX · 10 min de lectura

Integración de tarifa dinámica Tibber y Nordpool con KNX

Conectar los precios de electricidad en tiempo real de Tibber y Nordpool a KNX permite que la capa de automatización del edificio desplace automáticamente las cargas flexibles — bomba de calor, cargador de VE, lavavajillas, carga de batería — hacia ventanas de precio barato, reduciendo los costos de electricidad sin sacrificar la comodidad de los ocupantes.

API de Tibber: endpoint GraphQL y consulta de precio

Tibber proporciona precios de electricidad en tiempo real y pronosticados a través de una API GraphQL en el endpoint https://api.tibber.com/v1-beta/gql. La autenticación utiliza un token Bearer emitido desde el portal de desarrolladores de Tibber (developer.tibber.com). El token es específico de la cuenta y no caduca a menos que sea revocado.

La consulta más útil para la integración KNX recupera el precio de la hora actual y la clasificación CHEAP/NORMAL/EXPENSIVE que Tibber calcula basándose en la distribución del precio spot durante las próximas 24 horas. Esta clasificación está lista para el mapeo directo a una dirección de grupo de nivel tarifario KNX sin necesidad de cálculo adicional de umbrales.

Consulta GraphQL de Tibber — precio y nivel actuales

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

El campo total proporciona el precio total en moneda local por kWh, incluyendo cargos de red, impuestos y margen de Tibber. El campo level es la clasificación a utilizar para la lógica KNX — elimina la necesidad de calibración manual de umbrales por región. Frecuencia de sondeo: una vez por hora es suficiente ya que el precio cambia cada hora. Añada un retardo de 2 minutos después de la hora (consulta a HH:02) para asegurar que Tibber haya publicado el nuevo precio antes de que el sistema KNX lo lea.

Puente Python en Raspberry Pi: sondeo y escritura KNX

Un script Python ejecutándose en una Raspberry Pi (cualquier modelo con Ethernet) actúa como puente entre la API de Tibber y el bus KNX. El script utiliza la biblioteca knxpy para escribir telegramas de grupo a través de una interfaz IP KNX (por ejemplo, MDT SCN-IP100.02 o Weinzierl KNX IP Interface 731) o a través de un demonio knxd en la misma Pi conectada a una interfaz USB KNX.

Puente 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)

El DPT 5.010 (byte sin signo, contador de 8 bits) codifica el nivel de tarifa como un entero simple: 1 para BARATO, 2 para NORMAL, 3 para CARO. Esto se mapea limpiamente a las entradas de los comparadores de bloques lógicos KNX sin escalado. Ejecute el script como un servicio systemd para asegurar que se reinicie al reiniciar la Pi.

Bloques lógicos KNX: control de carga basado en el nivel de tarifa

El controlador lógico MDT SCN-LCRM.01 recibe el nivel de tarifa DPT 5.010 en una GA KNX y utiliza bloques comparadores para derivar señales de control binarias para cada carga. Tres comparadores comparan el byte recibido con los umbrales 1, 2 y 3, generando telegramas de habilitación/deshabilitación para las direcciones de grupo configuradas.

Nivel de tarifaAcciónDirección de grupoDPT / Valor
1 (BARATO)Habilitar toma de lavavajillas / lavadora3/1/1DPT 1.001 / ON
1 (BARATO)SG Ready Estado 3 — BC aumenta consigna3/1/2 + 3/1/3DPT 1.001 / OFF + ON
1 (BARATO)Carga forzada de batería mediante escritura Modbus3/1/4DPT 1.001 / ON
2 (NORMAL)Todas las cargas opcionales funcionamiento normalSin cambios
3 (CARO)Deshabilitar enchufe de lavavajillas / lavadora3/1/1DPT 1.001 / OFF
3 (CARO)Carga VE en el cobertizo (escribir 0A en el GA del cargador)5/3/1DPT 5.010 / 0
3 (CARO)Descarga forzada de la batería3/1/4DPT 1.001 / OFF

Cableado del estado SG Ready 3: La lógica MDT envía simultáneamente DPT 1.001 OFF al relé S1 GA y DPT 1.001 ON al relé S2 GA. El actuador de relé MDT AKD-0800.01 convierte estos telegramas KNX en cierre de contacto de relé de 230V en los terminales SG Ready de la bomba de calor. El estado 3 típicamente aumenta el setpoint de ACS en 3-5K y el setpoint de calefacción ambiente en 2K.

Integración de precios spot Nordpool: programación day-ahead

Nordpool publica los precios spot day-ahead aproximadamente a las 13:00 CET cada día para las siguientes 24 horas. A diferencia de Tibber (que requiere una suscripción y un contador inteligente), los precios de Nordpool están disponibles a través de la API pública de Nordpool sin autenticación para la mayoría de las zonas de oferta, o a través de la API de la Plataforma de Transparencia ENTSO-E (requiere registro gratuito en transparency.entsoe.eu).

Script de precio day-ahead Nordpool — programación KNX del día siguiente

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

Visualización de precios en pantalla táctil KNX y retorno de inversión

El nivel tarifario actual se muestra en una pantalla táctil KNX (Gira X1 o MDT Glastaster II) como un indicador codificado por colores: fondo verde para BARATO (nivel 1), ámbar para NORMAL (nivel 2), rojo para CARO (nivel 3). Un objeto de escena KNX vinculado a la GA del nivel tarifario (5/0/1) cambia el color de fondo de la pantalla mediante una escritura de escena. La pantalla también muestra el precio spot actual como un valor DPT 9.002 en EUR/kWh derivado del campo total de la API de Tibber, permitiendo a los ocupantes tomar decisiones manuales sobre cargas flexibles.

Cálculo del retorno de inversión para mercados nórdicos: una bomba de calor que consume 10 kWh/día para calefacción de espacios desplazada de horas caras a horas baratas (diferencial de precio típicamente 0,05-0,15 EUR/kWh en SE3/FI) ahorra 0,50-1,50 EUR/día, o 180-550 EUR/año. El Raspberry Pi, la interfaz KNX IP y el controlador lógico MDT suman aproximadamente 300-500 EUR en hardware — retorno en 1-2 años. En mercados de alto diferencial como Dinamarca (DK1/DK2) y Alemania (DE-LU) con diferenciales superiores a 0,20 EUR/kWh, el retorno puede ser inferior a 12 meses.

Elección API Tibber vs Nordpool

Use Tibber cuando el edificio ya tenga un contrato de electricidad con Tibber – la clasificación CHEAP/NORMAL/EXPENSIVE está precalculada e incluye los cargos de red. Use Nordpool cuando el edificio tenga un proveedor diferente pero quiera seguir el precio spot – requiere clasificación manual de umbrales según el método de percentiles anterior.

ENTSO-E como alternativa a Nordpool

La API de la plataforma de transparencia ENTSO-E (transparency.entsoe.eu/api) proporciona precios day-ahead para todas las zonas de oferta europeas. Regístrese para obtener un token API gratuito. Consulte el endpoint de precios day-ahead (documentType=A44, in_Domain y out_Domain con códigos de área EIC). Útil para países fuera de la cobertura de Nordpool como España, Italia y Polonia.

¿Necesita un cuadro KNX con integración de tarifa dinámica y lógica HEMS construido según especificaciones?

Diseñamos cuadros de baja tensión con puentes API Tibber/Nordpool, programación del controlador lógico MDT, salidas de relé SG Ready y documentación completa de puesta en marcha — entregados probados en su sitio.

Solicitar presupuesto →
Cargando...
Volver arriba