Dlaczego lokalnie, a nie z chmury
Chmura producenta daje dane z kilkuminutowym opóźnieniem, ma limity API, każdy producent ma inną, a gdy znika internet – znikają dane. Lokalny Modbus TCP to odczyt co kilka sekund, bez kont i kluczy, i ten sam mechanizm dla falownika, licznika i magazynu.
Modbus w pięciu zdaniach
- Urządzenie udostępnia rejestry 16-bitowe: holding (funkcja 03) i input (04).
- Zapytanie to: unit id, adres pierwszego rejestru, liczba rejestrów.
- Wartość 32-bitowa zajmuje dwa rejestry, a kolejność słów zależy od producenta.
- Skala to albo osobny rejestr, albo stała z dokumentacji.
- Modbus RTU to to samo po RS485, z CRC oraz prędkością i parzystością do ustawienia.
SunSpec: jedna mapa dla wielu producentów
SunSpec Alliance standaryzuje układ rejestrów. Od adresu 40000 jest znacznik SunS, a za nim łańcuch bloków (modeli): 1 – dane urządzenia, 101/103 – falownik 1- i 3-fazowy, 201–204 – liczniki, 124 – sterowanie magazynem. Każdy blok ma ID i długość, więc wystarczy przejść łańcuch, żeby wiedzieć, co urządzenie potrafi. Jeden sterownik obsługuje wtedy falowniki wielu marek.
# model 103 (falownik 3-faz.) – moc czynna W i jej skala W_SF
regs = client.read_holding_registers(address=40083, count=2, slave=1).registers
power_w = int16(regs[0]) * 10 ** int16(regs[1]) # W × 10^W_SF
if regs[0] == 0x8000: # „brak wartości” w SunSpec
power_w = None
Pułapki z praktyki
- Adresy od 0 albo od 1. „Rejestr 40084” z dokumentacji to często adres 40083 w zapytaniu.
- Wartości „niedostępne”:
0x8000(int16),0xFFFF(uint16). Nie zapisuj ich jako pomiaru. - Znak mocy. Sieć: plus to pobór, minus to oddawanie. Przy magazynie konwencja różni się między producentami, dlatego w panelu każde źródło można odwrócić.
- Jeden klient naraz. Część falowników przyjmuje jedno połączenie Modbus TCP, więc drugi system (np. EMS instalatora) potrafi „wypychać” bramkę.
- Odczyt blokami. Jedno zapytanie o 60 rejestrów jest szybsze i stabilniejsze niż 60 zapytań o jeden.
Jak to robimy w Polbyte IoT
Bramka skanuje sieć lokalną, wykrywa urządzenia na porcie 502 i proponuje sterownik. Definicje zmiennych (nazwa, jednostka) wysyła na serwer razem z odczytami, więc nowy typ urządzenia nie wymaga zmian w bazie. Całość testujemy na symulatorze domu: sześć urządzeń Modbus TCP / SunSpec, bez dachu z panelami.
Potrzebujesz integracji konkretnego falownika, licznika albo sterownika PLC? Mapa rejestrów wystarczy, żeby zacząć.