Ceny energii – rozliczanie godzinowe
Jak wszyscy wiemy zbliża się termin wyboru sposobu rozliczania sprzedaży energii z Naszych instalacji. Ustawodawca daje nam możliwość przejścia na rozliczanie godzinowe lub pozostanie na dotychczasowych zasadach czyli RCEm (rynkowa miesięczna cena energii). Nie będę się rozpisywał na temat dokładnych ustaleń, zainteresowany odszukają sobie odpowiednie materiały.
Zatem wracamy do naszych cen energii.. Natrafiłem na bardzo ciekawy wpis na temat możliwości importowania cen energii, w dzisiejszym wpisie przedstawię krok po kroku jak zaimplantować to do Naszego HA.
Podstawowy URL to https://spot.56k.guru/api/v2/hass, możemy dodać kilka paramertów:
- currency – Waluta: SEK, NOK, EUR, PLN, itp.
- area – Identyfikator kraju znajduje się na końcu URL, np. SE lub DE-LU.
- extra – dodatkowe opłaty (przesył, OZE, itd) za kWh w wybranej walucie, przed VAT. Przykład: 0.05 dla 5 centów za kWh.
- multiplier – Mnożnik dla ceny spot przed dodaniem opłat i VAT. 1 oznacza brak mnożnika, 1.02 to 2% dodatkowej opłaty na cenie spot przed dodaniem dodatkowych opłat i VAT.
- factor – VAT. 1 oznacza brak VAT, 1.23 to 23% VAT, i tak dalej.
- decimals – Precyzja dla wszystkich punktów cenowych, 2 oznacza 0.05 kWh, 4 -> 0.00521, itp.
Pierwszym krokiem jest przejście do na pliku configuration.yaml, klikamy w File editor (1) a następnie w configuration.yaml (2).

W tym miejscu wklejamy kod (jest już wstępnie uzupełniony o odpowiednie opłaty i VAT)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
rest: - scan_interval: 180 resource: https://spot.56k.guru/api/v2/hass?currency=PLN&area=PL&multiplier=1&extra=0.2&factor=1.23&decimals=2 sensor: - name: “Cena teraz” unique_id: "rce_price_now" value_template: "{{ value_json.now }}" unit_of_measurement: "PLN/kWh" device_class: "monetary" json_attributes: - data - avg - min - max - avg_tomorrow - min_tomorrow - max_tomorrow - avg_yesterday - min_yesterday - max_yesterday |
Po wklejeniu powinniśmy zobaczyć plik jak w przykładzie poniżej:

Zapisujemy i uruchamiamy ponownie HA.
W naszym systemie pojawi się encja sensor.cena_teraz zawierająca informację na temat aktualnej ceny prądu.

Jak takie dane przedstawić graficznie w ciekawy sposób? Oczywiście do tego celu możemy wykorzystać dodatek apexcharts. Poniższy kod wklejamy jako Edytor konfiguracji yaml

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
type: custom:apexcharts-card experimental: color_threshold: true graph_span: 2day update_interval: 2m now: show: true label: Now color: w span: offset: +0day start: day yaxis: - id: primary decimals: 2 header: show: true title: Ceny z dwoch dni show_states: true colorize_states: true series: - entity: sensor.cena_teraz type: column name: Price now show: extremas: true in_header: before_now legend_value: true header_color_threshold: true color_threshold: - value: 0 color: blue - value: 0.75 color: green - value: 1 color: red unit: PLN/kWh stroke_width: 0 data_generator: | return entity.attributes.data.map(e=>[Date.parse(e.st),parseFloat(e.p)]); - entity: sensor.cena_teraz name: Price avg today data_generator: | return [[new Date(),entity.attributes.avg]] - entity: sensor.cena_teraz name: Price avg tomorow data_generator: | return [[new Date(),entity.attributes.avg_tomorrow]] |
Jeżeli wszystko zostało zrobione poprawnie, to na końcu zobaczymy wykres podobny do poniższego przykładu:

Jeżeli spodobał Ci się mój wpis na temat cen energii, będę wdzięczny za postawienie mi wirtualnej kawy! ☕️ Twoje wsparcie pozwala mi tworzyć więcej wartościowych treści i dzielić się wiedzą z Wami. Dziękuję!

Ceny nie zgadzają się z tym co publikuje https://raporty.pse.pl/
W kodzie dodany jest „przesył”, VAT itd
https://spot.56k.guru/api/v2/hass?currency=PLN&area=PL&multiplier=1&decimals=2
to byłaby czysta kwota z RCEm ?
Kwota na wykresie jest ogólnie zaokrąglana w górę, można by dodać więcej miejsc po przecinku ?
Wg kodu decimals określony jest na równe 2 – dlaczego więc zaokrągla do jednego miejsca po przecinku ?
Czy jesteście w stanie „wykombinować” zestawienie – ile kWh w jakiej cenie w przedziale tych 15 min ?
Próbuję znaleźć w sieci sposób na to jak wykorzystać optymalnie te zmienne ceny energii dla eksportu. Od lipca 2024 sprzedaż energii w net-billing jest po cenach godzinowych i koło 19-21 cena dochodzi do 1zł za kWh.
Czyli normalnie falownik pracuje 24/7 wg reguły: energia z paneli i energia z mikroinwertera PV (wejście Gen) jest używana w kolejności do:
1. zasilania odbiorników w domu (tych critical i tych przed CT)
2. ładowania baterii
3. eksportu gdy bateria naładowana 100%
Ale gdy cena energii jest w danej godzinie większa niż np 0.9PLN/kWh i bateria jest naładowana powyżej np 60% to włącza się eksport do sieci z ustawioną wcześniej mocą.
Moim celem jest by ta logika powyżej była sterowana z HA. Da się to zrobić???
Da się, np tak jak poniżej, nie wiem czy znacznik „code” działa
W tej automatyzacji zakładam, że sprzedaję jeśli (wszystkie warunki musza być łącznie spełnione, AND logiczny)
a. jest po 6 rano (do 6 ładuje mi się bateria, jeśli z wyliczeń wychodzi że powinna)
b. cena jest większa niż >1.09 (z moich wyliczeń wyszło że przy kupnie w nocy w g12 to jest minimalna opłacalna cena sprzedaży)
c. aktualna cena wynosi minimum 0,8 x wartość ceny max (tu zakładam, że mogę sprzedac dziennie do ok. 8kW), wg wykresu często na tę sprzedaż łapią się 3 godziny popołudniowe
[code]
alias: auto-energy-sell-dynamic
description: Dynamic energy sell based on price conditions
trigger:
– platform: state
entity_id: sensor.cena_teraz
condition:
– condition: time
after: „06:00:00”
action:
– variables:
min_soc_level: 40
target_soc_level: 30
min_price_for_sale: 1.09
– choose:
– conditions:
– condition: template
value_template: >
{{ states(’sensor.cena_teraz’) | float >=
(state_attr(’sensor.cena_teraz’, 'max’) | float * 0.80) and
states(’sensor.cena_teraz’) | float > min_price_for_sale and
states(’sensor.ss_battery_soc’) | float > min_soc_level }}
sequence:
– data:
option: Allow Export
target:
entity_id: select.ss_load_limit
action: select.select_option
default:
– data:
option: Essentials
target:
entity_id: select.ss_load_limit
action: select.select_option
– data:
value: „{{ target_soc_level }}”
target:
entity_id:
– number.ss_prog1_capacity
– number.ss_prog3_capacity
– number.ss_prog4_capacity
– number.ss_prog5_capacity
– number.ss_prog6_capacity
action: number.set_value
mode: single
[/code]
Naprawdę ciekawa propozycja. Daje mi materiał do własnego eksperymentu. Pominę tylko ten czas, że od 6:00. Bardzo dziękuje.
Nawet jak się wyzeruje wszystkie dodatki i mnożniki to te ceny nie zgadzają się z tym co publikuje PSE RCE ….