From 58177f60c124100fff759731d7f314c44d81db4e Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 3 Aug 2020 07:23:54 +0200 Subject: [PATCH] Silence NaN reading errors by treating NaN as zero (#261) --- go.mod | 2 +- go.sum | 2 ++ meter/modbus.go | 8 ++++++++ provider/modbus.go | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 75a007f20..f4e0f2296 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,7 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 github.com/spf13/viper v1.7.0 github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e - github.com/volkszaehler/mbmd v0.0.0-20200717102329-c4d965bd1eac + github.com/volkszaehler/mbmd v0.0.0-20200802164800-51eb643c23c6 github.com/yuin/goldmark v1.1.32 golang.org/x/net v0.0.0-20200707034311-ab3426394381 golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6 diff --git a/go.sum b/go.sum index a4d0fd840..68a6e483f 100644 --- a/go.sum +++ b/go.sum @@ -348,6 +348,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/volkszaehler/mbmd v0.0.0-20200717102329-c4d965bd1eac h1:LnvR04M0HuzjTbRzMpE5jRHcNu46CvG1FOtMcZAX8C4= github.com/volkszaehler/mbmd v0.0.0-20200717102329-c4d965bd1eac/go.mod h1:sldLyJCKVO9GQkit55U5WPNr9U4KmUn1SCdqFN9Gjb4= +github.com/volkszaehler/mbmd v0.0.0-20200802164800-51eb643c23c6 h1:cs1lwT44CyqStjTmYe0vGDhQHEaBpYZh0dgXPQLeEpY= +github.com/volkszaehler/mbmd v0.0.0-20200802164800-51eb643c23c6/go.mod h1:sldLyJCKVO9GQkit55U5WPNr9U4KmUn1SCdqFN9Gjb4= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/meter/modbus.go b/meter/modbus.go index f63c0620b..9071530d6 100644 --- a/meter/modbus.go +++ b/meter/modbus.go @@ -1,6 +1,8 @@ package meter import ( + "errors" + "github.com/andig/evcc/api" "github.com/andig/evcc/util" "github.com/andig/evcc/util/modbus" @@ -113,6 +115,12 @@ func (m *Modbus) floatGetter(op modbus.Operation) (float64, error) { } } + // silence NaN reading errors by assuming zero + if err != nil && errors.Is(err, meters.ErrNaN) { + res.Value = 0 + err = nil + } + if err != nil { m.conn.Close() // close connection in case of modbus error } else { diff --git a/provider/modbus.go b/provider/modbus.go index 5c029d009..54058671b 100644 --- a/provider/modbus.go +++ b/provider/modbus.go @@ -156,6 +156,12 @@ func (m *Modbus) FloatGetter() (float64, error) { } } + // silence NaN reading errors by assuming zero + if err != nil && errors.Is(err, meters.ErrNaN) { + res.Value = 0 + err = nil + } + if err != nil { m.conn.Close() // close connection in case of modbus error } else {