diff --git a/meter/homewizard.go b/meter/homewizard.go index 7e72b7cd8..3b01f8571 100644 --- a/meter/homewizard.go +++ b/meter/homewizard.go @@ -70,6 +70,13 @@ func (c *HomeWizard) Currents() (float64, float64, float64, error) { return c.conn.Currents() } +var _ api.PhasePowers = (*HomeWizard)(nil) + +// Powers implements the api.PhasePowers interface +func (c *HomeWizard) Powers() (float64, float64, float64, error) { + return c.conn.Powers() +} + var _ api.PhaseVoltages = (*HomeWizard)(nil) // Voltages implements the api.PhaseVoltages interface diff --git a/meter/homewizard/connection.go b/meter/homewizard/connection.go index 526712ef9..a79f5d4a1 100644 --- a/meter/homewizard/connection.go +++ b/meter/homewizard/connection.go @@ -125,6 +125,15 @@ func (c *Connection) Currents() (float64, float64, float64, error) { return res.ActiveCurrentL1A, res.ActiveCurrentL2A, res.ActiveCurrentL3A, err } +// Powers implements the api.PhasePowers interface +func (c *Connection) Powers() (float64, float64, float64, error) { + res, err := c.dataG.Get() + if c.usage == "pv" { + return -res.ActivePowerL1W, -res.ActivePowerL2W, -res.ActivePowerL3W, err + } + return res.ActivePowerL1W, res.ActivePowerL2W, res.ActivePowerL3W, err +} + // Voltages implements the api.PhaseVoltages interface func (c *Connection) Voltages() (float64, float64, float64, error) { res, err := c.dataG.Get() diff --git a/meter/homewizard/types.go b/meter/homewizard/types.go index 68a3110cf..20c3e4e86 100644 --- a/meter/homewizard/types.go +++ b/meter/homewizard/types.go @@ -17,6 +17,9 @@ type StateResponse struct { // https://homewizard-energy-api.readthedocs.io/endpoints.html#state-api-v1-state type DataResponse struct { ActivePowerW float64 `json:"active_power_w"` + ActivePowerL1W float64 `json:"active_power_l1_w"` + ActivePowerL2W float64 `json:"active_power_l2_w"` + ActivePowerL3W float64 `json:"active_power_l3_w"` TotalPowerImportT1kWh float64 `json:"total_power_import_t1_kwh"` TotalPowerImportT2kWh float64 `json:"total_power_import_t2_kwh"` TotalPowerImportT3kWh float64 `json:"total_power_import_t3_kwh"` diff --git a/meter/homewizard/types_test.go b/meter/homewizard/types_test.go index 381c5844f..0a5ee4555 100644 --- a/meter/homewizard/types_test.go +++ b/meter/homewizard/types_test.go @@ -44,6 +44,9 @@ func TestUnmarshalKwhDataResponse(t *testing.T) { assert.Equal(t, float64(30.511), res.TotalPowerImportT1kWh+res.TotalPowerImportT2kWh+res.TotalPowerImportT3kWh+res.TotalPowerImportT4kWh) assert.Equal(t, float64(85.951), res.TotalPowerExportT1kWh+res.TotalPowerExportT2kWh+res.TotalPowerExportT3kWh+res.TotalPowerExportT4kWh) assert.Equal(t, float64(543), res.ActivePowerW) + assert.Equal(t, float64(28), res.ActivePowerL1W) + assert.Equal(t, float64(0), res.ActivePowerL2W) + assert.Equal(t, float64(-181), res.ActivePowerL3W) assert.Equal(t, float64(235.4), res.ActiveVoltageL1V) assert.Equal(t, float64(235.8), res.ActiveVoltageL2V) assert.Equal(t, float64(236.1), res.ActiveVoltageL3V) @@ -64,6 +67,9 @@ func TestUnmarshalP1DataResponse(t *testing.T) { assert.Equal(t, float64(18664.997), res.TotalPowerImportT1kWh+res.TotalPowerImportT2kWh+res.TotalPowerImportT3kWh+res.TotalPowerImportT4kWh) assert.Equal(t, float64(13823.608), res.TotalPowerExportT1kWh+res.TotalPowerExportT2kWh+res.TotalPowerExportT3kWh+res.TotalPowerExportT4kWh) assert.Equal(t, float64(203), res.ActivePowerW) + assert.Equal(t, float64(-21), res.ActivePowerL1W) + assert.Equal(t, float64(57), res.ActivePowerL2W) + assert.Equal(t, float64(168), res.ActivePowerL3W) assert.Equal(t, float64(228), res.ActiveVoltageL1V) assert.Equal(t, float64(226), res.ActiveVoltageL2V) assert.Equal(t, float64(225), res.ActiveVoltageL3V)