From 2a74cbe13a327caf4eb04df5164ed07d6dffabed Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 22 Sep 2025 13:21:20 +0200 Subject: [PATCH] chore: consistently use lat/lon --- charger/vehicle-api.go | 18 +++++++-------- templates/definition/charger/vehicle-api.yaml | 4 ++-- util/templates/defaults.yaml | 22 ++++++++++--------- util/templates/render_testing.go | 2 -- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/charger/vehicle-api.go b/charger/vehicle-api.go index d20f937b6..5932c575a 100644 --- a/charger/vehicle-api.go +++ b/charger/vehicle-api.go @@ -16,9 +16,7 @@ type VehicleApi struct { lp loadpoint.API enabled bool geofenceEnabled bool - latitude float64 - longitude float64 - radius float64 + lat, lon, radius float64 cacheRefreshExpectedAt time.Time } @@ -30,8 +28,8 @@ func init() { func NewVehicleApiFromConfig(other map[string]interface{}) (api.Charger, error) { cc := struct { GeofenceEnabled bool `mapstructure:"geofence_enabled"` - Latitude float64 `mapstructure:"latitude"` - Longitude float64 `mapstructure:"longitude"` + Lat float64 `mapstructure:"lat"` + Lon float64 `mapstructure:"lon"` Radius float64 `mapstructure:"radius"` }{ Radius: 100, // Default 100 meter radius @@ -43,8 +41,8 @@ func NewVehicleApiFromConfig(other map[string]interface{}) (api.Charger, error) c := &VehicleApi{ geofenceEnabled: cc.GeofenceEnabled, - latitude: cc.Latitude, - longitude: cc.Longitude, + lat: cc.Lat, + lon: cc.Lon, radius: cc.Radius, } @@ -178,10 +176,10 @@ func (c *VehicleApi) LoadpointControl(lp loadpoint.API) { // distance approximates Euclidean distance, good enough for geofencing func (c *VehicleApi) distance(lat, lon float64) float64 { - const metersPerDegreeLat = 111000 // ~111km per degree latitude (constant) + const metersPerDegreeLat = 111000 // ~111km per degree lat (constant) - deltaLat := (c.latitude - lat) * metersPerDegreeLat - deltaLon := (c.longitude - lon) * metersPerDegreeLat * math.Cos(c.latitude*math.Pi/180) // varies by latitude + deltaLat := (c.lat - lat) * metersPerDegreeLat + deltaLon := (c.lon - lon) * metersPerDegreeLat * math.Cos(c.lat*math.Pi/180) // varies by lat return math.Sqrt(deltaLat*deltaLat + deltaLon*deltaLon) } diff --git a/templates/definition/charger/vehicle-api.yaml b/templates/definition/charger/vehicle-api.yaml index 906b9c7b1..cfd56e849 100644 --- a/templates/definition/charger/vehicle-api.yaml +++ b/templates/definition/charger/vehicle-api.yaml @@ -48,7 +48,7 @@ render: | type: vehicle-api {{- if .geofence_enabled }} geofence_enabled: {{ .geofence_enabled }} - latitude: {{ .latitude }} - longitude: {{ .longitude }} + lat: {{ .lat }} + lon: {{ .lon }} radius: {{ .radius }} {{- end }} diff --git a/util/templates/defaults.yaml b/util/templates/defaults.yaml index f602882f3..54109562b 100644 --- a/util/templates/defaults.yaml +++ b/util/templates/defaults.yaml @@ -441,6 +441,18 @@ params: description: de: Temperaturquelle en: Temperature source + - name: lat + description: + en: Latitude + de: Breitengrad + type: float + example: 55.7351 + - name: lon + description: + en: Longitude + de: Längengrad + type: float + example: 9.1275 presets: vehicle-base: @@ -531,18 +543,8 @@ presets: forecast-base: params: - name: lat - description: - en: Latitude - de: Breitengrad - type: float - example: 55.7351 required: true - name: lon - description: - en: Longitude - de: Längengrad - type: float - example: 9.1275 required: true - name: dec description: diff --git a/util/templates/render_testing.go b/util/templates/render_testing.go index e6c84ee63..3d88f3b11 100644 --- a/util/templates/render_testing.go +++ b/util/templates/render_testing.go @@ -38,8 +38,6 @@ func TestClass(t *testing.T, class Class, instantiate func(t *testing.T, values t.Parallel() for _, tmpl := range ByClass(class, WithDeprecated()) { - tmpl := tmpl - // set default values for all params values := tmpl.Defaults(RenderModeUnitTest)