TapHome

KEBA KeContact P20 Power Monitoring

Packet Parser → UDP
Submitted by
Last updated: 06. 2026
KEBA KeContact P20 Power Monitoring

The KEBA KeContact P20 is an AC Mode 3 EV wallbox (10–32 A, single-phase or three-phase) manufactured between 2012 and 2016. Its UDP-based “SmartHome Interface” is supported on the c-series and c-series+PLC hardware variants (product codes KC-P20-xxxxxx2x-xxx and KC-P20-xxxxxx3x-xxx) with firmware 2.5 or higher. The e-series and b-series do not implement this interface.

TapHome communicates with the wallbox over UDP on port 7090 using the native KEBA protocol. On each poll cycle (default 10 s) TapHome sends the text command report 3 to the wallbox IP, and the wallbox replies with a JSON payload containing per-phase voltages and currents, instantaneous active power, session energy and total energy.

This template is read-only power monitoring. It does not start or stop charging, it does not modulate the charging current, and it does not authorise RFID sessions. If you need active load control (for example PV surplus charging), use a different integration — the successor KeContact P30 is covered by the dedicated KEBA KeContact P30 Charging Station template, which uses Modbus TCP and exposes full charge control.

Requirements

  • KEBA KeContact P20 c-series or c-series+PLC (electronics digit 2 or 3 in the product code on the type plate)
  • Firmware ≥ 2.5 (earlier firmware does not expose the report 3 command)
  • Wallbox connected to the same LAN as the TapHome Core via Ethernet (LSA+ terminals X4 or RJ45 socket X3)
  • UDP port 7090 not blocked by any firewall between the Core and the wallbox
  • The Modbus TCP interface must be disabled — the UDP and Modbus TCP interfaces are mutually exclusive on the P20

Hardware connection

The P20 provides two physical Ethernet interfaces. They are wired in parallel on the PCB and only one can be used at a time — the unused one must be unplugged.

  • Ethernet1 (X4) — LSA+ punch-down terminals, recommended for permanent hardwired installations (use original KRONE insertion tool; wire per TIA-568A/B colour coding for 100BaseT, fold shielding back ~1 cm and clamp to the [Shd] ground point)
  • Ethernet2 (X3) — RJ45 socket, intended for service/debug but usable if an RJ45 cable is already routed into the cabinet

Use Cat 5e or Cat 6 STP cable. Terminal block (X4) accepts wire diameters 0.36–0.81 mm (AWG 27–20) for inflexible cable and 7 × 0.2 mm (AWG 24) for flexible cable.

Compensation currents flowing through the Ethernet shielding in extended installations can damage the interface. Discuss TN-S network expansion with the responsible building services if the wallbox and the Core are on different subsystems.

Configuration

Enabling the UDP SmartHome interface

The UDP interface is activated by a single DIP switch on the wallbox PCB, located under the connector-panel cover.

KEBA KeContact P20 DIP switch layout showing DSW1 / DSW2 position on the PCB and DSW1.3 ON setting for UDP SmartHome interface activation
  1. Power off the wallbox at the circuit breaker
  2. Remove the housing cover and the connector-panel cover to reach the DIP switch banks (DSW1 on top, DSW2 below)
  3. Set DSW1.3 = ON to activate the SmartHome UDP interface
  4. Press the Service button for ~1 second or power-cycle the wallbox — DIP-switch changes only take effect after a restart

The full DSW1 configuration bank is documented in the Installation Manual. Only the rows relevant to UDP integration are listed here:

DIPFunctionDefaultRequired for UDP
DSW1.1External enable input [X1] usedOFF— (leave as-is unless an enable contact is wired)
DSW1.2Switch contact output [X2] in contactor-monitoring modeOFF (status display)— (not relevant to this template)
DSW1.3Activate SmartHome Interface via UDPOFFONmandatory
DSW1.6 / 1.7 / 1.8Max charging current transmitted via Control Pilot PWMdepends on variant— (set to wallbox rating)

The UDP interface and the Modbus TCP interface cannot be active at the same time. If Modbus TCP was previously enabled on this station, disable it before relying on the TapHome UDP template.

IP address (DSW2 addressing)

For a single P20 on the network, the default DHCP addressing is sufficient — all DSW2 switches set to OFF. The wallbox obtains its IP from the router.

For multi-station installations on an isolated network, fixed IP addressing in the range 192.168.25.11192.168.25.26 can be set via DSW2.1–DSW2.4 (with DSW2.5 = OFF, DSW2.6 = ON). Each switch adds its binary weight (1, 2, 4, 8) to a base of 10:

AddressDSW2.1 (+1)DSW2.2 (+2)DSW2.3 (+4)DSW2.4 (+8)
192.168.25.11ONOFFOFFOFF
192.168.25.13ONONOFFOFF
192.168.25.17ONONONOFF
192.168.25.25ONONONON

If the wallbox uses DHCP, assign a static DHCP reservation in the router so the IP does not change after a power outage. TapHome stores the IP as an import parameter and does not auto-discover the device.

TapHome import parameters

When importing the template, provide:

  • IP Address — the wallbox IP on the local network (placeholder 192.168.0.1)
  • Port7090 (fixed by the KEBA protocol)
  • Internal poll interval10000 ms by default; the KEBA protocol tolerates shorter intervals but recommends at least 5 s between repetitions of the same command

Device capabilities

All measurements are derived from the report 3 JSON payload returned by the wallbox. Every value updates with each poll cycle; all devices are read-only.

Per-phase voltages
  • Phase 1 Voltage, Phase 2 Voltage, Phase 3 Voltage — line voltages in volts, read directly from the U1, U2, U3 fields of the report 3 response. On single-phase installations, only U1 reports a meaningful value.
Per-phase currents
  • Phase 1 Current, Phase 2 Current, Phase 3 Current — charging currents in amperes, read from I1, I2, I3 in milliamps and converted to A (divided by 1000) by the template. Values are zero when no vehicle is charging.
Session and total energy

The template exposes two energy meters, both sharing the same instantaneous active power reading ($.P from report 3, reported in mW and converted to kW):

  • Present Power — instantaneous charging power (kW) plus energy delivered in the current charging session. The session energy counter (E pres, 0.1 Wh units converted to kWh) resets to zero every time a new cable is plugged in.
  • Total Power — instantaneous charging power (kW) plus the lifetime cumulative energy counter (E total, 0.1 Wh units converted to kWh). This counter persists across sessions, restarts and power cycles and never resets.

Both energy devices expose the same live power reading — the KEBA wallbox reports a single instantaneous active power value. The devices differ only in which energy counter they track (per-session vs. lifetime). This lets you graph both a rolling session total and a long-term energy trend in TapHome.

Troubleshooting

TapHome shows no data from the wallbox
  1. Verify the wallbox product code on the type plate. Only KC-P20-xxxxxx2x-xxx (c-series) and KC-P20-xxxxxx3x-xxx (c-series+PLC) support UDP — e-series and b-series cannot be integrated over UDP regardless of firmware
  2. Confirm the firmware version is ≥ 2.5. Older firmware does not reply to report 3. Firmware updates are available in the download area at keba.com/emobility
  3. Confirm DSW1.3 = ON — this is by far the most common setup issue because the DIP switches sit under the connector-panel cover and are easy to miss during commissioning. After toggling, press the Service button for 1 second or cycle the breaker
  4. Check that the Ethernet cable is connected to only one of X3 (RJ45) or X4 (LSA+), not both
  5. Ensure UDP port 7090 is open between the TapHome Core and the wallbox (no VLAN / firewall blocking)
  6. Confirm the Modbus TCP interface on the wallbox is not active — UDP and Modbus TCP are mutually exclusive
The wallbox IP changes periodically

The default addressing mode is DHCP. If the router releases and reassigns leases, the wallbox may come up on a different IP. Either set a static DHCP reservation in the router for the wallbox MAC address, or switch to fixed-IP mode via DSW2 (for single stations this is rarely necessary).

Power reads zero even though the EV is charging

The P, I1/I2/I3, E pres fields are only populated while a valid charging session is active (Plug = 7, State = 3 in report 2). If the cable is plugged but charging has not started, or if charging is suspended by the vehicle, P will be zero. This is expected behaviour — confirm by observing the wallbox status LED (solid green while actively charging).

Session energy does not match a charge event

The E pres counter resets at the start of a new session (plug-in). If the EV disconnects and reconnects within your logging window, a fresh session begins and the counter restarts from zero. Use the lifetime counter (Total Power) for cumulative statistics across sessions.

Available devices

Keba KeContact P20 Power monitoring Module
Custom Variables

Keba KeContact P20 Power monitoring

Read (module)
SENDDATA("report 3");
Listener
VAR jsonString := TOSTRING(RECEIVEDBYTES);
VAR id := PARSEJSON(jsonString, "$.ID", 1);

IF(id = 3)
    report3 := jsonString;
END
Phase 1 Current Variable Read-only
numeric Unit: A json_path

Phase 1 Current

Listener
Va := PARSEJSON(report3, "$.I1", 1) / 1000.0
Phase 2 Current Variable Read-only
numeric Unit: A json_path

Phase 2 Current

Listener
Va := PARSEJSON(report3, "$.I2", 1) / 1000.0
Phase 3 Current Variable Read-only
numeric Unit: A json_path

Phase 3 Current

Listener
Va := PARSEJSON(report3, "$.I3", 1) / 1000.0
Present Power Electricity Meter Read-only

Instantaneous charging power (kW) and energy delivered in the current charging session (kWh) — resets on plug-in

numeric Unit: kW / kWh json_path

Present Power

Listener
Ed := PARSEJSON(report3, "$.['E pres']", 1) / 10000.0;
To := PARSEJSON(report3, "$.P", 1) / 1000000.0
Total Power Electricity Meter Read-only

Instantaneous charging power (kW) and the lifetime cumulative energy counter (kWh) — persistent across sessions and reboots

numeric Unit: kW / kWh json_path

Total Power

Listener
Ed := PARSEJSON(report3, "$.['E total']", 1) / 10000.0;
To := PARSEJSON(report3, "$.P", 1) / 1000000.0
Phase 1 Voltage Variable Read-only
numeric Unit: V json_path

Phase 1 Voltage

Listener
Va := PARSEJSON(report3, "$.U1", 1)
Phase 2 Voltage Variable Read-only
numeric Unit: V json_path

Phase 2 Voltage

Listener
Va := PARSEJSON(report3, "$.U2", 1)
Phase 3 Voltage Variable Read-only
numeric Unit: V json_path

Phase 3 Voltage

Listener
Va := PARSEJSON(report3, "$.U3", 1)
Connection: Packet Parser → UDP
Possible improvements (17)
  • Power Factor — Power factor (cosphi) reported as 0.1% units (0–1000). Present in the `report 3` JSON response but not mapped to any device in the template.
  • Serial Number — 8-character device serial. Available in `report 3` (and `report 1` / `report 2`) but not exposed by the template.
  • System Uptime — System clock seconds since last startup. Useful for reboot detection but not surfaced by the template.
  • Firmware / Product / Backend / timeQ — Basic device identification (Product, Serial, Firmware, COM-module, Backend, timeQ). Template polls only `report 3`; `report 1` would need to be added for identification diagnostics.
  • Charging State / Plug / Error / Max Curr / Input — Full operating state (State 0–5 = Startup/Not ready/Ready/Charging/Error/Interrupted, Plug 0/1/3/5/7, Error1/Error2, Max curr, Curr HW, Enable sys/user, Input X1). Required for any status-aware automation — template is measurement-only.
  • Charging Session History — Last 30 charging sessions (Session ID, E start, E pres, start/end timestamps, termination reason, RFID tag). Not applicable to real-time monitoring.
  • Set Charging Current (with delay) — Primary active-load-control command (non-permanent). Would allow TapHome to modulate charging current based on PV surplus. Template is read-only — no service action exposed.
  • Set Charging Current (permanent) — Permanent current override (6000–63000 mA). KEBA recommends `currtime` instead for regular use.
  • Enable / Disable Charging — Permanently disable (0) or enable (1) the station until reboot. Not implemented — template cannot pause charging.
  • RFID Start / Stop — Programmatic RFID authorization. Relevant only if AuthON = 1 and a whitelist is configured.
  • Set Energy Limit — Sets an energy limit for the active/next charging session (0.1 Wh units). Charging stops when reached.
  • Auxiliary Relay Output (X2) — Controls auxiliary relay terminal X2 (open / close / pulse). Requires DIP DSW1.2 = ON.
  • Unlock Socket — Unlocks the charging socket (requires charging to be stopped first). Useful after an interrupted session.
  • Show Display Text — P30 only — not functional on P20 (no display). Listed for reference.
  • Set Station Clock — Set the station clock via Unix epoch. Useful when NTP is unavailable.
  • Failsafe Configuration — Fallback current when communication is lost. Valuable safety feature for any load-control integration but not exposed by the read-only template.
  • Push Notifications on State Change — Station can push State, Plug, Input, Enable sys, Max curr and E pres changes to the last UDP sender without polling. Template uses polling only.

Sources

  • KeContact P20 / P30 UDP Programmers Guide V 2.03
    sollis.de 2026-04-23
  • KeContact P20 / P30 Installation manual V 3.20
    www.keba.com 2026-04-23

Found a problem with this device template?

Tell us what's wrong, what's missing, or how the template should behave. We rely on your feedback to keep the catalog accurate.

Verified by TapHome

Want to use this in your TapHome Core?

Open this template in the Customer Portal to apply it to one of your homes, or to draft a refinement and submit it back to the catalog.

Open in portal