From de3f93c03dda534653b217fff5543fc932f7b976 Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 4 Aug 2023 12:49:02 +0200 Subject: [PATCH] ABL: add timeout (#9241) --- charger/abl.go | 17 +++++++++++++---- templates/definition/charger/abl.yaml | 2 ++ templates/docs/charger/abl_0.yaml | 17 +++++++++++++++++ templates/docs/charger/abl_1.yaml | 17 +++++++++++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/charger/abl.go b/charger/abl.go index a42030d77..84012f2c3 100644 --- a/charger/abl.go +++ b/charger/abl.go @@ -80,26 +80,35 @@ func init() { // NewABLeMHFromConfig creates a ABLeMH charger from generic config func NewABLeMHFromConfig(other map[string]interface{}) (api.Charger, error) { - cc := modbus.Settings{ - ID: 1, + cc := struct { + modbus.Settings `mapstructure:",squash"` + Timeout time.Duration + }{ + Settings: modbus.Settings{ + ID: 1, + }, } if err := util.DecodeOther(other, &cc); err != nil { return nil, err } - return NewABLeMH(cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.ID) + return NewABLeMH(cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.ID, cc.Timeout) } //go:generate go run ../cmd/tools/decorate.go -f decorateABLeMH -b *ABLeMH -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" // NewABLeMH creates ABLeMH charger -func NewABLeMH(uri, device, comset string, baudrate int, slaveID uint8) (api.Charger, error) { +func NewABLeMH(uri, device, comset string, baudrate int, slaveID uint8, timeout time.Duration) (api.Charger, error) { conn, err := modbus.NewConnection(uri, device, comset, baudrate, modbus.Ascii, slaveID) if err != nil { return nil, err } + if timeout > 0 { + conn.Timeout(timeout) + } + if !sponsor.IsAuthorized() { return nil, api.ErrSponsorRequired } diff --git a/templates/definition/charger/abl.yaml b/templates/definition/charger/abl.yaml index 390ce5372..9879772c3 100644 --- a/templates/definition/charger/abl.yaml +++ b/templates/definition/charger/abl.yaml @@ -14,6 +14,8 @@ params: choice: ["rs485"] baudrate: 38400 comset: 8E1 + - name: timeout render: | type: abl {{- include "modbus" . }} + timeout: {{ .timeout }} diff --git a/templates/docs/charger/abl_0.yaml b/templates/docs/charger/abl_0.yaml index a9f662855..681d2115b 100644 --- a/templates/docs/charger/abl_0.yaml +++ b/templates/docs/charger/abl_0.yaml @@ -20,3 +20,20 @@ render: id: 1 host: 192.0.2.2 # Hostname port: 502 # Port + advanced: | + type: template + template: abl + + # RS485 via adapter (Modbus RTU) + modbus: rs485serial + id: 1 + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 38400 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8E1" # Kommunikationsparameter für den Adapter + + # RS485 via TCP/IP (Modbus RTU) + modbus: rs485tcpip + id: 1 + host: 192.0.2.2 # Hostname + port: 502 # Port + timeout: 10s # Optional diff --git a/templates/docs/charger/abl_1.yaml b/templates/docs/charger/abl_1.yaml index a4db8fcfb..256bc2937 100644 --- a/templates/docs/charger/abl_1.yaml +++ b/templates/docs/charger/abl_1.yaml @@ -20,3 +20,20 @@ render: id: 1 host: 192.0.2.2 # Hostname port: 502 # Port + advanced: | + type: template + template: abl + + # RS485 via adapter (Modbus RTU) + modbus: rs485serial + id: 1 + device: /dev/ttyUSB0 # USB-RS485 Adapter Adresse + baudrate: 38400 # Prüfe die Geräteeinstellungen, typische Werte sind 9600, 19200, 38400, 57600, 115200 + comset: "8E1" # Kommunikationsparameter für den Adapter + + # RS485 via TCP/IP (Modbus RTU) + modbus: rs485tcpip + id: 1 + host: 192.0.2.2 # Hostname + port: 502 # Port + timeout: 10s # Optional