Meter (HomeWizard): expose per-phase power for signed grid currents (#30218)

This commit is contained in:
andig 2026-05-25 22:17:54 +02:00 • committed by GitHub
parent d57d3f9743
commit 933a57b2ac
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 25 additions and 0 deletions

View file

@ -70,6 +70,13 @@ func (c *HomeWizard) Currents() (float64, float64, float64, error) {
return c.conn.Currents() 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) var _ api.PhaseVoltages = (*HomeWizard)(nil)
// Voltages implements the api.PhaseVoltages interface // Voltages implements the api.PhaseVoltages interface

View file

@ -125,6 +125,15 @@ func (c *Connection) Currents() (float64, float64, float64, error) {
return res.ActiveCurrentL1A, res.ActiveCurrentL2A, res.ActiveCurrentL3A, err 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 // Voltages implements the api.PhaseVoltages interface
func (c *Connection) Voltages() (float64, float64, float64, error) { func (c *Connection) Voltages() (float64, float64, float64, error) {
res, err := c.dataG.Get() res, err := c.dataG.Get()

View file

@ -17,6 +17,9 @@ type StateResponse struct {
// https://homewizard-energy-api.readthedocs.io/endpoints.html#state-api-v1-state // https://homewizard-energy-api.readthedocs.io/endpoints.html#state-api-v1-state
type DataResponse struct { type DataResponse struct {
ActivePowerW float64 `json:"active_power_w"` 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"` TotalPowerImportT1kWh float64 `json:"total_power_import_t1_kwh"`
TotalPowerImportT2kWh float64 `json:"total_power_import_t2_kwh"` TotalPowerImportT2kWh float64 `json:"total_power_import_t2_kwh"`
TotalPowerImportT3kWh float64 `json:"total_power_import_t3_kwh"` TotalPowerImportT3kWh float64 `json:"total_power_import_t3_kwh"`

View file

@ -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(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(85.951), res.TotalPowerExportT1kWh+res.TotalPowerExportT2kWh+res.TotalPowerExportT3kWh+res.TotalPowerExportT4kWh)
assert.Equal(t, float64(543), res.ActivePowerW) 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.4), res.ActiveVoltageL1V)
assert.Equal(t, float64(235.8), res.ActiveVoltageL2V) assert.Equal(t, float64(235.8), res.ActiveVoltageL2V)
assert.Equal(t, float64(236.1), res.ActiveVoltageL3V) 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(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(13823.608), res.TotalPowerExportT1kWh+res.TotalPowerExportT2kWh+res.TotalPowerExportT3kWh+res.TotalPowerExportT4kWh)
assert.Equal(t, float64(203), res.ActivePowerW) 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(228), res.ActiveVoltageL1V)
assert.Equal(t, float64(226), res.ActiveVoltageL2V) assert.Equal(t, float64(226), res.ActiveVoltageL2V)
assert.Equal(t, float64(225), res.ActiveVoltageL3V) assert.Equal(t, float64(225), res.ActiveVoltageL3V)