Add SMA eCharger (#18158)

This commit is contained in:
andig 2025-02-16 16:18:50 +01:00 • committed by GitHub
parent 629a969c9f
commit f09b558339
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 25 additions and 7 deletions

View file

@ -236,15 +236,22 @@ var _ api.MeterEnergy = (*Smaevcharger)(nil)
// TotalEnergy implements the api.MeterEnergy interface
func (wb *Smaevcharger) TotalEnergy() (float64, error) {
val, err := wb.getMeasurement("Measurement.Metering.GridMs.TotWhIn")
return val / 1e3, err
res, err := wb.getMeasurement("Measurement.Metering.GridMs.TotWhIn")
if se := new(smaevcharger.ErrUnknownMeasurement); errors.As(err, &se) {
res, err = wb.getMeasurement("Measurement.Metering.GridMs.TotWhIn.ChaSta")
}
return res / 1e3, err
}
var _ api.Meter = (*Smaevcharger)(nil)
// CurrentPower implements the api.Meter interface
func (wb *Smaevcharger) CurrentPower() (float64, error) {
return wb.getMeasurement("Measurement.Metering.GridMs.TotWIn")
res, err := wb.getMeasurement("Measurement.Metering.GridMs.TotWIn")
if se := new(smaevcharger.ErrUnknownMeasurement); errors.As(err, &se) {
res, err = wb.getMeasurement("Measurement.Metering.GridMs.TotWIn.ChaSta")
}
return res, err
}
var _ api.ChargeRater = (*Smaevcharger)(nil)
@ -252,6 +259,9 @@ var _ api.ChargeRater = (*Smaevcharger)(nil)
// ChargedEnergy implements the api.ChargeRater interface
func (wb *Smaevcharger) ChargedEnergy() (float64, error) {
res, err := wb.getMeasurement("Measurement.ChaSess.WhIn")
if se := new(smaevcharger.ErrUnknownMeasurement); errors.As(err, &se) {
res, err = wb.getMeasurement("Measurement.Metering.GridMs.TotWhIn.ChaSta")
}
return res / 1e3, err
}
@ -317,7 +327,7 @@ func (wb *Smaevcharger) getMeasurement(id string) (float64, error) {
}
}
return 0, fmt.Errorf("unknown measurement: %s", id)
return 0, &smaevcharger.ErrUnknownMeasurement{Measurement: id}
}
func (wb *Smaevcharger) getParameter(id string) (string, error) {

View file

@ -26,6 +26,14 @@ const (
ChargerManualLockDisabled = "5172"
)
type ErrUnknownMeasurement struct {
Measurement string
}
func (e *ErrUnknownMeasurement) Error() string {
return "unknown measurement: " + e.Measurement
}
// Measurements Data json Response structure
type Measurements struct {
ChannelId string `json:"channelId"`

View file

@ -2,7 +2,7 @@ template: smaevcharger
products:
- brand: SMA
description:
generic: EV Charger
generic: EV Charger, eCharger
capabilities: ["mA"]
requirements:
evcc: ["sponsorship"]

View file

@ -47,10 +47,10 @@ func NewConfigError(err error) error {
return &ConfigError{err}
}
func (e *ConfigError) Error() string {
func (e ConfigError) Error() string {
return e.err.Error()
}
func (e *ConfigError) Unwrap() error {
func (e ConfigError) Unwrap() error {
return e.err
}