Návod

Spotové ceny v ESPHome

Aktuální spotová cena v Kč/kWh a pořadí intervalu v zařízení s ESPHome, samostatně přes MQTT nebo z Home Assistantu.

Dvě cesty

  • Přes Home Assistant — pokud už máte senzor spotové ceny podle návodu pro Home Assistant, zařízení s ESPHome si hodnotu jen převezme. Nejjednodušší a nejspolehlivější varianta.
  • Přímo z MQTT brokeru spotovky.cz — zařízení funguje samostatně, bez Home Assistantu. Odebírá zprávu v2/current/json, která se publikuje každých 15 minut a díky retain přijde hned po připojení.

Varianta 1: hodnota z Home Assistantu

ESPHome YAML — homeassistant sensor
# ESPHome — cena převzatá z Home Assistantu (vyžaduje api:)
api:

sensor:
  - platform: homeassistant
    id: spot_czk
    name: "Spotová cena"
    entity_id: sensor.spotova_cena
    unit_of_measurement: "Kč/kWh"
    accuracy_decimals: 2

Do entity_id doplňte ID senzoru, který máte v Home Assistantu. Zařízení musí být v Home Assistantu přidané přes integraci ESPHome.

Varianta 2: přímo z MQTT

Komponenta mqtt se připojí na spotovky.cz:1883 bez jména a hesla. Broker přijímá jen subscribe, proto je v konfiguraci vypnuto všechno, co by ESPHome jinak publikoval: discovery, stavové topicy, logy a zprávy birth, will a shutdown.

ESPHome YAML — MQTT
# ESPHome — přímé připojení na MQTT broker spotovky.cz (jen odběr)
mqtt:
  broker: spotovky.cz
  port: 1883
  # zařízení na broker spotovky.cz nic nepublikuje:
  discovery: false
  discover_ip: false
  topic_prefix: null
  log_topic: null
  birth_message:
  will_message:
  shutdown_message:
  on_json_message:
    topic: v2/current/json
    qos: 1
    then:
      - lambda: |-
          if (!x["czk"].isNull()) id(spot_czk).publish_state(x["czk"].as<float>());
          if (!x["rank"].isNull()) id(spot_rank).publish_state(x["rank"].as<int>());
          if (!x["periods"].isNull()) id(spot_periods).publish_state(x["periods"].as<int>());

sensor:
  - platform: template
    id: spot_czk
    name: "Spotová cena"
    unit_of_measurement: "Kč/kWh"
    accuracy_decimals: 2
    update_interval: never
  - platform: template
    id: spot_rank
    name: "Pořadí intervalu"
    accuracy_decimals: 0
    update_interval: never
  - platform: template
    id: spot_periods
    name: "Počet intervalů dne"
    accuracy_decimals: 0
    update_interval: never

Komponenta mqtt se v ESPHome připojuje jen k jednomu brokeru. Pokud zařízení už používá MQTT pro vlastní broker, použijte variantu 1, nebo na vlastním brokeru nastavte most na spotovky.cz (viz návod pro Home Assistant). Opakované zakázané operace (publish, wildcard) mohou vést k dočasnému zablokování IP adresy.

Proměnná x v on_json_message je objekt JSON z knihovny ArduinoJson. Před čtením pole se ověřuje, že ve zprávě je; přístup k chybějícímu poli by podle dokumentace ESPHome mohl zařízení shodit. Cena může být záporná, typ float s tím počítá.

Spínání podle ceny

Ukázka navazuje na variantu 2: šablonový senzor spot_rank z ní doplňte o on_value (nevkládejte ho podruhé). Relé sepne, když je aktuální interval mezi 16 nejlevnějšími dne (čtyři hodiny). Pořadí je vztažené ke skutečnému počtu intervalů dne (92, 96 nebo 100).

ESPHome YAML — relé
# Příklad: relé (např. bojler) sepnuté v 16 nejlevnějších intervalech dne
switch:
  - platform: gpio
    id: rele
    name: "Bojler"
    pin: GPIO26

sensor:
  - platform: template
    id: spot_rank
    name: "Pořadí intervalu"
    accuracy_decimals: 0
    update_interval: never
    on_value:
      then:
        - if:
            condition:
              lambda: "return x <= 16;"
            then:
              - switch.turn_on: rele
            else:
              - switch.turn_off: rele

Další návody