@@ -32,28 +32,28 @@ import (
32
32
33
33
// Compleo charger implementation
34
34
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
39
39
}
40
40
41
41
const (
42
42
// global
43
- compleoRegBase = 0x0100 // input
44
- compleoRegFallback = 0x5 // holding
45
- compleoRegConnectors = 0x0008 // input
43
+ compleoRegFallback = 0x5 // holding
44
+ compleoRegConnectors = 0x8 // input
46
45
47
46
// 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
57
57
)
58
58
59
59
func init () {
@@ -103,9 +103,9 @@ func NewCompleo(ctx context.Context, uri string, slaveID uint8, connector uint16
103
103
}
104
104
105
105
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
109
109
}
110
110
111
111
// heartbeat
@@ -134,8 +134,12 @@ func (wb *Compleo) heartbeat(ctx context.Context, log *util.Logger, timeout time
134
134
}
135
135
}
136
136
137
+ func (wb * Compleo ) reg (addr uint16 ) uint16 {
138
+ return compleoRegBase + wb .offset + addr
139
+ }
140
+
137
141
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 )
139
143
if err != nil {
140
144
return 0 , err
141
145
}
@@ -163,7 +167,7 @@ func (wb *Compleo) Status() (api.ChargeStatus, error) {
163
167
164
168
// Enabled implements the api.Charger interface
165
169
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 )
167
171
if err != nil {
168
172
return false , err
169
173
}
@@ -183,7 +187,7 @@ func (wb *Compleo) Enable(enable bool) error {
183
187
184
188
// setPower writes the power limit in 100W steps
185
189
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 )
187
191
return err
188
192
}
189
193
@@ -221,7 +225,7 @@ var _ api.Meter = (*Compleo)(nil)
221
225
222
226
// CurrentPower implements the api.Meter interface
223
227
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 )
225
229
if err != nil {
226
230
return 0 , err
227
231
}
@@ -233,7 +237,7 @@ var _ api.ChargeRater = (*Compleo)(nil)
233
237
234
238
// ChargedEnergy implements the api.MeterEnergy interface
235
239
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 )
237
241
if err != nil {
238
242
return 0 , err
239
243
}
@@ -260,21 +264,21 @@ var _ api.PhaseCurrents = (*Compleo)(nil)
260
264
261
265
// Currents implements the api.PhaseCurrents interface
262
266
func (wb * Compleo ) Currents () (float64 , float64 , float64 , error ) {
263
- return wb .getPhaseValues (wb .base + compleoRegCurrents , 10 )
267
+ return wb .getPhaseValues (wb .reg ( compleoRegCurrents ) , 10 )
264
268
}
265
269
266
270
var _ api.PhaseVoltages = (* Compleo )(nil )
267
271
268
272
// Voltages implements the api.PhaseVoltages interface
269
273
func (wb * Compleo ) Voltages () (float64 , float64 , float64 , error ) {
270
- return wb .getPhaseValues (wb .base + compleoRegVoltages , 1 )
274
+ return wb .getPhaseValues (wb .reg ( compleoRegVoltages ) , 1 )
271
275
}
272
276
273
277
var _ api.ChargeTimer = (* Compleo )(nil )
274
278
275
279
// ChargeDuration implements the api.ChargeTimer interface
276
280
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 )
278
282
if err != nil {
279
283
return 0 , err
280
284
}
@@ -286,7 +290,7 @@ var _ api.Identifier = (*Compleo)(nil)
286
290
287
291
// Identify implements the api.Identifier interface
288
292
func (wb * Compleo ) Identify () (string , error ) {
289
- b , err := wb .conn .ReadInputRegisters (compleoRegIdTag , 0x10 )
293
+ b , err := wb .conn .ReadInputRegisters (compleoRegIdTag + wb . offset , 0x10 )
290
294
if err != nil {
291
295
return "" , err
292
296
}
0 commit comments