Skip to content

Commit

Permalink
Use openWB timeout topic (evcc-io#529)
Browse files Browse the repository at this point in the history
  • Loading branch information
andig authored Dec 18, 2020
1 parent 4b2ca9d commit eaca642
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 6 deletions.
23 changes: 20 additions & 3 deletions charger/openwb.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func NewOpenWBFromConfig(other map[string]interface{}) (api.Charger, error) {
}{
Topic: "openWB",
ID: 1,
Timeout: 5 * time.Second,
Timeout: 15 * time.Second,
}

if err := util.DecodeOther(other, &cc); err != nil {
Expand All @@ -47,13 +47,30 @@ func NewOpenWBFromConfig(other map[string]interface{}) (api.Charger, error) {
return nil, err
}

// timeout handler
timer := provider.NewMqtt(log, client,
fmt.Sprintf("%s/system/%s", cc.Topic, openwb.TimestampTopic), "", 1, cc.Timeout,
).IntGetter()

// getters
boolG := func(topic string) func() (bool, error) {
return provider.NewMqtt(log, client, topic, "", 1, cc.Timeout).BoolGetter()
g := provider.NewMqtt(log, client, topic, "", 1, 0).BoolGetter()
return func() (val bool, err error) {
if val, err = g(); err == nil {
_, err = timer()
}
return val, err
}
}

floatG := func(topic string) func() (float64, error) {
return provider.NewMqtt(log, client, topic, "", 1, cc.Timeout).FloatGetter()
g := provider.NewMqtt(log, client, topic, "", 1, 0).FloatGetter()
return func() (val float64, err error) {
if val, err = g(); err == nil {
_, err = timer()
}
return val, err
}
}

// check if loadpoint configured
Expand Down
3 changes: 3 additions & 0 deletions charger/openwb/topics.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ package openwb

// predefined openWB topic names
const (
// alive
TimestampTopic = "Timestamp"

// status
PluggedTopic = "boolPlugStat"
ChargingTopic = "boolChargeStat"
Expand Down
5 changes: 3 additions & 2 deletions provider/mqtt/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,12 @@ var registry clientRegistry = make(map[string]*Client)

// RegisteredClient reuses an registered Mqtt publisher or creates a new one
func RegisteredClient(log *util.Logger, broker, user, password, clientID string, qos byte) (*Client, error) {
client, err := registry.Get(broker)
key := fmt.Sprintf("%s.%s", broker, log.Name())
client, err := registry.Get(key)

if err != nil {
if client, err = NewClient(log, broker, user, password, ClientID(), qos); err == nil {
registry.Add(broker, client)
registry.Add(key, client)
}
}

Expand Down
11 changes: 10 additions & 1 deletion util/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const padding = 6 // padding of log areas
// Logger wraps a jww notepad to avoid leaking implementation detail
type Logger struct {
*jww.Notepad
name string
}

// NewLogger creates a logger with the given log area and adds it to the registry
Expand All @@ -46,11 +47,19 @@ func NewLogger(area string) *Logger {
loggersMux.Lock()
defer loggersMux.Unlock()

logger := &Logger{notepad}
logger := &Logger{
Notepad: notepad,
name: area,
}
loggers[area] = logger
return logger
}

// Name returns the loggers name
func (l *Logger) Name() string {
return l.name
}

// Loggers invokes callback for each configured logger
func Loggers(cb func(string, *Logger)) {
for name, logger := range loggers {
Expand Down
18 changes: 18 additions & 0 deletions util/net_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package util

import (
"testing"
)

// DefaultPort appends given port to connection if not specified
func TestDefaultPort(t *testing.T) {
expect := "foo:7090"

if uri := DefaultPort("foo:7090", 7090); uri != expect {
t.Errorf("expected %s, got %s", expect, uri)
}

if uri := DefaultPort("foo", 7090); uri != expect {
t.Errorf("expected %s, got %s", expect, uri)
}
}

0 comments on commit eaca642

Please sign in to comment.