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