ABL: add timeout (#9241)

This commit is contained in:
andig 2023-08-04 12:49:02 +02:00 • committed by GitHub
parent 2d1f18cca8
commit de3f93c03d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 4 deletions

View file

@ -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
}

View file

@ -14,6 +14,8 @@ params:
choice: ["rs485"]
baudrate: 38400
comset: 8E1
- name: timeout
render: |
type: abl
{{- include "modbus" . }}
timeout: {{ .timeout }}

View file

@ -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

View file

@ -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