Phase data

For metered Envoy with installed and configured current transformers (CT meters) in three phase mode and more then 1 phase active, data for individual phases is reported for solar production and house consumption. Configurations in split mode do not report multiple phases in their production and consumption data.

Upon completion of the probe call, the phase setup is available. The number of configured phases, the number of configured CT meters, the phase mode configured and type of consumption CT are available from the envoy model.

Phase names are enumerated as L1, L2, and L3 by pyenphase.const.PhaseNames. Phase modes are enumerated as single, split and three by pyenphase.models.meters.EnvoyPhaseMode. The CT meter types are enumerated as production, ``storage, net-consumptionandtotal-consumptionbypyenphase.models.meters.CtType`.

Be aware that phase_count and phase_mode applies for all configured CT’s. The Envoy metered can however be configured with only 1, 2 or all 3 CT. In this case the not used CT data in system_production_phases or system_consumption_phases or system_storage_phases will be None

The Envoy property active_phase_count reports the number of phases reported in the production and consumption report. This will be 0 for single and split phase use and the actual used phases for three mode.


from pyenphase import Envoy
from pyenphase.const import PhaseNames
from pyenphase.models.meters import CtType, EnvoyPhaseMode

envoy = Envoy(host_ip_or_name)
await envoy.setup()
print(f'Envoy {envoy.host} running {envoy.firmware}, sn: {envoy.serial_number}')

await envoy.authenticate(username=username, password=password, token=token)

await envoy.probe()

print(f'Number of configured Phases: {envoy.phase_count}')
print(f'Number of configured CT meters: {envoy.ct_meter_count}')
print(f'Phases are configured in: {envoy.phase_mode} mode')
print(f'Phases reported in production/consumption: {envoy.active_phase_count} mode')

Production Phase data

Production phase data is available in Envoy data.system_production_phases: dict[str,EnvoySystemProduction].

    from pyenphase.const import PhaseNames

    data: EnvoyData = await envoy.update()

    # if more then 1 phase reported then get phase data
    if Envoy.actual_phase_count > 1 and data.system_production_phases:
        # Get data by looping over phase data
        for phase in data.system_production_phases:
            print(f'{phase} Watts: {data.system_production_phases[phase].watts_now}')
            print(f'{phase} TodaysEnergy: {data.system_production_phases[phase].watt_hours_today}')
            print(f'{phase} LifetimeEnergy {data.system_production_phases[phase].watt_hours_lifetime}')
            print(f'{phase} Last7DaysEnergy {data.system_production_phases[phase].watt_hours_last_7_days}')

        # report specific phase data by using PhaseNames (for phase 1)
        print(
            f'Value watt_hours_lifetime : {data.system_production_phases[PhaseNames.PHASE_1].watt_hours_lifetime}'
        )
        # report specific phase data by using phase index 0-2 (for phase 1)
        print(
            f'Value watt_hours_lifetime : {data.system_production_phases[list(PhaseNames)[0]].watt_hours_lifetime}'
        )



Consumption Phase data

Consumption phase data is available in Envoy data.system_consumption_phases: dict[str,EnvoySystemConsumption].

    from pyenphase.const import PhaseNames

    data: EnvoyData = await envoy.update()

    if Envoy.phase_count > 1:
        for phase in data.system_consumption_phases and data.system_consumption_phases:
            print(f'{phase} Watts: {data.system_consumption_phases[phase].watts_now}')
            print(f'{phase} TodaysEnergy: {data.system_consumption_phases[phase].watt_hours_today}')
            print(f'{phase} LifetimeEnergy {system_consumption_phases.[phase].watt_hours_lifetime}')
            print(f'{phase} Last7DaysEnergy {system_consumption_phases.[phase].watt_hours_last_7_days}')

        # report specific phase data  by using PhaseNames (for phase 1)
        print(
            f'Value watt_hours_lifetime : {data.system_consumption_phases[PhaseNames.PHASE_1].watt_hours_lifetime}'
        )
        # report specific phase data by using phase index 0-2 (for phase 1)
        print(
            f'Value watt_hours_lifetime : {data.system_consumption_phases[list(PhaseNames)[0]].watt_hours_lifetime}'
        )