Skip to content

Commit fcb07ab

Browse files
committed
Compleo: fix id tag offset
1 parent 0ff6a05 commit fcb07ab

File tree

1 file changed

+32
-28
lines changed

1 file changed

+32
-28
lines changed

charger/compleo.go

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,28 @@ import (
3232

3333
// Compleo charger implementation
3434
type Compleo struct {
35-
lp loadpoint.API
36-
conn *modbus.Connection
37-
base uint16
38-
power uint16
35+
lp loadpoint.API
36+
conn *modbus.Connection
37+
offset uint16
38+
power uint16
3939
}
4040

4141
const (
4242
// global
43-
compleoRegBase = 0x0100 // input
44-
compleoRegFallback = 0x5 // holding
45-
compleoRegConnectors = 0x0008 // input
43+
compleoRegFallback = 0x5 // holding
44+
compleoRegConnectors = 0x8 // input
4645

4746
// per connector
48-
compleoRegMaxPower = 0x0 // holding
49-
compleoRegStatus = 0x1 // input
50-
compleoRegActualPower = 0x2 // input
51-
compleoRegCurrents = 0x3 // input
52-
compleoRegChargeDuration = 0x6 // input
53-
compleoRegEnergy = 0x8 // input
54-
compleoRegVoltages = 0xD // input
55-
56-
compleoRegIdTag = 0x1000 - compleoRegBase // input
47+
compleoRegBase = 0x0100 // input
48+
compleoRegMaxPower = 0x0 // holding
49+
compleoRegStatus = 0x1 // input
50+
compleoRegActualPower = 0x2 // input
51+
compleoRegCurrents = 0x3 // input
52+
compleoRegChargeDuration = 0x6 // input
53+
compleoRegEnergy = 0x8 // input
54+
compleoRegVoltages = 0xD // input
55+
56+
compleoRegIdTag = 0x1000 // input
5757
)
5858

5959
func init() {
@@ -103,9 +103,9 @@ func NewCompleo(ctx context.Context, uri string, slaveID uint8, connector uint16
103103
}
104104

105105
wb := &Compleo{
106-
conn: conn,
107-
base: compleoRegBase + (connector-1)*0x010,
108-
power: 3 * 230 * 6, // assume min power
106+
conn: conn,
107+
offset: (connector - 1) * 0x10,
108+
power: 3 * 230 * 6, // assume min power
109109
}
110110

111111
// heartbeat
@@ -134,8 +134,12 @@ func (wb *Compleo) heartbeat(ctx context.Context, log *util.Logger, timeout time
134134
}
135135
}
136136

137+
func (wb *Compleo) reg(addr uint16) uint16 {
138+
return compleoRegBase + wb.offset + addr
139+
}
140+
137141
func (wb *Compleo) status() (byte, error) {
138-
b, err := wb.conn.ReadInputRegisters(wb.base+compleoRegStatus, 1)
142+
b, err := wb.conn.ReadInputRegisters(wb.reg(compleoRegStatus), 1)
139143
if err != nil {
140144
return 0, err
141145
}
@@ -163,7 +167,7 @@ func (wb *Compleo) Status() (api.ChargeStatus, error) {
163167

164168
// Enabled implements the api.Charger interface
165169
func (wb *Compleo) Enabled() (bool, error) {
166-
b, err := wb.conn.ReadHoldingRegisters(wb.base+compleoRegMaxPower, 1)
170+
b, err := wb.conn.ReadHoldingRegisters(wb.reg(compleoRegMaxPower), 1)
167171
if err != nil {
168172
return false, err
169173
}
@@ -183,7 +187,7 @@ func (wb *Compleo) Enable(enable bool) error {
183187

184188
// setPower writes the power limit in 100W steps
185189
func (wb *Compleo) setPower(power uint16) error {
186-
_, err := wb.conn.WriteSingleRegister(wb.base+compleoRegMaxPower, power/100)
190+
_, err := wb.conn.WriteSingleRegister(wb.reg(compleoRegMaxPower), power/100)
187191
return err
188192
}
189193

@@ -221,7 +225,7 @@ var _ api.Meter = (*Compleo)(nil)
221225

222226
// CurrentPower implements the api.Meter interface
223227
func (wb *Compleo) CurrentPower() (float64, error) {
224-
b, err := wb.conn.ReadInputRegisters(wb.base+compleoRegActualPower, 1)
228+
b, err := wb.conn.ReadInputRegisters(wb.reg(compleoRegActualPower), 1)
225229
if err != nil {
226230
return 0, err
227231
}
@@ -233,7 +237,7 @@ var _ api.ChargeRater = (*Compleo)(nil)
233237

234238
// ChargedEnergy implements the api.MeterEnergy interface
235239
func (wb *Compleo) ChargedEnergy() (float64, error) {
236-
b, err := wb.conn.ReadInputRegisters(wb.base+compleoRegEnergy, 1)
240+
b, err := wb.conn.ReadInputRegisters(wb.reg(compleoRegEnergy), 1)
237241
if err != nil {
238242
return 0, err
239243
}
@@ -260,21 +264,21 @@ var _ api.PhaseCurrents = (*Compleo)(nil)
260264

261265
// Currents implements the api.PhaseCurrents interface
262266
func (wb *Compleo) Currents() (float64, float64, float64, error) {
263-
return wb.getPhaseValues(wb.base+compleoRegCurrents, 10)
267+
return wb.getPhaseValues(wb.reg(compleoRegCurrents), 10)
264268
}
265269

266270
var _ api.PhaseVoltages = (*Compleo)(nil)
267271

268272
// Voltages implements the api.PhaseVoltages interface
269273
func (wb *Compleo) Voltages() (float64, float64, float64, error) {
270-
return wb.getPhaseValues(wb.base+compleoRegVoltages, 1)
274+
return wb.getPhaseValues(wb.reg(compleoRegVoltages), 1)
271275
}
272276

273277
var _ api.ChargeTimer = (*Compleo)(nil)
274278

275279
// ChargeDuration implements the api.ChargeTimer interface
276280
func (wb *Compleo) ChargeDuration() (time.Duration, error) {
277-
b, err := wb.conn.ReadHoldingRegisters(wb.base+compleoRegChargeDuration, 2)
281+
b, err := wb.conn.ReadHoldingRegisters(wb.reg(compleoRegChargeDuration), 2)
278282
if err != nil {
279283
return 0, err
280284
}
@@ -286,7 +290,7 @@ var _ api.Identifier = (*Compleo)(nil)
286290

287291
// Identify implements the api.Identifier interface
288292
func (wb *Compleo) Identify() (string, error) {
289-
b, err := wb.conn.ReadInputRegisters(compleoRegIdTag, 0x10)
293+
b, err := wb.conn.ReadInputRegisters(compleoRegIdTag+wb.offset, 0x10)
290294
if err != nil {
291295
return "", err
292296
}

0 commit comments

Comments
 (0)