From 8d7cabf0041477f284358e3d4f0506fedf22bfee Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 29 Mar 2020 22:09:15 +0200 Subject: [PATCH] Fix cached getter type not compatible and improve diagnostic messages --- charger/config.go | 3 ++- provider/cache.go | 15 +++++++++++---- push/telegram.go | 16 +++++++++------- vehicle/config.go | 6 ++++-- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/charger/config.go b/charger/config.go index 92c9ad665..934e299d1 100644 --- a/charger/config.go +++ b/charger/config.go @@ -6,6 +6,7 @@ import ( "fmt" "io/ioutil" "net/http" + "strings" "github.com/andig/evcc/api" ) @@ -16,7 +17,7 @@ type apiFunction string func NewFromConfig(log *api.Logger, typ string, other map[string]interface{}) api.Charger { var c api.Charger - switch typ { + switch strings.ToLower(typ) { case "wallbe": c = NewWallbeFromConfig(log, other) case "phoenix": diff --git a/provider/cache.go b/provider/cache.go index 603fd5daf..e86bf8719 100644 --- a/provider/cache.go +++ b/provider/cache.go @@ -14,6 +14,13 @@ type CacheGetter struct { // NewCacheGetter wraps a getter with a cache func NewCacheGetter(getter interface{}, cache time.Duration) *CacheGetter { + if g, ok := getter.(func() (float64, error)); ok { + getter = FloatGetter(g) + } + if g, ok := getter.(func() (int64, error)); ok { + getter = IntGetter(g) + } + return &CacheGetter{ getter: getter, cache: cache, @@ -25,7 +32,7 @@ func (c *CacheGetter) FloatGetter() (float64, error) { if time.Since(c.updated) > c.cache { g, ok := c.getter.(FloatGetter) if !ok { - log.FATAL.Fatal("invalid type") + log.FATAL.Fatalf("invalid type: %T", c.getter) } val, err := g() @@ -45,7 +52,7 @@ func (c *CacheGetter) IntGetter() (int64, error) { if time.Since(c.updated) > c.cache { g, ok := c.getter.(IntGetter) if !ok { - log.FATAL.Fatal("invalid type") + log.FATAL.Fatalf("invalid type: %T", c.getter) } val, err := g() @@ -65,7 +72,7 @@ func (c *CacheGetter) StringGetter() (string, error) { if time.Since(c.updated) > c.cache { g, ok := c.getter.(StringGetter) if !ok { - log.FATAL.Fatal("invalid type") + log.FATAL.Fatalf("invalid type: %T", c.getter) } val, err := g() @@ -85,7 +92,7 @@ func (c *CacheGetter) BoolGetter() (bool, error) { if time.Since(c.updated) > c.cache { g, ok := c.getter.(BoolGetter) if !ok { - log.FATAL.Fatal("invalid type") + log.FATAL.Fatalf("invalid type: %T", g) } val, err := g() diff --git a/push/telegram.go b/push/telegram.go index 70db8b3db..93d680029 100644 --- a/push/telegram.go +++ b/push/telegram.go @@ -18,6 +18,10 @@ type telegramConfig struct { Chats []int64 } +func init() { + tgbotapi.SetLogger(log.ERROR) +} + // NewTelegramMessenger creates new pushover messenger func NewTelegramMessenger(token string, chats []int64) *Telegram { bot, err := tgbotapi.NewBotAPI(token) @@ -63,14 +67,12 @@ func (m *Telegram) trackChats() { func (m *Telegram) Send(event Event, title, msg string) { m.Lock() for chat := range m.chats { - go func(chat int64) { - log.TRACE.Printf("telegram: sending to %d", chat) + log.TRACE.Printf("telegram: sending to %d", chat) - msg := tgbotapi.NewMessage(chat, msg) - if _, err := m.bot.Send(msg); err != nil { - log.ERROR.Print(err) - } - }(chat) + msg := tgbotapi.NewMessage(chat, msg) + if _, err := m.bot.Send(msg); err != nil { + log.ERROR.Print(err) + } } m.Unlock() } diff --git a/vehicle/config.go b/vehicle/config.go index 2b9c3b2ad..21f9e720d 100644 --- a/vehicle/config.go +++ b/vehicle/config.go @@ -1,6 +1,8 @@ package vehicle import ( + "strings" + "github.com/andig/evcc/api" ) @@ -8,8 +10,8 @@ import ( func NewFromConfig(log *api.Logger, typ string, other map[string]interface{}) api.Vehicle { var c api.Vehicle - switch typ { - case "script": + switch strings.ToLower(typ) { + case "script", "exec": c = NewConfigurableFromConfig(log, other) case "audi": c = NewAudiFromConfig(log, other)