Current Transformer Data

This section documents CT data for Envoy‑metered systems via EnvoyMeterData.

Depending on how many and which CT are installed, data is available in:

Legacy per‑type attributes remain for compatibility:

These map to their counterparts pyenphase.EnvoyData.ctmeters[CtType]. In some future version these may be deprecated.

There are multiple CT types that can be installed. The CT meter types are enumerated as production, storage, net-consumption, total-consumption, backfeed, load, evse and pv3p by pyenphase.models.meters.CtType. One or more of these can be installed and enabled. For multi-phase configurations, there will be one per phase.

    data: EnvoyData = await envoy.update()

    production_ct = data.ctmeters[CtType.PRODUCTION]

    print(f'eid: {production_ct.eid}')
    print(f'timestamp: {production_ct.timestamp}')
    print(f'energy_delivered: {production_ct.energy_delivered}')
    print(f'energy_received: {production_ct.energy_received}')
    print(f'power_factor: {production_ct.power_factor}')
    print(f'active_power: {production_ct.active_power}')
    print(f'voltage: {production_ct.voltage}')
    print(f'current: {production_ct.current}')
    print(f'frequency: {production_ct.frequency}')
    print(f'state: {production_ct.state}')
    print(f'measurement_type: {production_ct.measurement_type}')
    print(f'metering_status: {production_ct.metering_status}')
    print(f'status_flags: {production_ct.status_flags}')

To detect how many CTs are installed, use the Envoy property ct_meter_count. You can identify which CT meters are available via pyenphase.Envoy.ct_meter_list. To test presence of individual CT meters use pyenphase.Envoy.meter_type() with a CtType argument.

The consumption CT can be either net-consumption (installed at the grid boundary) or total-consumption (measuring house load); see ct-model below. Which one is installed, is available in pyenphase.Envoy.consumption_meter_type. The IQ Metered collar includes an embedded net-consumption CT.

    how_many_ct = envoy.ct_meter_count
    meter_list = envoy.ct_meter_list

    consumption_ct = 'installed' if envoy.consumption_meter_type else 'not installed'
    production_ct = 'installed' if envoy.meter_type(CtType.PRODUCTION) else 'not installed'
    storage_ct = 'installed' if CtType.STORAGE in meter_list else 'not installed'

    print(f'This Envoy has Production CT {production_ct}, Consumption CT {consumption_ct}, and Storage CT {storage_ct}')

Consumption CT options

The consumption CT can be installed in two configurations: Solar + Load or Load only. The attribute consumption_meter_type indicates whether the CT is operating in net-consumption or total-consumption mode.

In net-consumption mode, energy_delivered reports cumulative site import (energy received from the grid), while energy_received reports cumulative site export (energy sent to the grid).[1][2] In total-consumption mode, the CT reports only the house load.

active_power is the instantaneous power; its sign reflects the direction of energy flow.


if (cttype := data.consumption_meter_type) == CtType.NET_CONSUMPTION:
    grid_import = data.ctmeters[cttype].energy_delivered
    grid_export = data.ctmeters[cttype].energy_received
    grid_power = data.ctmeters[cttype].active_power
else:
    print("No net consumption CT installed")

Production CT Options

The production CT measures solar production. energy_delivered reports the energy generated by the solar array, while energy_received reports energy consumed by the solar hardware. The latter is typically minimal (e.g., inverter consumption during dawn and dusk).[2]

Storage CT Options

The storage CT measures battery charge and discharge. energy_delivered reports energy discharged from the battery, while energy_received reports energy charged to the battery.[2]

Backfeed CT Options

The backfeed CT measures energy fed back from the Combiner to the switchboard. energy_delivered reports energy fed back, while energy_received reports received from the switchboard.[2]

Load CT Options

The load CT measures energy flow between the combiner and backup loads (installations may vary with backup and non‑backup loads). Per the CT Model, energy_delivered is energy towards the switchboard, and energy_received is energy from the switchboard.[2]

EVSE CT Options

The EVSE CT measures energy flow between the combiner and the EV charger. Per the CT Model, energy_delivered is energy towards the switchboard, and energy_received is energy from the switchboard.[2]

PV3P CT Options

The PV3P CT measures solar production by third party PV. energy_delivered reports the energy generated by the solar array, while energy_received reports energy consumed by the solar hardware. The latter is typically minimal (e.g., consumption during dawn and dusk).[2]

CT Model

Below is a generic model for installed CTs. Each CT can be considered as facing the switchboard and reporting energy delivered to the switchboard in its energy_delivered property and energy received from the switchboard in energy_received. Power is positive towards the switchboard and negative from the switchboard.

ct-model showing optional CT configuration

These properties have different meaning for each specific CT. For a net-consumption CT, delivered is import from the grid, for Solar production CT, it is solar production and for a battery CT it is battery discharge. A total-consumption CT typically has no delivery but only receives what is consumed by the house.

When a combiner is used, several other CT types may be available.

ct-combiner-model showing optional CT configuration

NOTE

  • This in no way represents a configuration direction, as actual configuration is driven by local rules, installer designs and Enphase installation guidelines. Variations may exist, based on specific needs or rules. This merely describes a simplified view and naming conventions used in this documentation to clarify integration operation. Refer to Enphase documentation for more information.

  • Some element positions, including PV3P, are assumed positions and still need confirmation.

  • This is an independent publication and has not been authorized, sponsored, or otherwise approved by Enphase Energy, Inc. It is loosely based on Enphase technical brief “PCS integration in 4th-generation Enphase Energy Systems”.

Dual CT attributes, single production report attribute

An Envoy metered with CTs installed, sources production and consumption data from the CT meters. The system_production data is collected from the production CT. The system_consumption data represents total house load and is either collected from the consumption CT in total-consumption mode or calculated by the Envoy from both production and consumption CTs when the consumption CT is in net-consumption mode.

A single increasing/decreasing total of import and export is reported by the /production.json?details=1 in net-consumption as whLifetime for energy and wNow for power. CT readings provide two monotonically increasing energy properties, actEnergyDlvd and actEnergyRcvd; power is reported in a single value activePower.

Multi-phase CT

For metered Envoy with multi‑phase installations, CT phase data is available in:

Legacy per‑type attributes remain for compatibility:

Phase data is only populated if CTs are installed on more than 1 phase for production and/or consumption phases.

To detect if multiple phases are reporting, use the Envoy property phase_count.

    data: EnvoyData = await envoy.update()

    if envoy.phase_count > 1:
        for phase, phase_data in data.ctmeters_phases.get(CtType.PRODUCTION, {}).items():
            for key, value in vars(phase_data).items():
                print(f'{phase} {key}: {value}')

Data sources

The data is provided by the updaters below.

This data set is identified by the pyenphase.const.SupportedFeatures flag CTMETERS. In addition it returns THREEPHASE or DUALPHASE to signal if a multi-phase mode is active.

EnvoyMetersUpdater

This is the default updater for CT data. It provides data for aggregated phases and individual phases. Data is measured/calculated by the Envoy.

endpoint config

/ivp/meters

endpoint data

/ivp/meters/readings

json path config

$

eid of production

[?(@.measurementType=='production' && @.state=='enabled')][eid]

eid of consumption

[?(@.measurementType=='net-consumption' && @.state=='enabled')][eid]

[?(@.measurementType=='total-consumption' && @.state=='enabled')][eid]

eid of storage

[?(@.measurementType=='storage' && @.state=='enabled')][eid]

json path aggregated

[?(@.eid==<eid of ....>)]

json path phases

[?(@.eid==<eid of ....>)].channels[*]

class data

json node

uom

eid

eid

timestamp

timestamp

energy_delivered

actEnergyDlvd

Wh

energy_received

actEnergyRcvd

Wh

active_power

activePower

W

power_factor

pwrFactor

voltage

voltage

V

current

current

A

frequency

freq

Hz

state

state

measurement_type

measurementType

metering_status

meteringStatus

status_flags

statusFlags