TapHome
Community Beta Energy & metering

HomeWizard Wi-Fi P1 Meter (HWE-P1)

HomeWizard Wi-Fi P1 Meter (HWE-P1) on the P1 port of a DSMR smart meter in TapHome over its local HTTP API v1 on port 80, without a cloud account. Grid import and export power and energy, tariff readings, per-phase power, voltage and current, and the gas meter reading.

Packet Parser → HTTP6 devicesRevision 1.0 Last updated: November 12, 2026

Submitted by Martin Keller

HomeWizard Wi-Fi P1 Meter (HWE-P1)

Import into the TapHome appHardware › Packet Parser › Add from template

Download Template
On this page

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

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.

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.

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

HomeWizard Wi-Fi P1 Meter

Read (module)
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

Energy Import

Read total consumption
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
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
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
IF(ISNULL(parsejson(P1Data, "total_power_import_t2_kwh", true)), "-", TOSTRING(todouble(parsejson(P1Data, "total_power_import_t2_kwh", true)), "F3") + " kWh")
Line frequency
IF(ISNULL(parsejson(P1Data, "active_frequency_hz", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_frequency_hz", true)), "F2") + " Hz")
Wi-Fi signal
IF(ISNULL(parsejson(P1Data, "wifi_strength", true)), "-", TOSTRING(todouble(parsejson(P1Data, "wifi_strength", true)), "F0") + " %")
Smart meter model
IF(ISNULL(parsejson(P1Data, "meter_model", true)), "-", parsejson(P1Data, "meter_model", true))
Energy Export Electricity Meter
Service Attributes
Export tariff 1
Export tariff 2

Energy Export

Read total consumption
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
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
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
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

Phase L1 Power

Read
var p := parsejson(P1Data, "active_power_l1_w", true);
IF ISNULL(p)
    return(NaN);
END
return(todouble(p));
Service Attributes
Voltage
IF(ISNULL(parsejson(P1Data, "active_voltage_l1_v", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_voltage_l1_v", true)), "F1") + " V")
Current
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

Phase L2 Power

Read
var p := parsejson(P1Data, "active_power_l2_w", true);
IF ISNULL(p)
    return(NaN);
END
return(todouble(p));
Service Attributes
Voltage
IF(ISNULL(parsejson(P1Data, "active_voltage_l2_v", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_voltage_l2_v", true)), "F1") + " V")
Current
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

Phase L3 Power

Read
var p := parsejson(P1Data, "active_power_l3_w", true);
IF ISNULL(p)
    return(NaN);
END
return(todouble(p));
Service Attributes
Voltage
IF(ISNULL(parsejson(P1Data, "active_voltage_l3_v", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_voltage_l3_v", true)), "F1") + " V")
Current
IF(ISNULL(parsejson(P1Data, "active_current_l3_a", true)), "-", TOSTRING(todouble(parsejson(P1Data, "active_current_l3_a", true)), "F2") + " A")
Gas Meter Variable

Gas Meter

Read
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 appDefault
IP addressEnter at import

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.

Template · TapHome portal HomeWizard Wi-Fi P1 Meter (HWE-P1) 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. Packet Parser → HTTP View in TapHome portal