Návod

Spotové ceny v Home Assistant

Konfigurace pro configuration.yaml: aktuální spotová cena, ceny celého dne v atributech a senzor pro automatizace. Data z API spotovky.cz, zdarma a bez klíče.

REST, nebo MQTT?

  • REST je nejjednodušší: nic dalšího neinstalujete, Home Assistant se sám jednou za 15 minut zeptá API. Hodí se, když nemáte MQTT broker.
  • MQTT doručí novou cenu hned na začátku každého intervalu a zítřejší ceny ihned po zveřejnění. Potřebujete vlastní broker (např. doplněk Mosquitto broker), který se na spotovky.cz připojí jako most.

Obě varianty používají formát v2. Popis polí je v dokumentaci. Konfiguraci vložte do configuration.yaml (nebo do souboru, který z něj načítáte) a Home Assistant restartujte. Pokud už v konfiguraci máte klíč rest:, template: nebo mqtt:, položky do něj přidejte, klíč nesmí být v souboru dvakrát. Použijte jen jednu z variant: obě vytvářejí senzor sensor.spotova_cena.

Varianta 1: REST senzor

Senzor sensor.spotovky_dnes má jako stav datum dne a v atributu slots všechny intervaly dne. Šablonové senzory z něj počítají aktuální cenu, minimum a maximum. Aktuální cena se přepočítá každou minutu, takže na začátku nového intervalu se změní bez nového dotazu na API.

configuration.yaml — REST
# configuration.yaml — ceny dneška přes REST (bez MQTT)
rest:
  - resource: https://api.spotovky.cz/v2/prices/today
    scan_interval: 900
    sensor:
      - name: "Spotovky dnes"
        unique_id: spotovky_dnes
        value_template: "{{ value_json.date }}"
        json_attributes:
          - complete
          - negative
          - rate
          - slots

template:
  - sensor:
      - name: "Spotová cena"
        unique_id: spotovky_spotova_cena
        unit_of_measurement: "Kč/kWh"
        state_class: measurement
        availability: >
          {{ states('sensor.spotovky_dnes') == now().strftime('%Y-%m-%d')
             and state_attr('sensor.spotovky_dnes', 'slots') is not none }}
        state: >
          {% set ns = namespace(czk=none) %}
          {% set t_now = now().timestamp() %}
          {% for s in state_attr('sensor.spotovky_dnes', 'slots') or [] %}
            {% set t = as_timestamp(s.start) %}
            {% if t <= t_now and t_now < t + 900 %}{% set ns.czk = s.czk %}{% endif %}
          {% endfor %}
          {{ ns.czk }}

      - name: "Spotová cena minimum dnes"
        unique_id: spotovky_minimum_dnes
        unit_of_measurement: "Kč/kWh"
        availability: "{{ (state_attr('sensor.spotovky_dnes', 'slots') or []) | count > 0 }}"
        state: "{{ state_attr('sensor.spotovky_dnes', 'slots') | map(attribute='czk') | min }}"

      - name: "Spotová cena maximum dnes"
        unique_id: spotovky_maximum_dnes
        unit_of_measurement: "Kč/kWh"
        availability: "{{ (state_attr('sensor.spotovky_dnes', 'slots') or []) | count > 0 }}"
        state: "{{ state_attr('sensor.spotovky_dnes', 'slots') | map(attribute='czk') | max }}"

Po půlnoci může aktuální cena až 15 minut hlásit „nedostupné“, dokud REST senzor nestáhne nový den. Stav REST senzoru (datum) je krátký, celý den je v atributech; Home Assistant omezuje délku stavu na 255 znaků, atributy ne.

Zítřejší ceny lze stáhnout stejně s adresou /v2/prices/tomorrow. Do zveřejnění výsledků (obvykle 13:05) ale API vrací HTTP 404 a senzor bude nedostupný; Home Assistant to zapíše do logu. Pro zítřek je proto pohodlnější MQTT.

Varianta 2: MQTT senzor

Krok 1: most z vlastního brokeru

Integrace MQTT v Home Assistantu se připojuje k jednomu brokeru. Nepřipojujte ji přímo na spotovky.cz: Home Assistant na broker sám publikuje (stav, discovery), a broker spotovky.cz publish odmítá. Správné řešení je most (bridge) ve vašem brokeru, který z spotovky.cz jen odebírá vybrané topicy.

V doplňku Mosquitto broker zapněte v konfiguraci doplňku volbu customize (active: true, folder: mosquitto), vytvořte soubor níže a doplněk restartujte.

Mosquitto — most
# /share/mosquitto/spotovky.conf — most z vašeho Mosquitto na spotovky.cz
connection spotovky
address spotovky.cz:1883
cleansession true
notifications false
topic v2/current/json in 1
topic v2/today/json in 1
topic v2/tomorrow/json in 1

Ponechte notifications false: bez toho by most publikoval svůj stav na vzdálený broker. Topicy uvádějte jednotlivě, wildcardy broker nepovoluje.

Krok 2: senzory

configuration.yaml — MQTT
# configuration.yaml — senzory z MQTT (přes most z předchozího kroku)
mqtt:
  sensor:
    - name: "Spotová cena"
      unique_id: spotovky_mqtt_aktualni
      state_topic: "v2/current/json"
      value_template: "{{ value_json.czk }}"
      unit_of_measurement: "Kč/kWh"
      state_class: measurement
      json_attributes_topic: "v2/current/json"

    - name: "Spotovky dnes"
      unique_id: spotovky_mqtt_dnes
      state_topic: "v2/today/json"
      value_template: "{{ value_json.date }}"
      json_attributes_topic: "v2/today/json"

    - name: "Spotovky zítra"
      unique_id: spotovky_mqtt_zitra
      state_topic: "v2/tomorrow/json"
      value_template: "{{ value_json.date if value_json is defined else None }}"
      json_attributes_topic: "v2/tomorrow/json"

sensor.spotova_cena má jako stav cenu v Kč/kWh a v atributech start, end, eur, rank a periods ze zprávy v2/current/json. Senzory dne mají celý JSON v2 v atributech (včetně slots). Zpráva v2/tomorrow/json se po půlnoci maže; šablona pro zítřek proto počítá s prázdnou zprávou.

Levná čtvrthodina pro automatizace

Pole rank udává pořadí intervalu v rámci dne (1 = nejlevnější). Binární senzor níže se zapne, když je aktuální interval mezi 16 nejlevnějšími dne, a lze ho použít jako spouštěč pro bojler, nabíjení nebo pračku. Předpokládá MQTT senzor sensor.spotova_cena z varianty 2.

configuration.yaml — binární senzor
# configuration.yaml — „levná čtvrthodina“ pro automatizace
template:
  - binary_sensor:
      - name: "Levná elektřina"
        unique_id: spotovky_levna_elektrina
        # zapnuto, když je aktuální interval mezi 16 nejlevnějšími dne (4 hodiny)
        state: "{{ state_attr('sensor.spotova_cena', 'rank') | int(999) <= 16 }}"

ID entit vzniká z názvu; zkontrolujte je v Nastavení → Zařízení a služby → Entity a případně je v šablonách upravte. Ceny jsou spotové bez DPH, bez distribuce a poplatků.

Další návody