---
title: "SolaX X3-Ultra Hybrid Inverter — monitoring and power control (Modbus RTU)"
description: "SolaX X3-Ultra przez Modbus RTU (RS-485): liczniki Energy Dashboard, SOC baterii, sieć, błędy i zdalne sterowanie mocą AC do ładowania i rozładowania."
url: "https://taphome.com/pl/compatibility/solax-x3-ultra-power-control-modbus-rtu/"
language: pl
lastmod: 2026-11-10
generator: hugo
ai:
  topics: ["modbus-rtu","rs485","inverter","solar","battery-storage","3-phase","hybrid-inverter","energy-monitoring","remote-power-control"]
  questions: ["Jak zintegrować falownik hybrydowy SolaX X3-Ultra z TapHome?","Co mierzy i czym steruje szablon sterowania mocą SolaX X3-Ultra?","Jak podłączyć RS-485 z portu COM 1 SolaX X3-Ultra do TapHome?","Jak ładować lub rozładowywać baterię SolaX X3-Ultra z TapHome według cen spot energii elektrycznej?","Dlaczego cel zdalnego sterowania SolaX X3-Ultra wraca do 0 zaraz po ustawieniu?","Którego urządzenia powinien używać Menedżer energii TapHome z SolaX X3-Ultra?"]
---

# SolaX X3-Ultra Hybrid Inverter — monitoring and power control (Modbus RTU)

Komunikacja: Modbus RTU

## Poradnik integracji

SolaX X3-Ultra (X3-ULT-15K, 20K, 25K, 30K) to trójfazowy falownik hybrydowy do PV i baterii. Ten szablon społecznościowy autorstwa Martina Kellera łączy go z TapHome przez **Modbus RTU na porcie RS-485 COM 1** (19200 bodów, 8N1) i opiera się na rejestrach odczytu protokołu SolaX Modbus V3.29 oraz na protokole SolaX Modbus V001.02. Zapewnia pełny zestaw liczników dla Energy Dashboard, monitorowanie baterii, sieci i błędów, ustawienia falownika zapisywane tylko wtedy, gdy ich wartość naprawdę się zmienia, oraz zdalne sterowanie mocą AC (tryb 1 zdalnego sterowania SolaX) — ładowanie baterii z sieci lub rozładowanie jej do sieci na polecenie, na przykład według cen spot energii elektrycznej.

## Jak uzyskać szablon

Szablony społecznościowe nie są oferowane na liście szablonów w aplikacji TapHome. Zaloguj się na portal.taphome.com, pobierz XML tego szablonu i zaimportuj go do Core na interfejsie Modbus RTU (albo na interfejsie Modbus TCP, gdy używasz bramy RS-485-Ethernet). Do monitorowania bez zdalnego sterowania mocą dostępny jest oficjalny szablon [SolaX X3 Hybrid Ultra](https://taphome.com/pl/compatibility/solax-hybrid-ultra-x3/). Moduł zaimportowany wcześniej z oficjalnego szablonu nie aktualizuje się sam — zaimportuj ten szablon jako nowy moduł i usuń stary.

## Połączenie sprzętowe

X3-Ultra ma jeden wielofunkcyjny **port COM 1** (złącze RJ45 z oznakowanym mocowaniem kabla). Te same fizyczne piny pełnią różne funkcje w zależności od tego, która oznakowana pozycja mocowania kabla jest użyta. Do integracji Modbus innej firmy użyj pozycji **RS485** — linii **REMOTE_485A** i **REMOTE_485B**.

### Pinout portu COM 1

![Przypisanie pinów portu COM 1 SolaX X3-Ultra dla wszystkich sześciu oznakowanych pozycji (Parallel-1, Parallel-2, BMS-1, BMS-2, RS485, DRM)](https://taphome.com/images/compatibility/solax-x3-ultra-power-control-modbus-rtu/com1-pinout_hu_4124a3cd9e8bc981.jpg)

Przypisanie pinów **pozycji RS485** (jedynej pozycji istotnej dla TapHome):

| Pin | Sygnał | Okablowanie TapHome |
|-----|--------|---------------------|
| **1** | **REMOTE_485A** | A+ / D+ |
| **2** | **REMOTE_485B** | B− / D− |
| 3 | PARALLEL_485AA | nie używać (tylko akcesoria SolaX) |
| 4 | PARALLEL_485AA | nie używać (tylko akcesoria SolaX) |
| 5 | PARALLEL_485BB | nie używać (tylko akcesoria SolaX) |
| 6 | PARALLEL_485BB | nie używać (tylko akcesoria SolaX) |
| **7** | **REMOTE_485A** | ten sam sygnał co pin 1 |
| **8** | **REMOTE_485B** | ten sam sygnał co pin 2 |

> [!WARNING]
> Piny 3–6 należą do kanału SolaX PARALLEL_485 i są zarezerwowane dla produktów SolaX (Adapter Box G2, EV-Charger, DataHub). Piny 1, 2, 7 i 8 są przeznaczone dla urządzeń innych niż produkty SolaX. **Nie podłączaj** mastera Modbus innej firmy do pinów 3–6.

### Okablowanie RS-485

![Instalacja terminala RJ45 w pozycji RS485 mocowania kabla COM 1](https://taphome.com/images/compatibility/solax-x3-ultra-power-control-modbus-rtu/wiring-rs485_hu_ac07cf89af382c1.jpg)

Zasady okablowania z instrukcji obsługi X3-Ultra (sekcja 8.6.4):

- **Typ kabla:** kabel sieciowy CAT5E lub CAT6
- **Maksymalna długość:** kabel komunikacyjny RS-485 nie może przekraczać **30 m**
- **Wtyk RJ45:** istniejący wtyk kabla należy odciąć i zacisnąć nowy wtyk RJ45 zgodnie z przypisaniem pinów; nie wszystkie urządzenia akceptują w pełni okablowany 8-żyłowy kabel sieciowy
- **Pozycja w mocowaniu kabla:** wtyk RJ45 wkłada się do gniazda oznaczonego **RS485** (nie do Parallel-1, Parallel-2, BMS-1, BMS-2 ani DRM); złącze zatrzaskuje się w porcie COM 1 i jest zabezpieczone nakrętką obrotową
- **Jeden master Modbus:** z portu może korzystać tylko jeden master Modbus. Odłącz inne monitorowanie Modbus na tym samym porcie, w przeciwnym razie falownik odpowiada obu i odczyty stają się niestabilne

Instrukcja obsługi nie podaje zasady terminacji magistrali RS-485 na pozycji RS485 portu COM 1.

### Licznik lub CT dla wartości sieci

Urządzenia sieciowe tego szablonu (**Grid - power balance**, **Z sieci**, **Do sieci**, **Konsumpcja**) odczytują moc oddawaną do sieci, którą falownik mierzy własnym licznikiem lub CT. Licznik lub CT podłącza się do portu **COM 2** (Meter/CT: METER_485A na pinie 4, METER_485B na pinie 5 albo wejścia CT) i konfiguruje na wyświetlaczu falownika w `Menu → Setting → Advance Setting → Meter/CT Setting`. To osobna linia RS-485 — nie podłączaj do niej TapHome.

### Opcje połączenia

- **Bezpośrednie połączenie Modbus RTU:** podłącz parę RS485 portu COM 1 bezpośrednio do magistrali RS-485 TapHome Core. Najniższe opóźnienie, zalecane do zdalnego sterowania mocą.
- **Brama RS-485-Ethernet:** gdy falownik jest daleko od TapHome Core, można użyć bramy RS-485-Ethernet innej firmy na parze RS485 portu COM 1; szablon importuje się wtedy na interfejsie Modbus TCP.
- **Moduł monitorujący SolaX:** sam falownik nie obsługuje Modbus TCP. Modbus TCP (port 502) jest dostępny tylko przez moduł monitorujący SolaX, z cyklem zapytań około 1 sekundy (protokół V3.29).

## Konfiguracja

### Włączanie komunikacji Modbus na falowniku

Na wyświetlaczu LCD falownika przejdź do:

```
Menu → Setting → Advance Setting → Modbus
```

Menu Advance Setting wymaga hasła instalatora (według instrukcji obsługi początkowo **2014**; instrukcja zaleca jego zmianę). W menu Modbus ustaw **Baud Rate** i **Address** zewnętrznego protokołu komunikacyjnego:

| Parametr | Domyślnie w szablonie | Domyślnie w falowniku (protokół V3.29) |
|----------|-----------------------|----------------------------------------|
| Adres Modbus (Slave ID) | 1 | 1 |
| Prędkość transmisji | 19200 | 19200 |
| Parzystość | None | None |
| Bity danych | 8 | 8 |
| Bity stopu | 1 | 1 |

> [!WARNING]
> Prędkość transmisji musi być taka sama w falowniku i w interfejsie Modbus RTU TapHome. Jeśli komunikacja zawodzi, najpierw sprawdź prędkość transmisji.

Falownik podaje też adres Modbus w rejestrze holding `H:0x00AF` i prędkość transmisji w rejestrze holding `H:0x00B0` (protokół V3.29).

### Parametr importu

Podczas importu szablonu parametr importu **Modbus Slave ID** (domyślnie `1`) musi być zgodny z adresem Modbus ustawionym na wyświetlaczu falownika.

## Możliwości urządzenia

### Energy Dashboard

| Urządzenie | Odczyt |
|---|---|
| **Produkcja fotowoltaiczna** | Moc wejściowa PV1 + PV2 + PV3 (`A:0x000A`, `A:0x000B`, `A:0x0124`) w kW; całkowita energia PV (`A:0x0094`–`0x0095`) w kWh. Moc PV1–PV3 i całkowita energia wyjściowa AC falownika (`A:0x0052`) są atrybutami serwisowymi. |
| **Z sieci** / **Do sieci** | Część poboru i oddawania mocy sieci z licznika lub CT (`A:0x0046`–`0x0047`, młodsze słowo najpierw) wraz z ich licznikami energii całkowitej (`A:0x004A` i `A:0x0048`, 0,01 kWh). |
| **Do akumulatora** / **Z baterii** | Część ładowania i rozładowania mocy baterii 1 (`A:0x0016`) wraz z całkowitą energią ładowania i rozładowania (`A:0x0021`, `A:0x001D`). |
| **Konsumpcja** | Obliczone zużycie domu: moc AC falownika minus moc oddawana do sieci. SolaX nie ma rejestru zużycia; odbiorniki na wyjściu EPS (zasilanie awaryjne) nie są uwzględnione. |
| **Bateria (SOC)** | Stan naładowania baterii 1 (`A:0x001C`). Pozostała energia i energia możliwa do naładowania (`A:0x0118`, `A:0x0116`) są atrybutami serwisowymi. |

### Menedżer energii

Dla smart rule Menedżer energii wybierz **Grid - power balance**. Ma ono znak: dodatni przy poborze z sieci, ujemny przy oddawaniu nadwyżki. Liczniki **Z sieci** i **Do sieci** nigdy nie są ujemne i nie pokazują nadwyżki.

### Monitorowanie

- **Battery 2 - state of charge** — drugie przyłącze baterii (BAT 2), z jego mocą i temperaturą jako atrybutami serwisowymi; bez drugiej baterii odczytuje 0
- **Battery - temperature** — odczytywana jako wartość ze znakiem, więc temperatury poniżej 0 °C są pokazywane poprawnie
- **Inverter - AC power** — suma mocy trzech faz na porcie AC falownika w kW
- **Grid - voltage L1** — z napięciem sieci L2, L3 i trzema częstotliwościami sieci jako atrybutami serwisowymi

### Ustawienia falownika

| Urządzenie | Odczyt | Zapis |
|---|---|---|
| **Settings - work mode** | `H:0x008B`: Self use, Feed-in priority, Backup, Manual, Peak shaving, Time of use (dwa ostatnie zależą od firmware) | `0x001F` |
| **Settings - manual mode** | `H:0x008C`: Stop charge and discharge, Force charge, Force discharge (działa tylko w trybie pracy Manual) | `0x0020` |
| **Settings - self-use minimum SOC** | starszy bajt `H:0x0093` | `0x0061` |
| **Settings - night charge from grid** | młodszy bajt `H:0x0093` | `0x0062` |
| **Settings - night charge target SOC** | `H:0x0094` | `0x0063` |
| **Settings - export limit** | `H:0x00B6`, w kW (10 W na jednostkę w X3) | `0x0042` |

SolaX odczytuje te ustawienia z innych adresów, niż je zapisuje, dlatego nie można użyć wbudowanej funkcji TapHome „zapisuj tylko przy różnicy”. Każdy skrypt zapisu najpierw odczytuje więc ustawienie i zapisuje (funkcja 06) tylko wtedy, gdy nowa wartość jest inna; gdy falownik zgłasza ustawienia jako zablokowane, najpierw zapisuje hasło ustawień 2014 do rejestru `0x0000`. Minimalny SOC i docelowy SOC ładowania nocnego nigdy nie spadają poniżej 10 % (zakres SolaX). Żadne z tych urządzeń nie zapisuje okresowo.

> [!WARNING]
> Te ustawienia to rejestry EEPROM (SolaX oznacza je ★, około 1 miliona cykli zapisu). Zmieniaj je rzadko i nigdy z częstych automatyzacji — do ładowania i rozładowania według cen spot używaj **Remote control - AC power target**.

### Remote control - AC power target

To urządzenie korzysta z trybu 1 zdalnego sterowania SolaX (VPP) — sterowania mocą na porcie AC falownika.

- **Znak:** dodatni cel oznacza, że falownik pobiera moc na swoim porcie AC (ładuje baterię, z sieci, jeśli PV nie wystarcza); ujemny cel oznacza, że oddaje moc (rozładowuje baterię, a to, czego dom nie zużyje, trafia do sieci). Wartość w kW.
- **0** kończy zdalne sterowanie: szablon jednorazowo zapisuje tryb 0 i falownik wraca do swojego trybu pracy. Cele poniżej 0,5 W liczą się jako 0.
- **Każda inna wartość:** jeśli falownik jest zablokowany, szablon najpierw zapisuje hasło ustawień 2014 (odblokowanie ginie po każdym restarcie falownika), a następnie zapisuje 13 rejestrów `0x007C`–`0x0088` w jednym żądaniu Modbus (funkcja 0x10): tryb 1, cel, czas trwania 120 s i limit czasu 60 s. Polecenie jest powtarzane co 60 s, dopóki cel nie wynosi 0. Jeśli TapHome przestanie je wysyłać, falownik utrzymuje cel do 2 minut, przez kolejną 1 minutę utrzymuje 0 W na swoim porcie AC, a potem sam wraca do swojego trybu pracy.
- **Tryb pracy Manual blokuje zdalne sterowanie.** SolaX nie uruchamia zdalnego sterowania, dopóki falownik jest w trybie pracy Manual — najpierw przełącz go na Self use (lub inny tryb).
- Falownik ogranicza cel do zakresu pokazanego w atrybutach modułu (minimalny i maksymalny cel zdalnego sterowania).
- Akcja modułu **End remote control** natychmiast zapisuje tryb 0. Dopóki cel nie wynosi 0, kolejne powtórzenie ponownie uruchamia zdalne sterowanie — ustaw cel na 0, aby zakończyć je na dobre.
- Nie łącz tego urządzenia ze zdalnym sterowaniem z SolaX Cloud ani od agregatora energii: gdy cel wynosi 0, szablon kończy każdy tryb zdalnego sterowania w ciągu 60 s.
- Zdalne sterowanie wymaga Core, który zapisuje wszystkie 13 rejestrów w jednym żądaniu. Tak jest w każdym Core od 2022 roku, jeśli moduł zachowuje `MaxPrefetchGroupSize` 32 z tego szablonu.
- Atrybut serwisowy **Actual AC power** pokazuje moc czynną, którą falownik raportuje na swoim porcie AC, w W (`A:0x0106`).

> [!WARNING]
> SolaX w swoim protokole nie oznacza rejestrów zdalnego sterowania (`0x007C`–`0x0088`) jako rejestrów EEPROM, ale też nie potwierdza na piśmie, że nimi nie są. Ten szablon opiera się na doświadczeniach społeczności Home Assistant i openHAB, które zapisują te rejestry co kilka sekund do kilku minut.

### Atrybuty i akcje modułu

- **Run mode** (atrybut serwisowy) — stan falownika jako tekst: Waiting, Checking, Normal, Fault, Permanent fault, Update, Off-grid waiting, Off-grid, Self testing, Idle, Standby, Remote control (kod 20); inne kody są pokazywane jako Other
- **Machine type** (atrybut serwisowy) — X1 (single-phase) lub X3 (three-phase), rejestr holding `H:0x0105`
- **Settings lock** (atrybut serwisowy) — Locked lub Unlocked (`A:0x0054`)
- **Remote control mode** (atrybut serwisowy) — aktywny tryb zdalnego sterowania (`A:0x0100`): Off, Power control, Energy target, SOC target
- **Remote control - maximum target** / **minimum target** (atrybuty serwisowe) — dozwolony zakres celu mocy raportowany przez falownik w W (`A:0x010A`, `A:0x010C`)
- **Unlock settings (password 2014)** (akcja serwisowa) — zapisuje `2014` do rejestru `0x0000`
- **End remote control** (akcja serwisowa) — zapisuje tryb 0 do rejestrów zdalnego sterowania `0x007C`–`0x0088`

### Wykrywanie błędów

Skrypt odczytu modułu zgłasza błąd TapHome, gdy stan pracy (`A:0x0009`) wynosi 3 (Fault) lub 4 (Permanent fault). Analizuje też bit po bicie dwa rejestry błędów, każdy błąd z własnym kodem błędu:

- **Kod błędu falownika** (32-bitowy, `A:0x0040`–`A:0x0041`, odczytywany młodszym słowem najpierw) — wszystkie 32 bity, od TZ Protect Fault, błędów napięcia sieci, PV, szyny DC i baterii, błędów izolacji i przegrzania po Parallel Fault, Hard Limit Fault i błędy przekaźników
- **Kod błędu Managera** (16-bitowy, `A:0x0043`) — Power Type Fault, Mgr EEPROM Fault, NTC Sample Invalid, niska i wysoka temperatura baterii, Meter Fault, Bypass Relay Fault i Fan 2 Fault jako błędy, Port OC Warning jako ostrzeżenie

## Rozwiązywanie problemów

### Brak komunikacji z falownikiem

1. Sprawdź, czy przewody RS-485 są na pinach **REMOTE_485A / REMOTE_485B** (1 + 2 lub 7 + 8 w pozycji RS485 mocowania kabla COM 1), a nie na pinach PARALLEL_485 3–6 ani na linii licznika portu COM 2
2. Sprawdź, czy prędkość transmisji jest zgodna między falownikiem (`Menu → Setting → Advance Setting → Modbus`) a interfejsem Modbus RTU TapHome — domyślnie 19200
3. Potwierdź, że parametr importu **Modbus Slave ID** jest zgodny z adresem Modbus falownika (domyślnie `1`)
4. Upewnij się, że do portu podłączony jest tylko **jeden** master Modbus
5. Zamień przewody A i B, jeśli polaryzacja kabla jest niepewna
6. Potwierdź, że kabel RS-485 nie przekracza **30 m**

### Cel zdalnego sterowania wraca do 0 zaraz po ustawieniu

Falownik jest w trybie pracy Manual, firmware nie obsługuje trybu 1 zdalnego sterowania albo cel jest poza minimalnym i maksymalnym celem pokazanym w atrybutach modułu. Najpierw sprawdź tryb pracy.

### Zapis ustawień jest odrzucany

Falownik jest zablokowany. Uruchom akcję modułu **Unlock settings (password 2014)**; blokada wraca po każdym restarcie falownika (atrybut modułu **Settings lock**).

### Wartości sieci wynoszą 0 lub Konsumpcja wygląda źle

**Grid - power balance**, **Z sieci**, **Do sieci** i **Konsumpcja** zależą od licznika lub CT falownika. Sprawdź jego okablowanie na porcie COM 2 i konfigurację w `Menu → Setting → Advance Setting → Meter/CT Setting`.

### Moc PV3 lub Bateria 2 pokazuje 0

PV3 istnieje tylko w modelach z trzema trackerami (na przykład X3-ULT-25K i X3-ULT-30K, patrz liczba MPPT w instrukcji obsługi); Bateria 2 tylko wtedy, gdy do BAT 2 podłączona jest druga bateria. Ukryj nieużywane urządzenia w TapHome.

## Dostępne urządzenia 19

Te urządzenia pojawią się w TapHome po imporcie.

SolaX X3-Ultra Moduł

Atrybuty serwisowe

|                                 |
|---------------------------------|
| Run mode                        |
| Machine type                    |
| Settings lock                   |
| Remote control mode             |
| Remote control - maximum target |
| Remote control - minimum target |

Akcje serwisowe

|                                 |
|---------------------------------|
| Unlock settings (password 2014) |
| End remote control              |

Odczyt (moduł)

```taphome
VAR mode := MODBUSR(A, 0x0009, UInt16);
IF(mode = 3, ADDERROR(1, "Inverter fault (run mode 3)"));
IF(mode = 4, ADDERROR(2, "Inverter permanent fault (run mode 4)"));
VAR inv := MODBUSR(A, 0x0040, LittleEndianUint32);
IF(GETBIT(inv, 0) = 1, ADDERROR(100, "TZ Protect Fault"));
IF(GETBIT(inv, 1) = 1, ADDERROR(101, "Grid Lost Fault"));
IF(GETBIT(inv, 2) = 1, ADDERROR(102, "Grid Volt Fault"));
IF(GETBIT(inv, 3) = 1, ADDERROR(103, "Grid Freq Fault"));
IF(GETBIT(inv, 4) = 1, ADDERROR(104, "PV Volt Fault"));
IF(GETBIT(inv, 5) = 1, ADDERROR(105, "Bus Volt Fault"));
IF(GETBIT(inv, 6) = 1, ADDERROR(106, "Bat Volt Fault"));
IF(GETBIT(inv, 7) = 1, ADDERROR(107, "AC10mins Volt Fault"));
IF(GETBIT(inv, 8) = 1, ADDERROR(108, "DCI OCP Fault"));
IF(GETBIT(inv, 9) = 1, ADDERROR(109, "DCV OCP Fault"));
IF(GETBIT(inv, 10) = 1, ADDERROR(110, "SW OCP Fault"));
IF(GETBIT(inv, 11) = 1, ADDERROR(111, "RC OCP Fault"));
IF(GETBIT(inv, 12) = 1, ADDERROR(112, "Isolation Fault"));
IF(GETBIT(inv, 13) = 1, ADDERROR(113, "Temp Over Fault"));
IF(GETBIT(inv, 14) = 1, ADDERROR(114, "BatConnDir Fault"));
IF(GETBIT(inv, 15) = 1, ADDERROR(115, "Off-grid Overload"));
IF(GETBIT(inv, 16) = 1, ADDERROR(116, "Overload"));
IF(GETBIT(inv, 17) = 1, ADDERROR(117, "Bat Power Low"));
IF(GETBIT(inv, 18) = 1, ADDERROR(118, "BMS Lost"));
IF(GETBIT(inv, 19) = 1, ADDERROR(119, "Fan Fault"));
IF(GETBIT(inv, 20) = 1, ADDERROR(120, "Low Temp Fault"));
IF(GETBIT(inv, 21) = 1, ADDERROR(121, "Parallel Fault"));
IF(GETBIT(inv, 22) = 1, ADDERROR(122, "Hard Limit Fault"));
IF(GETBIT(inv, 23) = 1, ADDERROR(123, "INV Volt Sample Fault"));
IF(GETBIT(inv, 24) = 1, ADDERROR(124, "Inner Comm Fault"));
IF(GETBIT(inv, 25) = 1, ADDERROR(125, "INV EEPROM Fault"));
IF(GETBIT(inv, 26) = 1, ADDERROR(126, "RCD Fault"));
IF(GETBIT(inv, 27) = 1, ADDERROR(127, "Grid Relay Fault"));
IF(GETBIT(inv, 28) = 1, ADDERROR(128, "Off-grid Relay Fault"));
IF(GETBIT(inv, 29) = 1, ADDERROR(129, "PV ConnDir Fault"));
IF(GETBIT(inv, 30) = 1, ADDERROR(130, "Charger Relay Fault"));
IF(GETBIT(inv, 31) = 1, ADDERROR(131, "Earth Relay Fault"));
VAR mgr := MODBUSR(A, 0x0043, UInt16);
IF(GETBIT(mgr, 0) = 1, ADDERROR(200, "Power Type Fault"));
IF(GETBIT(mgr, 1) = 1, ADDWARNING(201, "Port OC Warning"));
IF(GETBIT(mgr, 2) = 1, ADDERROR(202, "Mgr EEPROM Fault"));
IF(GETBIT(mgr, 4) = 1, ADDERROR(204, "NTC Sample Invalid"));
IF(GETBIT(mgr, 5) = 1, ADDERROR(205, "Battery Temperature Low"));
IF(GETBIT(mgr, 6) = 1, ADDERROR(206, "Battery Temperature High"));
IF(GETBIT(mgr, 9) = 1, ADDERROR(209, "Meter Fault"));
IF(GETBIT(mgr, 10) = 1, ADDERROR(210, "Bypass Relay Fault"));
IF(GETBIT(mgr, 11) = 1, ADDERROR(211, "Fan 2 Fault"));
```

Atrybuty serwisowe

Run mode

```taphome
SWITCH(MODBUSR(A, 0x0009, UInt16), 0, "Waiting", 1, "Checking", 2, "Normal", 3, "Fault", 4, "Permanent fault", 5, "Update", 6, "Off-grid waiting", 7, "Off-grid", 8, "Self testing", 9, "Idle", 10, "Standby", 20, "Remote control", "Other")
```

Machine type

```taphome
SWITCH(MODBUSR(H, 0x0105, UInt16), 1, "X1 (single-phase)", 3, "X3 (three-phase)", "Unknown")
```

Settings lock

```taphome
SWITCH(MODBUSR(A, 0x0054, UInt16), 0, "Locked", 1, "Unlocked", "Unknown")
```

Remote control mode

```taphome
SWITCH(MODBUSR(A, 0x0100, UInt16), 0, "Off", 1, "Power control", 2, "Energy target", 3, "SOC target", "Other")
```

Remote control - maximum target

```taphome
TOSTRING(MODBUSR(A, 0x010A, LittleEndianInt32)) + " W"
```

Remote control - minimum target

```taphome
TOSTRING(MODBUSR(A, 0x010C, LittleEndianInt32)) + " W"
```

Akcje serwisowe

Unlock settings (password 2014)

```taphome
MODBUSW(SH, 0x0000, Uint16, 2014);
```

End remote control

```taphome
MODBUSW(H, 0x007C, Uint16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
```

${deviceType\_PVProduction} Licznik energii

Atrybuty serwisowe

|                                   |
|-----------------------------------|
| PV1 power                         |
| PV2 power                         |
| PV3 power                         |
| Inverter AC output - total energy |

Odczyt całkowitego zużycia

```taphome
MODBUSR(A, 0x0094, LittleEndianUint32) / 10
```

Odczyt zapotrzebowania

```taphome
(MODBUSR(A, 0x000A, UInt16) + MODBUSR(A, 0x000B, UInt16) + MODBUSR(A, 0x0124, UInt16)) / 1000
```

Atrybuty serwisowe

PV1 power

```taphome
TOSTRING(MODBUSR(A, 0x000A, UInt16)) + " W"
```

PV2 power

```taphome
TOSTRING(MODBUSR(A, 0x000B, UInt16)) + " W"
```

PV3 power

```taphome
TOSTRING(MODBUSR(A, 0x0124, UInt16)) + " W"
```

Inverter AC output - total energy

```taphome
TOSTRING(MODBUSR(A, 0x0052, LittleEndianUint32) / 10, "F1") + " kWh"
```

Grid - power balance Licznik energii

Odczyt zapotrzebowania

```taphome
MODBUSR(A, 0x0046, LittleEndianInt32) / -1000
```

${deviceType\_PVFromGrid} Licznik energii

Odczyt całkowitego zużycia

```taphome
MODBUSR(A, 0x004A, LittleEndianUint32) / 100
```

Odczyt zapotrzebowania

```taphome
MAX(-MODBUSR(A, 0x0046, LittleEndianInt32), 0) / 1000
```

${deviceType\_PVToGrid} Licznik energii

Odczyt całkowitego zużycia

```taphome
MODBUSR(A, 0x0048, LittleEndianUint32) / 100
```

Odczyt zapotrzebowania

```taphome
MAX(MODBUSR(A, 0x0046, LittleEndianInt32), 0) / 1000
```

${deviceType\_PVToBattery} Licznik energii

Odczyt całkowitego zużycia

```taphome
MODBUSR(A, 0x0021, LittleEndianUint32) / 10
```

Odczyt zapotrzebowania

```taphome
MAX(MODBUSR(A, 0x0016, Int16), 0) / 1000
```

${deviceType\_PVFromBattery} Licznik energii

Odczyt całkowitego zużycia

```taphome
MODBUSR(A, 0x001D, LittleEndianUint32) / 10
```

Odczyt zapotrzebowania

```taphome
MAX(-MODBUSR(A, 0x0016, Int16), 0) / 1000
```

${deviceType\_PVLoad} Licznik energii

Odczyt zapotrzebowania

```taphome
((MODBUSR(A, 0x006C, Int16) + MODBUSR(A, 0x0070, Int16) + MODBUSR(A, 0x0074, Int16)) - MODBUSR(A, 0x0046, LittleEndianInt32)) / 1000
```

${deviceType\_BatterySOC} Wejście analogowe

Atrybuty serwisowe

|                   |
|-------------------|
| Remaining energy  |
| Chargeable energy |

Odczyt poziomu wejściowego

```taphome
MODBUSR(A, 0x001C, UInt16) / 100
```

Atrybuty serwisowe

Remaining energy

```taphome
TOSTRING(MODBUSR(A, 0x0118, LittleEndianUint32) / 1000, "F2") + " kWh"
```

Chargeable energy

```taphome
TOSTRING(MODBUSR(A, 0x0116, LittleEndianUint32) / 1000, "F2") + " kWh"
```

Battery 2 - state of charge Wejście analogowe

Atrybuty serwisowe

|                       |
|-----------------------|
| Battery 2 power       |
| Battery 2 temperature |

Odczyt poziomu wejściowego

```taphome
MODBUSR(A, 0x012D, UInt16) / 100
```

Atrybuty serwisowe

Battery 2 power

```taphome
TOSTRING(MODBUSR(A, 0x0129, Int16)) + " W"
```

Battery 2 temperature

```taphome
TOSTRING(MODBUSR(A, 0x0131, Int16)) + " °C"
```

Battery - temperature Czujnik temperatury

Odczyt temperatury

```taphome
MODBUSR(A, 0x0018, Int16)
```

Inverter - AC power Zmienna

Odczyt

```taphome
(MODBUSR(A, 0x006C, Int16) + MODBUSR(A, 0x0070, Int16) + MODBUSR(A, 0x0074, Int16)) / 1000
```

Grid - voltage L1 Zmienna

Atrybuty serwisowe

|                   |
|-------------------|
| Grid voltage L2   |
| Grid voltage L3   |
| Grid frequency L1 |
| Grid frequency L2 |
| Grid frequency L3 |

Odczyt

```taphome
MODBUSR(A, 0x006A, UInt16) / 10
```

Atrybuty serwisowe

Grid voltage L2

```taphome
TOSTRING(MODBUSR(A, 0x006E, UInt16) / 10, "F1") + " V"
```

Grid voltage L3

```taphome
TOSTRING(MODBUSR(A, 0x0072, UInt16) / 10, "F1") + " V"
```

Grid frequency L1

```taphome
TOSTRING(MODBUSR(A, 0x006D, UInt16) / 100, "F2") + " Hz"
```

Grid frequency L2

```taphome
TOSTRING(MODBUSR(A, 0x0071, UInt16) / 100, "F2") + " Hz"
```

Grid frequency L3

```taphome
TOSTRING(MODBUSR(A, 0x0075, UInt16) / 100, "F2") + " Hz"
```

Settings - work mode Przełącznik wielowartościowy

Wartości / Stany: Self use · Feed-in priority · Backup · Manual · Peak shaving · Time of use

Odczyt stanu przełącznika

```taphome
MODBUSR(H, 0x008B, UInt16)
```

Zapis stanu przełącznika

```taphome
IF(MODBUSR(H, 0x008B, UInt16) != Mu AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(MODBUSR(H, 0x008B, UInt16) != Mu, MODBUSW(SH, 0x001F, Uint16, Mu));
```

Settings - manual mode Przełącznik wielowartościowy

Wartości / Stany: Stop charge and discharge · Force charge · Force discharge

Odczyt stanu przełącznika

```taphome
MODBUSR(H, 0x008C, UInt16)
```

Zapis stanu przełącznika

```taphome
IF(MODBUSR(H, 0x008C, UInt16) != Mu AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(MODBUSR(H, 0x008C, UInt16) != Mu, MODBUSW(SH, 0x0020, Uint16, Mu));
```

Settings - self-use minimum SOC Ściemniacz

Odczyt poziomu

```taphome
GETBYTE(MODBUSR(H, 0x0093, UInt16), 1) / 100
```

Zapis poziomu

```taphome
VAR v := MAX(ROUND(Le * 100), 10);
IF(GETBYTE(MODBUSR(H, 0x0093, UInt16), 1) != v AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(GETBYTE(MODBUSR(H, 0x0093, UInt16), 1) != v, MODBUSW(SH, 0x0061, Uint16, v));
```

Settings - night charge from grid Przełącznik

Wartości / Stany: ON · OFF

Odczyt stanu przełącznika

```taphome
GETBYTE(MODBUSR(H, 0x0093, UInt16), 0)
```

Zapis stanu przełącznika

```taphome
IF(GETBYTE(MODBUSR(H, 0x0093, UInt16), 0) != St AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(GETBYTE(MODBUSR(H, 0x0093, UInt16), 0) != St, MODBUSW(SH, 0x0062, Uint16, St));
```

Settings - night charge target SOC Ściemniacz

Odczyt poziomu

```taphome
MODBUSR(H, 0x0094, UInt16) / 100
```

Zapis poziomu

```taphome
VAR v := MAX(ROUND(Le * 100), 10);
IF(MODBUSR(H, 0x0094, UInt16) != v AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(MODBUSR(H, 0x0094, UInt16) != v, MODBUSW(SH, 0x0063, Uint16, v));
```

Settings - export limit Zmienna

Odczyt

```taphome
MODBUSR(H, 0x00B6, UInt16) / 100
```

Zapis

```taphome
VAR v := MAX(ROUND(Va * 100), 0);
IF(MODBUSR(H, 0x00B6, UInt16) != v AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(MODBUSR(H, 0x00B6, UInt16) != v, MODBUSW(SH, 0x0042, Uint16, v));
```

Remote control - AC power target Zmienna

Atrybuty serwisowe

|                 |
|-----------------|
| Actual AC power |

Odczyt

```taphome
IF(MODBUSR(A, 0x0100, UInt16) = 1, MODBUSR(A, 0x0102, LittleEndianInt32) / 1000, 0)
```

Zapis

```taphome
VAR w := ROUND(Va * 1000);
VAR u := IF(w < 0, w + 4294967296, w);
IF(w = 0 AND MODBUSR(A, 0x0100, UInt16) != 0, MODBUSW(H, 0x007C, Uint16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
IF(w != 0 AND MODBUSR(A, 0x0054, UInt16) = 0, MODBUSW(SH, 0x0000, Uint16, 2014));
IF(w != 0, MODBUSW(H, 0x007C, Uint16, 1, 1, MOD(u, 65536), FLOOR(u / 65536), 0, 0, 120, 0, 0, 0, 0, 0, 60));
```

Atrybuty serwisowe

Actual AC power

```taphome
TOSTRING(MODBUSR(A, 0x0106, LittleEndianInt32)) + " W"
```

**Połączenie:** Modbus RTU • 19200 baud• 8N1 • Slave ID: $\[SlaveId]

## Parametry importu

Te wartości podajesz podczas importu pliku XML.

| Pytanie w aplikacji | Domyślnie |
|---------------------|-----------|
| Modbus Slave ID     | `1`       |

## Powiązana dokumentacja

- [Modbus Integration](https://taphome.com/pl/compatibility/modbus-guide/)
- [Modbus](https://taphome.com/pl/docs/integration/modbus/)
- [Prosta konfiguracja za pomocą szablonów](https://taphome.com/pl/docs/integration/modbus/templates/)
- [Skrypty Modbus i prefetch](https://taphome.com/pl/docs/script/modbus-scripts/)
- [Funkcje Modbus](https://taphome.com/pl/docs/script/modbus/)
- [Typy danych Modbus](https://taphome.com/pl/docs/script/modbus-data-types/)

