---
title: "KEBA KeContact P20 Power Monitoring"
description: "Monitor charging power, per-phase currents, voltages and session energy on the KEBA KeContact P20 EV wallbox over UDP — TapHome read-only template."
url: "https://taphome.com/en/compatibility/keba-kecontact-p20-power-monitoring/"
language: en
lastmod: 2026-04-23
generator: hugo
ai:
  topics: ["udp","wallbox","ev-charging","ethernet","power-monitoring","packet-parser"]
  questions: ["How to integrate KEBA KeContact P20 with TapHome?","What does the KEBA KeContact P20 Power Monitoring template measure?","How to enable UDP communication on the KEBA P20 wallbox?","Can TapHome control charging current on the KEBA KeContact P20?","Which KEBA P20 variants and firmware versions support UDP?","Why does TapHome receive no data from the KEBA P20 on port 7090?"]
---

# KEBA KeContact P20 Power Monitoring

Communication: Packet Parser → UDP

- [KEBA e-mobility (official)](https://www.keba.com/en/emobility/products/product-overview)

> Network address
> 
> TapHome reaches this device at the address entered on import. Give the device a fixed address — an IP reservation in the router, or its mDNS name if it supports one — otherwise the integration stops working when the router changes the address.
> 
> [Network Preparation](https://taphome.com/en/docs/setup/network-preparation/)

## Integration guide

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.

> [!NOTE]
> 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](https://taphome.com/en/compatibility/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.

> [!WARNING]
> 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](https://taphome.com/images/compatibility/keba-kecontact-p20-power-monitoring/dip-switch-udp-activation_hu_56d2d7e4a149f687.jpg)

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:

| DIP | Function | Default | Required for UDP |
|-----|----------|---------|-------------------|
| DSW1.1 | External enable input [X1] used | OFF | — (leave as-is unless an enable contact is wired) |
| DSW1.2 | Switch contact output [X2] in contactor-monitoring mode | OFF (status display) | — (not relevant to this template) |
| **DSW1.3** | **Activate SmartHome Interface via UDP** | **OFF** | **ON** — **mandatory** |
| DSW1.6 / 1.7 / 1.8 | Max charging current transmitted via Control Pilot PWM | depends on variant | — (set to wallbox rating) |

> [!WARNING]
> 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.11`–`192.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:

| Address | DSW2.1 (+1) | DSW2.2 (+2) | DSW2.3 (+4) | DSW2.4 (+8) |
|---------|-------------|-------------|-------------|-------------|
| 192.168.25.11 | ON | OFF | OFF | OFF |
| 192.168.25.13 | ON | ON | OFF | OFF |
| 192.168.25.17 | ON | ON | ON | OFF |
| 192.168.25.25 | ON | ON | ON | ON |

### TapHome import parameters

When importing the template, provide:

- **IP Address** — the wallbox IP on the local network (placeholder `192.168.0.1`)
- **Port** — `7090` (fixed by the KEBA protocol)
- **Internal poll interval** — `10000` 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.

> [!NOTE]
> 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 8

These devices appear in TapHome after import.

Keba KeContact P20 Power Monitoring Module

Custom Variables

Read (module)

```taphome
SENDDATA("report 3");
```

Listener

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

Listener

```taphome
Va := PARSEJSON(report3, "$.I1", 1) / 1000.0
```

Phase 2 Current Variable Read-only

numeric Unit: A json\_path

Listener

```taphome
Va := PARSEJSON(report3, "$.I2", 1) / 1000.0
```

Phase 3 Current Variable Read-only

numeric Unit: A json\_path

Listener

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

Listener

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

Listener

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

Listener

```taphome
Va := PARSEJSON(report3, "$.U1", 1)
```

Phase 2 Voltage Variable Read-only

numeric Unit: V json\_path

Listener

```taphome
Va := PARSEJSON(report3, "$.U2", 1)
```

Phase 3 Voltage Variable Read-only

numeric Unit: V json\_path

Listener

```taphome
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.

## Import parameters

Enter these values when you import the XML.

| Asked in the app       | Default       |
|------------------------|---------------|
| IP address             | `192.168.0.1` |
| Port                   | `7090`        |
| Internal poll interval | `10000`       |

## Sources

- KeContact P20 / P30 UDP Programmers Guide V 2.03
  
  [sollis.de](https://sollis.de/wp-content/uploads/UDP-Programmieranleitung.pdf) 2026-04-23
- KeContact P20 / P30 Installation manual V 3.20
  
  [www.keba.com](https://www.keba.com/file/downloads/e-mobility/KeContact_KCP20_30_ih_en.pdf) 2026-04-23

Manufacturer documents are © their respective owners. They are provided as published by the manufacturer, for reference only.

## Related Documentation

- [Packet Parser Integration](https://taphome.com/en/compatibility/packet-parser-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/en/docs/integration/packet-parser/)
- [Packet parser functions](https://taphome.com/en/docs/script/packet-parser/)
- [Parsing functions](https://taphome.com/en/docs/script/parsing-functions/)

