From 91c0ab20be264c01ef9eeeb6cf8c871015fa6375 Mon Sep 17 00:00:00 2001 From: andig Date: Tue, 7 Jan 2025 16:54:21 +0100 Subject: [PATCH] Zendure: fix meter updates (#18116) --- meter/zendure/connection.go | 4 +--- meter/zendure/connection_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 meter/zendure/connection_test.go diff --git a/meter/zendure/connection.go b/meter/zendure/connection.go index da8194699..f1c7de9fe 100644 --- a/meter/zendure/connection.go +++ b/meter/zendure/connection.go @@ -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 }) } diff --git a/meter/zendure/connection_test.go b/meter/zendure/connection_test.go new file mode 100644 index 000000000..12eb9bfb2 --- /dev/null +++ b/meter/zendure/connection_test.go @@ -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) + } +}