myPV AC Thor: fix power and mode (#18175)
This commit is contained in:
parent
9dcb1fa0a7
commit
4cce98caf5
1 changed files with 15 additions and 16 deletions
|
|
@ -31,10 +31,10 @@ import (
|
|||
|
||||
// MyPv charger implementation
|
||||
type MyPv struct {
|
||||
log *util.Logger
|
||||
conn *modbus.Connection
|
||||
power uint32
|
||||
regPower uint16
|
||||
log *util.Logger
|
||||
conn *modbus.Connection
|
||||
power uint32
|
||||
statusC uint16
|
||||
}
|
||||
|
||||
const (
|
||||
|
|
@ -42,24 +42,23 @@ const (
|
|||
elwaRegTemp = 1001
|
||||
elwaRegTempLimit = 1002
|
||||
elwaRegStatus = 1003
|
||||
elwaRegPower = 1074
|
||||
thorRegPower = 1060
|
||||
elwaRegPower = 1000 // https://github.com/evcc-io/evcc/issues/18020#issuecomment-2585300804
|
||||
)
|
||||
|
||||
func init() {
|
||||
// https://github.com/evcc-io/evcc/discussions/12761
|
||||
registry.AddCtx("ac-elwa-2", func(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
|
||||
return newMyPvFromConfig(ctx, "ac-elwa-2", other, elwaRegPower)
|
||||
return newMyPvFromConfig(ctx, "ac-elwa-2", other, 2)
|
||||
})
|
||||
|
||||
// https: // github.com/evcc-io/evcc/issues/18020
|
||||
registry.AddCtx("ac-thor", func(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
|
||||
return newMyPvFromConfig(ctx, "ac-thor", other, thorRegPower)
|
||||
return newMyPvFromConfig(ctx, "ac-thor", other, 9)
|
||||
})
|
||||
}
|
||||
|
||||
// newMyPvFromConfig creates a MyPv charger from generic config
|
||||
func newMyPvFromConfig(ctx context.Context, name string, other map[string]interface{}, regPower uint16) (api.Charger, error) {
|
||||
func newMyPvFromConfig(ctx context.Context, name string, other map[string]interface{}, statusC uint16) (api.Charger, error) {
|
||||
cc := modbus.TcpSettings{
|
||||
ID: 1,
|
||||
}
|
||||
|
|
@ -68,11 +67,11 @@ func newMyPvFromConfig(ctx context.Context, name string, other map[string]interf
|
|||
return nil, err
|
||||
}
|
||||
|
||||
return NewMyPv(ctx, name, cc.URI, cc.ID, regPower)
|
||||
return NewMyPv(ctx, name, cc.URI, cc.ID, statusC)
|
||||
}
|
||||
|
||||
// NewMyPv creates myPV AC Elwa 2 or Thor charger
|
||||
func NewMyPv(ctx context.Context, name, uri string, slaveID uint8, regPower uint16) (api.Charger, error) {
|
||||
func NewMyPv(ctx context.Context, name, uri string, slaveID uint8, statusC uint16) (api.Charger, error) {
|
||||
conn, err := modbus.NewConnection(uri, "", "", 0, modbus.Tcp, slaveID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -86,9 +85,9 @@ func NewMyPv(ctx context.Context, name, uri string, slaveID uint8, regPower uint
|
|||
conn.Logger(log.TRACE)
|
||||
|
||||
wb := &MyPv{
|
||||
log: log,
|
||||
conn: conn,
|
||||
regPower: regPower,
|
||||
log: log,
|
||||
conn: conn,
|
||||
statusC: statusC,
|
||||
}
|
||||
|
||||
go wb.heartbeat(ctx, 30*time.Second)
|
||||
|
|
@ -138,7 +137,7 @@ func (wb *MyPv) Status() (api.ChargeStatus, error) {
|
|||
}
|
||||
|
||||
res := api.StatusB
|
||||
if binary.BigEndian.Uint16(b) == 2 {
|
||||
if binary.BigEndian.Uint16(b) == wb.statusC {
|
||||
res = api.StatusC
|
||||
}
|
||||
|
||||
|
|
@ -196,7 +195,7 @@ var _ api.Meter = (*MyPv)(nil)
|
|||
|
||||
// CurrentPower implements the api.Meter interface
|
||||
func (wb *MyPv) CurrentPower() (float64, error) {
|
||||
b, err := wb.conn.ReadHoldingRegisters(wb.regPower, 1)
|
||||
b, err := wb.conn.ReadHoldingRegisters(elwaRegPower, 1)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue