Jak přidat spotové ceny do Home Assistant

Dobrý den,

ceny na den dopředu se zobrazit dají - jsou k dispozici jako attribut tomorrow_hourly_prices.

Zde je příklad grafu udělaný pomocí ApexCharts, který zobrazuje ceny pro dnešní den a pokud jsou k dispozici, tak i ceny pro zítřek:

type: custom:apexcharts-card
header:
  show: true
  title: Cena elektriny
  show_states: true
  colorize_states: true
series:
  - entity: sensor.current_market_price_czk_kwh
    data_generator: >
      const todayData = entity.attributes.today_hourly_prices.map((price, index)
      => {
        const date = new Date()
        date.setHours(index)
        date.setMinutes(0)
        date.setSeconds(0)
        return [date, price];
      });

      let tomorrowPrices =  Array(24).fill(undefined); if
      (entity.attributes.tomorrow_hourly_prices?.length > 0) {
          tomorrowPrices = entity.attributes.tomorrow_hourly_prices
      }

      const tomorrowData = tomorrowPrices.map((price, index) => {
        const date = new Date()
        date.setDate(date.getDate() + 1)
        date.setHours(index)
        date.setMinutes(0)
        date.setSeconds(0)
        return [date, price ?? null];
      });

      return [...todayData, ...tomorrowData]
    show:
      in_header: before_now
graph_span: 48h
span:
  start: day

image

3 Likes

Díky moc za odpověď;)

Upravil jsem trošku vaši kartu, tak aby více odpovídala grafu zde: Nano Green

type: custom:apexcharts-card
now:
  show: true
  color: rgb(124,167,173)
  label: Nyní
header:
  show: true
  show_states: true
  colorize_states: true
experimental:
  color_threshold: true
series:
  - entity: sensor.current_market_price_czk_kwh
    color_threshold:
      - value: 1
        color: rgb(62,233,171)
      - value: 1.8
        color: rgb(238,231,24)
      - value: 2.3
        color: rgb(255,149,15)
      - value: 3
        color: rgb(255,71,19)
    data_generator: >
      const todayData = entity.attributes.today_hourly_prices.map((price, index)
      => {
        const date = new Date()
        date.setHours(index)
        date.setMinutes(0)
        date.setSeconds(0)
        return [date, price];
      });

      let tomorrowPrices =  Array(24).fill(undefined); if
      (entity.attributes.tomorrow_hourly_prices?.length > 0) {
          tomorrowPrices = entity.attributes.tomorrow_hourly_prices
      }

      const tomorrowData = tomorrowPrices.map((price, index) => {
        const date = new Date()
        date.setDate(date.getDate() + 1)
        date.setHours(index)
        date.setMinutes(0)
        date.setSeconds(0)
        return [date, price ?? null];
      });

      return [...todayData, ...tomorrowData]
    show:
      in_header: before_now
graph_span: 48h
yaxis:
  - min: 0
    max: 5
    decimals: 1
    apex_config:
      tickAmount: 10
span:
  start: day

Snímek obrazovky 2023-03-17 143734

3 Likes

Skvela prace! Diky moc!

Také děkuji za super počin o za vysvětlení. Nicméně (díval jsem se i do kodu), od market price se vždy odecita nějaká konstanta: 0,35 pro consuption price a 0,6 (resp. 0,9) pro Production price. Nejde teď o konkrétní čísla (asi odpovídají starším cenikum). Jde mi o consuption price. Neměla by se konstanta k tržní ceně naopak přičíst? Přeci když chci kupovat elektřinu, musí to byt za “trh plus něco”. Nebo uvazuju chybne?

1 Like

Ano, to si nas mysli vic, delal jsem na to tohle issue: Znamenko u current_consumption_price · Issue #3 · nanogreencz/homeassistant-integrations · GitHub

Jinak jeste k te posledni verzi apex chartu co zde je, pridal jsem si do series parametr “type: column”, s tim mi to prijde lepsi - je to “skok” ceny co plati vzdy celou hodinu, tak lepsi nez vyhlazena krivka.

1 Like

Nasadili jsme změnu, mělo by to snad už být správně.

Dobrý den, vidím, že PR byl odbaven, nicméně nedošlo k releasu integrace, takže HACS tuto změnu nereflektuje. Mohl bych poprosit o release? Díky moc!

Dobrý dne, upraveno. Mělo by to tam už být… Díky moc za upozornění :slightly_smiling_face:

1 Like

Malý postřeh z dnešního vývoje cen na spotu - 24.9.2023
Pokud zvolím, jako spouštěč pro TČ “Jedna z šesti nejlevnějších hodin” bude se TČ spínat v okně od 10.00 - 15.00 hod. V ostatní hodiny zahálí, osazenstvo “mrzne”.
Nešlo by okno, resp. počet nejlevnějších hodin zvětšit?
A aby to i byla volba v integritě, někdo tak velké okno nepotřebuje.
Díky

Edit: Případně i obrácené hodiny, tedy ty nejdrahší. Např. jedna z šesti nejdrahších a dalo by si tím TČ odstavovat.

Díky za feedback - máme to v backlogu, ale zatím jsme se k tomu nedostali. Dost by to pomohlo i mě :frowning:

Já jsem to vyřešil spot cenou od OTE a nastavením od rnovacek, kde ná vytvořenou automatizaci s výběrem X hodin.

1 Like

Tak super funguje to dobře. Teď 21 nejlevnější hodina, mám filtr na 20.



1 Like

kdyby byl někdo ochoten ještě dodělat celkovou cenu se všema poplatkama za distribuci a daněma, tak by to bylo super!

Dá se to bez problémů udělat přes template senzor:

      - name: "Cena elektřiny nákup"
        state: >-
          {{- ((float(states("sensor.czk_price_per_kwh")) * 1.21 * 1000 + float(states("input_number.nakup_elektriny_poplatky")) + float(states("input_number.nakup_elektriny_distribuce"))  + float(states("input_number.nakup_elektriny_systemove_sluzby")) + float(states("input_number.nakup_elektriny_podpora_oze"))) / 1000) | round(4) -}}
        unit_of_measurement: "Kč/kWh"
        unique_id: price.czk_price_per_kwh_purchase
        state_class: measurement
        attributes:
          prices_hourly: >-
            {% from 'hdo.jinja' import cena_distribuce %}
            {% set ceny=states.sensor.czk_price_per_kwh.attributes.prices_hourly %}
            [{% for hour in range(ceny|length) %}
            {{- (((ceny[hour] * 1.21 * 1000 + float(states("input_number.nakup_elektriny_poplatky"))) + float(cena_distribuce(hour)) + float(states("input_number.nakup_elektriny_systemove_sluzby")) + float(states("input_number.nakup_elektriny_podpora_oze"))) / 1000) | round(2) -}}
            {%- if not loop.last %}, {% endif -%}
            {% endfor %}]
{% macro cena_distribuce(hodina) %}
{% if (hodina >= 0 and hodina < 5) or (hodina >= 18 and hodina < 20) or (hodina >= 23 and hodina < 24 + 5) or (hodina >= 24 + 18 and hodina < 24 + 20) or (hodina >= 24+23 and hodina < 24+24) %}
{{ states("input_number.nakup_elektriny_distribuce_nt") }}
{% else %}
{{ states("input_number.nakup_elektriny_distribuce_vt") }}
{% endif %}
{% endmacro %}

máte tam hodně sensorů můžete to prosím popsat co se v nich očekává za hodnoty? abych to lépe aplikoval na můj kod?
raději bych ale právě uvítal aby přímo nanogreen posílal data o té konečné ceně s distribucí a s dph :slight_smile:

czk_price_per_kwh je OTE cena v Kč, nakup_elektriny_poplatky je poplatek Nanogreen, zbytek jsou regulované poplatky jak jsou na vyúčtování (nakup_elektriny_distribuce, nakup_elektriny_systemove_sluzby, nakup_elektriny_podpora_oze). Každé z toho je pomocník číslo, takže se to při změně snadno zadává.

no ale czk_price_per_kwh nakup_elektriny_poplatky berete odkud? to nejsou pomocníci asi…

Aplikace dalších poplatků · Issue #5 · nanogreencz/homeassistant-integrations · GitHub tady je na to požadavek už dlouho :frowning:

Je to Input Number - Home Assistant, hodnotu zadám ručně.