diff --git a/meter/lgess.go b/meter/lgess.go index 2570cf9894..4d0b788d32 100644 --- a/meter/lgess.go +++ b/meter/lgess.go @@ -42,7 +42,7 @@ same hardware instance is accessed with the different usages. // LgEss implements the api.Meter interface type LgEss struct { usage string // grid, pv, battery - lp *lgpcs.Com // communication with the lgpcs device + conn *lgpcs.Com // communication with the lgpcs device } func init() { @@ -75,14 +75,14 @@ func NewLgEssFromConfig(other map[string]interface{}) (api.Meter, error) { // NewLgEss creates an LgEss Meter func NewLgEss(uri, usage, registration, password string, cache time.Duration, capacity func() float64) (api.Meter, error) { - lp, err := lgpcs.GetInstance(uri, registration, password, cache) + conn, err := lgpcs.GetInstance(uri, registration, password, cache) if err != nil { return nil, err } m := &LgEss{ usage: strings.ToLower(usage), - lp: lp, + conn: conn, } // decorate api.MeterEnergy @@ -102,7 +102,7 @@ func NewLgEss(uri, usage, registration, password string, cache time.Duration, ca // CurrentPower implements the api.Meter interface func (m *LgEss) CurrentPower() (float64, error) { - data, err := m.lp.Data() + data, err := m.conn.Data() if err != nil { return 0, err } @@ -121,7 +121,7 @@ func (m *LgEss) CurrentPower() (float64, error) { // totalEnergy implements the api.MeterEnergy interface func (m *LgEss) totalEnergy() (float64, error) { - data, err := m.lp.Data() + data, err := m.conn.Data() if err != nil { return 0, err } @@ -136,7 +136,7 @@ func (m *LgEss) totalEnergy() (float64, error) { // batterySoc implements the api.Battery interface func (m *LgEss) batterySoc() (float64, error) { - data, err := m.lp.Data() + data, err := m.conn.Data() if err != nil { return 0, err } diff --git a/meter/lgpcs/lgpcs.go b/meter/lgpcs/lgpcs.go index e06a1c35d3..8342987f8e 100644 --- a/meter/lgpcs/lgpcs.go +++ b/meter/lgpcs/lgpcs.go @@ -23,30 +23,13 @@ const ( MeterURI = "/v1/user/essinfo/home" ) -type MeterResponse struct { - Statistics EssData - Direction struct { - IsGridSelling int `json:"is_grid_selling_,string"` - IsBatteryDischarging int `json:"is_battery_discharging_,string"` - } -} - -type EssData struct { - GridPower float64 `json:"grid_power,string"` - PvTotalPower float64 `json:"pcs_pv_total_power,string"` - BatConvPower float64 `json:"batconv_power,string"` - BatUserSoc float64 `json:"bat_user_soc,string"` - CurrentGridFeedInEnergy float64 `json:"current_grid_feed_in_energy,string"` - CurrentPvGenerationSum float64 `json:"current_pv_generation_sum,string"` -} - type Com struct { *request.Helper uri string // URI address of the LG ESS inverter - e.g. "https://192.168.1.28" authPath string password string // registration number of the LG ESS Inverter - e.g. "DE2001..." authKey string // auth_key returned during login and renewed with new login after expiration - dataG func() (EssData, error) + dataG func() (EssData8, error) } var ( @@ -137,22 +120,22 @@ func (m *Com) Login() error { } // Data gives the data read from the pcs. -func (m *Com) Data() (EssData, error) { +func (m *Com) Data() (EssData8, error) { return m.dataG() } // refreshData reads data from lgess pcs. Tries to re-login if "405" auth_key expired is returned -func (m *Com) refreshData() (EssData, error) { +func (m *Com) refreshData() (EssData8, error) { data := map[string]interface{}{ "auth_key": m.authKey, } req, err := request.New(http.MethodPost, m.uri+MeterURI, request.MarshalJSON(data), request.JSONEncoding) if err != nil { - return EssData{}, err + return EssData8{}, err } - var resp MeterResponse + var resp MeterResponse8 if err = m.DoJSON(req, &resp); err != nil { // re-login if request returns 405-error @@ -172,7 +155,7 @@ func (m *Com) refreshData() (EssData, error) { } if err != nil { - return EssData{}, err + return EssData8{}, err } res := resp.Statistics diff --git a/meter/lgpcs/types.go b/meter/lgpcs/types.go new file mode 100644 index 0000000000..29c17af242 --- /dev/null +++ b/meter/lgpcs/types.go @@ -0,0 +1,33 @@ +package lgpcs + +type MeterResponse8 struct { + Statistics EssData8 + Direction struct { + IsGridSelling int `json:"is_grid_selling_,string"` + IsBatteryDischarging int `json:"is_battery_discharging_,string"` + } +} + +type EssData8 struct { + GridPower float64 `json:"grid_power,string"` + PvTotalPower float64 `json:"pcs_pv_total_power,string"` + BatConvPower float64 `json:"batconv_power,string"` + BatUserSoc float64 `json:"bat_user_soc,string"` + CurrentGridFeedInEnergy float64 `json:"current_grid_feed_in_energy,string"` + CurrentPvGenerationSum float64 `json:"current_pv_generation_sum,string"` +} + +type MeterResponse15 struct { + Statistics EssData15 + Direction struct { + IsGridSelling int `json:"is_grid_selling_"` + IsBatteryDischarging int `json:"is_battery_discharging_"` + } +} + +type EssData15 struct { + GridPower int `json:"grid_power_01kW"` + PvTotalPower int `json:"pv_total_power_01kW"` + BatConvPower int `json:"batt_conv_power_01kW"` + BatUserSoc int `json:"bat_user_soc"` +}