diff --git a/README.md b/README.md index 035df94c..d75890c9 100644 --- a/README.md +++ b/README.md @@ -198,7 +198,7 @@ teslamate/cars/$car_id/state teslamate/cars/$car_id/battery_level teslamate/cars/$car_id/ideal_battery_range_km teslamate/cars/$car_id/est_battery_range_km -teslamate/cars/$car_id/battery_range_km +teslamate/cars/$car_id/rated_battery_range_km teslamate/cars/$car_id/charge_energy_added teslamate/cars/$car_id/charger_power teslamate/cars/$car_id/plugged_in diff --git a/lib/teslamate/log.ex b/lib/teslamate/log.ex index a5651ca8..007a9a75 100644 --- a/lib/teslamate/log.ex +++ b/lib/teslamate/log.ex @@ -161,7 +161,7 @@ defmodule TeslaMate.Log do longitude: p.longitude, odometer: p.odometer, ideal_battery_range_km: p.ideal_battery_range_km, - rated_battery_range_km: p.battery_range_km, + rated_battery_range_km: p.rated_battery_range_km, power_avg: avg(p.power) |> over(), outside_temp_avg: avg(p.outside_temp) |> over(), inside_temp_avg: avg(p.inside_temp) |> over(), @@ -269,10 +269,10 @@ defmodule TeslaMate.Log do |> ChargingProcess.changeset(%{ end_date: nil, charge_energy_added: nil, - end_range_km: nil, + end_ideal_range_km: nil, + end_rated_range_km: nil, end_battery_level: nil, - duration_min: nil, - calculated_max_range: nil + duration_min: nil }) |> Repo.update() end @@ -288,8 +288,10 @@ defmodule TeslaMate.Log do |> where(charging_process_id: ^process_id) |> select([c], %{ charge_energy_added: max(c.charge_energy_added) - min(c.charge_energy_added), - start_range_km: min(c.ideal_battery_range_km), - end_range_km: max(c.ideal_battery_range_km), + start_ideal_range_km: min(c.ideal_battery_range_km), + end_ideal_range_km: max(c.ideal_battery_range_km), + start_rated_range_km: min(c.rated_battery_range_km), + end_rated_range_km: max(c.rated_battery_range_km), start_battery_level: min(c.battery_level), end_battery_level: max(c.battery_level), outside_temp_avg: avg(c.outside_temp), @@ -298,17 +300,11 @@ defmodule TeslaMate.Log do |> Repo.one() |> Map.put(:end_date, Keyword.get_lazy(opts, :date, &DateTime.utc_now/0)) - stats = Map.put(stats, :calculated_max_range, max_range(stats)) - charging_process |> ChargingProcess.changeset(stats) |> Repo.update() end - defp max_range(%{end_range_km: nil}), do: nil - defp max_range(%{end_battery_level: nil}), do: nil - defp max_range(%{end_range_km: range, end_battery_level: lvl}), do: round(range / lvl * 100) - alias TeslaMate.Log.Update def start_update(car_id) do diff --git a/lib/teslamate/log/charge.ex b/lib/teslamate/log/charge.ex index 2cfaa9bd..36491be7 100644 --- a/lib/teslamate/log/charge.ex +++ b/lib/teslamate/log/charge.ex @@ -21,6 +21,7 @@ defmodule TeslaMate.Log.Charge do field :fast_charger_brand, :string field :fast_charger_type, :string field :ideal_battery_range_km, :float + field :rated_battery_range_km, :float field :not_enough_power_to_heat, :boolean field :outside_temp, :float @@ -47,6 +48,7 @@ defmodule TeslaMate.Log.Charge do :fast_charger_brand, :fast_charger_type, :ideal_battery_range_km, + :rated_battery_range_km, :not_enough_power_to_heat, :outside_temp ]) diff --git a/lib/teslamate/log/charging_process.ex b/lib/teslamate/log/charging_process.ex index 1ee2d67a..6be97ab3 100644 --- a/lib/teslamate/log/charging_process.ex +++ b/lib/teslamate/log/charging_process.ex @@ -9,11 +9,12 @@ defmodule TeslaMate.Log.ChargingProcess do field :start_date, :utc_datetime field :end_date, :utc_datetime field :charge_energy_added, :float - field :start_range_km, :float - field :end_range_km, :float + field :start_ideal_range_km, :float + field :end_ideal_range_km, :float + field :start_rated_range_km, :float + field :end_rated_range_km, :float field :start_battery_level, :integer field :end_battery_level, :integer - field :calculated_max_range, :integer field :duration_min, :integer field :outside_temp_avg, :float @@ -31,11 +32,12 @@ defmodule TeslaMate.Log.ChargingProcess do :start_date, :end_date, :charge_energy_added, - :start_range_km, - :end_range_km, + :start_ideal_range_km, + :end_ideal_range_km, + :start_rated_range_km, + :end_rated_range_km, :start_battery_level, :end_battery_level, - :calculated_max_range, :duration_min, :outside_temp_avg ]) diff --git a/lib/teslamate/log/position.ex b/lib/teslamate/log/position.ex index 09077020..5cafa444 100644 --- a/lib/teslamate/log/position.ex +++ b/lib/teslamate/log/position.ex @@ -15,7 +15,7 @@ defmodule TeslaMate.Log.Position do field :odometer, :float field :ideal_battery_range_km, :float field :est_battery_range_km, :float - field :battery_range_km, :float + field :rated_battery_range_km, :float field :battery_level, :integer field :battery_heater, :boolean field :battery_heater_on, :boolean @@ -47,7 +47,7 @@ defmodule TeslaMate.Log.Position do :odometer, :ideal_battery_range_km, :est_battery_range_km, - :battery_range_km, + :rated_battery_range_km, :battery_level, :battery_heater_no_power, :battery_heater_on, diff --git a/lib/teslamate/vehicles/vehicle/summary.ex b/lib/teslamate/vehicles/vehicle/summary.ex index 616cc025..17306fca 100644 --- a/lib/teslamate/vehicles/vehicle/summary.ex +++ b/lib/teslamate/vehicles/vehicle/summary.ex @@ -11,7 +11,7 @@ defmodule TeslaMate.Vehicles.Vehicle.Summary do :battery_level, :ideal_battery_range_km, :est_battery_range_km, - :battery_range_km, + :rated_battery_range_km, :charge_energy_added, :speed, :outside_temp, @@ -47,7 +47,8 @@ defmodule TeslaMate.Vehicles.Vehicle.Summary do get_in_struct(vehicle, [:charge_state, :ideal_battery_range]) |> miles_to_km(1), est_battery_range_km: get_in_struct(vehicle, [:charge_state, :est_battery_range]) |> miles_to_km(1), - battery_range_km: get_in_struct(vehicle, [:charge_state, :battery_range]) |> miles_to_km(1), + rated_battery_range_km: + get_in_struct(vehicle, [:charge_state, :battery_range]) |> miles_to_km(1), battery_level: get_in_struct(vehicle, [:charge_state, :battery_level]), charge_energy_added: get_in_struct(vehicle, [:charge_state, :charge_energy_added]), charger_power: get_in_struct(vehicle, [:charge_state, :charger_power]), diff --git a/lib/teslamate/vehicles/vehicle/vehicle.ex b/lib/teslamate/vehicles/vehicle/vehicle.ex index 02314f76..5983c421 100644 --- a/lib/teslamate/vehicles/vehicle/vehicle.ex +++ b/lib/teslamate/vehicles/vehicle/vehicle.ex @@ -95,7 +95,7 @@ defmodule TeslaMate.Vehicles.Vehicle do charge = %Charge{ ideal_battery_range: position.ideal_battery_range_km |> Convert.km_to_miles(1), est_battery_range: position.est_battery_range_km |> Convert.km_to_miles(1), - battery_range: position.battery_range_km |> Convert.km_to_miles(1), + battery_range: position.rated_battery_range_km |> Convert.km_to_miles(1), battery_level: position.battery_level } @@ -635,7 +635,7 @@ defmodule TeslaMate.Vehicles.Vehicle do odometer: Convert.miles_to_km(vehicle.vehicle_state.odometer, 6), ideal_battery_range_km: Convert.miles_to_km(vehicle.charge_state.ideal_battery_range, 1), est_battery_range_km: Convert.miles_to_km(vehicle.charge_state.est_battery_range, 1), - battery_range_km: Convert.miles_to_km(vehicle.charge_state.battery_range, 1), + rated_battery_range_km: Convert.miles_to_km(vehicle.charge_state.battery_range, 1), altitude: nil, fan_status: vehicle.climate_state.fan_status, is_climate_on: vehicle.climate_state.is_climate_on, diff --git a/lib/teslamate_web/templates/car/summary.html.leex b/lib/teslamate_web/templates/car/summary.html.leex index 362afd97..c8310640 100644 --- a/lib/teslamate_web/templates/car/summary.html.leex +++ b/lib/teslamate_web/templates/car/summary.html.leex @@ -55,14 +55,14 @@ <% end %> - <%= if not is_nil(@summary.battery_range_km) and @summary.battery_range_km != @summary.ideal_battery_range_km do %> + <%= if not is_nil(@summary.rated_battery_range_km) and @summary.rated_battery_range_km != @summary.ideal_battery_range_km do %> <%= gettext "Range (rated)" %> <%= if @settings.unit_of_length == :mi do %> - <%= Float.round(@summary.battery_range_km / 1.60934, 1)%> mi + <%= Float.round(@summary.rated_battery_range_km / 1.60934, 1)%> mi <% else %> - <%= @summary.battery_range_km %> km + <%= @summary.rated_battery_range_km %> km <% end %> diff --git a/priv/repo/migrations/20190913175011_add_rated_range_to_drives.exs b/priv/repo/migrations/20190913175011_add_rated_range_to_drives.exs index 2f755d1f..f95af1d9 100644 --- a/priv/repo/migrations/20190913175011_add_rated_range_to_drives.exs +++ b/priv/repo/migrations/20190913175011_add_rated_range_to_drives.exs @@ -2,6 +2,8 @@ defmodule TeslaMate.Repo.Migrations.AddRatedRangeToDrives do use Ecto.Migration def change do + rename(table(:positions), :battery_range_km, to: :rated_battery_range_km) + rename(table(:drives), :start_range_km, to: :start_ideal_range_km) rename(table(:drives), :end_range_km, to: :end_ideal_range_km) @@ -10,5 +12,18 @@ defmodule TeslaMate.Repo.Migrations.AddRatedRangeToDrives do add(:end_rated_range_km, :float) remove(:efficiency, :float) end + + alter table(:charges) do + add(:rated_battery_range_km, :float) + end + + rename(table(:charging_processes), :start_range_km, to: :start_ideal_range_km) + rename(table(:charging_processes), :end_range_km, to: :end_ideal_range_km) + + alter table(:charging_processes) do + add(:start_rated_range_km, :float) + add(:end_rated_range_km, :float) + remove(:calculated_max_range, :float) + end end end diff --git a/priv/repo/migrations/20190913175543_set_start_and_end_rated_range_km.exs b/priv/repo/migrations/20190913175543_set_start_and_end_rated_range_km.exs index dda499ab..a67ad452 100644 --- a/priv/repo/migrations/20190913175543_set_start_and_end_rated_range_km.exs +++ b/priv/repo/migrations/20190913175543_set_start_and_end_rated_range_km.exs @@ -30,7 +30,7 @@ defmodule Position do schema "positions" do field :date, :utc_datetime field :ideal_battery_range_km, :float - field :battery_range_km, :float + field :rated_battery_range_km, :float belongs_to(:drive, Drive) end @@ -38,7 +38,7 @@ defmodule Position do @doc false def changeset(position, attrs) do position - |> cast(attrs, [:date, :ideal_battery_range_km, :battery_range_km]) + |> cast(attrs, [:date, :ideal_battery_range_km, :rated_battery_range_km]) |> validate_required([:date]) |> foreign_key_constraint(:drive_id) end @@ -56,7 +56,7 @@ defmodule TeslaMate.Repo.Migrations.SetStartAndEndRatedRangeKm do query = Position |> select([p], %{ - rated_battery_range_km: p.battery_range_km, + rated_battery_range_km: p.rated_battery_range_km, first_row: row_number() |> over(order_by: [asc: p.date]), last_row: row_number() |> over(order_by: [desc: p.date]) }) diff --git a/test/teslamate/log/log_charging_test.exs b/test/teslamate/log/log_charging_test.exs index a34d3d62..a8d7264d 100644 --- a/test/teslamate/log/log_charging_test.exs +++ b/test/teslamate/log/log_charging_test.exs @@ -143,6 +143,7 @@ defmodule TeslaMate.LogChargingTest do charger_power: 4, charger_voltage: 234, ideal_battery_range_km: 266.6, + rated_battery_range_km: 206.6, outside_temp: 16 }, %{ @@ -155,6 +156,7 @@ defmodule TeslaMate.LogChargingTest do charger_power: 4, charger_voltage: 234, ideal_battery_range_km: 267.3, + rated_battery_range_km: 207.6, outside_temp: 15.5 }, %{ @@ -167,6 +169,7 @@ defmodule TeslaMate.LogChargingTest do charger_power: 4, charger_voltage: 234, ideal_battery_range_km: 268.6, + rated_battery_range_km: 208.6, outside_temp: 15 }, %{ @@ -179,6 +182,7 @@ defmodule TeslaMate.LogChargingTest do charger_power: 4, charger_voltage: 234, ideal_battery_range_km: 268.6, + rated_battery_range_km: 208.6, outside_temp: 14.5 } ] @@ -192,13 +196,14 @@ defmodule TeslaMate.LogChargingTest do assert %DateTime{} = cproc.start_date assert %DateTime{} = cproc.end_date - assert cproc.calculated_max_range == 497 assert cproc.charge_energy_added == 0.31 assert cproc.duration_min == 4 assert cproc.end_battery_level == 54 assert cproc.start_battery_level == 50 - assert cproc.start_range_km == 266.6 - assert cproc.end_range_km == 268.6 + assert cproc.start_ideal_range_km == 266.6 + assert cproc.end_ideal_range_km == 268.6 + assert cproc.start_rated_range_km == 206.6 + assert cproc.end_rated_range_km == 208.6 assert cproc.outside_temp_avg == 15.25 end @@ -241,6 +246,7 @@ defmodule TeslaMate.LogChargingTest do charger_power: 4, charger_voltage: 234, ideal_battery_range_km: 266.6, + rated_battery_range_km: 206.6, outside_temp: 16 }, %{ @@ -253,6 +259,7 @@ defmodule TeslaMate.LogChargingTest do charger_power: 4, charger_voltage: 234, ideal_battery_range_km: 268.6, + rated_battery_range_km: 208.6, outside_temp: 14.5 } ] @@ -266,13 +273,14 @@ defmodule TeslaMate.LogChargingTest do assert %DateTime{} = start_date = cproc.start_date assert %DateTime{} = cproc.end_date - assert cproc.calculated_max_range == 497 assert cproc.charge_energy_added == 0.31 assert cproc.duration_min == 4 assert cproc.end_battery_level == 54 assert cproc.start_battery_level == 50 - assert cproc.start_range_km == 266.6 - assert cproc.end_range_km == 268.6 + assert cproc.start_ideal_range_km == 266.6 + assert cproc.end_ideal_range_km == 268.6 + assert cproc.start_rated_range_km == 206.6 + assert cproc.end_rated_range_km == 208.6 assert cproc.outside_temp_avg == 15.25 # RESUME @@ -281,15 +289,15 @@ defmodule TeslaMate.LogChargingTest do assert ^start_date = cproc.start_date assert cproc.start_battery_level == 50 - assert cproc.start_range_km == 266.6 + assert cproc.start_ideal_range_km == 266.6 assert cproc.outside_temp_avg == 15.25 assert cproc.end_date == nil - assert cproc.calculated_max_range == nil assert cproc.charge_energy_added == nil assert cproc.duration_min == nil assert cproc.end_battery_level == nil - assert cproc.end_range_km == nil + assert cproc.end_ideal_range_km == nil + assert cproc.end_rated_range_km == nil charges = [ %{ @@ -302,6 +310,7 @@ defmodule TeslaMate.LogChargingTest do charger_power: 4, charger_voltage: 234, ideal_battery_range_km: 278.6, + rated_battery_range_km: 218.6, outside_temp: 15.01 } ] @@ -315,13 +324,14 @@ defmodule TeslaMate.LogChargingTest do assert ^start_date = cproc.start_date assert %DateTime{} = cproc.end_date - assert cproc.calculated_max_range == 507 assert cproc.charge_energy_added == 0.73 assert cproc.duration_min == 14 assert cproc.end_battery_level == 55 assert cproc.start_battery_level == 50 - assert cproc.start_range_km == 266.6 - assert cproc.end_range_km == 278.6 + assert cproc.start_ideal_range_km == 266.6 + assert cproc.end_ideal_range_km == 278.6 + assert cproc.start_rated_range_km == 206.6 + assert cproc.end_rated_range_km == 218.6 assert cproc.outside_temp_avg == 15.17 end end diff --git a/test/teslamate/log/log_drive_test.exs b/test/teslamate/log/log_drive_test.exs index 1aeb8a3b..d185e2fc 100644 --- a/test/teslamate/log/log_drive_test.exs +++ b/test/teslamate/log/log_drive_test.exs @@ -66,7 +66,7 @@ defmodule TeslaMate.LogDriveTest do power: 15, odometer: 284.85156, ideal_battery_range_km: 338.8, - battery_range_km: 308.8, + rated_battery_range_km: 308.8, battery_level: 68, outside_temp: 19.2, inside_temp: 21.0 @@ -79,7 +79,7 @@ defmodule TeslaMate.LogDriveTest do power: -4, odometer: 285.90556, ideal_battery_range_km: 337.8, - battery_range_km: 307.8, + rated_battery_range_km: 307.8, battery_level: 68, outside_temp: 19.0, inside_temp: 21.1 @@ -92,7 +92,7 @@ defmodule TeslaMate.LogDriveTest do power: -7, odometer: 286.969561, ideal_battery_range_km: 336.8, - battery_range_km: 306.8, + rated_battery_range_km: 306.8, battery_level: 68, outside_temp: 21.0, inside_temp: 21.2 @@ -105,7 +105,7 @@ defmodule TeslaMate.LogDriveTest do power: 1, odometer: 287.00556, ideal_battery_range_km: 335.8, - battery_range_km: 305.8, + rated_battery_range_km: 305.8, battery_level: 68, outside_temp: 18, inside_temp: 20.9 @@ -118,7 +118,7 @@ defmodule TeslaMate.LogDriveTest do power: 36, odometer: 288.045561, ideal_battery_range_km: 334.8, - battery_range_km: 304.8, + rated_battery_range_km: 304.8, battery_level: 68, outside_temp: 18.0, inside_temp: 21.0 diff --git a/test/teslamate/mqtt/pubsub/vehicle_subscriber_test.exs b/test/teslamate/mqtt/pubsub/vehicle_subscriber_test.exs index a6223513..e8f64120 100644 --- a/test/teslamate/mqtt/pubsub/vehicle_subscriber_test.exs +++ b/test/teslamate/mqtt/pubsub/vehicle_subscriber_test.exs @@ -34,7 +34,7 @@ defmodule TeslaMate.Mqtt.PubSub.VehicleSubscriberTest do battery_level: 60.0, ideal_battery_range_km: 230.5, est_battery_range_km: 220.0, - battery_range_km: 230.5, + rated_battery_range_km: 230.5, charge_energy_added: 25, speed: 40, outside_temp: 15, @@ -86,7 +86,7 @@ defmodule TeslaMate.Mqtt.PubSub.VehicleSubscriberTest do {:publish, "teslamate/cars/0/battery_level", "60.0", [retain: true, qos: 1]}} assert_receive {MqttPublisherMock, - {:publish, "teslamate/cars/0/battery_range_km", "230.5", + {:publish, "teslamate/cars/0/rated_battery_range_km", "230.5", [retain: true, qos: 1]}} assert_receive {MqttPublisherMock, diff --git a/test/teslamate_web/controllers/car_controller_test.exs b/test/teslamate_web/controllers/car_controller_test.exs index 2fea1edb..14fba70e 100644 --- a/test/teslamate_web/controllers/car_controller_test.exs +++ b/test/teslamate_web/controllers/car_controller_test.exs @@ -36,7 +36,7 @@ defmodule TeslaMateWeb.CarControllerTest do latitude: 0, ideal_battery_range_km: 380.1, est_battery_range_km: 401.5, - battery_range_km: 175.1, + rated_battery_range_km: 175.1, battery_level: 80, outside_temp: 20.1, inside_temp: 21.0