#33327·evcc

Add Hager Witty Plus (Modbus TCP)

Author: premultiplyCreated Aug 31, 2026Updated Sep 22, 2026
Labelsenhancementdevicesstale

The Witty Plus supports Modbus TCP, as this wallbox is designed to operate with the XEM470 energy manager.

Modbus register table:

================================================================================
HAGER WITTYPLUS - MODBUS TCP REGISTER ÜBERSICHT
================================================================================

Standard-Port: 502 | Unit Identifier (Slave ID): 1
Unterstützte Function Codes: 0x03 (Read), 0x06 (Write Single), 0x10 (Write Multiple)

--------------------------------------------------------------------------------
1. GERÄTE- & NETZWERKINFORMATIONEN (Device & Network)
--------------------------------------------------------------------------------
Hex-Adr. | Reg. | Beschreibung           | Datentyp    | R/W | Werte / Bemerkung
--------------------------------------------------------------------------------
0x1001   | 1    | Modbus Version         | uint16      | R   | Standard: 1
0x1003   | 16   | Produktreferenz        | string      | R   | Artikelnummer / Modell
0x1013   | 16   | Eindeutige ID          | string      | R   | Seriennummer der Wallbox
0x1023   | 3    | Software-Version       | 3*uint16_t  | R   | major.minor.revision.build
0x2000   | 3    | MAC-Adresse            | 3*uint16    | R   | 6 Hex-Bytes
0x200F   | 2    | Aktuelle IPv4-Adresse  | 2*uint16    | R   | IP Hex 32 bits

--------------------------------------------------------------------------------
2. LADESTEUERUNG & MESSWERTE (Charging Session)
--------------------------------------------------------------------------------
Hex-Adr. | Reg. | Beschreibung           | Datentyp    | R/W | Werte / Bemerkung
--------------------------------------------------------------------------------
0x3000   | 4    | Timestamp Unix         | uint64      | R/W | UTC (in Sekunden)
0x3005   | 1    | Zeitstempel gültig     | enum/uint16 | R   | 0=Nicht gesetzt, 1=Gültig
0x3006   | 1    | HardwareMaxCurrentLimit| uint16      | R   | Internes Limit (0-32A)
0x3007   | 1    | Max Current (PP)       | uint16      | R   | Kabel-Codierung (PP)
0x3008   | 1    | CP State               | string      | R   | DIN EN 61851 (A1-F)
0x3009   | 1    | PWM Value              | uint16      | R   | Duty Cycle (0-100%)
0x300A   | 1    | Strom Phase 1          | int16       | R   | Wert * 10 (Faktor 0.1)
0x300B   | 1    | Strom Phase 2          | int16       | R   | Wert * 10 (Faktor 0.1)
0x300C   | 1    | Strom Phase 3          | int16       | R   | Wert * 10 (Faktor 0.1)
0x300D   | 1    | Spannung Phase 1       | uint16      | R   | Wert * 10 (Faktor 0.1)
0x300E   | 1    | Spannung Phase 2       | uint16      | R   | Wert * 10 (Faktor 0.1)
0x300F   | 1    | Spannung Phase 3       | uint16      | R   | Wert * 10 (Faktor 0.1)
0x3010   | 1    | Leistung Phase 1       | int16       | R   | In Watt
0x3011   | 1    | Leistung Phase 2       | int16       | R   | In Watt
0x3012   | 1    | Leistung Phase 3       | int16       | R   | In Watt
0x3013   | 2    | Global Power           | int32       | R   | Gesamtleistung in Watt
0x301E   | 1    | Max Charging Current   | uint16      | R/W | Vorgabe * 10 (0-320 für 0-32A)
0x301F   | 1    | Max Current (Fallback) | uint16      | R/W | Wert bei Verbindungsverlust
0x3020   | 1    | EVCS Verfügbarkeit     | enum/uint16 | R/W | 0=Nicht verfügbar, 1=Verfügbar
0x3021   | 1    | Verfügbarkeit (Fallback| enum/uint16 | R/W | Zustand bei Offline-Event
0x3022   | 1    | Switch3to1 (Phasen)    | enum/uint16 | R/W | 0=3 Phasen nutzen, 1=Nur 1 Phase
0x3023   | 1    | Switch3to1 (Fallback)  | enum/uint16 | R/W | Zustand bei Offline-Event
0x3025   | 1    | Lock actuator cable    | enum/uint16 | R   | 0=Offen, 1=Verriegelt, 2=Feste Ltg.
0x3026   | 1    | Delay Fallback         | enum/uint16 | R/W | 0=Sofort, 1=Verzögert (30s)
0x302B   | 2    | Wallbox Status         | enum/uint32 | R   | Ausführlicher Status- & Fehlercode
                                                               (z.B. 0x00000100=IDLE, 
                                                               0x00000600=CHARGING_NORMAL)

--------------------------------------------------------------------------------
3. BEDIENUNG & ANZEIGE (HMI / RFID)
--------------------------------------------------------------------------------
Hex-Adr. | Reg. | Beschreibung           | Datentyp    | R/W | Werte / Bemerkung
--------------------------------------------------------------------------------
0x4001   | 1    | RFID tag uid size      | uint16      | R   | 4, 7 oder 10 Octets
0x4002   | 5    | RFID tag uid           | byte array  | R   | ID der vorgehaltenen Karte
0x400B   | 1    | RFID feedback          | enum/uint16 | R/W | LED-Rückmeldung: 0=Keine,
                                                               1=Autorisiert (Grün),
                                                               2=Nicht Autorisiert (Rot blinken)

--------------------------------------------------------------------------------
4. ENERGIEZÄHLER & LADEHISTORIE (Energy)
--------------------------------------------------------------------------------
Hex-Adr. | Reg. | Beschreibung           | Datentyp    | R/W | Werte / Bemerkung
--------------------------------------------------------------------------------
0x5000   | 2    | Energy session N       | uint32      | R   | Wh der aktuellen Sitzung
0x5002   | 4    | Timestamp Start (Unix) | uint64      | R   | Startzeitpunkt in Sekunden
0x5006   | 4    | Timestamp Stop (Unix)  | uint64      | R   | Endzeitpunkt in Sekunden
0x500A   | 2    | Effective Charge Dur.  | uint32      | R   | Reine Ladedauer (Zustand C) in Sek.
0x500C   | 1    | RFID badge size        | uint16      | R   | Kartengröße für die Session
0x500D   | 5    | RFID badge used        | byte array  | R   | Genutzte Karten-UID für Session
0x5012   | 1    | Badge type used        | enum/uint16 | R   | 0=Lokale Karte, 1=OCPP Karte
0x5013   | 1    | Session stop reason    | enum/uint16 | R   | Grund für Ladestopp (z.B. 0x02=Unplug)
0x5014   | 1    | Session State          | enum/uint16 | R   | 0=Keine, 1=Läuft, 2=Beendet
================================================================================

Originally posted by @treesix71 in https://github.com/evcc-io/evcc/discussions/28555#discussioncomment-18205883