Skip to content

Commit

Permalink
Merge branch 'master' into saj-h1-inverter
Browse files Browse the repository at this point in the history
  • Loading branch information
h3llrais3r authored Jan 7, 2025
2 parents df0a1f7 + e9d67ee commit 08e4d7a
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 45 deletions.
17 changes: 11 additions & 6 deletions charger/abl.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package charger
// LICENSE

// Copyright (c) 2019-2022 andig
// Copyright (c) 2022 premultiply
// Copyright (c) 2022-2024 premultiply

// This module is NOT covered by the MIT license. All rights reserved.

Expand Down Expand Up @@ -157,15 +157,20 @@ func (wb *ABLeMH) Status() (api.ChargeStatus, error) {
return api.StatusNone, err
}

r := rune(b[1]>>4-0x0A) + 'A'
s := string(rune((b[1]>>4)-0x0A) + 'A')

switch r {
case 'A', 'B', 'C':
return api.ChargeStatus(r), nil
switch s {
case "A", "B", "C":
return api.ChargeStatusString(s)
default:
// ensure Outlet is re-enabled after wake-up
if b[1] == 0xE0 { // Outlet is disabled
return api.StatusB, wb.set(ablRegModifyState, 0xA1A1)
}

status, ok := ablStatus[b[1]]
if !ok {
status = string(r)
status = s
}

return api.StatusNone, fmt.Errorf("invalid status: %s", status)
Expand Down
4 changes: 1 addition & 3 deletions meter/zendure/connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,10 @@ func (c *Connection) handler(data string) {
}

c.data.SetFunc(func(v Data) Data {
if err := mergo.Merge(&v, res.Data); err != nil {
if err := mergo.Merge(&v, res.Data, mergo.WithOverride); err != nil {
c.log.ERROR.Println(err)
}

c.log.TRACE.Printf("!! data: %+v", v)

return v
})
}
Expand Down
31 changes: 31 additions & 0 deletions meter/zendure/connection_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package zendure

import (
"testing"
"time"

"github.com/evcc-io/evcc/util"
"github.com/stretchr/testify/assert"
)

func TestHandler(t *testing.T) {
conn := &Connection{
log: util.NewLogger("test"),
data: util.NewMonitor[Data](time.Minute),
}

{
conn.handler(`{"solarInputPower":113,"sn":"serial"}`)
res, err := conn.data.Get()
assert.NoError(t, err)

assert.Equal(t, Data{SolarInputPower: 113, Sn: "serial"}, res)
}
{
conn.handler(`{"solarInputPower":125,"sn":"serial"}`)
res, err := conn.data.Get()
assert.NoError(t, err)

assert.Equal(t, Data{SolarInputPower: 125, Sn: "serial"}, res)
}
}
13 changes: 1 addition & 12 deletions provider/golang/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,6 @@ import (
"github.com/traefik/yaegi/interp"
)

const Imports = `import (
"fmt"
"math"
"strings"
"time"
)`

var (
mu sync.Mutex
registry = make(map[string]*interp.Interpreter)
Expand All @@ -31,14 +24,10 @@ func RegisteredVM(name, init string) (*interp.Interpreter, error) {
// create new VM
if !ok {
vm = interp.New(interp.Options{})

if err := vm.Use(stdlib.Symbols); err != nil {
return nil, err
}

if _, err := vm.Eval(Imports); err != nil {
return nil, err
}
vm.ImportUsed()

if init != "" {
if _, err := vm.Eval(init); err != nil {
Expand Down
36 changes: 12 additions & 24 deletions tariff/embed.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"fmt"
"time"

"github.com/evcc-io/evcc/provider/golang"
"github.com/evcc-io/evcc/provider/golang/stdlib"
"github.com/traefik/yaegi/interp"
)
Expand All @@ -29,35 +28,24 @@ func (t *embed) init() (err error) {
return nil
}

vm := interp.New(interp.Options{})
if err := vm.Use(stdlib.Symbols); err != nil {
return err
}

if _, err := vm.Eval(fmt.Sprintf(`%s
var (
price float64
charges float64 = %f
tax float64 = %f
ts time.Time
)`, golang.Imports, t.Charges, t.Tax)); err != nil {
return err
}

prg, err := vm.Compile(t.Formula)
if err != nil {
return err
}

t.calc = func(price float64, ts time.Time) (float64, error) {
vm := interp.New(interp.Options{})
if err := vm.Use(stdlib.Symbols); err != nil {
return 0, err
}
vm.ImportUsed()

if _, err := vm.Eval(fmt.Sprintf(`
price = %f
var (
price float64 = %f
charges float64 = %f
tax float64 = %f
ts = time.Unix(%d, 0).Local()
`, price, ts.Unix())); err != nil {
)`, price, t.Charges, t.Tax, ts.Unix())); err != nil {
return 0, err
}

res, err := vm.Execute(prg)
res, err := vm.Eval(t.Formula)
if err != nil {
return 0, err
}
Expand Down
8 changes: 8 additions & 0 deletions vehicle/bmw/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,14 @@ func (v *Provider) GetLimitSoc() (int64, error) {
return res.State.ElectricChargingState.ChargingTarget, nil
}

var _ api.VehicleClimater = (*Provider)(nil)

// Climater implements the api.VehicleClimater interface
func (v *Provider) Climater() (bool, error) {
res, err := v.statusG()
return res.State.ClimateControlState.Activity == "HEATING" || res.State.ClimateControlState.Activity == "COOLING", err
}

var _ api.Resurrector = (*Provider)(nil)

func (v *Provider) WakeUp() error {
Expand Down
3 changes: 3 additions & 0 deletions vehicle/bmw/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,8 @@ type VehicleStatus struct {
ChargingStatus string
ChargingTarget int64
}
ClimateControlState struct {
Activity string
}
}
}

0 comments on commit 08e4d7a

Please sign in to comment.