From 909f2be52fb8f51372d9a261cc761372919688f0 Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 5 Oct 2022 18:21:01 +0200 Subject: [PATCH] chore: simplify nested tests --- charger/eebus.go | 3 +- cmd/configure/devicetest.go | 90 +++++++++++++++++++------------------ 2 files changed, 47 insertions(+), 46 deletions(-) diff --git a/charger/eebus.go b/charger/eebus.go index 93eca20d0..fae4df73b 100644 --- a/charger/eebus.go +++ b/charger/eebus.go @@ -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 diff --git a/cmd/configure/devicetest.go b/cmd/configure/devicetest.go index 0acef9953..04abf3466 100644 --- a/cmd/configure/devicetest.go +++ b/cmd/configure/devicetest.go @@ -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 }