rnovacek / homeassistant_cz_energy_spot_prices

Home Assistant integration that provides current Czech electricity spot prices based on OTE.
Apache License 2.0
91 stars 22 forks source link

device_class: monetary #37

Closed rattkin closed 1 year ago

rattkin commented 1 year ago

Snažím se přičítat ke spotovým cenám ještě cenu za distribuci podle HDO

nezdá se mi monetary u device_class Nevím zda je to podporované u HA. https://github.com/home-assistant/core/issues/86780

asi by měl být device_class všude measurement protože to není akumulace vydělaných/utracených peněz, ale měření aktuální ceny.

Je to v souboru custom_components/cz_energy_spot_prices/sensor.py:227

Podle mne je to důvod, proč entita sensor.current_spot_electricity_price se v apex grafu ukazuje jako NaN image

ondras12345 commented 1 year ago

device_class != state_class. device_class: monetary je validní., ale používá se pro peněžní částky. Pro cenu za kilowatthodinu je špatně. Dokumentace k state_class: measurement: https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics

S tím apexcharts bude možná problém ještě někde jinde. Jaký je stav entity sensor.current_spot_electricity_price podle developer tools? Open your Home Assistant instance and show your state developer tools.

rattkin commented 1 year ago

@ondras12345 děkuji, právě že nevidím chybu a problém má víc lidí. Updated bylo v 20:00, teď je 20:38, každou hodinu to chodí dobře image

ondras12345 commented 1 year ago

Ukažte konfiguraci apexcharts grafu

rattkin commented 1 year ago

@ondras12345

graph_span: 2d
span:
  start: day
series:
  - entity: binary_sensor.hdo
    float_precision: 2
    unit: kč/kWh
    show:
      in_header: raw
    data_generator: >
      return  Object.entries(entity.attributes.HDO_HOURLY).map(([date, value],
      index) => {
        return [new Date(date).getTime(), value];
      });
  - entity: sensor.current_spot_electricity_price
    float_precision: 2
    show:
      in_header: raw
    data_generator: |
      return Object.entries(entity.attributes).map(([date, value], index) => {
        return [new Date(date).getTime(), (value + 0.35 + 0.028 + 0.114 )* 1.21];
      });
ondras12345 commented 1 year ago
type: custom:apexcharts-card
graph_span: 2d
header:
  show: true
  show_states: true
span:
  start: day
series:
  - entity: sensor.current_spot_electricity_price
    float_precision: 2
    show:
      in_header: raw
    data_generator: |
      return Object.entries(entity.attributes).map(([date, value], index) => {
        return [new Date(date).getTime(), (value + 0.35 + 0.028 + 0.114 )* 1.21];
      });

Tohle mi cenu v záhlaví aktuální hodnotu ukazuje: image

(Home Assistant 2023.10.3, Czech Energy Spot Prices 0.6.1, apexcharts-card v2.0.4)

rattkin commented 1 year ago

@ondras12345 když zapnu header, tak se tam ukazuje hodnota spotu, ale HDO je NaN.. obráceně než v zápatí.. 🤷 image Váš příklad mi chodí... Mě to taky ukazuje, ale jen někdy, chvíli, pak tam skočí NaN. verze software mi sedí.

rattkin commented 1 year ago

@ondras12345 tak jsem to rozchodil nějakou manipulací s tím co je/není raw spot musí být raw ale hdo nesmí být. Důvod je v jednotkách, nebo device_class? Opravil jsem oboje na straně HDO a funguje to. image

ondras12345 commented 1 year ago

Apexcharts-card device_class ani nečte. Ta HDO entita je binary_sensor, takže s raw určitě nebude zobrazovat číslo (její stav je "on"/" off"). Tam to NaN možná vzniká kvůli tomu, že je v konfiguraci grafu přidáno unit - tu binární hodnoty mít nemají, možná se v takovém případě karta pokouší o konverzi na číslo. Bez raw se asi bere hodnota z data_generator, to už číslo je.

Každopádně to není problém s touto integrací. Ta sice chybně používá device_class: monetary pro cenu za kWh (takže issue nezavírat), ale to není příčinou vašich problémů.

ondras12345 commented 1 year ago

U spotu zkuste

    show:
      in_header: before_now

místo raw, pokud chcete zobrazovat přepočítanou cenu z data_generator.

rattkin commented 1 year ago

@ondras12345 dík já se to časem naučím. Mám udělat PR který zde odebere device_class: monetary ? mám dát něco jiného místo toho?

ondras12345 commented 1 year ago

Mám udělat PR který zde odebere device_class: monetary ?

To je otázka na @rnovacek

mám dát něco jiného místo toho?

Na seznamu validních device_class pro sensor nevidím žádnou vhodnou hodnotu, takže asi ne.

hipik634 commented 1 year ago

ten binary sensor hdo máš jako tabulku, nebo pin sensor? pokud tabulku, prosím vložit. díky