Skip to content

Add LG ESS15 #17412

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions meter/lgess.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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
Expand All @@ -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
}
Expand All @@ -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
}
Expand All @@ -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
}
Expand Down
29 changes: 6 additions & 23 deletions meter/lgpcs/lgpcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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
Expand All @@ -172,7 +155,7 @@ func (m *Com) refreshData() (EssData, error) {
}

if err != nil {
return EssData{}, err
return EssData8{}, err
}

res := resp.Statistics
Expand Down
33 changes: 33 additions & 0 deletions meter/lgpcs/types.go
Original file line number Diff line number Diff line change
@@ -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"`
}