Monitoring i automatyka

Grafana i InfluxDB do monitorowania instalacji fotowoltaicznej

👁 8 wyświetleń

Własny stos monitoringu PV – dlaczego warto?

Gdy zbudujesz lub kupisz instalację fotowoltaiczną, naturalnym krokiem jest chęć śledzenia jej pracy. Aplikacje producentów falowników oferują podstawowe dane, ale mają ograniczenia: zależność od chmury, brak historii długoterminowej, niemożliwość korelacji z innymi danymi domowymi. Grafana + InfluxDB to open-source stack, który rozwiązuje wszystkie te problemy i daje nieograniczone możliwości wizualizacji.

Architektura systemu

Typowy stos monitoringu PV składa się z:

  • Źródła danych: falownik (Modbus/MQTT), Shelly 3EM (MQTT), czujniki temperatury (DS18B20 na GPIO Raspberry Pi)
  • Broker MQTT: Mosquitto – zbiera dane ze wszystkich źródeł
  • Agent zbierający: Telegraf – czyta MQTT i zapisuje do InfluxDB
  • Baza danych: InfluxDB 2.x – baza szeregów czasowych zoptymalizowana pod dane pomiarowe
  • Wizualizacja: Grafana – dashboardy, alerty, raporty

Całość można uruchomić na Raspberry Pi 4 (2 GB RAM) lub w Dockerze na dowolnym serwerze Linux.

Instalacja z Dockerem (zalecane)

Najwygodniejsza metoda to Docker Compose. Utwórz plik docker-compose.yml:

version: "3"
services:
  influxdb:
    image: influxdb:2.7
    ports:
      - "8086:8086"
    volumes:
      - influxdb-data:/var/lib/influxdb2
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_USERNAME=admin
      - DOCKER_INFLUXDB_INIT_PASSWORD=haslo123
      - DOCKER_INFLUXDB_INIT_ORG=dom
      - DOCKER_INFLUXDB_INIT_BUCKET=solar

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    volumes:
      - grafana-data:/var/lib/grafana
    depends_on:
      - influxdb

  telegraf:
    image: telegraf:latest
    volumes:
      - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
    depends_on:
      - influxdb

volumes:
  influxdb-data:
  grafana-data:

Uruchom: docker compose up -d

Konfiguracja Telegraf dla falownika Modbus

Falowniki z obsługą Modbus RTU/TCP (Deye, Growatt, Sofar) można odpytywać bezpośrednio przez wtyczkę inputs.modbus Telegrafa. Przykład dla falownika Deye przez adapter RS485-USB:

[[inputs.modbus]]
  name = "deye_inverter"
  controller = "/dev/ttyUSB0"
  baud_rate = 9600
  data_bits = 8
  parity = "N"
  stop_bits = 1
  slave_id = 1

  [[inputs.modbus.metric]]
    name = "production"
    slave_id = 1
    byte_order = "ABCD"
    data_format = "FLOAT32-IEEE"
    measurement = "solar"

    [[inputs.modbus.metric.field]]
      name = "total_power"
      address = [0x0485]

    [[inputs.modbus.metric.field]]
      name = "pv1_voltage"
      address = [0x04A7]

Tworzenie dashboardu w Grafanie

Po skonfigurowaniu data source (InfluxDB z tokenem API i organizacją dom), utwórz nowy dashboard. Polecane panele:

Panel 1: Moc produkcji w czasie rzeczywistym

  • Typ: Time series
  • Zapytanie Flux: dane z pola total_power
  • Zakresy czasu: ostatnie 24h z odświeżaniem co 30 s

Panel 2: Bilans energii dzienny

  • Typ: Bar chart
  • Serie: produkcja, zużycie własne, eksport, import z sieci
  • Agregacja: dzień (sum z 1h windowing)

Panel 3: Wydajność względem napromieniowania

  • Jeśli masz czujnik napromieniowania lub dane z API meteo – korelacja z produkcją PV pozwoli wykryć problemy (zabrudzenie, uszkodzenie paneli)

Panel 4: Temperatura falownika i baterii

  • Typ: Gauge / Time series
  • Alerty gdy temperatura falownika przekroczy 70°C lub baterii 45°C

Alerty w Grafanie

Grafana pozwala skonfigurować alerty wysyłane przez e-mail, Telegram lub Slack. Przydatne reguły alertów dla instalacji PV:

  • Produkcja = 0 w godzinach 10:00–16:00 (możliwa awaria falownika)
  • Moc ujemna przez ponad 1 h w nocy (zużycie standby powyżej normy)
  • SoC baterii poniżej 10% przez więcej niż 30 minut
  • Temperatura falownika powyżej 75°C

Długoterminowe przechowywanie i retention policy

InfluxDB 2.x pozwala ustawić Retention Policy (RP) per bucket. Zalecana konfiguracja:

  • Bucket solar_raw: dane surowe co 5 s, RP = 30 dni
  • Bucket solar_1min: agregaty minutowe, RP = 1 rok
  • Bucket solar_1h: agregaty godzinowe, RP = bezterminowo

Automatyczne downsampling konfiguruje się przez Zadania (Tasks) w InfluxDB. Skrypt Flux do agregacji minutowej:

option task = {name: "downsample_1min", every: 1m}
from(bucket: "solar_raw")
  |> range(start: -2m)
  |> filter(fn: (r) => r._measurement == "solar")
  |> aggregateWindow(every: 1m, fn: mean)
  |> to(bucket: "solar_1min")

Zasoby i społeczność

Dokumentację Grafany i InfluxDB znajdziesz na ich oficjalnych stronach. Gotowe dashboardy do pobrania są na grafana.com/dashboards (wyszukaj "solar" lub "photovoltaic"). Polskie poradniki konfiguracyjne dla Grafany i narzędzi DevOps dostępne są na iPraktyk.pl – szczególnie przydatne jeśli dopiero zaczynasz przygodę z Linuksem i kontenerami Docker.

Podsumowanie

Grafana + InfluxDB to przemysłowy standard monitoringu szeregów czasowych, dostępny za darmo i łatwy do uruchomienia nawet na tanim Raspberry Pi. Raz skonfigurowany system działa latami bez ingerencji, zbierając cenne dane o pracy instalacji PV. To inwestycja w wiedzę o własnej energetyce – i jedna z największych satysfakcji dla technicznie zaawansowanego właściciela paneli. Jeśli chcesz pogłębić umiejętności z zakresu baz danych i wizualizacji danych, zajrzyj na Umiej.pl gdzie znajdziesz strukturyzowane kursy z SQL i programowania – podstaw każdego projektu z danymi.

Powiązane artykuły