Automation for "Plan Solar" from Iberdrola (Spanish Electricity Company)

As per the Energy Management documentation, if you want to split energy usage into multiple tariffs you can use the utility_meter integration and create an automation that switches the utility_meter entity from one tariff to the other.
This is my case as I have the “Solar Plan” from Iberdrola. This plan have two tariffs, called “Horas Promocionadas” and “Horas No Promocionadas” (Promoted Hours -off peak- and Not Promoted Hours -peak-) and the time schedule varies according to the season of the year.
I have created an automation to change the tariff according to the plan, and I share it here in case it would be useful.

Automations.yaml

- id: '1630157394977'
  alias: Cambio de Tarifa Eléctrica
  description: "Su Plan Solar incluye un precio del término de energía más económico\
    \ en las horas promocionadas según la estación del año:\n - Invierno: del 21 de\
    \ diciembre al 20 de marzo.\n   - Horas promocionadas (P1): de 17h a 9:59h\n \
    \  - Horas no promocionadas (P2): de 10h a 16:59h\n - Primavera: del 21 de marzo\
    \ al 20 de junio.\n   - Horas promocionadas (P1): de 17h a 8:59h\n   - Horas no\
    \ promocionadas (P2): de 9h a 16:59h\n - Verano: del 21 de junio al 20 de septiembre.\n\
    \   - Horas promocionadas (P1): de 18h a 9:59h\n   - Horas no promocionadas (P2):\
    \ de 10h a 17:59h\n - Otoño: del 21 de septiembre al 20 de diciembre.\n   - Horas\
    \ promocionadas (P1): de 17h a 8:59h\n   - Horas no promocionadas (P2): de 9h\
    \ a 16:59h"
  trigger:
  - platform: time
    at: 09:00:00
  - platform: time
    at: '10:00:00'
  - platform: time
    at: '17:00:00'
  - platform: time
    at: '18:00:00'
  condition:
  - condition: or
    conditions:
    - condition: template
      value_template: '{{ (1,1) <= ( now().month, now().day ) <= (3,20) and ( now().hour,
        now().minute ) == (10,00) }}'
    - condition: template
      value_template: '{{ (1,1) <= ( now().month, now().day ) <= (3,20) and ( now().hour,
        now().minute ) == (17,00) }}'
    - condition: template
      value_template: '{{ (3,21) <= ( now().month, now().day ) <= (6,20) and ( now().hour,
        now().minute ) == (9,00) }}'
    - condition: template
      value_template: '{{ (3,21) <= ( now().month, now().day ) <= (6,20) and ( now().hour,
        now().minute ) == (17,00) }}'
    - condition: template
      value_template: '{{ (6,21) <= ( now().month, now().day ) <= (9,20) and ( now().hour,
        now().minute ) == (10,00) }}'
    - condition: template
      value_template: '{{ (6,21) <= ( now().month, now().day ) <= (9,20) and ( now().hour,
        now().minute ) == (18,00) }}'
    - condition: template
      value_template: '{{ (9,21) <= ( now().month, now().day ) <= (12,20) and ( now().hour,
        now().minute ) == (9,00) }}'
    - condition: template
      value_template: '{{ (9,21) <= ( now().month, now().day ) <= (12,20) and ( now().hour,
        now().minute ) == (17,00) }}'
    - condition: template
      value_template: '{{ (12,21) <= ( now().month, now().day ) <= (12,31) and ( now().hour,
        now().minute ) == (10,00) }}'
    - condition: template
      value_template: '{{ (12,21) <= ( now().month, now().day ) <= (12,31) and ( now().hour,
        now().minute ) == (17,00) }}'
  action:
  - service: utility_meter.next_tariff
    target:
      entity_id: utility_meter.consumo_diario
  mode: single

configuration.yaml

utility_meter:
  consumo_diario:
    source: sensor.consumo_de_la_red
    name: "Consumo Diario"
    cycle: daily
    tariffs:
      - NoPromocionado
      - Promocionado

where sensor.consumo_de_la_red is the sensor that counts for grid consumption.

Hope it helps!

Some screens of how to use it in Energy Management functionality.

Energy Management Configuration

Energy Management Dashboard

Gracias Ignacio,
Tengo la misma tarifa y la verdad es que me va genial. Pero tengo una duda y es:

Como puedo definir este servicio:
action:

  • service: utility_meter.next_tariff

No me sale como servicios disponibles.

Gracias por tu ayuda.

El servicio next_tariff ya no está disponible (no se desde qué versión).
Hay que cambiar la acción de la automatización. Este es el nuevo código:
Automations.yaml

alias: Cambio de Tarifa Eléctrica
description: >-
  Su Plan Solar incluye un precio del término de energía más económico en las
  horas promocionadas según la estación del año:
   - Invierno: del 21 de diciembre al 20 de marzo.
     - Horas promocionadas (P1): de 17h a 9:59h
     - Horas no promocionadas (P2): de 10h a 16:59h
   - Primavera: del 21 de marzo al 20 de junio.
     - Horas promocionadas (P1): de 17h a 8:59h
     - Horas no promocionadas (P2): de 9h a 16:59h
   - Verano: del 21 de junio al 20 de septiembre.
     - Horas promocionadas (P1): de 18h a 9:59h
     - Horas no promocionadas (P2): de 10h a 17:59h
   - Otoño: del 21 de septiembre al 20 de diciembre.
     - Horas promocionadas (P1): de 17h a 8:59h
     - Horas no promocionadas (P2): de 9h a 16:59h
trigger:
  - platform: time
    at: "09:00:00"
    variables:
      tariff: NoPromocionado
  - platform: time
    at: "10:00:00"
    variables:
      tariff: NoPromocionado
  - platform: time
    at: "17:00:00"
    variables:
      tariff: Promocionado
  - platform: time
    at: "18:00:00"
    variables:
      tariff: Promocionado
condition:
  - condition: or
    conditions:
      - condition: template
        value_template: >-
          {{ (1,1) <= ( now().month, now().day ) <= (3,20) and ( now().hour,
          now().minute ) == (10,00) }}
      - condition: template
        value_template: >-
          {{ (1,1) <= ( now().month, now().day ) <= (3,20) and ( now().hour,
          now().minute ) == (17,00) }}
      - condition: template
        value_template: >-
          {{ (3,21) <= ( now().month, now().day ) <= (6,20) and ( now().hour,
          now().minute ) == (9,00) }}
      - condition: template
        value_template: >-
          {{ (3,21) <= ( now().month, now().day ) <= (6,20) and ( now().hour,
          now().minute ) == (17,00) }}
      - condition: template
        value_template: >-
          {{ (6,21) <= ( now().month, now().day ) <= (9,20) and ( now().hour,
          now().minute ) == (10,00) }}
      - condition: template
        value_template: >-
          {{ (6,21) <= ( now().month, now().day ) <= (9,20) and ( now().hour,
          now().minute ) == (18,00) }}
      - condition: template
        value_template: >-
          {{ (9,21) <= ( now().month, now().day ) <= (12,20) and ( now().hour,
          now().minute ) == (9,00) }}
      - condition: template
        value_template: >-
          {{ (9,21) <= ( now().month, now().day ) <= (12,20) and ( now().hour,
          now().minute ) == (17,00) }}
      - condition: template
        value_template: >-
          {{ (12,21) <= ( now().month, now().day ) <= (12,31) and ( now().hour,
          now().minute ) == (10,00) }}
      - condition: template
        value_template: >-
          {{ (12,21) <= ( now().month, now().day ) <= (12,31) and ( now().hour,
          now().minute ) == (17,00) }}
action:
  - service: select.select_option
    target:
      entity_id: select.consumo_diario
    data:
      option: "{{ tariff }}"
mode: single

solo cambia la sección action.

Gracias pero me da errir, Me dice que Option no valid.
Triggered manually at 25 de septiembre de 2022, 18:38:23

Seleccionar: Select iberdrola_tariffs

Stopped because an error was encountered at 25 de septiembre de 2022, 18:38:23 (runtime: 0.01 seconds)

Option not valid for iberdrola_tariffs

Tienes creado el utility_meter en el configuration.yaml?
configuration.yaml

utility_meter:
  consumo_diario:
    source: sensor.consumo_de_la_red
    name: "Consumo Diario"
    cycle: daily
    tariffs:
      - NoPromocionado
      - Promocionado

where sensor.consumo_de_la_red is the sensor that counts for grid consumption.

Si , lo tengo, igual es que lo estoy lanzando forzado en el horario que no esta en las condiciones, voy a esperar a las 9h de esta mañana para ver si funciona.

Tengo creados los sensores con las tarifas perfectamente, y me cuentoa los KWHs y el coste de la tarifa que esta activa

Lo unico es que si lanzo la automatización me da este error, pero no se si es por que lo estoy lanzado en un horario fuera de los establecidos,

Lo miro a las 9h por que no queda nada más que yo vea.

Gracias por tu tiempo

Te actualizo, ya funciona, a las 9 am ha cambiado de tarifa.

Una excelente ayuda por tu parte.

Gracias

Me alegro.
Saludos.