Add Etrel Duo (#5223)
This commit is contained in:
parent
4a80a0524f
commit
b50f0d4ac0
3 changed files with 57 additions and 10 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
22
templates/definition/charger/etrel-duo.yaml
Normal file
22
templates/definition/charger/etrel-duo.yaml
Normal 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 }}
|
||||
14
templates/docs/charger/etrel-duo_0.yaml
Normal file
14
templates/docs/charger/etrel-duo_0.yaml
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue