powersensor_local.virtual_household

Abstraction for producing a household view.

Functions

make_instant_housenet(ev)

Helper for case where no solar merge is expected.

make_summation_housenet(ev)

Helper for case where no solar merge is expected.

matching_instants(starttime_utc, ...)

Attempts to match and merge solar+housenet average_power events.

matching_summations(starttime_utc, ...)

Attempts to match and merge solar+housenet summation events.

same_duration(ev1, ev2)

Close-enough matching of duration_s in events.

Classes

InstantaneousValues(starttime_utc, ...)

SummationDeltas(solar_generation, to_grid, ...)

SummationValues(starttime_utc, ...)

VirtualHousehold(with_solar)

Class for processing average_power and summation_energy events into to/from grid, solar generation, and home usage events.

class powersensor_local.virtual_household.InstantaneousValues(starttime_utc, solar_watts, housenet_watts, duration_s)[source]

Bases: object

duration_s: int
housenet_watts: float
solar_watts: float
starttime_utc: int
class powersensor_local.virtual_household.SummationDeltas(solar_generation, to_grid, from_grid, home_use)[source]

Bases: object

from_grid: float
home_use: float
solar_generation: float
to_grid: float
class powersensor_local.virtual_household.SummationValues(starttime_utc, solar_summation, solar_resettime, housenet_summation, housenet_resettime)[source]

Bases: object

housenet_resettime: int
housenet_summation: float
solar_resettime: int
solar_summation: float
starttime_utc: int
class powersensor_local.virtual_household.VirtualHousehold(with_solar)[source]

Bases: AsyncEventEmitter

Class for processing average_power and summation_energy events into to/from grid, solar generation, and home usage events.

To use, simply feed the appropriate PlugApi events to the process_average_power_event and process_summation_event member functions.

Point-in-time power flow events include:

  • home_usage

  • from_grid

  • to_grid (only for solar kits)

  • solar_generation (only for solar kits)

These all have an event payload in the form:

{ timestamp_utc: , watts: }

Energy summation events include:

  • home_usage_summation

  • from_grid_summation

  • to_grid_summation (only for solar kits)

  • solar_generation_summation (only for solar kits)

These all have an event payload in the form:

{ timestamp_utc: , summation_resettime_utc: , summation_joules: }

Summations may reset at any time. Track the summation_resettime_utc field to take note of summation resets.

class Counters(resettime_utc, solar_generation, to_grid, from_grid, home_use)[source]

Bases: object

from_grid: float
home_use: float
resettime_utc: int
solar_generation: float
to_grid: float
class SummationInfo(solar_resettime, solar_last, housenet_resettime, housenet_last)[source]

Bases: object

housenet_last: float
housenet_resettime: int
solar_last: float
solar_resettime: int
async process_average_power_event(ev)[source]

Ingests an event of type ‘average_power’.

async process_summation_event(ev)[source]

Ingests an event of type ‘summation_energy’.

powersensor_local.virtual_household.make_instant_housenet(ev)[source]

Helper for case where no solar merge is expected.

Return type:

Optional[InstantaneousValues]

powersensor_local.virtual_household.make_summation_housenet(ev)[source]

Helper for case where no solar merge is expected.

Return type:

Optional[SummationValues]

powersensor_local.virtual_household.matching_instants(starttime_utc, solar_events, housenet_events)[source]

Attempts to match and merge solar+housenet average_power events.

Return type:

Optional[InstantaneousValues]

powersensor_local.virtual_household.matching_summations(starttime_utc, solar_events, housenet_events)[source]

Attempts to match and merge solar+housenet summation events.

Return type:

Optional[SummationValues]

powersensor_local.virtual_household.same_duration(ev1, ev2)[source]

Close-enough matching of duration_s in events.