chore: simplify nested tests
This commit is contained in:
parent
6e943a0405
commit
909f2be52f
2 changed files with 47 additions and 46 deletions
|
|
@ -80,9 +80,8 @@ func NewEEBus(ski, ip string, hasMeter, hasChargedEnergy bool) (api.Charger, err
|
|||
if hasMeter {
|
||||
if hasChargedEnergy {
|
||||
return decorateEEBus(c, c.currentPower, c.currents, c.chargedEnergy), nil
|
||||
} else {
|
||||
return decorateEEBus(c, c.currentPower, c.currents, nil), nil
|
||||
}
|
||||
return decorateEEBus(c, c.currentPower, c.currents, nil), nil
|
||||
}
|
||||
|
||||
return c, nil
|
||||
|
|
|
|||
|
|
@ -82,57 +82,60 @@ func (d *DeviceTest) configure() (interface{}, error) {
|
|||
|
||||
// testCharger tests a charger device
|
||||
func (d *DeviceTest) testCharger(v interface{}) (DeviceTestResult, error) {
|
||||
if v, ok := v.(api.Charger); ok {
|
||||
if _, err := v.Status(); err != nil {
|
||||
return DeviceTestResultInvalid, err
|
||||
}
|
||||
} else {
|
||||
c, ok := v.(api.Charger)
|
||||
if !ok {
|
||||
return DeviceTestResultInvalid, errors.New("selected device is not a wallbox")
|
||||
}
|
||||
if _, err := c.Status(); err != nil {
|
||||
return DeviceTestResultInvalid, err
|
||||
}
|
||||
|
||||
if v, ok := v.(api.Meter); ok {
|
||||
if _, err := v.CurrentPower(); err != nil {
|
||||
return DeviceTestResultValidMissingMeter, nil
|
||||
}
|
||||
} else {
|
||||
m, ok := v.(api.Meter)
|
||||
if !ok {
|
||||
return DeviceTestResultValidMissingMeter, nil
|
||||
}
|
||||
if _, err := m.CurrentPower(); err != nil {
|
||||
return DeviceTestResultInvalid, err
|
||||
}
|
||||
|
||||
return DeviceTestResultValid, nil
|
||||
}
|
||||
|
||||
// testMeter tests a meter device
|
||||
func (d *DeviceTest) testMeter(deviceCategory DeviceCategory, v interface{}) (DeviceTestResult, error) {
|
||||
if v, ok := v.(api.Meter); ok {
|
||||
power, err := v.CurrentPower()
|
||||
m, ok := v.(api.Meter)
|
||||
if !ok {
|
||||
return DeviceTestResultInvalid, errors.New("selected device is not a meter")
|
||||
}
|
||||
|
||||
power, err := m.CurrentPower()
|
||||
if err != nil {
|
||||
return DeviceTestResultInvalid, err
|
||||
}
|
||||
|
||||
// check if the grid meter reports power 0, which should be impossible
|
||||
// happens with Kostal Piko charger that do not have a grid meter attached
|
||||
// but we can't determine this
|
||||
if power == 0 && deviceCategory == DeviceCategoryGridMeter {
|
||||
return DeviceTestResultInvalid, errors.New("grid meter reports power 0")
|
||||
}
|
||||
|
||||
if deviceCategory == DeviceCategoryBatteryMeter {
|
||||
b, ok := v.(api.Battery)
|
||||
if !ok {
|
||||
return DeviceTestResultInvalid, errors.New("selected device is not a battery meter")
|
||||
}
|
||||
|
||||
_, err := b.SoC()
|
||||
|
||||
for err != nil && errors.Is(err, api.ErrMustRetry) {
|
||||
time.Sleep(3 * time.Second)
|
||||
_, err = b.SoC()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return DeviceTestResultInvalid, err
|
||||
}
|
||||
// check if the grid meter reports power 0, which should be impossible
|
||||
// happens with Kostal Piko charger that do not have a grid meter attached
|
||||
// but we can't determine this
|
||||
if power == 0 && deviceCategory == DeviceCategoryGridMeter {
|
||||
return DeviceTestResultInvalid, errors.New("grid meter reports power 0")
|
||||
}
|
||||
|
||||
if deviceCategory == DeviceCategoryBatteryMeter {
|
||||
if v, ok := v.(api.Battery); ok {
|
||||
_, err := v.SoC()
|
||||
|
||||
for err != nil && errors.Is(err, api.ErrMustRetry) {
|
||||
time.Sleep(3 * time.Second)
|
||||
_, err = v.SoC()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return DeviceTestResultInvalid, err
|
||||
}
|
||||
} else {
|
||||
return DeviceTestResultInvalid, errors.New("selected device is not a battery meter")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return DeviceTestResultInvalid, errors.New("selected device is not a meter")
|
||||
}
|
||||
|
||||
return DeviceTestResultValid, nil
|
||||
|
|
@ -140,15 +143,14 @@ func (d *DeviceTest) testMeter(deviceCategory DeviceCategory, v interface{}) (De
|
|||
|
||||
// testVehicle tests a vehicle device
|
||||
func (d *DeviceTest) testVehicle(v interface{}) (DeviceTestResult, error) {
|
||||
if _, ok := v.(api.Vehicle); ok {
|
||||
if v, ok := v.(api.Battery); ok {
|
||||
if _, err := v.SoC(); err != nil {
|
||||
return DeviceTestResultInvalid, err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
vv, ok := v.(api.Vehicle)
|
||||
if !ok {
|
||||
return DeviceTestResultInvalid, errors.New("selected device is not a vehicle")
|
||||
}
|
||||
|
||||
if _, err := vv.SoC(); err != nil {
|
||||
return DeviceTestResultInvalid, err
|
||||
}
|
||||
|
||||
return DeviceTestResultValid, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue