Tuesday, 10 November 2026

Adding Smart Meter Data to My Home Energy Dashboard with Frient, Zigbee and AI

Back in May, I wrote about building my home energy dashboard using Node-RED, InfluxDB and Grafana. That project has been running happily ever since, collecting data from my Solis solar inverter and presenting it in a format that's considerably more useful to me than the manufacturer's own monitoring application.

The system has an 8.1kWp solar array, battery storage and a Solis hybrid inverter. The monitoring infrastructure runs on a small Intel NUC under Unraid, alongside my Home Assistant installation and various other home automation services.

Node-RED polls the inverter over Modbus TCP, processes the readings and writes them into InfluxDB. Grafana then provides the dashboards, covering solar generation, household consumption, battery activity, grid import and export, and the associated electricity costs and savings.

It has all worked very well, but there was one obvious limitation. All the electricity measurements were coming from the Solis equipment. I wanted an independent source of grid data, preferably directly from the electricity meter itself.

Enter the Frient Electricity Meter Interface

My electricity meter is an ESB Networks smart meter, fitted in 2024. It has a P1 interface which can provide consumption and export information to compatible equipment. ESB networks have recently permitted enablement of the P1 port. I requested this and it was ready within an hour.

I acquired a Frient Electricity Meter Interface 2 P1, model EMIZB-151. It's a small Zigbee device which connects to the meter and makes its readings available to a home automation system.

As I already have a Zigbee network running through Zigbee2MQTT, the Frient looked like a straightforward way to get the meter readings into my existing infrastructure.

Frient in its initial temporary set up inside the electricity box

Pairing it with Zigbee2MQTT was straightforward enough. The device was recognised, and its Exposes page showed the various measurements it could provide, including instantaneous power, current, consumed energy and produced energy.

Unfortunately, there was a snag.

Getting the Frient to Report

Although the device was paired and appeared to be working, it wasn't publishing regular power readings. I could request a manual refresh through Zigbee2MQTT and receive a sensible value, but there was no continuous stream of updates.

This is where I started working through the problem with ChatGPT.

We established that the meter was communicating correctly, because manual requests returned valid measurements. The issue appeared to be with the Zigbee reporting configuration.

The Frient exposes its electrical measurements on endpoint 2. Using the Reporting tab in Zigbee2MQTT, we configured reporting for the activePower attribute in the haElectricalMeasurement cluster.

That did the trick. Almost immediately, the Zigbee2MQTT logs started filling with readings, often arriving every second or two.

We compared the instantaneous power reading against the Solis display while the house was importing electricity. The figures were almost identical, which was a promising start.

Live Frient readings in Zigbee2MQTT. The displayed cumulative-energy units still need verification against the meter.
Live Frient readings in Zigbee2MQTT. The displayed cumulative-energy units still need verification against the meter.

Endpoint 2 reporting for activePower in the haElectricalMeasurement cluster.
Endpoint 2 reporting for activePower in the haElectricalMeasurement cluster.

With the Frient now publishing data to MQTT, the next job was to integrate it into the existing monitoring system.

Letting ChatGPT Work on the Infrastructure

For this part, I decided to try something a little different.

ChatGPT now has a Work mode which can interact directly with applications through a browser. Rather than having it generate Node-RED flows and Grafana queries for me to tediously copy and paste, I gave it access to my existing Node-RED, InfluxDB and Grafana interfaces.

This proved to be a very effective way of working.

The AI assistant was able to inspect the existing configuration, understand how the Solis data was being collected and stored, and build the additional functionality around what was already there.

It created a separate Node-RED flow for the Frient, reusing the existing MQTT broker and InfluxDB connection. It also inspected the database structure and created a new Grafana dashboard for comparing the two measurement sources.

There was no need to rebuild the existing dashboard or disturb the Solis acquisition process.

Perhaps the most impressive aspect was the speed. Tasks that would ordinarily involve quite a bit of research, experimentation, editing and testing were completed in a fraction of the time I could have managed myself.

It wasn't entirely without intervention. There were a few minor issues with dashboard formatting and presentation, and some existing Node-RED warnings which needed to be worked around. But the assistant could inspect the results, make adjustments and verify that the data was actually arriving in the database.

For someone like me who is comfortable with the underlying technology but doesn't necessarily want to spend hours writing queries or debugging JavaScript, this is a particularly useful application of AI. It also proved that the infrastructure I've painstakingly built over years is very much fit for purpose and scalable. Win!

The New Node-RED Flow

The new flow subscribes to the MQTT topic:

zigbee2mqtt/FrientPowerMeter

Although the Frient can publish readings quite frequently, I don't particularly need a database entry every second. The flow therefore retains the latest received reading and writes a sample to InfluxDB every ten seconds, provided fresh data is available.

Four values are currently stored:

  • power_w - instantaneous grid power in watts
  • current_a - measured current in amps
  • energy_raw - cumulative consumed-energy counter
  • produced_energy_raw - cumulative produced-energy counter

The readings go into a new measurement called frient, within the existing solar_raw InfluxDB bucket.

Importantly, the cumulative energy counters are being stored exactly as received. Their scaling still needs to be verified against the physical meter before I start using them for billing or energy reconciliation calculations.

The existing Solis data continues to be stored separately in the solar measurement.

The separate Frient Energy flow samples fresh MQTT readings every ten seconds and writes them to InfluxDB.
The separate Frient Energy flow samples fresh MQTT readings every ten seconds and writes them to InfluxDB.
Recent Frient records in solar_raw, including power, current and the unchanged cumulative counters.
Recent Frient records in solar_raw, including power, current and the unchanged cumulative counters.

A New Grafana Comparison Dashboard

With the data arriving in InfluxDB, I instructed ChatGPT to create a new Grafana dashboard called Grid Meter Validation.

The purpose of this dashboard is to compare the Frient readings with those from Solis before making any changes to the main Home Energy dashboard.

It includes instantaneous power comparisons, percentage differences, historical charts, data freshness information and a preliminary daily energy reconciliation table.

The two sources operate at different sampling intervals. Solis is polled once per minute, while Frient readings are stored every ten seconds. The comparison therefore uses one-minute averages and matches the two sources by time.

The Solis trace is blue and the Frient trace orange, making it easy to see how closely they follow one another.


Grid Meter Validation combines live statistics, power history and preliminary daily reconciliation. At this low load, the percentage comparison is suppressed.

The initial results are encouraging. During one comparison, Solis reported approximately 1.77kW and the Frient 1.79kW, a difference of less than 1%. Another comparison showed both at approximately 1.96kW, with a difference of around 0.3%.

These are preliminary observations rather than a formal accuracy test. The dashboard currently compares power magnitude, and the two devices don't necessarily sample at exactly the same instant. Nevertheless, the agreement is close enough to give me confidence that the new acquisition pipeline is working properly.

It was also useful to have ChatGPT check the InfluxDB records directly, rather than relying solely on what appeared in Grafana. We could confirm that the expected fields were being written at approximately ten-second intervals.

Solis (blue) and Frient (orange) power magnitudes from 11:15 to 12:00 on 10 November, using one-minute averages.
Solis (blue) and Frient (orange) power magnitudes from 11:15 to 12:00 on 10 November, using one-minute averages.

What's Been Achieved?

We now have two independent sources of electricity monitoring data feeding the same database.

The original Solis pipeline continues to provide the information needed for the main energy dashboard, including solar generation, battery activity, household consumption and tariff calculations.

The Frient adds a direct feed from the electricity meter, collected over Zigbee and stored independently of the inverter.

Everything runs locally on the existing Unraid infrastructure, using the same MQTT, Node-RED, InfluxDB and Grafana services that were already in place.

One other interesting observation came from checking the system resources. Despite retaining several months of solar readings, the InfluxDB data directory was still under 10MB at the time of inspection. The additional Frient data stream should be a fairly modest workload for the NUC, although I'll review database growth after it has been running for a while.

Next Steps

There are still a few things to investigate before I can consider the Frient integration complete.

First, I need to confirm the direction of the power readings when exporting electricity. We were importing throughout the initial testing, and with the November weather taking a turn toward dull today, there wasn't much prospect of surplus solar generation. That comparison will have to wait for a brighter day.

I also need to establish the correct scaling of the cumulative import and export counters. The raw values don't yet reconcile satisfactorily with the readings on the physical meter, so I'm deliberately leaving those calculations out of the dashboard for now.

Once those details are resolved, I can start comparing daily imported and exported energy totals over complete 24-hour periods. That should help establish whether there are any systematic differences between the Solis measurements and the electricity meter.

Longer term, I'd like to use the meter readings to improve the accuracy of the financial calculations in my Home Energy dashboard, particularly the import costs and feed-in tariff payments.

There's also some housekeeping to do around data retention, checking for gaps in the readings and making sure the new flow behaves properly following restarts or temporary communication failures.

For now, though, I'm pleased with the result. A relatively inexpensive Zigbee interface has given me an additional source of grid data, and the existing monitoring infrastructure has been extended without disrupting anything that was already working.

The experience of using ChatGPT in Work mode was probably just as interesting as the hardware integration itself. Having an AI assistant that can inspect an established system, make changes and verify the outcome is a significant step beyond the usual question-and-answer approach. I always make a backup first though!

I'll be making considerably more use of that capability in future projects.

No comments: