Dobrý den,
děkuji za článek a celou sérii. Mohu poprosit o info, jak do toho ApexCharts dostat i ostatní poplatky jako máte ve Vaše screenshotu (POZE, distribuce atd). Jelikož mám sazbu D25d, potřeboval bych rozlišit cenu VT a NT, což se mi nedaří nastavit (ve Vašem případě vidím fixní cenu). Dokážete mi poradit či případně nasměrovat. Děkuji.
6. 3. 2024, 11:18 editováno autorem komentáře
Dobrý den,
ano, obrázek s grafem je s fixní distribucí, než jsem ji měnil za dvojtarifní. Takto jsem to zvolil čistě pro lepší přehlednost.
Co se týká ostatních poplatků distribuce a vykreslení do ApexCharts, zkusím vás nasměrovat, jak dál.
Jsou dvě možnosti:
a) Vytvoříte si vlastní sensor pro každý poplatek, který bude mít v atributech (tj. attribute_templates) informace o částce za každou hodinu. Buď mapou nebo celkem 24 atributů (takto to řeší integrace spotových cen p. Nováčka)
b) Nebudete řešit žádný další sensor s atributi a jednoduše zkopírujete stejný předpis (celou sekci) entity pro spotové ceny a jen změníte hodnotu, která se má vypisovat v <i>data_generator</i>.
Tj. namísto
data_generator: |
return Object.entries(entity.attributes).map(([date, value], index) => {
return [new Date(date).getTime(), value];
});
to změníte (pro POZE) value na pevnou hodnotu. Využijete tím již "namapované" hodiny, jen budete ignorovat cenu - value.
data_generator: |
return Object.entries(entity.attributes).map(([date, value], index) => {
return [new Date(date).getTime(), 0.495];
});
Navíc samozřejmě upravíte barvy, popisek. Je to hodně ošklivé řešení, které se až stydím napsat. Ale bude vám to fungovat.
Co se týká různé ceny distribuce v NT a VT. Zde to už musíte udělat tím správným a "hezkým" řešením. Takže template sensor a nadefinujete "attribute_template" podobně jako výše s mapou. A atribut, který bude obsahovat mapu s cenou, dle dané hodiny. Dílčí položky distribuce mám uložené ve vlastních pomocnících.
Např. takto (nekomentovat prosím kód, není to moc hezké):
attribute_templates:
prices: |-
{% set NT=states('input_number.cezd_nt')|float+states('input_number.cezd_dalsi_poplatky')|float+states('input_number.cezd_poze')|float %}
{% set VT=states('input_number.cezd_vt')|float+states('input_number.cezd_dalsi_poplatky')|float+states('input_number.cezd_poze')|float %}
{% set ns = namespace(output="[") %}
{% for hour in range(0,24) %}
{% if (hour >= 2 and hour <=5) or (hour >= 20 and hour <= 23) %}
{% set ns.output=ns.output|string + NT|string + ", " %}
{% else %}
{% set ns.output=ns.output|string + VT|string + ", " %}
{% endif %}
{% endfor %}
{{ ns.output[0:-2] |regex_replace(find='$', replace=']', ignorecase=False) }}
Pro celkovou cenu elektřiny pak jednoduše uděláte podobný sensor, kde budete ceny z výše uvedené mapy sčítat s ostatními položkami a spotovou nebo silovou složkou ceny elektřiny. Budete potřebovat dva atributy, dnes a zítra, abyste dostal kompletní graf i na následující den. Zkrátka nasimulovat podobná data, jako nabízí integrace spotové ceny.