From bbd98d38619a6a37fc1ad13e6a35f9b2beaad243 Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 19 Apr 2020 18:23:32 +0200 Subject: [PATCH 1/2] Add MeterCurrent interface --- api/api.go | 5 +++++ charger/go-e.go | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/api/api.go b/api/api.go index 8879c4df6..a6e4ab886 100644 --- a/api/api.go +++ b/api/api.go @@ -37,6 +37,11 @@ type MeterEnergy interface { TotalEnergy() (float64, error) } +// MeterCurrent is able to provide per-line current A +type MeterCurrent interface { + Currents() (float64, float64, float64, error) +} + // Charger is able to provide current charging status and to enable/disabler charging type Charger interface { Status() (ChargeStatus, error) diff --git a/charger/go-e.go b/charger/go-e.go index 6f2c7fe03..c9ee37157 100644 --- a/charger/go-e.go +++ b/charger/go-e.go @@ -139,3 +139,13 @@ func (c *GoE) ChargedEnergy() (float64, error) { energy := float64(status.Dws) / 3.6e6 return energy, err } + +// Currents implements the MeterCurrent interface +func (c *GoE) Currents() (float64, float64, float64, error) { + var status goeStatusResponse + _, err := c.GetJSON(c.apiURL(goeStatus), &status) + if len(status.Nrg) == 16 { + return float64(status.Nrg[4]) / 10, float64(status.Nrg[5]) / 10, float64(status.Nrg[6]) / 10, nil + } + return 0, 0, 0, err +} From 6640469decf2eb5088394a7fb34f0de5e4eea4ba Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 6 May 2020 21:00:15 +0200 Subject: [PATCH 2/2] Dump currents --- cmd/dump.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmd/dump.go b/cmd/dump.go index 30b5debff..24ef1329c 100644 --- a/cmd/dump.go +++ b/cmd/dump.go @@ -25,6 +25,14 @@ func dumpAPIs(v interface{}) { } } + if v, ok := v.(api.MeterCurrent); ok { + if i1, i2, i3, err := v.Currents(); err != nil { + fmt.Printf("Current L1..L3: %v\n", err) + } else { + fmt.Printf("Current L1..L3: %.1fA %.1fA %.1fA\n", i1, i2, i3) + } + } + if v, ok := v.(api.ChargeRater); ok { if energy, err := v.ChargedEnergy(); err != nil { fmt.Printf("Charged: %v\n", err)