janol.pl_

Hobby

Home Assistant i fotowoltaika: automatyka domowa okiem sysadmina

Ten wpis jest bardziej osobisty niż zwykle — nie ma tu klienta ani zespołu, jest własny dach, własny inwerter i własna ciekawość, co da się zautomatyzować, kiedy dane o produkcji energii są dostępne w czasie rzeczywistym. Ale mimo hobbystycznego charakteru, instalacja PV w domu nauczyła mnie o monitoringu więcej niż niejeden produkcyjny incydent w pracy — bo tu obserwowałem system przez rok, w każdych warunkach pogodowych, z konsekwencjami wprost przekładającymi się na rachunek za prąd.

Punkt wyjścia — integracja inwertera i liczników

Instalacja PV sama w sobie ma własną aplikację producenta, ale te aplikacje z reguły są zamknięte, pokazują dane z opóźnieniem i nie dają żadnej możliwości automatyzacji poza tym, co producent z góry przewidział. Home Assistant zmienia to całkowicie — inwerter (u mnie z lokalnym API po Modbus TCP w sieci LAN, bez zależności od chmury producenta) i licznik energii (dwukierunkowy, żeby widzieć osobno pobór i oddanie do sieci) trafiają do jednej, spójnej bazy danych czasowych, dostępnej do dowolnej automatyzacji.

# configuration.yaml — fragment integracji przez Modbus
modbus:
  - name: inwerter_pv
    type: tcp
    host: 192.168.10.50
    port: 502
    sensors:
      - name: "Moc produkcji PV"
        address: 40100
        input_type: holding
        unit_of_measurement: W
        scale: 1
        data_type: uint32

Zanim automatyzacja miała jakikolwiek sens, kilka tygodni po prostu patrzyłem na wykresy — profil produkcji w słoneczny dzień kontra pochmurny, jak szybko chmura potrafi zrzucić moc produkcji o 80% w ciągu kilku sekund, jak wygląda krzywa poboru domu bez żadnej ingerencji. To był dokładnie ten sam odruch, co przy wdrażaniu nowego systemu w pracy — najpierw obserwacja baseline, dopiero potem reguły alertujące czy automatyzacje na tej podstawie.

Automatyzacje sterowane nadwyżką produkcji

Sedno automatyki PV to jedna zasada: energia wyprodukowana i zużyta na miejscu jest tańsza niż energia oddana do sieci i odkupiona z powrotem wieczorem (przy aktualnym rozliczeniu net-billing w Polsce różnica jest odczuwalna). Stąd automatyzacje, które przesuwają zużycie energii w stronę godzin nadwyżki produkcji:

automation:
  - alias: "Bojler: załącz grzanie przy nadwyżce PV"
    trigger:
      - platform: numeric_state
        entity_id: sensor.nadwyzka_pv
        above: 2000
        for:
          minutes: 5
    condition:
      - condition: numeric_state
        entity_id: sensor.temperatura_bojlera
        below: 55
    action:
      - service: switch.turn_on
        target:
          entity_id: switch.grzalka_bojler

Warunek for: minutes: 5 na wejściu trigger jest tu celowy — bez niego przelotna chmura na 20 sekund załączałaby i wyłączała grzałkę w kółko, co ani nie oszczędza energii, ani nie wydłuża żywotności przekaźnika. Dokładnie ten sam mechanizm, którego uczy się przy strojeniu reguł w SIEM — próg i okno czasowe chronią przed reagowaniem na szum, nie na sygnał. Podobne automatyzacje działają u mnie dla ładowania samochodu (throttling mocy ładowania proporcjonalnie do nadwyżki, nie prosty on/off) i pralki uruchamianej automatycznie w oknie najwyższej produkcji w ciągu dnia.

Pułapka: histereza, o której zapomniałem na starcie Pierwsza wersja automatyzacji bojlera nie miała żadnej histerezy między włączeniem a wyłączeniem — próg 2000 W w obie strony. Przy produkcji oscylującej tuż wokół progu (częściowe zachmurzenie) grzałka włączała się i wyłączała kilkanaście razy w ciągu godziny. Rozwiązanie: różne progi dla załączenia (2000 W) i wyłączenia (1200 W), czyli klasyczna histereza znana z automatyki przemysłowej i sterowników PID — tu zaimplementowana dwoma osobnymi automatyzacjami zamiast jedną z symetrycznym progiem.

Dashboard i to, czego nauczyłem się o observability

Home Assistant z dodatkiem InfluxDB + Grafana dał mi dokładnie ten sam stack, którego używam do monitoringu infrastruktury w pracy — tylko że metryki to nie CPU i pamięć, tylko wolty, waty i procent naładowania. I paradoksalnie to własny dom nauczył mnie kilku rzeczy o dobrym monitoringu wyraźniej niż praca zawodowa:

  • Retencja danych ma znaczenie od pierwszego dnia — domyślna retencja InfluxDB w Home Assistant była zbyt krótka, żeby porównać produkcję rok do roku. Zmiana retencji po utracie danych z pierwszych miesięcy była lekcją, którą łatwiej było zignorować w pracy (bo tam ktoś inny to skonfigurował dawno temu), a we własnym projekcie zapłaciłem za nią osobiście.
  • Alert bez kontekstu jest bezużyteczny — pierwsza wersja alertu „produkcja PV = 0” budziła mnie fałszywie każdej nocy, bo w nocy produkcja rzeczywiście wynosi zero. Dopiero warunek ograniczający alert do godzin dziennych i porównanie z oczekiwaną krzywą dla danej pory roku (nie z sztywną wartością) zrobiło z tego użyteczny sygnał zamiast szumu.
  • Dashboard, na który nikt nie patrzy, jest bezwartościowy — dokładnie ta sama lekcja co z SIEM-em. Wykres, który ogląda się raz i zapomina, nie różni się niczym od braku wykresu. Dopiero jeden ekran z najważniejszymi liczbami (produkcja dziś, autokonsumpcja, saldo z siecią) wyświetlany stale na tablecie w kuchni sprawił, że dane faktycznie wpływają na decyzje — np. świadome przesunięcie prania na południe zamiast wieczora.
Różnica między monitoringiem produkcyjnym a hobbystycznym jest mniejsza, niż się wydaje — te same zasady (baseline przed alertem, histereza zamiast sztywnego progu, kontekst zamiast gołej wartości) sprawdzają się identycznie, niezależnie od tego, czy monitorujesz klaster serwerów, czy własny bojler.

Co dalej

Kolejny krok, który dopiero testuję, to integracja prognozy pogody z planowaniem automatyzacji z wyprzedzeniem — jeśli jutro zapowiadane jest pełne słońce, bojler może poczekać z grzaniem nocnym do rana, ufając nadwyżce z PV zamiast taryfy nocnej. To zbliża się coraz bardziej do tego, co w pracy nazwalibyśmy predykcyjnym skalowaniem zasobów na podstawie prognozowanego obciążenia — tylko że tu zasobem jest energia słoneczna, a obciążeniem pralka i bojler.

← wszystkie wpisy