---
title: "HomeWizard Wi-Fi P1 Meter (HWE-P1)"
description: "Read grid import/export power and energy, per-phase L1–L3 values and gas from a DSMR smart meter via the HomeWizard P1 Meter local HTTP API in TapHome."
url: "https://taphome.com/en/compatibility/homewizard-p1-meter-http/"
language: en
lastmod: 2026-11-12
generator: hugo
ai:
  topics: ["http","electric-meter","smart-meter","p1-port","dsmr","3-phase","wifi","gas-meter","local-api"]
  questions: ["How to integrate the HomeWizard Wi-Fi P1 Meter with TapHome?","What does the HomeWizard Wi-Fi P1 Meter TapHome template measure?","How to enable the Local API on the HomeWizard P1 Meter in the HomeWizard Energy app?","How to connect the HomeWizard P1 Meter to TapHome over HTTP?","Does the HomeWizard P1 Meter need a USB-C power supply?","Why do the Phase L2 Power, Phase L3 Power or Gas Meter devices show no value?","How often does the HomeWizard P1 Meter update power and gas readings?"]
---

# HomeWizard Wi-Fi P1 Meter (HWE-P1)

Communication: Packet Parser → HTTP

> 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 HomeWizard Wi-Fi P1 Meter (HWE-P1) plugs into the P1 port of a DSMR smart electricity meter and publishes its readings over the local network. TapHome communicates with it through the meter's local HTTP API (v1) on port 80 — no cloud account is required and all traffic stays on the LAN. The template polls the `/api/v1/data` endpoint and exposes grid power, import and export energy, per-phase values and the gas meter reading.

This community template provides six devices: **Energy Import**, **Energy Export**, **Phase L1 Power**, **Phase L2 Power**, **Phase L3 Power** and **Gas Meter**.

## Hardware connection

The P1 Meter plugs into the P1 port (RJ12 connector) of the utility smart meter and works with single-phase and three-phase meters.

- **Power supply** — smart meters with SMR 5.0 or newer power the P1 Meter directly from the P1 port. Older smart meters need a USB-C power supply for the P1 Meter. Consumption is under 1 W.
- **Wi-Fi** — the meter connects to a 2.4 GHz Wi-Fi network (802.11 b/g/n).
- **Environment** — IP51, for indoor use.

> [!NOTE]
> Smart meters with a HAN port instead of a P1 port need a HomeWizard HAN converter.

## Configuration

### Connecting the P1 Meter to Wi-Fi

The first setup is done in the HomeWizard Energy app (iOS 13 or Android 8 or newer). The meter needs a secured Wi-Fi network with internet access for the setup.

1. Plug the P1 Meter into the P1 port of the smart meter (and into a USB-C power supply if the smart meter is older than SMR 5.0).
2. Hold the button on the P1 Meter until the LED turns blue.
3. In the HomeWizard Energy app, connect the phone to the meter's own Wi-Fi access point and enter the password of your home Wi-Fi network.
4. Use a 2.4 GHz network that is the same network (LAN) as the TapHome Core.

### Enabling the local API

The local API is disabled by default and must be enabled once in the HomeWizard Energy app:

1. In the app, go to **Settings → Meters → *your meter*** and turn on **Local API**.
2. Note the meter's IP address — it is shown in the meter settings in the app and can also be found in your router.
3. Verify the API works by opening `http://<IP ADDRESS>/api/v1/data` in a browser on the same network — a JSON document with the most recent measurement should appear.

> [!NOTE]
> API v1 has no authentication — the meter and the TapHome Core are assumed to share a trusted local network.

### IP address

Reserve a fixed IP address for the meter in the DHCP settings of your router, so the address does not change after a router restart. During template import in TapHome, enter this address as the **IP address** parameter.

### Update rates

The meter refreshes P1 data every second with a DSMR 5.0 smart meter, or every 10 seconds with older DSMR versions. Gas readings update every 5 minutes (DSMR 5.0) or every hour (older meters). The template polls the electricity values every 5 seconds and the gas reading every 60 seconds.

## Device capabilities

### Grid power and energy

Two electricity meter devices split the bidirectional P1 measurement into the two directions TapHome tracks separately:

- **Energy Import** — instantaneous power drawn from the grid (kW) and the cumulative import meter reading (kWh). Import tariff 1 and tariff 2 readings, line frequency, Wi-Fi signal strength and the smart meter model are available as service attributes.
- **Energy Export** — instantaneous power fed into the grid (kW) and the cumulative export meter reading (kWh), with export tariff 1 and tariff 2 as service attributes.

The smart meter reports one signed total power value (negative = export); each device shows its own direction and reads 0 while power flows the other way. When the smart meter does not report a total import or export reading, the template adds up tariff 1 and tariff 2.

### Per-phase monitoring

**Phase L1 Power**, **Phase L2 Power** and **Phase L3 Power** are read-only variables with the active power of each phase in watts. Phase voltage and current are available as service attributes on each phase device. Single-phase smart meters report only L1 — the L2 and L3 devices then show no value.

### Gas meter

**Gas Meter** is a read-only variable with the cumulative gas reading (m³) reported by the smart meter. If no gas meter is connected to the smart meter, the device shows no value.

## Troubleshooting

- **No data / connection errors** — verify the Local API toggle is still enabled in the HomeWizard Energy app and that `http://<IP ADDRESS>/api/v1/data` responds in a browser from the same network as the TapHome Core.
- **Values stop updating after a router change** — the meter's IP address has likely changed; reserve a fixed address in the router's DHCP settings and update the module's IP address.
- **Finding the meter on the network** — the meter announces itself over mDNS as `_hwenergy._tcp` with an instance name like `p1meter-<6 hex digits>`; the TXT record `api_enabled` shows whether the local API is on (`1`) or off (`0`).
- **Phase or gas devices show no value** — single-phase meters do not report L2/L3 data, and the gas reading only appears when the smart meter has a gas meter connected. This is expected behaviour, not a fault.
- **Some values are missing** — the API only sends fields the connected smart meter provides, so the visible set of values depends on the smart meter model, not on the P1 Meter itself.

## Available devices 6

These devices appear in TapHome after import.

HomeWizard Wi-Fi P1 Meter Module

Custom Variables

|                       |
|-----------------------|
| `P1Data` (string) = 0 |

Read (module)

```taphome
VAR response := SENDHTTPREQUEST("/api/v1/data");
IF response.IsSuccess
    P1Data := response.Content;
ELSE
    ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
END
```

Energy Import Electricity Meter

Service Attributes

|                   |
|-------------------|
| Import tariff 1   |
| Import tariff 2   |
| Line frequency    |
| Wi-Fi signal      |
| Smart meter model |

Read total consumption

```taphome
var total := parsejson(P1Data, "total_power_import_kwh", true);
IF ISNULL(total)
    var t1 := parsejson(P1Data, "total_power_import_t1_kwh", true);
    var t2 := parsejson(P1Data, "total_power_import_t2_kwh", true);
    return(IF(ISNULL(t1), 0, todouble(t1)) + IF(ISNULL(t2), 0, todouble(t2)));
END
return(todouble(total));
```

Read demand

```taphome
var p := parsejson(P1Data, "active_power_w", true);
IF ISNULL(p)
    return(0);
END
return(MAX(0, todouble(p)) / 1000);
```

Service Attributes

Import tariff 1

```taphome
IF(ISNULL(parsejson(P1Data, "total_power_import_t1_kwh", true)), "-", TOSTRING(todouble(parsejson(P1Data, "total_power_import_t1_kwh", true)), "F3") + " kWh")
```

Import tariff 2

```taphome
IF(ISNULL(parsejson(P1Data, "total_power_import_t2_kwh", true)), "-", TOSTRING(todouble(parsejson(P1Data, "total_power_import_t2_kwh", true)), "F3") + " kWh")
```

Line frequency

```taphome
IF(ISNULL(parsejson(P1Data, "active_frequency_hz", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_frequency_hz", true)), "F2") + " Hz")
```

Wi-Fi signal

```taphome
IF(ISNULL(parsejson(P1Data, "wifi_strength", true)), "-", TOSTRING(todouble(parsejson(P1Data, "wifi_strength", true)), "F0") + " %")
```

Smart meter model

```taphome
IF(ISNULL(parsejson(P1Data, "meter_model", true)), "-", parsejson(P1Data, "meter_model", true))
```

Energy Export Electricity Meter

Service Attributes

|                 |
|-----------------|
| Export tariff 1 |
| Export tariff 2 |

Read total consumption

```taphome
var total := parsejson(P1Data, "total_power_export_kwh", true);
IF ISNULL(total)
    var t1 := parsejson(P1Data, "total_power_export_t1_kwh", true);
    var t2 := parsejson(P1Data, "total_power_export_t2_kwh", true);
    return(IF(ISNULL(t1), 0, todouble(t1)) + IF(ISNULL(t2), 0, todouble(t2)));
END
return(todouble(total));
```

Read demand

```taphome
var p := parsejson(P1Data, "active_power_w", true);
IF ISNULL(p)
    return(0);
END
return(MAX(0, 0 - todouble(p)) / 1000);
```

Service Attributes

Export tariff 1

```taphome
IF(ISNULL(parsejson(P1Data, "total_power_export_t1_kwh", true)), "-", TOSTRING(todouble(parsejson(P1Data, "total_power_export_t1_kwh", true)), "F3") + " kWh")
```

Export tariff 2

```taphome
IF(ISNULL(parsejson(P1Data, "total_power_export_t2_kwh", true)), "-", TOSTRING(todouble(parsejson(P1Data, "total_power_export_t2_kwh", true)), "F3") + " kWh")
```

Phase L1 Power Variable

Service Attributes

|         |
|---------|
| Voltage |
| Current |

Read

```taphome
var p := parsejson(P1Data, "active_power_l1_w", true);
IF ISNULL(p)
    return(NaN);
END
return(todouble(p));
```

Service Attributes

Voltage

```taphome
IF(ISNULL(parsejson(P1Data, "active_voltage_l1_v", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_voltage_l1_v", true)), "F1") + " V")
```

Current

```taphome
IF(ISNULL(parsejson(P1Data, "active_current_l1_a", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_current_l1_a", true)), "F2") + " A")
```

Phase L2 Power Variable

Service Attributes

|         |
|---------|
| Voltage |
| Current |

Read

```taphome
var p := parsejson(P1Data, "active_power_l2_w", true);
IF ISNULL(p)
    return(NaN);
END
return(todouble(p));
```

Service Attributes

Voltage

```taphome
IF(ISNULL(parsejson(P1Data, "active_voltage_l2_v", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_voltage_l2_v", true)), "F1") + " V")
```

Current

```taphome
IF(ISNULL(parsejson(P1Data, "active_current_l2_a", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_current_l2_a", true)), "F2") + " A")
```

Phase L3 Power Variable

Service Attributes

|         |
|---------|
| Voltage |
| Current |

Read

```taphome
var p := parsejson(P1Data, "active_power_l3_w", true);
IF ISNULL(p)
    return(NaN);
END
return(todouble(p));
```

Service Attributes

Voltage

```taphome
IF(ISNULL(parsejson(P1Data, "active_voltage_l3_v", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_voltage_l3_v", true)), "F1") + " V")
```

Current

```taphome
IF(ISNULL(parsejson(P1Data, "active_current_l3_a", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_current_l3_a", true)), "F2") + " A")
```

Gas Meter Variable

Read

```taphome
var v := parsejson(P1Data, "total_gas_m3", true);
IF ISNULL(v)
    return(NaN);
END
return(todouble(v));
```

**Connection:** Packet Parser → HTTP

## Import parameters

Enter these values when you import the XML.

| Asked in the app | Default         |
|------------------|-----------------|
| IP address       | Enter at import |

## 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/)

