diff --git a/alphaess.go b/alphaess.go index 95d45de..5ab00f2 100644 --- a/alphaess.go +++ b/alphaess.go @@ -54,12 +54,8 @@ type AlphaEss struct { client *modbus.ModbusClient } -func NewAlphaEss(cfg AlphaConf) (*AlphaEss, error) { - a := &AlphaEss{cfg: cfg} - if err := a.connect(); err != nil { - return nil, err - } - return a, nil +func NewAlphaEss(cfg AlphaConf) *AlphaEss { + return &AlphaEss{cfg: cfg} // connect lazily on first Poll } func (a *AlphaEss) connect() error { @@ -100,9 +96,14 @@ func (a *AlphaEss) readReg(r alphaReg) (float32, error) { return float32(raw) * r.factor, nil } -// Poll reads all AlphaEss registers. On connection error it attempts one -// reconnect before returning the error. +// Poll reads all AlphaEss registers. Connects on first call; on error +// attempts one reconnect before returning. func (a *AlphaEss) Poll() (*InverterData, error) { + if a.client == nil { + if err := a.connect(); err != nil { + return nil, err + } + } data, err := a.poll() if err != nil { log.Printf("alphaess poll error, reconnecting: %v", err) diff --git a/main.go b/main.go index 49f9917..525b71c 100644 --- a/main.go +++ b/main.go @@ -31,10 +31,7 @@ func main() { } defer db.Close() - alpha, err := NewAlphaEss(cfg.AlphaEss) - if err != nil { - log.Fatalf("alphaess: %v", err) - } + alpha := NewAlphaEss(cfg.AlphaEss) defer alpha.Close() meters, err := NewMeterPoller(cfg.MQTT)