Schneider: fix ChargedEnergy and init (#9461)

This commit is contained in:
premultiply 2023-08-20 22:09:43 +02:00 • committed by GitHub
parent fc963abb79
commit f1fad190dd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -50,7 +50,6 @@ const (
schneiderRegChargingTime = 4007
schneiderRegSessionChargingTime = 4009
schneiderRegLastStopCause = 4011
schneiderRegSessionEnergy = 4012
schneiderDisabled = uint16(0)
)
@ -94,8 +93,17 @@ func NewSchneider(uri string, id uint8) (api.Charger, error) {
curr: 6,
}
// get initial state from charger
b, err := wb.conn.ReadHoldingRegisters(schneiderRegSetPoint, 1)
if err != nil {
return nil, fmt.Errorf("current limit: %w", err)
}
if u := encoding.Uint16(b); u > wb.curr {
wb.curr = u
}
// heartbeat
b, err := wb.conn.ReadHoldingRegisters(schneiderRegLifebit, 1)
b, err = wb.conn.ReadHoldingRegisters(schneiderRegLifebit, 1)
if err != nil {
return nil, fmt.Errorf("heartbeat timeout: %w", err)
}
@ -188,18 +196,6 @@ func (wb *Schneider) TotalEnergy() (float64, error) {
return float64(encoding.Uint64LswFirst(b)) / 1e3, nil
}
var _ api.ChargeRater = (*Schneider)(nil)
// ChargedEnergy implements the api.ChargeRater interface
func (wb *Schneider) ChargedEnergy() (float64, error) {
b, err := wb.conn.ReadHoldingRegisters(schneiderRegSessionEnergy, 2)
if err != nil {
return 0, err
}
return float64(encoding.Float32LswFirst(b)), nil
}
var _ api.PhaseCurrents = (*Schneider)(nil)
// Currents implements the api.PhaseCurrents interface