diff --git a/lib/teslamate/convert.ex b/lib/teslamate/convert.ex
index cfac1ccf..9b271d81 100644
--- a/lib/teslamate/convert.ex
+++ b/lib/teslamate/convert.ex
@@ -1,18 +1,27 @@
defmodule TeslaMate.Convert do
+ @km_factor 0.62137119223733
+ @ft_factor 3.28084
+
def mph_to_kmh(nil), do: nil
- def mph_to_kmh(mph), do: round(mph * 1.60934)
+ def mph_to_kmh(mph), do: round(mph / @km_factor)
def miles_to_km(nil, _precision), do: nil
- def miles_to_km(miles, precision), do: Float.round(miles / 0.62137, precision)
+ def miles_to_km(miles, 0), do: round(miles / @km_factor)
+ def miles_to_km(miles, precision), do: Float.round(miles / @km_factor, precision)
def km_to_miles(nil, _precision), do: nil
- def km_to_miles(km, precision), do: Float.round(km * 0.62137, precision)
+ def km_to_miles(km, 0), do: round(km * @km_factor)
+ def km_to_miles(km, precision), do: Float.round(km * @km_factor, precision)
def m_to_ft(nil), do: nil
- def m_to_ft(m), do: m * 3.28084
+ def m_to_ft(m), do: m * @ft_factor
def ft_to_m(nil), do: nil
- def ft_to_m(ft), do: ft / 3.28084
+ def ft_to_m(ft), do: ft / @ft_factor
+
+ def celsius_to_fahrenheit(nil, _precision), do: nil
+ def celsius_to_fahrenheit(c, 0), do: round(c * 9 / 5 + 32)
+ def celsius_to_fahrenheit(c, precision), do: Float.round(c * 9 / 5 + 32, precision)
@minute 60
@hour @minute * 60
diff --git a/lib/teslamate/vehicles/vehicle.ex b/lib/teslamate/vehicles/vehicle.ex
index 1ba09ab5..fa7d2134 100644
--- a/lib/teslamate/vehicles/vehicle.ex
+++ b/lib/teslamate/vehicles/vehicle.ex
@@ -821,11 +821,14 @@ defmodule TeslaMate.Vehicles.Vehicle do
inside_temp: position.inside_temp
}
- vehicle_state =
- case call(data.deps.log, :get_latest_update, [data.car]) do
- %Log.Update{version: version} -> %VehicleState{car_version: version}
- _ -> nil
- end
+ vehicle_state = %VehicleState{
+ odometer: position.odometer |> Convert.km_to_miles(10),
+ car_version:
+ case call(data.deps.log, :get_latest_update, [data.car]) do
+ %Log.Update{version: version} -> version
+ _ -> nil
+ end
+ }
vehicle = %Vehicle{
vehicle
diff --git a/lib/teslamate_web/templates/car/summary.html.leex b/lib/teslamate_web/templates/car/summary.html.leex
index 55a1fd82..77004550 100644
--- a/lib/teslamate_web/templates/car/summary.html.leex
+++ b/lib/teslamate_web/templates/car/summary.html.leex
@@ -125,7 +125,7 @@
end
if @settings.unit_of_length == :mi do
- "#{Float.round(range / 1.60934, 1)} mi"
+ "#{Convert.km_to_miles(range, 1)} mi"
else
"#{range} km"
end
@@ -137,7 +137,7 @@
<%= gettext "Range (est.)" %> |
<%=
if @settings.unit_of_length == :mi do
- "#{Float.round(@summary.est_battery_range_km / 1.60934, 1)} mi"
+ "#{Convert.km_to_miles(@summary.est_battery_range_km, 1)} mi"
else
"#{@summary.est_battery_range_km} km"
end
@@ -198,7 +198,7 @@
r100_str =
if @settings.unit_of_length == :mi do
- "#{round(r100 / 1.60934)} mi"
+ "#{Convert.km_to_miles(r100, 0)} mi"
else
"#{round(r100)} km"
end
@@ -221,7 +221,7 @@
| <%= gettext "Speed" %> |
<%=
if @settings.unit_of_length == :mi do
- "#{round(@summary.speed / 1.60934)} mph"
+ "#{Convert.km_to_miles(@summary.speed, 0)} mph"
else
"#{@summary.speed} km/h"
end
@@ -234,7 +234,7 @@
| <%= gettext "Outside temperature" %> |
<%=
if @settings.unit_of_temperature == :F do
- "#{Float.round((@summary.outside_temp * 9/5) + 32, 1)} °F"
+ "#{Convert.celsius_to_fahrenheit(@summary.outside_temp, 1)} °F"
else
"#{@summary.outside_temp} °C"
end
@@ -246,11 +246,23 @@
| <%= gettext "Inside temperature" %> |
<%=
if @settings.unit_of_temperature == :F do
- "#{Float.round((@summary.inside_temp * 9/5) + 32, 1)} °F"
+ "#{Convert.celsius_to_fahrenheit(@summary.inside_temp, 1)} °F"
else
"#{@summary.inside_temp} °C"
end
%> |
+
+ <% end %>
+ <%= unless is_nil(@summary.odometer) do %>
+
+ | <%= gettext "Mileage" %> |
+ <%=
+ if @settings.unit_of_length == :mi do
+ "#{Convert.km_to_miles(@summary.odometer, 0)} mi"
+ else
+ "#{round(@summary.odometer)} km"
+ end
+ %> |
<% end %>
<% end %>
diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po
index f452e1c4..3ded7771 100644
--- a/priv/gettext/de/LC_MESSAGES/default.po
+++ b/priv/gettext/de/LC_MESSAGES/default.po
@@ -224,12 +224,12 @@ msgid "Driver present"
msgstr "Fahrer anwesend"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:287
+#: lib/teslamate_web/templates/car/summary.html.leex:299
msgid "cancel sleep attempt"
msgstr "Schlafversuch abbrechen"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:282
+#: lib/teslamate_web/templates/car/summary.html.leex:294
msgid "try to sleep"
msgstr "versuchen zu schlafen"
@@ -344,7 +344,7 @@ msgid "Outside temperature"
msgstr "Außentemperatur"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:259
+#: lib/teslamate_web/templates/car/summary.html.leex:271
msgid "Version"
msgstr ""
@@ -572,3 +572,8 @@ msgstr "Ladekosten"
#: lib/teslamate_web/templates/geo_fence/form.html.leex:163
msgid "Continue"
msgstr "Weiter"
+
+#, elixir-format
+#: lib/teslamate_web/templates/car/summary.html.leex:258
+msgid "Mileage"
+msgstr "Kilometerstand"
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index f209c740..ee0bc469 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -223,12 +223,12 @@ msgid "Driver present"
msgstr ""
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:287
+#: lib/teslamate_web/templates/car/summary.html.leex:299
msgid "cancel sleep attempt"
msgstr ""
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:282
+#: lib/teslamate_web/templates/car/summary.html.leex:294
msgid "try to sleep"
msgstr ""
@@ -343,7 +343,7 @@ msgid "Outside temperature"
msgstr ""
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:259
+#: lib/teslamate_web/templates/car/summary.html.leex:271
msgid "Version"
msgstr ""
@@ -571,3 +571,8 @@ msgstr ""
#: lib/teslamate_web/templates/geo_fence/form.html.leex:163
msgid "Continue"
msgstr ""
+
+#, elixir-format
+#: lib/teslamate_web/templates/car/summary.html.leex:258
+msgid "Mileage"
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index 9ac2c856..1e86c82b 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -224,12 +224,12 @@ msgid "Driver present"
msgstr ""
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:287
+#: lib/teslamate_web/templates/car/summary.html.leex:299
msgid "cancel sleep attempt"
msgstr ""
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:282
+#: lib/teslamate_web/templates/car/summary.html.leex:294
msgid "try to sleep"
msgstr ""
@@ -344,7 +344,7 @@ msgid "Outside temperature"
msgstr ""
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:259
+#: lib/teslamate_web/templates/car/summary.html.leex:271
msgid "Version"
msgstr ""
@@ -572,3 +572,8 @@ msgstr ""
#: lib/teslamate_web/templates/geo_fence/form.html.leex:163
msgid "Continue"
msgstr ""
+
+#, elixir-format
+#: lib/teslamate_web/templates/car/summary.html.leex:258
+msgid "Mileage"
+msgstr ""
diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po
index 29d49db6..19733165 100644
--- a/priv/gettext/fr/LC_MESSAGES/default.po
+++ b/priv/gettext/fr/LC_MESSAGES/default.po
@@ -223,12 +223,12 @@ msgid "Driver present"
msgstr "Conducteur présent"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:287
+#: lib/teslamate_web/templates/car/summary.html.leex:299
msgid "cancel sleep attempt"
msgstr "Annuler la tentative de sommeil"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:282
+#: lib/teslamate_web/templates/car/summary.html.leex:294
msgid "try to sleep"
msgstr "essaye de dormir"
@@ -343,7 +343,7 @@ msgid "Outside temperature"
msgstr "Température extérieure"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:259
+#: lib/teslamate_web/templates/car/summary.html.leex:271
msgid "Version"
msgstr "Version"
@@ -571,3 +571,8 @@ msgstr "Coût de Charge"
#: lib/teslamate_web/templates/geo_fence/form.html.leex:163
msgid "Continue"
msgstr "Continuer"
+
+#, elixir-format
+#: lib/teslamate_web/templates/car/summary.html.leex:258
+msgid "Mileage"
+msgstr "Kilométrage"
diff --git a/priv/gettext/nb/LC_MESSAGES/default.po b/priv/gettext/nb/LC_MESSAGES/default.po
index d9681394..04c1b026 100644
--- a/priv/gettext/nb/LC_MESSAGES/default.po
+++ b/priv/gettext/nb/LC_MESSAGES/default.po
@@ -224,12 +224,12 @@ msgid "Driver present"
msgstr "Fører er til stede"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:287
+#: lib/teslamate_web/templates/car/summary.html.leex:299
msgid "cancel sleep attempt"
msgstr "avbryt dvale"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:282
+#: lib/teslamate_web/templates/car/summary.html.leex:294
msgid "try to sleep"
msgstr "forsøk på dvale"
@@ -344,7 +344,7 @@ msgid "Outside temperature"
msgstr "Temperatur ute"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:259
+#: lib/teslamate_web/templates/car/summary.html.leex:271
msgid "Version"
msgstr "Versjon"
@@ -572,3 +572,8 @@ msgstr "Ladekost"
#: lib/teslamate_web/templates/geo_fence/form.html.leex:163
msgid "Continue"
msgstr ""
+
+#, elixir-format
+#: lib/teslamate_web/templates/car/summary.html.leex:258
+msgid "Mileage"
+msgstr ""
diff --git a/priv/gettext/sv/LC_MESSAGES/default.po b/priv/gettext/sv/LC_MESSAGES/default.po
index 43d1f452..b58a49e1 100644
--- a/priv/gettext/sv/LC_MESSAGES/default.po
+++ b/priv/gettext/sv/LC_MESSAGES/default.po
@@ -224,12 +224,12 @@ msgid "Driver present"
msgstr "Förare närvarande"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:287
+#: lib/teslamate_web/templates/car/summary.html.leex:299
msgid "cancel sleep attempt"
msgstr "avbryt försök att sova"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:282
+#: lib/teslamate_web/templates/car/summary.html.leex:294
msgid "try to sleep"
msgstr "försök att sova"
@@ -344,7 +344,7 @@ msgid "Outside temperature"
msgstr "Utetemperatur"
#, elixir-format
-#: lib/teslamate_web/templates/car/summary.html.leex:259
+#: lib/teslamate_web/templates/car/summary.html.leex:271
msgid "Version"
msgstr ""
@@ -572,3 +572,8 @@ msgstr "Laddningskostnad"
#: lib/teslamate_web/templates/geo_fence/form.html.leex:163
msgid "Continue"
msgstr ""
+
+#, elixir-format
+#: lib/teslamate_web/templates/car/summary.html.leex:258
+msgid "Mileage"
+msgstr ""
diff --git a/test/teslamate/import_test.exs b/test/teslamate/import_test.exs
index adfe3922..5f154d94 100644
--- a/test/teslamate/import_test.exs
+++ b/test/teslamate/import_test.exs
@@ -64,7 +64,7 @@ defmodule TeslaMate.ImportTest do
assert [
%Drive{
car_id: ^car_id,
- distance: 1.2049459999980172,
+ distance: 1.2049430000006396,
duration_min: 3,
start_date: ~U[2016-06-26 18:12:28.000000Z],
end_date: ~U[2016-06-26 18:15:06.000000Z],
@@ -74,8 +74,8 @@ defmodule TeslaMate.ImportTest do
end_geofence_id: nil,
start_ideal_range_km: 311.7,
end_ideal_range_km: 311.7,
- start_km: 22414.13317,
- end_km: 22415.338116,
+ start_km: 22414.090164,
+ end_km: 22415.295107,
start_position_id: _,
end_position_id: _,
start_rated_range_km: 247.2,
@@ -89,7 +89,7 @@ defmodule TeslaMate.ImportTest do
},
%Drive{
car_id: ^car_id,
- distance: 4.962523999998666,
+ distance: 4.962514999999257,
duration_min: 11,
start_date: ~U[2016-06-26 19:22:28.000000Z],
end_date: ~U[2016-06-26 19:33:47.000000Z],
@@ -97,8 +97,8 @@ defmodule TeslaMate.ImportTest do
end_address_id: nil,
start_geofence_id: nil,
end_geofence_id: nil,
- start_km: 22415.387111,
- end_km: 22420.349635,
+ start_km: 22415.344102,
+ end_km: 22420.306617,
start_position_id: _,
end_position_id: _,
start_rated_range_km: 246.1,
diff --git a/test/teslamate_web/controllers/car_controller_test.exs b/test/teslamate_web/controllers/car_controller_test.exs
index a1d9ade0..072a17dc 100644
--- a/test/teslamate_web/controllers/car_controller_test.exs
+++ b/test/teslamate_web/controllers/car_controller_test.exs
@@ -153,7 +153,8 @@ defmodule TeslaMateWeb.CarControllerTest do
dr: 0,
pf: 1,
pr: 0,
- is_user_present: true
+ is_user_present: true,
+ odometer: 26097.59
},
vehicle_config: %{car_type: "models2", trim_badging: "p90d"}
)}
@@ -181,6 +182,7 @@ defmodule TeslaMateWeb.CarControllerTest do
assert icon(html, "Software Update available", "gift-outline")
assert table_row(html, "Outside temperature", "24 °C")
assert table_row(html, "Inside temperature", "23.2 °C")
+ assert table_row(html, "Odometer", "42000 km")
assert table_row(html, "Version", "2019.40.50.7")
end
@@ -415,6 +417,7 @@ defmodule TeslaMateWeb.CarControllerTest do
end
@tag :signed_in
+ @tag :capture_log
test "displays imperial units", %{conn: conn} do
{:ok, _} =
Settings.get_global_settings!()
@@ -438,7 +441,14 @@ defmodule TeslaMateWeb.CarControllerTest do
usable_battery_level: 67,
battery_level: 69
},
- climate_state: %{is_preconditioning: false, outside_temp: 24, inside_temp: 23.2}
+ climate_state: %{
+ is_preconditioning: false,
+ outside_temp: 24,
+ inside_temp: 23.2
+ },
+ vehicle_state: %{
+ odometer: 42000
+ }
)}
]
@@ -455,6 +465,7 @@ defmodule TeslaMateWeb.CarControllerTest do
assert table_row(html, "Speed", "30 mph")
assert table_row(html, "Outside temperature", "75.2 °F")
assert table_row(html, "Inside temperature", "73.8 °F")
+ assert table_row(html, "Odometer", "42000 mi")
end
end