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