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
Source: evcc-io/evcc