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.