---
title: "SolaX X3-Ultra Hybrid Inverter — monitoring and power control (Modbus RTU)"
description: "SolaX X3-Ultra über Modbus RTU (RS-485): Energy-Dashboard-Zähler, Batterie-SOC, Netz, Fehler und AC-Leistungssteuerung, die die Batterie lädt oder entlädt."
url: "https://taphome.com/de/compatibility/solax-x3-ultra-power-control-modbus-rtu/"
language: de
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: ["Wie integriert man den Hybrid-Wechselrichter SolaX X3-Ultra in TapHome?","Was misst und steuert die Vorlage für die Leistungssteuerung des SolaX X3-Ultra?","Wie verdrahtet man RS-485 vom COM-1-Port des SolaX X3-Ultra zu TapHome?","Wie lädt oder entlädt man die Batterie des SolaX X3-Ultra aus TapHome nach Spotpreisen für Strom?","Warum fällt der Zielwert der Fernsteuerung des SolaX X3-Ultra direkt nach dem Setzen auf 0 zurück?","Welches Gerät soll der TapHome-Energiemanager beim SolaX X3-Ultra verwenden?"]
---

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

Kommunikation: Modbus RTU

## Integrationsanleitung

Der SolaX X3-Ultra (X3-ULT-15K, 20K, 25K, 30K) ist ein dreiphasiger Hybrid-Wechselrichter für PV und Batterie. Diese Community-Vorlage von Martin Keller verbindet ihn mit TapHome über **Modbus RTU am RS-485-Port COM 1** (19200 Baud, 8N1) und basiert auf den Leseregistern des SolaX Modbus-Protokolls V3.29 und auf dem SolaX Modbus-Protokoll V001.02. Sie bietet einen vollständigen Satz an Zählern für das Energy Dashboard, Batterie-, Netz- und Fehlerüberwachung, Wechselrichter-Einstellungen, die nur dann geschrieben werden, wenn sich ihr Wert tatsächlich ändert, sowie die Fernsteuerung der AC-Leistung (SolaX-Fernsteuerungsmodus 1) — das Laden der Batterie aus dem Netz oder das Entladen ins Netz auf Befehl, zum Beispiel nach Spotpreisen für Strom.

## So erhalten Sie die Vorlage

Community-Vorlagen werden in der Vorlagenliste der TapHome-App nicht angeboten. Melden Sie sich bei portal.taphome.com an, laden Sie das XML dieser Vorlage herunter und importieren Sie es in den Core an der Modbus-RTU-Schnittstelle (oder an einer Modbus-TCP-Schnittstelle, wenn ein RS-485-zu-Ethernet-Gateway verwendet wird). Für die Überwachung ohne Fernsteuerung der Leistung steht die offizielle Vorlage [SolaX X3 Hybrid Ultra](https://taphome.com/de/compatibility/solax-hybrid-ultra-x3/) zur Verfügung. Ein früher aus der offiziellen Vorlage importiertes Modul aktualisiert sich nicht selbst — importieren Sie diese Vorlage als neues Modul und entfernen Sie das alte.

## Hardware-Anschluss

Der X3-Ultra hat einen einzigen multifunktionalen **COM-1-Port** (RJ45-Stecker mit beschrifteter Kabelhalterung). Dieselben physischen Pins erfüllen unterschiedliche Funktionen, je nachdem, welche beschriftete Position der Kabelhalterung verwendet wird. Für die Modbus-Integration eines Drittanbieters verwenden Sie die Position **RS485** — die Leitungen **REMOTE_485A** und **REMOTE_485B**.

### Pinbelegung des COM-1-Ports

![Pin-Zuordnung des COM-1-Ports des SolaX X3-Ultra für alle sechs beschrifteten Positionen (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)

Pin-Zuordnung der **RS485-Position** (die einzige für TapHome relevante Position):

| Pin | Signal | TapHome-Verdrahtung |
|-----|--------|---------------------|
| **1** | **REMOTE_485A** | A+ / D+ |
| **2** | **REMOTE_485B** | B− / D− |
| 3 | PARALLEL_485AA | nicht verwenden (nur SolaX-Zubehör) |
| 4 | PARALLEL_485AA | nicht verwenden (nur SolaX-Zubehör) |
| 5 | PARALLEL_485BB | nicht verwenden (nur SolaX-Zubehör) |
| 6 | PARALLEL_485BB | nicht verwenden (nur SolaX-Zubehör) |
| **7** | **REMOTE_485A** | dasselbe Signal wie Pin 1 |
| **8** | **REMOTE_485B** | dasselbe Signal wie Pin 2 |

> [!WARNING]
> Die Pins 3–6 gehören zum SolaX-Kanal PARALLEL_485 und sind für SolaX-Produkte reserviert (Adapter Box G2, EV-Charger, DataHub). Die Pins 1, 2, 7 und 8 sind für Geräte bestimmt, die keine SolaX-Produkte sind. Schließen Sie **keinen** Modbus-Master eines Drittanbieters an die Pins 3–6 an.

### RS-485-Verdrahtung

![Installation des RJ45-Terminals in die RS485-Position der COM-1-Kabelhalterung](https://taphome.com/images/compatibility/solax-x3-ultra-power-control-modbus-rtu/wiring-rs485_hu_ac07cf89af382c1.jpg)

Verdrahtungsregeln aus dem X3-Ultra-Benutzerhandbuch (Abschnitt 8.6.4):

- **Kabeltyp:** Netzwerkkabel CAT5E oder CAT6
- **Maximale Länge:** das RS-485-Kommunikationskabel darf **30 m** nicht überschreiten
- **RJ45-Stecker:** der vorhandene Stecker des Kabels wird abgeschnitten und ein neuer RJ45-Stecker gemäß der Pin-Zuordnung gecrimpt; nicht alle Geräte akzeptieren ein voll belegtes 8-poliges Netzwerkkabel
- **Position in der Kabelhalterung:** der RJ45-Stecker kommt in den Steckplatz mit der Beschriftung **RS485** (nicht in Parallel-1, Parallel-2, BMS-1, BMS-2 oder DRM); der Stecker rastet im COM-1-Port ein und wird mit der Überwurfmutter gesichert
- **Ein einziger Modbus-Master:** nur ein Modbus-Master darf den Port nutzen. Trennen Sie andere Modbus-Überwachungen am selben Port, sonst antwortet der Wechselrichter beiden und die Messwerte werden instabil

Das Benutzerhandbuch nennt keine Regel für den RS-485-Busabschluss an der Position RS485 von COM 1.

### Zähler oder CT für die Netzwerte

Die Netzgeräte dieser Vorlage (**Grid - power balance**, **Aus dem Netzwerk**, **Zum Netzwerk**, **Verbrauch**) lesen die Einspeiseleistung, die der Wechselrichter mit seinem eigenen Zähler oder CT misst. Der Zähler oder CT wird am Port **COM 2** angeschlossen (Meter/CT: METER_485A an Pin 4, METER_485B an Pin 5, oder die CT-Eingänge) und am Wechselrichter-Display unter `Menu → Setting → Advance Setting → Meter/CT Setting` eingerichtet. Das ist eine separate RS-485-Leitung — schließen Sie TapHome nicht daran an.

### Anschlussoptionen

- **Direkte Modbus-RTU-Verbindung:** verdrahten Sie das RS485-Paar von COM 1 direkt mit dem RS-485-Bus des TapHome Core. Niedrigste Latenz, empfohlen für die Fernsteuerung der Leistung.
- **RS-485-zu-Ethernet-Gateway:** wenn der Wechselrichter weit vom TapHome Core entfernt ist, kann ein RS-485-zu-Ethernet-Gateway eines Drittanbieters am RS485-Paar von COM 1 verwendet werden; die Vorlage wird dann an einer Modbus-TCP-Schnittstelle importiert.
- **SolaX-Überwachungsmodul:** der Wechselrichter selbst unterstützt Modbus TCP nicht. Modbus TCP (Port 502) ist nur über ein SolaX-Überwachungsmodul verfügbar, mit einem Abfragezyklus von etwa 1 Sekunde (Protokoll V3.29).

## Konfiguration

### Modbus-Kommunikation am Wechselrichter aktivieren

Navigieren Sie am Wechselrichter-LCD zu:

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

Das Menü Advance Setting erfordert das Installateur-Passwort (laut Benutzerhandbuch anfangs **2014**; das Handbuch empfiehlt, es zu ändern). Stellen Sie im Menü Modbus die **Baud Rate** und die **Address** des externen Kommunikationsprotokolls ein:

| Parameter | Standard der Vorlage | Standard des Wechselrichters (Protokoll V3.29) |
|-----------|----------------------|------------------------------------------------|
| Modbus-Adresse (Slave-ID) | 1 | 1 |
| Baudrate | 19200 | 19200 |
| Parität | None | None |
| Datenbits | 8 | 8 |
| Stoppbits | 1 | 1 |

> [!WARNING]
> Die Baudrate muss am Wechselrichter und an der Modbus-RTU-Schnittstelle von TapHome gleich sein. Wenn die Kommunikation fehlschlägt, prüfen Sie zuerst die Baudrate.

Der Wechselrichter meldet die Modbus-Adresse außerdem im Holding-Register `H:0x00AF` und die Baudrate im Holding-Register `H:0x00B0` (Protokoll V3.29).

### Importparameter

Beim Import der Vorlage muss der Importparameter **Modbus Slave ID** (Standard `1`) mit der am Wechselrichter-Display eingestellten Modbus-Adresse übereinstimmen.

## Gerätefunktionen

### Energy Dashboard

| Gerät | Messwert |
|---|---|
| **PV-Produktion** | Eingangsleistung PV1 + PV2 + PV3 (`A:0x000A`, `A:0x000B`, `A:0x0124`) in kW; gesamte PV-Energie (`A:0x0094`–`0x0095`) in kWh. Die Leistung von PV1–PV3 und die gesamte AC-Ausgangsenergie des Wechselrichters (`A:0x0052`) sind Service-Attribute. |
| **Aus dem Netzwerk** / **Zum Netzwerk** | Bezugs- und Einspeiseanteil der Netzleistung vom Zähler oder CT (`A:0x0046`–`0x0047`, niederwertiges Wort zuerst) mit ihren Gesamtenergiezählern (`A:0x004A` und `A:0x0048`, 0,01 kWh). |
| **Zur Batterie** / **Von der Batterie** | Lade- und Entladeanteil der Leistung von Batterie 1 (`A:0x0016`) mit der gesamten Lade- und Entladeenergie (`A:0x0021`, `A:0x001D`). |
| **Verbrauch** | Berechneter Hausverbrauch: AC-Leistung des Wechselrichters minus Netzeinspeisung. SolaX hat kein Verbrauchsregister; Verbraucher am EPS-Ausgang (Notstrom) sind nicht enthalten. |
| **Batterie (SOC)** | Ladezustand von Batterie 1 (`A:0x001C`). Die verbleibende und die ladbare Energie (`A:0x0118`, `A:0x0116`) sind Service-Attribute. |

### Energiemanager

Wählen Sie für die smart rule Energiemanager das Gerät **Grid - power balance**. Es ist vorzeichenbehaftet: positiv beim Bezug aus dem Netz, negativ bei der Einspeisung von Überschuss. Die Zähler **Aus dem Netzwerk** und **Zum Netzwerk** werden nie negativ und zeigen keinen Überschuss.

### Überwachung

- **Battery 2 - state of charge** — der zweite Batterieanschluss (BAT 2), mit seiner Leistung und Temperatur als Service-Attribute; liefert ohne zweite Batterie 0
- **Battery - temperature** — wird vorzeichenbehaftet gelesen, sodass Temperaturen unter 0 °C korrekt angezeigt werden
- **Inverter - AC power** — Summe der drei Phasenleistungen am AC-Port des Wechselrichters in kW
- **Grid - voltage L1** — mit der Netzspannung L2, L3 und den drei Netzfrequenzen als Service-Attribute

### Wechselrichter-Einstellungen

| Gerät | Lesen | Schreiben |
|---|---|---|
| **Settings - work mode** | `H:0x008B`: Self use, Feed-in priority, Backup, Manual, Peak shaving, Time of use (die letzten beiden hängen von der Firmware ab) | `0x001F` |
| **Settings - manual mode** | `H:0x008C`: Stop charge and discharge, Force charge, Force discharge (nur im Arbeitsmodus Manual wirksam) | `0x0020` |
| **Settings - self-use minimum SOC** | höherwertiges Byte von `H:0x0093` | `0x0061` |
| **Settings - night charge from grid** | niederwertiges Byte von `H:0x0093` | `0x0062` |
| **Settings - night charge target SOC** | `H:0x0094` | `0x0063` |
| **Settings - export limit** | `H:0x00B6`, in kW (10 W pro Zählschritt bei X3) | `0x0042` |

SolaX liest diese Einstellungen von anderen Adressen, als es sie schreibt, daher kann die in TapHome integrierte Funktion „nur schreiben, wenn abweichend“ nicht verwendet werden. Jedes Schreibskript liest deshalb zuerst die Einstellung und schreibt (Funktion 06) nur, wenn sich der neue Wert unterscheidet; meldet der Wechselrichter die Einstellungen als gesperrt, schreibt es zuerst das Einstellungspasswort 2014 in das Register `0x0000`. Der minimale SOC und der Zielwert der Nachtladung gehen nie unter 10 % (der SolaX-Bereich). Keines dieser Geräte schreibt periodisch.

> [!WARNING]
> Diese Einstellungen sind EEPROM-Register (von SolaX mit ★ gekennzeichnet, etwa 1 Million Schreibzyklen). Ändern Sie sie selten und nie aus häufigen Automatisierungen — für das Laden und Entladen nach Spotpreisen verwenden Sie **Remote control - AC power target**.

### Remote control - AC power target

Dieses Gerät nutzt den SolaX-Fernsteuerungsmodus (VPP) 1 — die Leistungssteuerung am AC-Port des Wechselrichters.

- **Vorzeichen:** ein positiver Zielwert bedeutet, dass der Wechselrichter an seinem AC-Port Leistung aufnimmt (er lädt die Batterie, aus dem Netz, wenn die PV-Leistung nicht reicht); ein negativer Zielwert bedeutet, dass er Leistung abgibt (er entlädt die Batterie, und was das Haus nicht verbraucht, geht ins Netz). Wert in kW.
- **0** beendet die Fernsteuerung: die Vorlage schreibt einmal Modus 0, und der Wechselrichter kehrt in seinen Arbeitsmodus zurück. Zielwerte unter 0,5 W gelten als 0.
- **Jeder andere Wert:** ist der Wechselrichter gesperrt, schreibt die Vorlage zuerst das Einstellungspasswort 2014 (die Entsperrung geht nach jedem Neustart des Wechselrichters verloren) und dann die 13 Register `0x007C`–`0x0088` in einer einzigen Modbus-Anfrage (Funktion 0x10): Modus 1, Zielwert, Dauer 120 s und Timeout 60 s. Der Befehl wird alle 60 s wiederholt, solange der Zielwert nicht 0 ist. Sendet TapHome ihn nicht mehr, hält der Wechselrichter den Zielwert bis zu 2 Minuten, hält danach 1 weitere Minute 0 W an seinem AC-Port und kehrt dann selbstständig in seinen Arbeitsmodus zurück.
- **Der Arbeitsmodus Manual blockiert die Fernsteuerung.** SolaX startet die Fernsteuerung nicht, solange sich der Wechselrichter im Arbeitsmodus Manual befindet — schalten Sie ihn zuerst auf Self use (oder einen anderen Modus).
- Der Wechselrichter begrenzt den Zielwert auf den Bereich, der in den Modulattributen angezeigt wird (minimaler und maximaler Zielwert der Fernsteuerung).
- Die Modulaktion **End remote control** schreibt sofort Modus 0. Solange der Zielwert nicht 0 ist, startet die nächste Wiederholung die Fernsteuerung erneut — setzen Sie den Zielwert auf 0, um sie dauerhaft zu beenden.
- Kombinieren Sie dieses Gerät nicht mit einer Fernsteuerung aus der SolaX Cloud oder durch einen Energieaggregator: solange der Zielwert 0 ist, beendet die Vorlage jeden Fernsteuerungsmodus innerhalb von 60 s.
- Die Fernsteuerung erfordert einen Core, der alle 13 Register in einer einzigen Anfrage schreibt. Das ist bei jedem Core seit 2022 der Fall, wenn das Modul den Wert `MaxPrefetchGroupSize` 32 aus dieser Vorlage beibehält.
- Das Service-Attribut **Actual AC power** zeigt die Wirkleistung, die der Wechselrichter an seinem AC-Port meldet, in W (`A:0x0106`).

> [!WARNING]
> SolaX kennzeichnet die Fernsteuerungsregister (`0x007C`–`0x0088`) in seinem Protokoll nicht als EEPROM-Register, bestätigt das Gegenteil aber auch nicht schriftlich. Diese Vorlage stützt sich auf die Erfahrung der Home-Assistant- und openHAB-Communitys, die diese Register alle paar Sekunden bis Minuten schreiben.

### Modulattribute und -aktionen

- **Run mode** (Service-Attribut) — Zustand des Wechselrichters als Text: Waiting, Checking, Normal, Fault, Permanent fault, Update, Off-grid waiting, Off-grid, Self testing, Idle, Standby, Remote control (Code 20); andere Codes werden als Other angezeigt
- **Machine type** (Service-Attribut) — X1 (single-phase) oder X3 (three-phase), Holding-Register `H:0x0105`
- **Settings lock** (Service-Attribut) — Locked oder Unlocked (`A:0x0054`)
- **Remote control mode** (Service-Attribut) — aktiver Fernsteuerungsmodus (`A:0x0100`): Off, Power control, Energy target, SOC target
- **Remote control - maximum target** / **minimum target** (Service-Attribute) — vom Wechselrichter gemeldeter zulässiger Bereich des Leistungszielwerts in W (`A:0x010A`, `A:0x010C`)
- **Unlock settings (password 2014)** (Service-Aktion) — schreibt `2014` in das Register `0x0000`
- **End remote control** (Service-Aktion) — schreibt Modus 0 in die Fernsteuerungsregister `0x007C`–`0x0088`

### Fehlererkennung

Das Leseskript des Moduls meldet einen TapHome-Fehler, wenn der Betriebszustand (`A:0x0009`) 3 (Fault) oder 4 (Permanent fault) ist. Außerdem wertet es zwei Fehlerregister Bit für Bit aus, jeden Fehler mit einem eigenen Fehlercode:

- **Wechselrichter-Fehlercode** (32 Bit, `A:0x0040`–`A:0x0041`, niederwertiges Wort zuerst gelesen) — alle 32 Bits, von TZ Protect Fault über Netz-, PV-, Bus- und Batteriespannungsfehler, Isolations- und Übertemperaturfehler bis zu Parallel Fault, Hard Limit Fault und den Relaisfehlern
- **Manager-Fehlercode** (16 Bit, `A:0x0043`) — Power Type Fault, Mgr EEPROM Fault, NTC Sample Invalid, niedrige und hohe Batterietemperatur, Meter Fault, Bypass Relay Fault und Fan 2 Fault als Fehler, Port OC Warning als Warnung

## Fehlerbehebung

### Keine Kommunikation mit dem Wechselrichter

1. Überprüfen Sie, dass die RS-485-Adern an den Pins **REMOTE_485A / REMOTE_485B** liegen (1 + 2 oder 7 + 8 in der Position RS485 der COM-1-Kabelhalterung), nicht an den PARALLEL_485-Pins 3–6 und nicht an der Zählerleitung von COM 2
2. Prüfen Sie, dass die Baudrate am Wechselrichter (`Menu → Setting → Advance Setting → Modbus`) und an der Modbus-RTU-Schnittstelle von TapHome übereinstimmt — standardmäßig 19200
3. Bestätigen Sie, dass der Importparameter **Modbus Slave ID** mit der Modbus-Adresse des Wechselrichters übereinstimmt (Standard `1`)
4. Stellen Sie sicher, dass nur **ein** Modbus-Master am Port angeschlossen ist
5. Tauschen Sie die A- und B-Adern, falls die Kabelpolarität unsicher ist
6. Bestätigen Sie, dass das RS-485-Kabel **30 m** nicht überschreitet

### Der Zielwert der Fernsteuerung fällt direkt nach dem Setzen auf 0 zurück

Der Wechselrichter befindet sich im Arbeitsmodus Manual, die Firmware unterstützt den Fernsteuerungsmodus 1 nicht, oder der Zielwert liegt außerhalb des minimalen und maximalen Zielwerts, die in den Modulattributen angezeigt werden. Prüfen Sie zuerst den Arbeitsmodus.

### Das Schreiben der Einstellungen wird abgelehnt

Der Wechselrichter ist gesperrt. Führen Sie die Modulaktion **Unlock settings (password 2014)** aus; die Sperre kehrt nach jedem Neustart des Wechselrichters zurück (Modulattribut **Settings lock**).

### Netzwerte sind 0 oder der Verbrauch wirkt falsch

**Grid - power balance**, **Aus dem Netzwerk**, **Zum Netzwerk** und **Verbrauch** hängen vom Zähler oder CT des Wechselrichters ab. Prüfen Sie dessen Verdrahtung an COM 2 und dessen Einrichtung unter `Menu → Setting → Advance Setting → Meter/CT Setting`.

### PV3-Leistung oder Batterie 2 zeigt 0

PV3 gibt es nur bei den Modellen mit drei Trackern (zum Beispiel X3-ULT-25K und X3-ULT-30K, siehe die MPPT-Anzahl im Benutzerhandbuch); Batterie 2 nur, wenn an BAT 2 eine zweite Batterie angeschlossen ist. Blenden Sie die nicht verwendeten Geräte in TapHome aus.

## Verfügbare Geräte 19

Diese Geräte erscheinen nach dem Import in TapHome.

SolaX X3-Ultra Modul

Serviceattribute

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

Serviceaktionen

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

Lesen (Modul)

```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"));
```

Serviceattribute

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"
```

Serviceaktionen

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} Stromzähler

Serviceattribute

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

Gesamtverbrauch lesen

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

Bedarf lesen

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

Serviceattribute

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 Stromzähler

Bedarf lesen

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

${deviceType\_PVFromGrid} Stromzähler

Gesamtverbrauch lesen

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

Bedarf lesen

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

${deviceType\_PVToGrid} Stromzähler

Gesamtverbrauch lesen

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

Bedarf lesen

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

${deviceType\_PVToBattery} Stromzähler

Gesamtverbrauch lesen

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

Bedarf lesen

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

${deviceType\_PVFromBattery} Stromzähler

Gesamtverbrauch lesen

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

Bedarf lesen

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

${deviceType\_PVLoad} Stromzähler

Bedarf lesen

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

${deviceType\_BatterySOC} Analogeingang

Serviceattribute

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

Eingangslevel lesen

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

Serviceattribute

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 Analogeingang

Serviceattribute

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

Eingangslevel lesen

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

Serviceattribute

Battery 2 power

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

Battery 2 temperature

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

Battery - temperature Temperatursensor

Temperatur lesen

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

Inverter - AC power Variable

Lesen

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

Grid - voltage L1 Variable

Serviceattribute

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

Lesen

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

Serviceattribute

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 Mehrwertschalter

Werte / Zustände: Self use · Feed-in priority · Backup · Manual · Peak shaving · Time of use

Schaltzustand lesen

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

Schaltzustand schreiben

```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 Mehrwertschalter

Werte / Zustände: Stop charge and discharge · Force charge · Force discharge

Schaltzustand lesen

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

Schaltzustand schreiben

```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 Dimmer

Level lesen

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

Level schreiben

```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 Schalter

Werte / Zustände: ON · OFF

Schaltzustand lesen

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

Schaltzustand schreiben

```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 Dimmer

Level lesen

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

Level schreiben

```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 Variable

Lesen

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

Schreiben

```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 Variable

Serviceattribute

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

Lesen

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

Schreiben

```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));
```

Serviceattribute

Actual AC power

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

**Verbindung:** Modbus RTU • 19200 baud• 8N1 • Slave ID: $\[SlaveId]

## Importparameter

Diese Werte geben Sie beim Import des XML ein.

| In der App abgefragt | Standard |
|----------------------|----------|
| Modbus Slave ID      | `1`      |

## Verwandte Dokumentation

- [Modbus Integration](https://taphome.com/de/compatibility/modbus-guide/)
- [Modbus](https://taphome.com/de/docs/integration/modbus/)
- [Einfache Konfiguration mit Vorlagen](https://taphome.com/de/docs/integration/modbus/templates/)
- [Modbus-Skripte und Prefetch](https://taphome.com/de/docs/script/modbus-scripts/)
- [Modbus-Funktionen](https://taphome.com/de/docs/script/modbus/)
- [Modbus-Datentypen](https://taphome.com/de/docs/script/modbus-data-types/)

