Add Etrel Duo (#5223)

This commit is contained in:
andig 2022-11-20 14:16:09 +01:00 • committed by GitHub
parent 4a80a0524f
commit b50f0d4ac0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 10 deletions

View file

@ -53,6 +53,7 @@ const (
type Etrel struct {
log *util.Logger
conn *modbus.Connection
base uint16
current float32
}
@ -62,19 +63,25 @@ func init() {
// NewEtrelFromConfig creates a Etrel charger from generic config
func NewEtrelFromConfig(other map[string]interface{}) (api.Charger, error) {
cc := modbus.TcpSettings{
ID: 1,
cc := struct {
Connector int
modbus.TcpSettings
}{
Connector: 1,
TcpSettings: modbus.TcpSettings{
ID: 1,
},
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return NewEtrel(cc.URI, cc.ID)
return NewEtrel(cc.Connector, cc.URI, cc.ID)
}
// NewEtrel creates a Etrel charger
func NewEtrel(uri string, id uint8) (*Etrel, error) {
func NewEtrel(connector int, uri string, id uint8) (*Etrel, error) {
conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, id)
if err != nil {
return nil, err
@ -93,12 +100,16 @@ func NewEtrel(uri string, id uint8) (*Etrel, error) {
current: 6,
}
if connector == 2 {
wb.base = 100
}
return wb, nil
}
// Status implements the api.Charger interface
func (wb *Etrel) Status() (api.ChargeStatus, error) {
b, err := wb.conn.ReadInputRegisters(etrelRegChargeStatus, 1)
b, err := wb.conn.ReadInputRegisters(wb.base+etrelRegChargeStatus, 1)
if err != nil {
return api.StatusNone, err
}
@ -129,7 +140,7 @@ func (wb *Etrel) Status() (api.ChargeStatus, error) {
// Enabled implements the api.Charger interface
func (wb *Etrel) Enabled() (bool, error) {
b, err := wb.conn.ReadInputRegisters(etrelRegTargetCurrent, 2)
b, err := wb.conn.ReadInputRegisters(wb.base+etrelRegTargetCurrent, 2)
if err != nil {
return false, err
}
@ -151,7 +162,7 @@ func (wb *Etrel) setCurrent(current float32) error {
b := make([]byte, 4)
binary.BigEndian.PutUint32(b, math.Float32bits(current))
_, err := wb.conn.WriteMultipleRegisters(etrelRegMaxCurrent, 2, b)
_, err := wb.conn.WriteMultipleRegisters(wb.base+etrelRegMaxCurrent, 2, b)
return err
}
@ -182,7 +193,7 @@ var _ api.ChargeTimer = (*Etrel)(nil)
// ChargingTime implements the api.ChargeTimer interface
func (wb *Etrel) ChargingTime() (time.Duration, error) {
b, err := wb.conn.ReadInputRegisters(etrelRegChargeTime, 4)
b, err := wb.conn.ReadInputRegisters(wb.base+etrelRegChargeTime, 4)
if err != nil {
return 0, err
}
@ -194,7 +205,7 @@ var _ api.Meter = (*Etrel)(nil)
// CurrentPower implements the api.Meter interface
func (wb *Etrel) CurrentPower() (float64, error) {
b, err := wb.conn.ReadInputRegisters(etrelRegPower, 2)
b, err := wb.conn.ReadInputRegisters(wb.base+etrelRegPower, 2)
if err != nil {
return 0, err
}
@ -206,7 +217,7 @@ var _ api.ChargeRater = (*Etrel)(nil)
// ChargedEnergy implements the api.ChargeRater interface
func (wb *Etrel) ChargedEnergy() (float64, error) {
b, err := wb.conn.ReadInputRegisters(etrelRegSessionEnergy, 2)
b, err := wb.conn.ReadInputRegisters(wb.base+etrelRegSessionEnergy, 2)
if err != nil {
return 0, err
}

View file

@ -0,0 +1,22 @@
template: etrel-duo
products:
- brand: Etrel
description:
generic: INCH Duo
capabilities: ["mA"]
requirements:
evcc: ["sponsorship"]
description:
de: Die Wallbox muss sich im "Power" Modus befinden.
en: The charger must be switched to "Power" charging mode.
params:
- name: connector
default: 1
- name: host
required: true
- name: port
default: 502
render: |
type: etrel
connector: {{ .connector }}
uri: {{ .host }}:{{ .port }}

View file

@ -0,0 +1,14 @@
product:
brand: Etrel
description: INCH Duo
capabilities: ["mA"]
requirements: ["sponsorship"]
description: |
Die Wallbox muss sich im "Power" Modus befinden.
render:
- default: |
type: template
template: etrel-duo
connector: 1 # Optional
host: 192.0.2.2 # IP-Adresse oder Hostname
port: 502 # Port # Optional