TapHome

KEBA KeContact P30 Charging Station

Modbus TCP
Submitted by
Last updated: 03. 2026
KEBA KeContact P30 Charging Station

The KEBA KeContact P30 is a Mode 3 AC wallbox for electric vehicles, available in c-series and x-series variants with up to 32 A / 22 kW charging power. TapHome communicates with the wallbox via Modbus TCP over Ethernet, providing real-time charging status, energy metering, current control and failsafe management.

The template supports both the c-series (firmware 3.10.16+) and x-series (software 1.11+). The e-series and a-series do not support Modbus TCP.

Hardware connection

The KeContact P30 provides two Ethernet interfaces (connected in parallel on the PCB — only one can be used at a time):

  • Ethernet1 (X4) — LSA+ terminals, recommended for permanent installation (SmartHome, charging network)
  • Ethernet2 (X3) — RJ45 connector, intended for debug/service

Connect the wallbox to the same local network as TapHome Core using a Cat 5e or Cat 6 STP cable.

System connection diagram
KEBA KeContact P30 system wiring diagram showing power supply, enable input X1, switch contact X2 and Ethernet connections

The diagram shows the overall connection scheme including the power supply terminals (L1, L2, L3, N, PE), enable input X1, switch contact output X2 and the Ethernet interface for Modbus TCP communication.

LSA+ Ethernet terminal (X4)
KEBA KeContact P30 LSA+ Ethernet terminal block with shield clamp and wire positions

For permanent installations, use the LSA+ terminal block (X4). Wire the Ethernet cable according to TIA-568A/B color coding for 100BaseT (pins 1-4 plus shield).

Compensation currents flowing through shielding in extended systems can damage the Ethernet interfaces. PoE devices connected to the wallbox must comply with IEEE 802.3 standard.

Configuration

Enabling Modbus TCP communication

Modbus TCP is activated via DIP switch DSW1.3 on the wallbox PCB. Set DSW1.3 to ON and restart the charging station (press the Service button for ~1 second or cycle the circuit breaker).

KEBA KeContact P30 DIP switch layout and DSW1 control functions overview
KEBA KeContact P30 DSW1.3 DIP switch setting for Modbus TCP activation

The Modbus TCP interface cannot be used simultaneously with the UDP interface. Enabling DSW1.3 activates whichever protocol the controlling application uses on port 502.

Connection parameters

When importing the template in TapHome, provide:

  • IP Address — the wallbox IP on the local network
  • Port — 502
  • Unit ID — must be set to 255 (this is non-standard and cannot be changed)
IP address configuration (c-series)

The c-series obtains an IP address via DHCP by default (all DSW2.1-DSW2.4 switches OFF). Alternatively, a fixed IP address in the range 192.168.25.11-25 can be assigned using DIP switches DSW2.1-DSW2.4:

DSW2.1DSW2.2DSW2.3DSW2.4IP Address
OFFOFFOFFOFFDHCP
ONOFFOFFOFF192.168.25.11
ONONOFFOFF192.168.25.13
ONONONON192.168.25.25

Each switch adds its value (1, 2, 4, 8) to a base of 10. The x-series does not support fixed IP via DIP switches.

If using DHCP, assign a static lease in the router to prevent the IP address from changing after a power cycle.

Communication limits
  • Read interval: recommended > 0.5 seconds
  • Write interval: recommended > 5 seconds
  • Max read length: 2 words per request — registers cannot be batched
  • Allowed IP ranges: RFC 1918 private addresses only (192.168.x.x, 172.16-31.x.x, 10.x.x.x)

Device capabilities

Charging state monitoring
  • Charging State — read-only multi-value sensor showing the current charging process status: Start-up, Not Ready, Ready, Charging, Error, Interrupted. An error event is raised automatically when the state changes to Error.
  • Cable State — read-only multi-value sensor indicating the cable/plug connection status: No cable, Connected to station, Locked, Connected to EV, Locked and charging. The Unlock Plug action allows unlocking the cable when charging is suspended.
Energy metering
  • Energy Meter — monitors active power (mW converted to kW) and total energy consumption (0.1 Wh converted to kWh). Per-phase voltage (U1, U2, U3), per-phase charging current (L1, L2, L3), power factor (cos phi), maximum charge current and hardware-supported maximum current are available as service attributes.
  • Session Energy — tracks the energy transferred during the current charging session in kWh.
Charging control

The Charging State device provides two service actions for active charge management:

  • Set Charging Current — sets the maximum charging current (6-63 A). The value is written in milliamps and applies until the next reboot.
  • Set Charging Session — sets an energy limit for the current or next session in Wh. The charging process terminates automatically when the limit is reached.
Station management

Module-level service actions provide station-wide control:

  • Charging Station Enable/Disable — enables or disables the wallbox. A disabled station will not start new charging sessions and any active charge is stopped.
  • Failsafe Activation — activates failsafe mode with a specified current (6-32 A) and timeout (10-600 seconds). If TapHome loses communication with the wallbox, charging reverts to the configured failsafe current after the timeout expires.
  • Failsafe Deactivation — deactivates failsafe mode by clearing the timeout.
Station identification

Module-level service attributes expose device identification data: Serial Number, Firmware version (hex-encoded), Product Type (encoding model, connector, current rating, series and meter type), Cable/Socket type, Supported Current, Device Series (c-series or x-series) and Energy Meter type (standard, MID-calibrated or nationally certified).

Additional capabilities

The KeContact P30 also exposes registers for error code reporting (decimal-to-hex error groups), RFID card UID reading, and 1-phase/3-phase switching via an external contactor (x2 contact). These capabilities can be added in a future template update.

Troubleshooting

No Modbus communication
  1. Verify DIP switch DSW1.3 is set to ON and the station has been restarted
  2. Confirm Unit ID is set to 255 in TapHome — this is a non-standard value that is easily missed
  3. Check that the Ethernet cable is properly connected to X3 (RJ45) or X4 (LSA+), not both
  4. Ensure the wallbox IP address is reachable from TapHome Core (same subnet, no firewall blocking port 502)
  5. For c-series with DHCP: check the router’s DHCP lease table for the wallbox IP
Charging current not changing

The Set Charging Current command only accepts values between 6000 and 63000 mA. Values outside this range are ignored. Note that the hardware maximum (determined by DIP switches, cable coding and temperature) takes precedence — the configured current cannot exceed this limit.

Failsafe not activating

Failsafe requires both a current value (register 5016) and a timeout value (register 5018). Sending the failsafe current alone does not activate failsafe mode — the timeout must also be set. To persist failsafe settings across reboots, the Failsafe Persist command must be used separately.

Socket variant shows 6 A maximum

On socket variants (without permanently attached cable), the Max Supported Current register shows 6000 mA (6 A) when no cable is plugged in. This is normal behavior — the value updates to the actual cable rating once a cable is connected.

Available devices

KEBA KeContact P30 Module
Service Attributes
Serial Number
Firmware
Product Type
Cable / Socket
Supported Current
Device Series
Energy Meter
Service Actions
Failsafe ActivationActivates failsafe mode — charging reverts to specified current if communication is lost
Failsafe Deactivation
Charging Station Enable/DisableEnables or disables the charging station — a disabled station will not start new sessions

KeContact

Service Attributes
Serial Number
MODBUSR(H, 1014, Uint32);
Firmware
var reg := MODBUSR(H, 1018, Uint32, 2);
GetByte(reg, 3) + "." + GetByte(reg, 2) + "." + GetByte(reg, 1)
Product Type
var type := Floor(MODBUSR(H, 1016, Uint32,2)/100000);
IF(type = 3,"KC-P30" ,"Unknown")
Cable / Socket
var cable := Floor(MOD(MODBUSR(H, 1016, Uint32,2),100000)/10000);
SWITCH(cable, 0, "Socket", 1, "Cable", "Unknown");
Supported Current
var supcur := Floor(MOD(MODBUSR(H, 1016, Uint32,2),10000)/1000);
SWITCH(supcur, 1, "13 A", 2, "16 A",3, "20 A", 4, "32 A", "Unknown");
Device Series
var series := Floor(MOD(MODBUSR(H, 1016, Uint32,2),1000)/100);
SWITCH(series,0,"x-series", 1, "c-series", "Unknown");
Energy Meter
var meter := Floor(MOD(MODBUSR(H, 1016, Uint32,2),100)/10);
SWITCH(meter, 1, "Standard not calibrated", 2, "Calibrated, MID", 3, "Calibratable measuring instrument for electrical energy with national certification", "Unknown");
Service Actions
Failsafe Activation
Parameters: Failsafe Current(6A - 32A) (6–32 fc), Failsafe Timeout (10s - 600s) (10–600 Ftim)
MODBUSW(H, 5016, Uint16, fc);
MODBUSW(H, 5018, Uint16, ftim);
Failsafe Deactivation
MODBUSW(H, 5018, Uint16, 0);
Charging Station Enable/Disable
Parameters: Charging Station
MODBUSW(H, 5014, Uint16, endis);
Cable State Multi-value Switch Read-only

Cable and plug connection status — No cable, Connected to station, Locked, Connected to EV, Locked and charging

Register: H:1004 Uint32 numeric
Values / States: No cable plugged · Connected to the charging station · Connected to station and locked · Connected to the car · Cable is connected and charging
Service Actions
Unlock Plug

Cable State

Read switch state
MODBUSR(H, 1004, Uint32,2)
Service Actions
Unlock Plug
MODBUSW(H, 5012, Uint16, 0)
Energy Meter Electricity Meter Read-only

Power consumption and energy metering — instantaneous power (kW) and cumulative energy (kWh) with per-phase voltage and current

Register: H:1036 (total), H:1020 (demand) Uint32 Unit: kW / kWh
Service Attributes
Power Factor (cos phi)
Max Charge Current
Max Supported Current
U1
L1
L2
U2
U3
L3

Energy Meter

Read total consumption
MODBUSR(H, 1036, Uint32,2) / 1000
Read demand
MODBUSR(H, 1020, Uint32,2) / 1000
Service Attributes
Power Factor (cos phi)
(MODBUSR(H, 1046, Uint32,2)/10 ) + "%"
Max Charge Current
(MODBUSR(H, 1100, Uint32,2)/1000) + " A";
Max Supported Current
MODBUSR(H, 1110, Uint32, 2)/1000 + " A"
U1
MODBUSR(H, 1040, Uint32,2) + " V"
L1
(MODBUSR(H, 1008, Uint32, 2)/1000) + " A";
L2
(MODBUSR(H, 1010, Uint32, 2)/1000) + " A";
U2
MODBUSR(H, 1042, Uint32,2) + " V"
U3
MODBUSR(H, 1044, Uint32,2) + " V"
L3
(MODBUSR(H, 1012, Uint32,2)/1000) + " A";
Session Energy Variable Read-only

Energy transferred during the current charging session in kWh

Register: H:1502 Uint32 Unit: kWh

Session Energy

Read
MODBUSR(H, 1502, Uint32)/1000 ;
Charging State Multi-value Switch Read-only

Charging process status — Start-up, Not Ready, Ready, Charging, Error, Interrupted

Register: H:1000 Uint32 numeric
Values / States: Start-up of Charging · Not Ready For Charging · Ready for Charging · Charging · Error · Interrupted · ${error} · ${notAuthorized}
Service Actions
Set Charging Current
Set Charging Session

Charging State

Read switch state
MODBUSR(H, 1000, Uint32)
Read (module)
IF(MODBUSR(H, 1000, Uint32) = 4, ADDERROR("An error has occurred with charger"));
Service Attributes
Atribút
Service Actions
Set Charging Current
Parameters: Current (6A - 63A) (6–63 curr)
MODBUSW(H, 5004, Uint16, curr*1000);
Set Charging Session
Parameters: Energy Transmisson (Wh) (1–100 wh)
MODBUSW(H, 5010, Uint16, wh/10 );
Connection: Modbus TCP • Slave ID: $[SlaveId]
Possible improvements (9)
  • H:1006 Error Code — Uint32, read-only — decimal error code (convert to hex for error group). Could be added as ModbusVariable.
  • H:1500 RFID Card UID — Uint32, first 4 bytes of last RFID tag — only relevant for RFID-equipped models
  • H:1550 Phase Switch Source — Uint32 — 0=none, 1=OCPP, 2=REST, 3=Modbus, 4=UDP
  • H:1552 Phase Switch State — Uint32 — 1=single-phase, 3=three-phase
  • H:1600 Failsafe Current Setting — Uint32, mA — readback of active failsafe current
  • H:1602 Failsafe Timeout Setting — Uint32, seconds — readback of active failsafe timeout
  • H:5050 Phase Switch Toggle — Uint16, write 0–4 — set phase switching source
  • H:5052 Trigger Phase Switch — Uint16, write 0=1-phase, 1=3-phase — requires x2 contact wiring
  • H:5020 Failsafe Persist — Uint16, write 1 — persists failsafe settings across reboots

Sources