Compleo: fix id tag offset
This commit is contained in:
parent
0ff6a05adc
commit
fcb07ab4bd
1 changed files with 31 additions and 27 deletions
|
|
@ -32,28 +32,28 @@ import (
|
|||
|
||||
// Compleo charger implementation
|
||||
type Compleo struct {
|
||||
lp loadpoint.API
|
||||
conn *modbus.Connection
|
||||
base uint16
|
||||
power uint16
|
||||
lp loadpoint.API
|
||||
conn *modbus.Connection
|
||||
offset uint16
|
||||
power uint16
|
||||
}
|
||||
|
||||
const (
|
||||
// global
|
||||
compleoRegBase = 0x0100 // input
|
||||
compleoRegFallback = 0x5 // holding
|
||||
compleoRegConnectors = 0x0008 // input
|
||||
compleoRegFallback = 0x5 // holding
|
||||
compleoRegConnectors = 0x8 // input
|
||||
|
||||
// per connector
|
||||
compleoRegMaxPower = 0x0 // holding
|
||||
compleoRegStatus = 0x1 // input
|
||||
compleoRegActualPower = 0x2 // input
|
||||
compleoRegCurrents = 0x3 // input
|
||||
compleoRegChargeDuration = 0x6 // input
|
||||
compleoRegEnergy = 0x8 // input
|
||||
compleoRegVoltages = 0xD // input
|
||||
compleoRegBase = 0x0100 // input
|
||||
compleoRegMaxPower = 0x0 // holding
|
||||
compleoRegStatus = 0x1 // input
|
||||
compleoRegActualPower = 0x2 // input
|
||||
compleoRegCurrents = 0x3 // input
|
||||
compleoRegChargeDuration = 0x6 // input
|
||||
compleoRegEnergy = 0x8 // input
|
||||
compleoRegVoltages = 0xD // input
|
||||
|
||||
compleoRegIdTag = 0x1000 - compleoRegBase // input
|
||||
compleoRegIdTag = 0x1000 // input
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
|
@ -103,9 +103,9 @@ func NewCompleo(ctx context.Context, uri string, slaveID uint8, connector uint16
|
|||
}
|
||||
|
||||
wb := &Compleo{
|
||||
conn: conn,
|
||||
base: compleoRegBase + (connector-1)*0x010,
|
||||
power: 3 * 230 * 6, // assume min power
|
||||
conn: conn,
|
||||
offset: (connector - 1) * 0x10,
|
||||
power: 3 * 230 * 6, // assume min power
|
||||
}
|
||||
|
||||
// heartbeat
|
||||
|
|
@ -134,8 +134,12 @@ func (wb *Compleo) heartbeat(ctx context.Context, log *util.Logger, timeout time
|
|||
}
|
||||
}
|
||||
|
||||
func (wb *Compleo) reg(addr uint16) uint16 {
|
||||
return compleoRegBase + wb.offset + addr
|
||||
}
|
||||
|
||||
func (wb *Compleo) status() (byte, error) {
|
||||
b, err := wb.conn.ReadInputRegisters(wb.base+compleoRegStatus, 1)
|
||||
b, err := wb.conn.ReadInputRegisters(wb.reg(compleoRegStatus), 1)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
|
@ -163,7 +167,7 @@ func (wb *Compleo) Status() (api.ChargeStatus, error) {
|
|||
|
||||
// Enabled implements the api.Charger interface
|
||||
func (wb *Compleo) Enabled() (bool, error) {
|
||||
b, err := wb.conn.ReadHoldingRegisters(wb.base+compleoRegMaxPower, 1)
|
||||
b, err := wb.conn.ReadHoldingRegisters(wb.reg(compleoRegMaxPower), 1)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
|
@ -183,7 +187,7 @@ func (wb *Compleo) Enable(enable bool) error {
|
|||
|
||||
// setPower writes the power limit in 100W steps
|
||||
func (wb *Compleo) setPower(power uint16) error {
|
||||
_, err := wb.conn.WriteSingleRegister(wb.base+compleoRegMaxPower, power/100)
|
||||
_, err := wb.conn.WriteSingleRegister(wb.reg(compleoRegMaxPower), power/100)
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -221,7 +225,7 @@ var _ api.Meter = (*Compleo)(nil)
|
|||
|
||||
// CurrentPower implements the api.Meter interface
|
||||
func (wb *Compleo) CurrentPower() (float64, error) {
|
||||
b, err := wb.conn.ReadInputRegisters(wb.base+compleoRegActualPower, 1)
|
||||
b, err := wb.conn.ReadInputRegisters(wb.reg(compleoRegActualPower), 1)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
|
@ -233,7 +237,7 @@ var _ api.ChargeRater = (*Compleo)(nil)
|
|||
|
||||
// ChargedEnergy implements the api.MeterEnergy interface
|
||||
func (wb *Compleo) ChargedEnergy() (float64, error) {
|
||||
b, err := wb.conn.ReadInputRegisters(wb.base+compleoRegEnergy, 1)
|
||||
b, err := wb.conn.ReadInputRegisters(wb.reg(compleoRegEnergy), 1)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
|
@ -260,21 +264,21 @@ var _ api.PhaseCurrents = (*Compleo)(nil)
|
|||
|
||||
// Currents implements the api.PhaseCurrents interface
|
||||
func (wb *Compleo) Currents() (float64, float64, float64, error) {
|
||||
return wb.getPhaseValues(wb.base+compleoRegCurrents, 10)
|
||||
return wb.getPhaseValues(wb.reg(compleoRegCurrents), 10)
|
||||
}
|
||||
|
||||
var _ api.PhaseVoltages = (*Compleo)(nil)
|
||||
|
||||
// Voltages implements the api.PhaseVoltages interface
|
||||
func (wb *Compleo) Voltages() (float64, float64, float64, error) {
|
||||
return wb.getPhaseValues(wb.base+compleoRegVoltages, 1)
|
||||
return wb.getPhaseValues(wb.reg(compleoRegVoltages), 1)
|
||||
}
|
||||
|
||||
var _ api.ChargeTimer = (*Compleo)(nil)
|
||||
|
||||
// ChargeDuration implements the api.ChargeTimer interface
|
||||
func (wb *Compleo) ChargeDuration() (time.Duration, error) {
|
||||
b, err := wb.conn.ReadHoldingRegisters(wb.base+compleoRegChargeDuration, 2)
|
||||
b, err := wb.conn.ReadHoldingRegisters(wb.reg(compleoRegChargeDuration), 2)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
|
@ -286,7 +290,7 @@ var _ api.Identifier = (*Compleo)(nil)
|
|||
|
||||
// Identify implements the api.Identifier interface
|
||||
func (wb *Compleo) Identify() (string, error) {
|
||||
b, err := wb.conn.ReadInputRegisters(compleoRegIdTag, 0x10)
|
||||
b, err := wb.conn.ReadInputRegisters(compleoRegIdTag+wb.offset, 0x10)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue