diff --git a/meter/sma.go b/meter/sma.go index 98b59c18f..48dea3a25 100644 --- a/meter/sma.go +++ b/meter/sma.go @@ -15,7 +15,6 @@ import ( // SMA supporting SMA Home Manager 2.0, SMA Energy Meter 30 and SMA inverter type SMA struct { - log *util.Logger uri string scale float64 device *sma.Device @@ -48,7 +47,6 @@ func NewSMAFromConfig(other map[string]interface{}) (api.Meter, error) { // NewSMA creates a SMA Meter func NewSMA(uri, password, iface string, serial uint32, scale float64) (api.Meter, error) { sm := &SMA{ - log: util.NewLogger("sma").Redact(password), uri: uri, scale: scale, } @@ -74,6 +72,12 @@ func NewSMA(uri, password, iface string, serial uint32, scale float64) (api.Mete default: return nil, errors.New("missing uri or serial") } + + // call UpdateValues first to check if we get an error + if err := sm.device.UpdateValues(); err != nil { + return nil, err + } + // start update loop manually to get values as fast as possible sm.device.StartUpdateLoop() diff --git a/provider/sma/device.go b/provider/sma/device.go index 9ccee0b04..d1a658f90 100644 --- a/provider/sma/device.go +++ b/provider/sma/device.go @@ -24,15 +24,16 @@ type Device struct { func (d *Device) StartUpdateLoop() { d.once.Do(func() { go func() { - d.updateValues() for range time.NewTicker(time.Second * 5).C { - d.updateValues() + if err := d.UpdateValues(); err != nil { + d.log.ERROR.Println(err) + } } }() }) } -func (d *Device) updateValues() { +func (d *Device) UpdateValues() error { d.mux.Lock() defer d.mux.Unlock() @@ -42,9 +43,7 @@ func (d *Device) updateValues() { d.mux.Update() } - if err != nil { - d.log.ERROR.Println(err) - } + return err } func (d *Device) Values() (map[sunny.ValueID]interface{}, error) {