Integracja RCE w Home Assistant: Realne Oszczędności na Prądzie
Czym jest RCE i jak działa w HA
Rynkowa cena energii elektrycznej RCE to wskaźnik publikowany przez operatora systemu przesyłowego w Polsce, aktualizowany w 15-minutowych interwałach. Każda doba to dokładnie 96 punktów pomiarowych, z których każdy odzwierciedla rzeczywisty koszt wytworzenia kilowatogodziny na rynku dnia następnego. Dane trafiają do Home Assistant poprzez dedykowaną integrację z HACS, gdzie stają się paliwem dla automatyzacji budżetowych.

- Czym jest RCE i jak działa w HA
- Tryby wyliczania tanich okien cenowych
- Konfiguracja integracji RCE przez HACS
- Gotowe automatyzacje: zmywarka, EV, pompa ciepła
Siła tego wskaźnika leży w jego rozdzielczości czasowej. Godzinowa taryfa to uśrednienie czterech slotów, co ukrywa krótkotrwałe skoki i dołki cenowe. 15-minutowa granulacja pozwala złapać dokładnie ten moment, gdy wiatraki generują nadwyżkę lub gdy fotowoltaika osiąga szczyt. Dla pompy ciepła taka precyzja nie ma znaczenia, ale dla zmywarki czy ładowarki samochodu elektrycznego różnica sięga nawet kilkudziesięciu groszy na cyklu.
Integracja łączy się z publicznym API PSE i pobiera dane w dwóch horyzontach: dzisiejszym oraz jutrzejszym. Drugi zestaw pojawia się zazwyczaj po godzinie 14:00, czasem z opóźnieniem do 15:30. Do tego momentu sensor jutrzejszych cen pozostaje nieaktywny, a atrybut tomorrow_data_available zwraca wartość false. To normalne zachowanie, nie błąd konfiguracji.
W ekosystemie Home Assistant cena RCE zasila kilka typów encji. Sensor główny udostępnia aktualną stawkę wraz z pełną tablicą atrybutów: średnią dobową, minimum, maksimum, medianą oraz maskami tanich okien. Binary sensors sygnalizują stan rynku (rce_low_price) oraz dostępność prognozy na kolejny dzień. Razem tworzą warstwę informacyjną, na której opierają się wszystkie reguły automatyzacji.
| Typ encji | Przykładowy identyfikator | Co zwraca |
|---|---|---|
| Sensor główny | sensor.rce_price | Aktualna cena PLN/kWh + atrybuty rozszerzone |
| Binary sensor | binary_sensor.rce_low_price | Stan: ON gdy cena poniżej progu trybu |
| Binary sensor | binary_sensor.tomorrow_data_available | ON po publikacji danych jutrzejszych |
| Sensor diagnostyczny | sensor.rce_next_cheap_window | Początek najbliższego taniego okna |
| Sensor statystyczny | sensor.rce_average_price_today | Średnia ważona z dzisiejszych slotów |
Cały mechanizm opiera się na prostej zależności: im więcej urządzeń zsynchronizujesz z naturalnym rytmem sieci, tym mniej płacisz za każdy kilowatogodzinę. Zmywarka uruchomiona o trzeciej w nocy kosztuje ułamek tego, co ta sama zmywarka włączona podczas porannego szczytu. Fotowoltaika produkuje najwięcej w południe, lecz wtedy RCE spada niemal do zera. Magazyn energii łapany w tanich oknach i rozładowywany w drogich oknach zamienia różnicę cenową w czysty zysk.
Tryby wyliczania tanich okien cenowych
Cztery warianty algorytmu pokrywają niemal każdy scenariusz domowy. Low Price Cutoff wyznacza próg percentylowy: przy ustawieniu 30% system uzna za tanie te sloty, których cena mieści się w najtańszej trzeciej części doby. Sprawdza się wszędzie tam, gdzie liczy się prosta reguła start/stop bez analizy ciągłości.
Cheapest Consecutive Ranges szuka najtańszego nieprzerwanego bloku o zadanej długości. Trzygodzinny slot dla zmywarki, czterogodzinny dla pralki suszącej. Algorytm iteruje po wszystkich kombinacjach i wybiera tę z najniższą średnią. Dzięki temu urządzenie kończy cykl w jednym przebiegu, bez przerywania w środku wirowania.
Cheapest Not Consecutive rozbija blok na rozproszone sloty o łącznym czasie trwania. Ładowanie samochodu elektrycznego z baterią 60 kWh potrzebuje około sześciu godzin, ale nie muszą być ciągłe. Wystarczy osiem slotów po 45 minut każdy, rozłożonych na noc, by uzupełnić akumulator przy minimalnym koszcie. Ten tryb daje największą elastyczność i zwykle największe oszczędności.
Always On (Force On) to nadpisanie ręczne, niezależne od cen. Przydatne, gdy musisz uruchomić urządzenie natychmiast albo testujesz instalację. Tryb blokuje analizę cenową i wymusza pracę do momentu ręcznego wyłączenia.
Tryby operacyjne w ramach Low Price Cutoff
Każdy z pięciu poziomów agresywności odpowiada innemu progowi percentylowemu. Im agresywniej, tym krócej pracują urządzenia, lec tym niższa średnia cena zużytej energii.
| Tryb | Próg | Przykładowe zastosowanie |
|---|---|---|
| Aggressive | 10-15% najtańszych slotów | Ładowanie EV dużą mocą |
| Super Eco | 20-25% | Bojler, akumulacyjny grzejnik |
| Eco | 30-35% | Zmywarka, pralka |
| Comfort | 40-45% | Pompa ciepła, suszarka |
| Off | Brak automatyzacji | Wyłączenie analizy cenowej |
Dobór trybu zależy od mocy urządzenia i dopuszczalnego czasu pracy. Bojler o mocy 2 kW potrzebuje kilku godzin na podgrzanie 200 litrów wody, więc Super Eco z dwudziestoma procentami slotów (około 4,8 godziny) wystarczy. Pompa ciepła pracująca na c.o. wymaga ciągłości, dlatego lepiej sprawdzi się Comfort z dłuższym oknem i wyższą średnią ceną, ale bez ryzyka wyłączenia w trakcie mrozu.
Konfiguracja integracji RCE przez HACS
Instalacja sprowadza się do dodania repozytorium i restartu HA. HACS (Home Assistant Community Store) to menedżer integracji niestandardowych, który obsługuje aktualizacje automatycznie i pilnuje zależności.
Lista kontrolna przed instalacją
- HACS zainstalowany i skonfigurowany
- Home Assistant w wersji 2024.1 lub nowszej
- Stałe połączenie internetowe z API PSE
- Uprawnienia administratora w profilu HA
W panelu HACS wybierz Integrations, a następnie trzy kropki w prawym górnym rogu i Custom repositories. W pole URL wklejasz adres projektu https://github.com/jacek2511/ha_rce/, kategorię ustawiasz na Integration. Po dodaniu repozytorium pojawi się ono na liście dostępnych. Kliknij Download, poczekaj na pobranie plików i zrestartuj Home Assistant.
Po ponownym uruchomieniu integracja powinna automatycznie wykryć dostępne encje. W panelu Ustawienia → Urządzenia i usługi zobaczysz nową pozycję z pełną listą sensorów i binary sensors. Jeśli ich nie ma, sprawdź logi w Narzędziach deweloperskich. Najczęstsza przyczyna to blokada sieciowa lub brak dostępu do API PSE.
Wybór rozdzielczości czasu
Konfiguracja oferuje dwie opcje częstotliwości odświeżania. Rozdzielczość 15-minutowa odpowiada natywnej granularności RCE i pokazuje każdy slot osobno. Rozdzielczość godzinna uśrednia cztery kolejne sloty w jeden punkt, przez co traci informację o krótkotrwałych skokach cenowych.
| Rozdzielczość | Kiedy wybrać | Kiedy unikać |
|---|---|---|
| 15 minut | Zmywarka, pralka, ładowarka EV | Pompy ciepła, sprężarki chłodnicze |
| 1 godzina | Ogrzewanie akumulacyjne, bojlery | Furtkowe automatyzacje czasowe |
Pompy ciepła i sprężarki nie tolerują częstych cykli start/stop. Każde uruchomienie pobiera prąd rozruchowy trzykrotnie wyższy od nominalnego, co zwiększa zużycie sprężarki i obniża sprawność. Dla tych urządzeń godzinna rozdzielczość daje płynniejszy profil pracy i chroni komponenty mechaniczne.
Gotowe automatyzacje: zmywarka, EV, pompa ciepła
Pięć blueprint-ów poniżej pokrywa najpopularniejsze scenariusze. Każdy z nich korzysta z atrybutów integracji RCE zamiast sztywnych progów liczbowych, dzięki czemu automatyzacja reaguje na realną strukturę cen, a nie na arbitralną wartość wpisaną w konfiguracji.
Zmywarka w najtańszym trzygodzinnym bloku
Zmywarka zużywa od 0,8 do 1,2 kWh na cykl, a jej praca trwa zwykle od 120 do 180 minut. Algorytm Cheapest Consecutive Ranges z oknem trzygodzinnym gwarantuje ukończenie programu bez przerwy.
trigger:
, platform: state
entity_id: binary_sensor.rce_cheapest_3h_active
to: "on"
condition:
, condition: state
entity_id: binary_sensor.rce_low_price
state: "on"
action:
, service: switch.turn_on
target:
entity_id: switch.dishwasher
Zmywarka wystartuje dokładnie wtedy, gdy trzy kolejne godziny zapowiadają się najtaniej w ciągu doby. Rano talerze będą czyste, a rachunek za ten cykl niższy o 30-50% w porównaniu z uruchomieniem w szczycie.
Ładowanie samochodu elektrycznego w rozproszonych slotach
Bateria 60 kWh wymaga sześciu godzin ładowania mocą 11 kW. Tryb Cheapest Not Consecutive rozkłada ten czas na osiem 45-minutowych slotów w ciągu nocy. Ładowarka startuje wielokrotnie, lecz każda sesja wypada w najtańszym możliwym momencie.
trigger:
, platform: template
value_template: "{{ states('sensor.rce_ev_total_cheap_minutes')|int >= 360 }}"
action:
, service: evcharger.start_charging
target:
entity_id: evcharger.kuchnia
W praktyce ładowanie trwa od 23:00 do 7:00 z kilkoma przerwami na drogie sloty. Rano bateria z pełnym zapasem, koszt niższy o 40-60% niż przy ciągłym ładowaniu od razu po podłączeniu.
Pompa ciepła w trybie Comfort (rozdzielczość godzinna)
Pompa ciepła pracuje nieprzerwanie, lecz wolno reagować na chwilowe dołki cenowe. Rozdzielczość godzinna eliminuje fałszywe sygnały z krótkotrwałych skoków i pozwala utrzymać stabilną temperaturę buforową.
trigger:
, platform: numeric_state
entity_id: sensor.rce_price_hourly
below: 0.45
action:
, service: climate.set_hvac_mode
target:
entity_id: climate.heat_pump
data:
hvac_mode: heat
temperature: 22
Próg 0,45 PLN/kWh to orientacyjna wartość dla taryfy dynamicznej. Dokładną stawkę wyznacza średnia z ostatnich 30 dni pomniejszona o 15%. Automatyzacja nie wyłącza pompy w drogich godzinach, lecz obniża temperaturę zadaną o jeden stopień, co zmniejsza pobór mocy bez ryzyka wychłodzenia budynku.
Bojler w trybie Super Eco
Bojler elektryczny 2 kW nagrzewa 200 litrów wody w około cztery godziny. Tryb Super Eco wyznacza okno czteroipółgodzinne w obrębie 20% najtańszych slotów doby. W praktyce bojler uruchamia się raz na dobę, zwykle między 1:00 a 5:00.
trigger:
, platform: state
entity_id: binary_sensor.rce_super_eco_active
to: "on"
condition:
, condition: time
after: "01:00:00"
before: "05:30:00"
action:
, service: water_heater.set_operation_mode
target:
entity_id: water_heater.bojler
data:
operation_mode: eco
Rano ciepła woda dostępna bez ograniczeń, a koszt podgrzania niższy o połowę w porównaniu z klasyczną taryfą G11.
Magazyn energii w trybie arbitrażu
Domowy magazyn energii o pojemności 10 kWh zarabia na różnicy cenowej między ładowaniem a rozładowaniem. Automatyzacja pobiera atrybut savings_vs_avg_day z sensora głównego i decyduje, czy opłaca się gromadzić energię.
trigger:
, platform: numeric_state
entity_id: sensor.rce_best_window_avg_price
below: 0.30
action:
, service: select.select_option
target:
entity_id: select.inverter_mode
data:
option: charge
Magazyn napełnia się w najtańszym oknie, a oddaje energię w najdroższym. Przy różnicy 0,40 PLN/kWh i dziennym cyklu zysk sięga 4 PLN. W skali roku to ponad 1400 PLN, które zostają w kieszeni użytkownika zamiast u sprzedawcy prądu.
Atrybuty sensora głównego w praktyce
Sensor sensor.rce_price udostępnia kilkanaście atrybutów, które warto znać. average zwraca średnią dobową, min i max krańce, median wartość środkową. prices_today to lista 96 wartości, prices_tomorrow analogiczna lista na kolejny dzień.
Maska cheap_mask_today to ciąg 96 zer i jedynek: jedynka oznacza slot mieszczący się w ustawionym procencie najtańszych. cheap_mask_tomorrow działa identycznie dla danych jutrzejszych. Te dwie maski są fundamentem template sensorów, które budują logikę automatyzacji.
Sekcja Best Window zawiera avg_price, min_price, max_price, duration_slots oraz savings_vs_avg_day. Ostatni atrybut pokazuje procent oszczędności w stosunku do zużycia rozłożonego równomiernie na całą dobę. Top 3 Windows to lista trzech najkorzystniejszych bloków z godzinami rozpoczęcia i średnią ceną. Next Cheap Window wskazuje najbliższe przyszłe okno, nawet jeśli leży w kolejnej dobie.
Najczęstsze problemy i rozwiązania
Brak danych jutrzejszych przed godziną 14:00 to nie błąd, lecz opóźnienie publikacji PSE. Automatyzacje korzystające z binary_sensor.tomorrow_data_available powinny zawierać warunek blokujący uruchomienie do momentu, gdy dane się pojawią.
Konflikt z innymi integracjami cenowymi zdarza się, gdy Home Assistant korzysta jednocześnie z RCE i Nord Pool. Dane się nie zgadzają, bo oba serwisy stosują różne strefy czasowe i konwencje zaokrągleń. Rozwiązanie to wybór jednego źródła i wyłączenie drugiego w HACS.
Brak reakcji automatyzacji na niską cenę wynika najczęściej z literówki w entity_id albo z błędnego odwołania do atrybutu. Logi w Narzędziach deweloperskich pokażą, która linia szablonu Jinja2 zwraca wartość unknown lub None. Poprawka zwykle zajmuje kilka minut.
Wizualizacja dashboardu
ApexCharts pozwala narysować dzienną krzywą cen z nałożonymi maskami tanich okien. Konfiguracja korzysta z atrybutu prices_today przekazanego jako seria danych, a granice tanich okien rysuje jako osobny typ wykresu z markerami.
type: custom:apexcharts-card
graph_span: 24h
series:
, entity: sensor.rce_price
type: line
data_generator: |
return Object.entries(entity.attributes.prices_today).map(([k,v]) => {
return [new Date(k).getTime(), v];
});
Stack przycisków pod wykresem umożliwia szybkie przełączanie trybów bez wchodzenia w ustawienia integracji. Pięć kart: Agresywny, Super Eco, Eco, Komfort, Wymuś ON. Każda wywołuje select.select_option na encji select.rce_price_mode.
Źródła danych: Polskie Sieci Elektroenergetyczne S.A. (dane RCE publikowane pod adresem pse.pl), repozytorium integracji dostępne w serwisie GitHub (github.com/jacek2511/ha_rce), dokumentacja HACS (hacs.xyz), specyfikacja encji Home Assistant (developers.home-assistant.io). Przepisy dotyczące taryf dynamicznych określa ustawa Prawo energetyczne oraz rozporządzenia Ministra Klimatu i Środowiska.