diff --git a/api/api.go b/api/api.go index 9726b5cd0..38e0c83c1 100644 --- a/api/api.go +++ b/api/api.go @@ -160,7 +160,7 @@ type VehicleRange interface { // VehicleClimater provides climatisation data type VehicleClimater interface { - Climater() (active bool, outsideTemp float64, targetTemp float64, err error) + Climater() (active bool, outsideTemp, targetTemp float64, err error) } // VehicleOdometer returns the vehicles milage diff --git a/charger/abl.go b/charger/abl.go index f5ab357a4..80c60bd21 100644 --- a/charger/abl.go +++ b/charger/abl.go @@ -126,7 +126,7 @@ func (wb *ABLeMH) set(reg, val uint16) error { b := make([]byte, 2) binary.BigEndian.PutUint16(b, val) - //write two times + // write two times _, _ = wb.conn.WriteMultipleRegisters(reg, 1, b) _, err := wb.conn.WriteMultipleRegisters(reg, 1, b) @@ -134,7 +134,7 @@ func (wb *ABLeMH) set(reg, val uint16) error { } func (wb *ABLeMH) get(reg, count uint16) ([]byte, error) { - //read two times + // read two times _, _ = wb.conn.ReadHoldingRegisters(reg, count) b, err := wb.conn.ReadHoldingRegisters(reg, count) diff --git a/charger/daheimladen.go b/charger/daheimladen.go index dca2073a7..c30f5a7ec 100644 --- a/charger/daheimladen.go +++ b/charger/daheimladen.go @@ -41,7 +41,7 @@ func NewDaheimLadenFromConfig(other map[string]interface{}) (api.Charger, error) } // NewDaheimLaden creates DaheimLaden charger -func NewDaheimLaden(token string, stationID string) (*DaheimLaden, error) { +func NewDaheimLaden(token, stationID string) (*DaheimLaden, error) { c := &DaheimLaden{ Helper: request.NewHelper(util.NewLogger("daheim")), stationID: stationID, diff --git a/charger/daheimladen/const.go b/charger/daheimladen/const.go index 92317ac9b..6840cd160 100644 --- a/charger/daheimladen/const.go +++ b/charger/daheimladen/const.go @@ -1,10 +1,12 @@ package daheimladen -type ChargePointStatus string -type RemoteStartStatus string -type RemoteStopStatus string -type ConfigKey string -type ChangeConfigStatus string +type ( + ChargePointStatus string + RemoteStartStatus string + RemoteStopStatus string + ConfigKey string + ChangeConfigStatus string +) const BASE_URL string = "https://api.daheimladen.com/v1" diff --git a/charger/eebus.go b/charger/eebus.go index 408f5ec14..3c9de30dc 100644 --- a/charger/eebus.go +++ b/charger/eebus.go @@ -156,7 +156,6 @@ func (c *EEBus) showCurrentChargingSetup() { timestamp := time.Now() c.log.WARN.Println("!! ", timestamp.Format("2006-01-02 15:04:05"), " ev-charger-self-consumption-support support changed from ", prevSelfConsumptionSupport, " to ", data.EVData.UCSelfConsumptionAvailable) } - } func (c *EEBus) dataUpdateHandler(dataType communication.EVDataElementUpdateType, data *communication.EVSEClientDataType) { diff --git a/charger/go-e/api_test.go b/charger/go-e/api_test.go index e92363d72..3db51a3d5 100644 --- a/charger/go-e/api_test.go +++ b/charger/go-e/api_test.go @@ -49,6 +49,7 @@ func TestLocalV1(t *testing.T) { t.Error(err) } } + func TestLocalV2(t *testing.T) { h := &handler{} srv := httptest.NewServer(h) diff --git a/charger/hardybarth-salia.go b/charger/hardybarth-salia.go index da3bfaad1..34e55bfdb 100644 --- a/charger/hardybarth-salia.go +++ b/charger/hardybarth-salia.go @@ -171,7 +171,7 @@ func (wb *Salia) Enabled() (bool, error) { func (wb *Salia) pause(enable bool) { // ignore error for FW <1.52 - var offOn = map[bool]string{false: "1", true: "0"} + offOn := map[bool]string{false: "1", true: "0"} _ = wb.post(salia.PauseCharging, offOn[enable]) } diff --git a/charger/mcc.go b/charger/mcc.go index dbfe1a2d6..03ca8c8e0 100644 --- a/charger/mcc.go +++ b/charger/mcc.go @@ -78,7 +78,7 @@ func NewMobileConnectFromConfig(other map[string]interface{}) (api.Charger, erro } // NewMobileConnect creates MCC charger -func NewMobileConnect(uri string, password string) (*MobileConnect, error) { +func NewMobileConnect(uri, password string) (*MobileConnect, error) { log := util.NewLogger("mcc") mcc := &MobileConnect{ @@ -153,7 +153,6 @@ func (mcc *MobileConnect) refresh() error { // creates a http request that contains the auth token func (mcc *MobileConnect) request(method, uri string) (*http.Request, error) { - // do we need a token refresh? if mcc.token != "" { // is it time to refresh the token? diff --git a/charger/nrgble_linux.go b/charger/nrgble_linux.go index 083bbab1c..4b6c7b588 100644 --- a/charger/nrgble_linux.go +++ b/charger/nrgble_linux.go @@ -92,7 +92,7 @@ func NewNRGKickBLE(device, mac string, pin int) (*NRGKickBLE, error) { return nil, err } - //Connect DBus System bus + // Connect DBus System bus conn, err := dbus.SystemBus() if err != nil { return nil, err diff --git a/charger/ocpp/cp.go b/charger/ocpp/cp.go index d795d6995..e2a2165bc 100644 --- a/charger/ocpp/cp.go +++ b/charger/ocpp/cp.go @@ -156,7 +156,6 @@ func detectSmartChargingCapabilities(options map[string]core.ConfigurationKey) ( } return profile, nil - } func parseIntOption(key SmartchargingChargeProfileKey, options map[string]core.ConfigurationKey) (int, error) { diff --git a/charger/ocpp/cs_core.go b/charger/ocpp/cs_core.go index f1c2ee226..184d5bf1d 100644 --- a/charger/ocpp/cs_core.go +++ b/charger/ocpp/cs_core.go @@ -117,7 +117,6 @@ func (cs *CS) OnFirmwareStatusNotification(chargePointId string, request *firmwa } return cp.FirmwareStatusNotification(request) - } func (cs *CS) TriggerResetRequest(cp *CP, resetType core.ResetType) { diff --git a/charger/pcelectric.go b/charger/pcelectric.go index ccb49dfb8..e1377e66b 100644 --- a/charger/pcelectric.go +++ b/charger/pcelectric.go @@ -177,7 +177,7 @@ func (wb *PCElectric) Enabled() (bool, error) { // Enable implements the api.Charger interface func (wb *PCElectric) Enable(enable bool) error { if wb.slaveIndex > 0 { - return nil //Slave wird immer mit dem Master geschaltet! + return nil // Slave wird immer mit dem Master geschaltet! } // Master Only !! @@ -216,7 +216,7 @@ func (wb *PCElectric) MinCurrent(current int64) error { // MaxCurrent implements the api.Charger interface func (wb *PCElectric) MaxCurrent(current int64) error { if wb.slaveIndex > 0 { - return nil //Slave wird immer mit dem Master geschaltet! + return nil // Slave wird immer mit dem Master geschaltet! } // Ohne Loadbalancer Regelung über currentlimit: diff --git a/charger/smaevcharger.go b/charger/smaevcharger.go index 34b109cbc..05ee7509f 100644 --- a/charger/smaevcharger.go +++ b/charger/smaevcharger.go @@ -80,7 +80,7 @@ func NewSmaevchargerFromConfig(other map[string]interface{}) (api.Charger, error } // NewSmaevcharger creates an SMA EV Charger -func NewSmaevcharger(uri string, user string, password string, cache time.Duration) (api.Charger, error) { +func NewSmaevcharger(uri, user, password string, cache time.Duration) (api.Charger, error) { log := util.NewLogger("smaevcharger").Redact(user, password) wb := &Smaevcharger{ @@ -343,7 +343,7 @@ func (wb *Smaevcharger) Send(values ...smaevcharger.Value) error { } // value creates an smaevcharger.Value -func value(id string, value string) smaevcharger.Value { +func value(id, value string) smaevcharger.Value { return smaevcharger.Value{ Timestamp: time.Now().UTC().Format(smaevcharger.TimestampFormat), ChannelId: id, diff --git a/cmd/configure/helper.go b/cmd/configure/helper.go index e77155ebd..640155271 100644 --- a/cmd/configure/helper.go +++ b/cmd/configure/helper.go @@ -216,7 +216,7 @@ func (c *CmdConfigure) processParamRequirements(param templates.Param) error { return nil } -func (c *CmdConfigure) askSponsortoken(required bool, feature bool) error { +func (c *CmdConfigure) askSponsortoken(required, feature bool) error { fmt.Println("-- Sponsorship -----------------------------") if required { fmt.Println() @@ -239,7 +239,8 @@ func (c *CmdConfigure) askSponsortoken(required bool, feature bool) error { sponsortoken := c.askValue(question{ label: c.localizedString("Requirements_Sponsorship_Token_Input", nil), mask: true, - required: true}) + required: true, + }) err := sponsor.ConfigureSponsorship(sponsortoken) if err != nil { @@ -273,22 +274,26 @@ func (c *CmdConfigure) configureMQTT(templateItem templates.Template) (map[strin host := c.askValue(question{ label: paramHost.Description.String(c.lang), mask: false, - required: true}) + required: true, + }) port := c.askValue(question{ label: paramPort.Description.String(c.lang), mask: false, - required: true}) + required: true, + }) user := c.askValue(question{ label: paramUser.Description.String(c.lang), mask: false, - required: false}) + required: false, + }) password := c.askValue(question{ label: paramPassword.Description.String(c.lang), mask: true, - required: false}) + required: false, + }) fmt.Println() fmt.Println("--------------------------------------------") @@ -532,7 +537,8 @@ func (c *CmdConfigure) processInputConfig(param templates.Param) string { valueType: param.ValueType, validValues: param.ValidValues, mask: param.Mask, - required: param.Required}) + required: param.Required, + }) if param.ValueType == templates.ParamValueTypeBool && value == "true" { if err := c.processParamRequirements(param); err != nil { diff --git a/cmd/configure/main.go b/cmd/configure/main.go index 03dadf529..987112d10 100644 --- a/cmd/configure/main.go +++ b/cmd/configure/main.go @@ -179,7 +179,7 @@ func (c *CmdConfigure) flowNewConfigFile() { filename := DefaultConfigFilename for ok := true; ok; { - file, err := os.OpenFile(filename, os.O_WRONLY, 0666) + file, err := os.OpenFile(filename, os.O_WRONLY, 0o666) if errors.Is(err, os.ErrNotExist) { break } @@ -196,10 +196,11 @@ func (c *CmdConfigure) flowNewConfigFile() { filename = c.askValue(question{ label: c.localizedString("File_NewFilename", nil), exampleValue: "evcc_neu.yaml", - required: true}) + required: true, + }) } - err = os.WriteFile(filename, yaml, 0755) + err = os.WriteFile(filename, yaml, 0o755) if err != nil { fmt.Printf("%s: ", c.localizedString("File_Error_SaveFailed", localizeMap{"FileName": filename})) c.log.FATAL.Fatal(err) @@ -283,7 +284,8 @@ func (c *CmdConfigure) configureLoadpoints() { loadpointTitle := c.askValue(question{ label: c.localizedString("Loadpoint_Title", nil), defaultValue: c.localizedString("Loadpoint_DefaultTitle", nil), - required: true}) + required: true, + }) loadpoint := loadpoint{ Title: loadpointTitle, Phases: 3, @@ -330,14 +332,16 @@ func (c *CmdConfigure) configureLoadpoints() { valueType: templates.ParamValueTypeNumber, minNumberValue: int64(minValue), maxNumberValue: 32, - required: true}) + required: true, + }) loadpoint.MinCurrent, _ = strconv.Atoi(minAmperage) maxAmperage := c.askValue(question{ label: c.localizedString("Loadpoint_WallboxMaxAmperage", nil), valueType: templates.ParamValueTypeNumber, minNumberValue: 6, maxNumberValue: 32, - required: true}) + required: true, + }) loadpoint.MaxCurrent, _ = strconv.Atoi(maxAmperage) if !chargerHasMeter { @@ -378,7 +382,8 @@ func (c *CmdConfigure) configureLoadpoints() { valueType: templates.ParamValueTypeNumber, minNumberValue: int64(minValue), maxNumberValue: 32, - required: true}) + required: true, + }) loadpoint.MaxCurrent, _ = strconv.Atoi(amperage) if !chargerHasMeter { @@ -415,6 +420,7 @@ func (c *CmdConfigure) configureSite() { siteTitle := c.askValue(question{ label: c.localizedString("Site_Title", nil), defaultValue: c.localizedString("Site_DefaultTitle", nil), - required: true}) + required: true, + }) c.configuration.config.Site.Title = siteTitle } diff --git a/cmd/health.go b/cmd/health.go index 3d9ca2e0c..8cbe5a3d4 100644 --- a/cmd/health.go +++ b/cmd/health.go @@ -40,7 +40,7 @@ func runHealth(cmd *cobra.Command, args []string) { u.RegisterLocation(serviceName, server.SocketPath) - var client = http.Client{ + client := http.Client{ Transport: u, } diff --git a/core/coordinator_test.go b/core/coordinator_test.go index 84a937fcf..9c800bae8 100644 --- a/core/coordinator_test.go +++ b/core/coordinator_test.go @@ -59,5 +59,4 @@ func TestVehicleDetectByStatus(t *testing.T) { c.release(res) } } - } diff --git a/core/loadpoint.go b/core/loadpoint.go index 6fb31f2dc..c7802bafe 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -1272,7 +1272,6 @@ func (lp *LoadPoint) UpdateChargePower() { return nil }, retryOptions...) - if err != nil { lp.log.ERROR.Printf("charge meter: %v", err) } @@ -1409,7 +1408,7 @@ func (lp *LoadPoint) publishSoCAndRange() { } // Update is the main control function. It reevaluates meters and charger state -func (lp *LoadPoint) Update(sitePower float64, cheap bool, batteryBuffered bool) { +func (lp *LoadPoint) Update(sitePower float64, cheap, batteryBuffered bool) { mode := lp.GetMode() lp.publish("mode", mode) diff --git a/core/loadpoint_test.go b/core/loadpoint_test.go index 300eea227..13c6ac574 100644 --- a/core/loadpoint_test.go +++ b/core/loadpoint_test.go @@ -595,6 +595,7 @@ func TestChargedEnergyAtDisconnect(t *testing.T) { ctrl.Finish() } + func TestTargetSoC(t *testing.T) { ctrl := gomock.NewController(t) vhc := mock.NewMockVehicle(ctrl) @@ -634,6 +635,7 @@ func TestTargetSoC(t *testing.T) { } } } + func TestSoCPoll(t *testing.T) { clock := clock.NewMock() tRefresh := pollInterval diff --git a/core/savings.go b/core/savings.go index 469f927eb..dd7faade6 100644 --- a/core/savings.go +++ b/core/savings.go @@ -8,8 +8,10 @@ import ( "github.com/evcc-io/evcc/tariff" ) -const DefaultGridPrice = 0.30 -const DefaultFeedInPrice = 0.08 +const ( + DefaultGridPrice = 0.30 + DefaultFeedInPrice = 0.08 +) // publisher gives access to the site's publish function type publisher interface { diff --git a/core/site.go b/core/site.go index a365d787b..12fd85099 100644 --- a/core/site.go +++ b/core/site.go @@ -17,7 +17,7 @@ import ( // Updater abstracts the LoadPoint implementation for testing type Updater interface { - Update(availablePower float64, cheapRate bool, batteryBuffered bool) + Update(availablePower float64, cheapRate, batteryBuffered bool) } // Site is the main configuration container. A site can host multiple loadpoints. diff --git a/core/soc/estimator_test.go b/core/soc/estimator_test.go index b8c983e97..ed8c23f9b 100644 --- a/core/soc/estimator_test.go +++ b/core/soc/estimator_test.go @@ -15,7 +15,7 @@ func TestRemainingChargeDuration(t *testing.T) { ctrl := gomock.NewController(t) charger := mock.NewMockCharger(ctrl) vehicle := mock.NewMockVehicle(ctrl) - //9 kWh userBatCap => 10 kWh virtualBatCap + // 9 kWh userBatCap => 10 kWh virtualBatCap vehicle.EXPECT().Capacity().Return(int64(9)) ce := NewEstimator(util.NewLogger("foo"), charger, vehicle, false) diff --git a/hems/semp/semp.go b/hems/semp/semp.go index b9764dbc7..70b80ad60 100644 --- a/hems/semp/semp.go +++ b/hems/semp/semp.go @@ -34,9 +34,7 @@ const ( maxAge = 1800 ) -var ( - serverName = "EVCC SEMP Server " + server.Version -) +var serverName = "EVCC SEMP Server " + server.Version // SEMP is the SMA SEMP server type SEMP struct { diff --git a/meter/fritzdect/fritzdect.go b/meter/fritzdect/fritzdect.go index 698cb552f..a80bdc392 100644 --- a/meter/fritzdect/fritzdect.go +++ b/meter/fritzdect/fritzdect.go @@ -171,7 +171,7 @@ func (c *Connection) getSessionID() error { } // createChallengeResponse creates the Fritzbox challenge response string -func createChallengeResponse(challenge string, pass string) (string, error) { +func createChallengeResponse(challenge, pass string) (string, error) { encoder := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM).NewEncoder() utf16le, err := encoder.String(challenge + "-" + pass) if err != nil { diff --git a/provider/sma.go b/provider/sma.go index eaafbc438..b7d010fc6 100644 --- a/provider/sma.go +++ b/provider/sma.go @@ -41,7 +41,7 @@ func NewSMAFromConfig(other map[string]interface{}) (IntProvider, error) { return nil, fmt.Errorf("failed to get discoverer failed: %w", err) } - var provider = &SMA{ + provider := &SMA{ scale: cc.Scale, } switch { diff --git a/server/http_handler_test.go b/server/http_handler_test.go index 7725d4ffe..ac0a70d73 100644 --- a/server/http_handler_test.go +++ b/server/http_handler_test.go @@ -21,7 +21,6 @@ func (lp *mockLoadpoint) SetTargetCharge(time time.Time, soc int) { } func TestTargetChargeHandler(t *testing.T) { - tc := []struct { inSoC string inTime string @@ -29,8 +28,10 @@ func TestTargetChargeHandler(t *testing.T) { outSoC int outTime time.Time }{ - {"70", "2022-05-17T06:20:59.509Z", http.StatusOK, - 70, time.Date(2022, 05, 17, 06, 20, 59, 509000000, time.UTC)}, + { + "70", "2022-05-17T06:20:59.509Z", http.StatusOK, + 70, time.Date(2022, 0o5, 17, 0o6, 20, 59, 509000000, time.UTC), + }, {"foo", "2022-05-17T06:20:59.509Z", http.StatusBadRequest, 0, time.Time{}}, {"70", "2022-05-17 06:20:59", http.StatusBadRequest, 0, time.Time{}}, } @@ -69,5 +70,4 @@ func TestTargetChargeHandler(t *testing.T) { t.Errorf("wrong target time year: got %v want %v", mockLp.TargetTime.UTC().Format(isoFormat), tc.outTime.Format(isoFormat)) } } - } diff --git a/server/updater/run_gokrazy.go b/server/updater/run_gokrazy.go index 49ea3b219..e3bb2acb5 100644 --- a/server/updater/run_gokrazy.go +++ b/server/updater/run_gokrazy.go @@ -11,9 +11,7 @@ import ( "github.com/google/go-github/v32/github" ) -var ( - latest *github.RepositoryRelease -) +var latest *github.RepositoryRelease // Run regularly checks version func Run(log *util.Logger, httpd webServer, tee util.TeeAttacher, outChan chan<- util.Param) { diff --git a/util/cloud/client.go b/util/cloud/client.go index 023c88c09..878bff215 100644 --- a/util/cloud/client.go +++ b/util/cloud/client.go @@ -17,9 +17,7 @@ import ( var Host = "cloud.evcc.io:8080" -var ( - conn *grpc.ClientConn -) +var conn *grpc.ClientConn //go:embed ca-cert.pem var caCert []byte diff --git a/util/decoder.go b/util/decoder.go index 7155c45aa..b9155a04b 100644 --- a/util/decoder.go +++ b/util/decoder.go @@ -5,7 +5,7 @@ import ( ) // DecodeOther uses mapstructure to decode into target structure. Unused keys cause errors. -func DecodeOther(other interface{}, cc interface{}) error { +func DecodeOther(other, cc interface{}) error { decoderConfig := &mapstructure.DecoderConfig{ Result: cc, ErrorUnused: true, diff --git a/util/helper.go b/util/helper.go index b8b9dc0a2..b9754dc98 100644 --- a/util/helper.go +++ b/util/helper.go @@ -6,7 +6,7 @@ import ( // RandomString creates random string of N integers func RandomString(n int) string { - var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") + letters := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") s := make([]rune, n) for i := range s { s[i] = letters[rand.Intn(len(letters))] diff --git a/util/modbus/modbus.go b/util/modbus/modbus.go index cddee3f3a..d06c317a9 100644 --- a/util/modbus/modbus.go +++ b/util/modbus/modbus.go @@ -368,7 +368,7 @@ type SunSpecOperation struct { } // ParsePoint parses sunspec point from string -func ParsePoint(selector string) (model int, block int, point string, err error) { +func ParsePoint(selector string) (model, block int, point string, err error) { err = fmt.Errorf("invalid point: %s", selector) el := strings.Split(selector, ":") diff --git a/util/net.go b/util/net.go index 74d56dbdf..cfe6b3d18 100644 --- a/util/net.go +++ b/util/net.go @@ -18,7 +18,7 @@ func DefaultPort(conn string, port int) string { } // DefaultScheme prepends given scheme to uri if not specified -func DefaultScheme(uri string, scheme string) string { +func DefaultScheme(uri, scheme string) string { u, err := url.Parse(uri) if err != nil { if strings.HasSuffix(err.Error(), "first path segment in URL cannot contain colon") { diff --git a/util/net_test.go b/util/net_test.go index 0e12ee129..9f9f691c6 100644 --- a/util/net_test.go +++ b/util/net_test.go @@ -38,6 +38,7 @@ func TestDefaultScheme(t *testing.T) { t.Errorf("expected %s, got %s", expect, uri) } } + func TestDefaultSchemeWithEmptyUri(t *testing.T) { expect := "" diff --git a/util/templates/generate/generate.go b/util/templates/generate/generate.go index 59b5b6071..b6f1128bd 100644 --- a/util/templates/generate/generate.go +++ b/util/templates/generate/generate.go @@ -13,8 +13,10 @@ import ( "golang.org/x/exp/maps" ) -const docsPath = "../../../templates/docs" -const websitePath = "../../../templates/evcc.io" +const ( + docsPath = "../../../templates/docs" + websitePath = "../../../templates/evcc.io" +) //go:generate go run generate.go @@ -23,7 +25,7 @@ func main() { path := fmt.Sprintf("%s/%s", docsPath, class) _, err := os.Stat(path) if os.IsNotExist(err) { - if err := os.MkdirAll(path, 0755); err != nil { + if err := os.MkdirAll(path, 0o755); err != nil { panic(err) } } @@ -69,7 +71,7 @@ func writeTemplate(class string, index int, product templates.Product, tmpl temp } filename := fmt.Sprintf("%s/%s/%s_%d.yaml", docsPath, class, tmpl.Template, index) - if err := os.WriteFile(filename, b, 0644); err != nil { + if err := os.WriteFile(filename, b, 0o644); err != nil { return err } return nil @@ -153,7 +155,7 @@ func generateBrandJSON() error { } file, _ := json.MarshalIndent(brands, "", " ") - error := ioutil.WriteFile(websitePath+"/brands.json", file, 0644) + error := ioutil.WriteFile(websitePath+"/brands.json", file, 0o644) return error } diff --git a/util/templates/template_types.go b/util/templates/template_types.go index 3dee63965..6ba222610 100644 --- a/util/templates/template_types.go +++ b/util/templates/template_types.go @@ -49,8 +49,10 @@ const ( var ValidParamValueTypes = []string{ParamValueTypeString, ParamValueTypeNumber, ParamValueTypeFloat, ParamValueTypeBool, ParamValueTypeStringList, ParamValueTypeChargeModes, ParamValueTypeDuration} -var ValidModbusChoices = []string{ModbusChoiceRS485, ModbusChoiceTCPIP} -var ValidUsageChoices = []string{UsageChoiceGrid, UsageChoicePV, UsageChoiceBattery, UsageChoiceCharge} +var ( + ValidModbusChoices = []string{ModbusChoiceRS485, ModbusChoiceTCPIP} + ValidUsageChoices = []string{UsageChoiceGrid, UsageChoicePV, UsageChoiceBattery, UsageChoiceCharge} +) const ( DependencyCheckEmpty = "empty" @@ -78,7 +80,8 @@ const ( var ValidRequirements = []string{RequirementEEBUS, RequirementMQTT, RequirementSponsorship} -var predefinedTemplateProperties = []string{"type", "template", "name", +var predefinedTemplateProperties = []string{ + "type", "template", "name", ModbusParamNameId, ModbusParamNameDevice, ModbusParamNameBaudrate, ModbusParamNameComset, ModbusParamNameURI, ModbusParamNameHost, ModbusParamNamePort, ModbusParamNameRTU, ModbusKeyTCPIP, ModbusKeyRS485Serial, ModbusKeyRS485TCPIP, diff --git a/vehicle/carwings.go b/vehicle/carwings.go index ad899c334..ad1b1eb8d 100644 --- a/vehicle/carwings.go +++ b/vehicle/carwings.go @@ -218,7 +218,7 @@ func (v *CarWings) Range() (int64, error) { var _ api.VehicleClimater = (*CarWings)(nil) // Climater implements the api.VehicleClimater interface -func (v *CarWings) Climater() (active bool, outsideTemp float64, targetTemp float64, err error) { +func (v *CarWings) Climater() (active bool, outsideTemp, targetTemp float64, err error) { res, err := v.climateG() // silence ErrClimateStatusUnavailable errors diff --git a/vehicle/jlr.go b/vehicle/jlr.go index 9602fd603..7731f745c 100644 --- a/vehicle/jlr.go +++ b/vehicle/jlr.go @@ -95,7 +95,8 @@ func (v *JLR) RegisterDevice(log *util.Logger, user, device string, t jlr.Token) "access_token": t.AccessToken, "authorization_token": t.AuthToken, "expires_in": "86400", - "deviceID": device} + "deviceID": device, + } uri := fmt.Sprintf("%s/users/%s/clients", jlr.IFOP_BASE_URL, url.PathEscape(user)) diff --git a/vehicle/jlr/api.go b/vehicle/jlr/api.go index a84c1838e..c5260b1e9 100644 --- a/vehicle/jlr/api.go +++ b/vehicle/jlr/api.go @@ -117,7 +117,8 @@ func (v *API) AuthenticateVinService(vin, user, service string) (PinResponse, er pin := vin[len(vin)-4:] data := map[string]string{ "serviceName": service, - "pin": pin} + "pin": pin, + } uri := fmt.Sprintf("%s/vehicles/%s/users/%s/authenticate", IF9_BASE_URL, vin, user) req, err := request.New(http.MethodPost, uri, request.MarshalJSON(data), map[string]string{ diff --git a/vehicle/mb/identity.go b/vehicle/mb/identity.go index f16f7878e..42a3e81b0 100644 --- a/vehicle/mb/identity.go +++ b/vehicle/mb/identity.go @@ -1,6 +1,7 @@ package mb import ( + "context" "crypto/rand" "encoding/base64" "fmt" @@ -10,7 +11,6 @@ import ( "net/url" "strings" - "context" "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/request" cv "github.com/nirasan/go-oauth-pkce-code-verifier" diff --git a/vehicle/nissan/api.go b/vehicle/nissan/api.go index 8b8e8e3dc..b9b279fa6 100644 --- a/vehicle/nissan/api.go +++ b/vehicle/nissan/api.go @@ -70,7 +70,7 @@ func (v *API) BatteryStatus(vin string) (StatusResponse, error) { } // RefreshRequest requests battery status refresh -func (v *API) RefreshRequest(vin string, typ string) (ActionResponse, error) { +func (v *API) RefreshRequest(vin, typ string) (ActionResponse, error) { var res ActionResponse uri := fmt.Sprintf("%s/v1/cars/%s/actions/refresh-battery-status", CarAdapterBaseURL, vin) diff --git a/vehicle/porsche/provider.go b/vehicle/porsche/provider.go index ed01233d9..87d6cb85e 100644 --- a/vehicle/porsche/provider.go +++ b/vehicle/porsche/provider.go @@ -17,7 +17,7 @@ type Provider struct { } // NewProvider creates a new vehicle -func NewProvider(log *util.Logger, api *API, emobility *EmobilityAPI, mobile *MobileAPI, vin string, carModel string, cache time.Duration) *Provider { +func NewProvider(log *util.Logger, api *API, emobility *EmobilityAPI, mobile *MobileAPI, vin, carModel string, cache time.Duration) *Provider { impl := &Provider{ statusG: provider.Cached(func() (StatusResponse, error) { return api.Status(vin) @@ -181,7 +181,7 @@ func (v *Provider) Status() (api.ChargeStatus, error) { var _ api.VehicleClimater = (*Provider)(nil) // Climater implements the api.VehicleClimater interface -func (v *Provider) Climater() (active bool, outsideTemp float64, targetTemp float64, err error) { +func (v *Provider) Climater() (active bool, outsideTemp, targetTemp float64, err error) { res, err := v.mobileG() if err == nil { m, err := res.MeasurementByKey("CLIMATIZER_STATE") diff --git a/vehicle/psa/provider.go b/vehicle/psa/provider.go index baae4798c..a65296831 100644 --- a/vehicle/psa/provider.go +++ b/vehicle/psa/provider.go @@ -129,7 +129,7 @@ func (v *Provider) Status() (api.ChargeStatus, error) { var _ api.VehicleClimater = (*Provider)(nil) // Climater implements the api.VehicleClimater interface -func (v *Provider) Climater() (active bool, outsideTemp float64, targetTemp float64, err error) { +func (v *Provider) Climater() (active bool, outsideTemp, targetTemp float64, err error) { res, err := v.statusG() if err == nil { active := strings.ToLower(res.Preconditionning.AirConditioning.Status) != "disabled" diff --git a/vehicle/renault.go b/vehicle/renault.go index f8704f034..093bcb91b 100644 --- a/vehicle/renault.go +++ b/vehicle/renault.go @@ -464,7 +464,7 @@ func (v *Renault) FinishTime() (time.Time, error) { var _ api.VehicleClimater = (*Renault)(nil) // Climater implements the api.VehicleClimater interface -func (v *Renault) Climater() (active bool, outsideTemp float64, targetTemp float64, err error) { +func (v *Renault) Climater() (active bool, outsideTemp, targetTemp float64, err error) { res, err := v.hvacG() // Zoe Ph2 diff --git a/vehicle/seat/cupra/provider.go b/vehicle/seat/cupra/provider.go index 247ecf0f2..f2271a805 100644 --- a/vehicle/seat/cupra/provider.go +++ b/vehicle/seat/cupra/provider.go @@ -87,7 +87,7 @@ func (v *Provider) Range() (int64, error) { var _ api.VehicleClimater = (*Provider)(nil) // Climater implements the api.VehicleClimater interface -func (v *Provider) Climater() (active bool, outsideTemp float64, targetTemp float64, err error) { +func (v *Provider) Climater() (active bool, outsideTemp, targetTemp float64, err error) { res, err := v.statusG() return res.Services.Climatisation.Active, 21, 21, err } diff --git a/vehicle/smart/provider.go b/vehicle/smart/provider.go index fcbbf827a..d24249db5 100644 --- a/vehicle/smart/provider.go +++ b/vehicle/smart/provider.go @@ -31,7 +31,7 @@ func NewProvider(log *util.Logger, api *API, vin string, expiry, cache time.Dura return v } -func (v *Provider) status(statusG func() (StatusResponse, error), refreshG func() (StatusResponse, error)) (StatusResponse, error) { +func (v *Provider) status(statusG, refreshG func() (StatusResponse, error)) (StatusResponse, error) { res, err := statusG() // if ts := res.Status.Data.Soc.Ts.Time; err == nil && ts.Add(v.expiry).Before(time.Now()) { diff --git a/vehicle/vag/vwidentity/endpoint.go b/vehicle/vag/vwidentity/endpoint.go index 67c23fcd9..1c96772bf 100644 --- a/vehicle/vag/vwidentity/endpoint.go +++ b/vehicle/vag/vwidentity/endpoint.go @@ -32,6 +32,7 @@ var Config = &oidc.ProviderConfig{ func Login(log *util.Logger, q url.Values, user, password string) (url.Values, error) { return LoginWithAuthURL(log, Config.AuthURL, q, user, password) } + func LoginWithAuthURL(log *util.Logger, uri string, q url.Values, user, password string) (url.Values, error) { var verify func(url.Values) diff --git a/vehicle/vw/id/provider.go b/vehicle/vw/id/provider.go index 9e563c99a..d5989f7ad 100644 --- a/vehicle/vw/id/provider.go +++ b/vehicle/vw/id/provider.go @@ -101,7 +101,7 @@ func (v *Provider) Odometer() (float64, error) { var _ api.VehicleClimater = (*Provider)(nil) // Climater implements the api.VehicleClimater interface -func (v *Provider) Climater() (active bool, outsideTemp float64, targetTemp float64, err error) { +func (v *Provider) Climater() (active bool, outsideTemp, targetTemp float64, err error) { res, err := v.statusG() if err == nil { state := strings.ToLower(res.Data.ClimatisationStatus.ClimatisationState) diff --git a/vehicle/vw/provider.go b/vehicle/vw/provider.go index 6ac8f2567..0938756b9 100644 --- a/vehicle/vw/provider.go +++ b/vehicle/vw/provider.go @@ -139,7 +139,7 @@ func (v *Provider) Odometer() (float64, error) { var _ api.VehicleClimater = (*Provider)(nil) // Climater implements the api.VehicleClimater interface -func (v *Provider) Climater() (active bool, outsideTemp float64, targetTemp float64, err error) { +func (v *Provider) Climater() (active bool, outsideTemp, targetTemp float64, err error) { res, err := v.climateG() if err == nil { state := strings.ToLower(res.Climater.Status.ClimatisationStatusData.ClimatisationState.Content)