Temporarily switch to fork of ecto_enum

This commit is contained in:
Adrian Kumpf
2019-10-28 13:52:26 +01:00
parent a94bb1cdf5
commit 5feb60230f
7 changed files with 30 additions and 52 deletions
+5 -5
View File
@@ -10,9 +10,9 @@ We finally have **documentation**! Many thanks to [@ngardiner](https://github.co
Previous versions of TeslaMate shipped with hard-coded efficiency values for the various Tesla models. These efficiency values are needed to calculate trip consumptions, because the Tesla API does not provide them directly.
The hard-coded efficiency values were _probably_ pretty accurate, but I could never ensure the correctness of all of them. In addition, the new Model S and X "Raven" could not be reliably identified because the Tesla API often returned wrong option codes for both.
The hard-coded efficiency values were _probably_ pretty accurate, but it was impossible to ensure the correctness of all of them. In addition, the new Model S and X "Raven" could not be reliably identified because the Tesla API returns wrong option codes for both.
This version eliminates the need to use hard-coded values and instead calculates them dynamically based on the recorded charging data. It takes **at least two** charging sessions to display the first estimate. Each charge will slightly improve the accuracy of the estimate, which is applied retroactively to all data.
This version eliminates the need to use hard-coded values and instead calculates them dynamically based on the recorded charging data. It takes **at least two** charges to display the first estimate. Each subsequent charge will continue to improve the accuracy of the estimate, which is applied retroactively to all data.
#### Charge energy used
@@ -20,7 +20,7 @@ In addition to the kWh added to the battery during the charge TeslaMate now calc
Consider this feature somewhat "experimental". Theoretically, however, it should be pretty accurate as long as the vehicle has a stable internet connection while charging (other _paid_ Tesla loggers use the same calculation method).
It has been seen that some firmware versions have a bug which causes the wrong number of phases to be reported when charging. As a workaround, a phase correction can therefore be activated for a geo-fence.
Currently, a firmware bug in some vehicles causes the wrong number of phases to be reported when charging. As a workaround, a phase correction can therefore be activated per geo-fence.
#### New MQTT Topics
@@ -33,9 +33,9 @@ It has been seen that some firmware versions have a bug which causes the wrong n
- Disable origin check by default to ease the installation of TeslaMate.
⚠️ If you have a publicly exposed TeslaMate instance, I recommend to re-enable the origin check by adding the environment variable `CHECK_ORIGIN=true` (this requires that the variable `VIRTUAL_HOST` is present).
⚠️ For publicly exposed TeslaMate instances it is advisable to re-enable the check by adding the environment variable `CHECK_ORIGIN=true`.
- Show icon indicators for various things (sentry mode, locked, windows open, pre-conditioning etc.)
- Show icon indicators for various things (sentry mode, vehicle locked, windows open, pre-conditioning etc.)
- Various UI Tweaks
- Show the precise duration of a drive in a tooltip
- Serve gzipped assets
+11 -21
View File
@@ -462,12 +462,7 @@ defmodule TeslaMate.Vehicles.Vehicle do
end
end
def handle_event(
:internal,
{:update, {:online, now}},
{:driving, {:offline, last}, drive},
data
) do
def handle_event(:internal, {:update, {:online, now}}, {:driving, {:offline, last}, drv}, data) do
offline_start = parse_timestamp(last.drive_state.timestamp)
offline_end = parse_timestamp(now.drive_state.timestamp)
@@ -480,7 +475,7 @@ defmodule TeslaMate.Vehicles.Vehicle do
cond do
has_gained_range? and offline_min >= 5 ->
unless is_nil(drive), do: timeout_drive(drive, data)
unless is_nil(drv), do: timeout_drive(drv, data)
{:ok, cproc} =
call(data.deps.log, :start_charging_process, [
@@ -504,42 +499,37 @@ defmodule TeslaMate.Vehicles.Vehicle do
{:next_event, :internal, {:update, {:online, now}}}}
not has_gained_range? and offline_min >= @drive_timout_min ->
unless is_nil(drive), do: timeout_drive(drive, data)
unless is_nil(drv), do: timeout_drive(drv, data)
{:next_state, :start, %Data{data | last_used: DateTime.utc_now()},
{:next_event, :internal, {:update, {:online, now}}}}
not is_nil(drive) ->
{:next_state, {:driving, :available, drive}, %Data{data | last_used: DateTime.utc_now()},
not is_nil(drv) ->
{:next_state, {:driving, :available, drv}, %Data{data | last_used: DateTime.utc_now()},
{:next_event, :internal, {:update, {:online, now}}}}
end
end
#### msg: :online
def handle_event(
:internal,
{:update, {:online, _} = e},
{:driving, {:unavailable, _}, drive},
d
) do
def handle_event(:internal, {:update, {:online, _} = e}, {:driving, {:unavailable, _}, drv}, d) do
Logger.info("Vehicle is back online", car_id: d.car.id)
{:next_state, {:driving, :available, drive}, %Data{d | last_used: DateTime.utc_now()},
{:next_state, {:driving, :available, drv}, %Data{d | last_used: DateTime.utc_now()},
{:next_event, :internal, {:update, e}}}
end
def handle_event(:internal, {:update, {:online, vehicle}}, {:driving, :available, drive}, data) do
def handle_event(:internal, {:update, {:online, vehicle}}, {:driving, :available, drv}, data) do
case get(vehicle, [:drive_state, :shift_state]) do
shift_state when shift_state in ["D", "R", "N"] ->
{:ok, _pos} = call(data.deps.log, :insert_position, [drive, create_position(vehicle)])
{:ok, _pos} = call(data.deps.log, :insert_position, [drv, create_position(vehicle)])
{:next_state, {:driving, :available, drive}, %Data{data | last_used: DateTime.utc_now()},
{:next_state, {:driving, :available, drv}, %Data{data | last_used: DateTime.utc_now()},
[notify_subscribers(), schedule_fetch(@driving_interval)]}
shift_state when is_nil(shift_state) or shift_state == "P" ->
{:ok, %Log.Drive{distance: km, duration_min: min}} =
call(data.deps.log, :close_drive, [drive])
call(data.deps.log, :close_drive, [drv])
Logger.info("Driving / Ended / #{round(km)} km – #{min} min", car_id: data.car.id)
+1 -1
View File
@@ -49,7 +49,7 @@ defmodule TeslaMate.MixProject do
# Custom
{:tesla_api, github: "adriankumpf/tesla_api", branch: "v10"},
{:gen_state_machine, "~> 2.0"},
{:ecto_enum, "~> 1.2"},
{:ecto_enum, github: "dnsbty/ecto_enum", ref: "a69a9dde72cf98497606f9603bd46e3924979145"},
{:phoenix_live_view, "~> 0.1"},
{:floki, ">= 0.0.0", only: :test},
{:tortoise, "~> 0.9"},
+1 -1
View File
@@ -7,7 +7,7 @@
"db_connection": {:hex, :db_connection, "2.1.1", "a51e8a2ee54ef2ae6ec41a668c85787ed40cb8944928c191280fe34c15b76ae5", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm"},
"decimal": {:hex, :decimal, "1.8.0", "ca462e0d885f09a1c5a342dbd7c1dcf27ea63548c65a65e67334f4b61803822e", [:mix], [], "hexpm"},
"ecto": {:hex, :ecto, "3.2.3", "51274df79862845b388733fddcf6f107d0c8c86e27abe7131fa98f8d30761bda", [:mix], [{:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"},
"ecto_enum": {:hex, :ecto_enum, "1.3.2", "659f7251b6a201a236db9dceef0f713319f095a23ad1d8718efd7a3d3ef3e21b", [:mix], [{:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm"},
"ecto_enum": {:git, "https://github.com/dnsbty/ecto_enum.git", "a69a9dde72cf98497606f9603bd46e3924979145", [ref: "a69a9dde72cf98497606f9603bd46e3924979145"]},
"ecto_sql": {:hex, :ecto_sql, "3.2.0", "751cea597e8deb616084894dd75cbabfdbe7255ff01e8c058ca13f0353a3921b", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.2.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.2.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"},
"excoveralls": {:hex, :excoveralls, "0.12.0", "50e17a1b116fdb7facc2fe127a94db246169f38d7627b391376a0bc418413ce1", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"},
"file_system": {:hex, :file_system, "0.2.7", "e6f7f155970975789f26e77b8b8d8ab084c59844d8ecfaf58cbda31c494d14aa", [:mix], [], "hexpm"},
+4 -8
View File
@@ -73,8 +73,7 @@ msgstr "Wächtermodus"
#, elixir-format
#: lib/teslamate_web/templates/geo_fence/edit.html.leex:3
#: lib/teslamate_web/templates/geo_fence/index.html.leex:3
#: lib/teslamate_web/templates/geo_fence/new.html.leex:3
#: lib/teslamate_web/templates/geo_fence/index.html.leex:3 lib/teslamate_web/templates/geo_fence/new.html.leex:3
#: lib/teslamate_web/templates/settings/index.html.leex:3
msgid "Home"
msgstr "Home"
@@ -147,8 +146,7 @@ msgstr "Geo-Fence \"%{name}\" erfolgreich aktualisiert"
#, elixir-format
#: lib/teslamate_web/templates/geo_fence/edit.html.leex:4
#: lib/teslamate_web/templates/geo_fence/index.html.leex:4
#: lib/teslamate_web/templates/geo_fence/new.html.leex:4
#: lib/teslamate_web/templates/geo_fence/index.html.leex:4 lib/teslamate_web/templates/geo_fence/new.html.leex:4
msgid "Geo-fences"
msgstr "Geo-Fences"
@@ -159,8 +157,7 @@ msgstr "Leerlaufzeit vor dem Einschlafversuch"
#, elixir-format
#: lib/teslamate_web/templates/geo_fence/form.html.leex:4
#: lib/teslamate_web/templates/geo_fence/form.html.leex:9
#: lib/teslamate_web/templates/geo_fence/index.html.leex:21
#: lib/teslamate_web/templates/geo_fence/form.html.leex:9 lib/teslamate_web/templates/geo_fence/index.html.leex:21
msgid "Name"
msgstr ""
@@ -198,8 +195,7 @@ msgstr "Dauer des Schlafversuchs"
#, elixir-format
#: lib/teslamate_web/templates/settings/index.html.leex:94
#: lib/teslamate_web/templates/settings/index.html.leex:94
#: lib/teslamate_web/templates/settings/index.html.leex:113
#: lib/teslamate_web/templates/settings/index.html.leex:94 lib/teslamate_web/templates/settings/index.html.leex:113
#: lib/teslamate_web/templates/settings/index.html.leex:113
msgid "min"
msgstr ""
+4 -8
View File
@@ -72,8 +72,7 @@ msgstr ""
#, elixir-format
#: lib/teslamate_web/templates/geo_fence/edit.html.leex:3
#: lib/teslamate_web/templates/geo_fence/index.html.leex:3
#: lib/teslamate_web/templates/geo_fence/new.html.leex:3
#: lib/teslamate_web/templates/geo_fence/index.html.leex:3 lib/teslamate_web/templates/geo_fence/new.html.leex:3
#: lib/teslamate_web/templates/settings/index.html.leex:3
msgid "Home"
msgstr ""
@@ -146,8 +145,7 @@ msgstr ""
#, elixir-format
#: lib/teslamate_web/templates/geo_fence/edit.html.leex:4
#: lib/teslamate_web/templates/geo_fence/index.html.leex:4
#: lib/teslamate_web/templates/geo_fence/new.html.leex:4
#: lib/teslamate_web/templates/geo_fence/index.html.leex:4 lib/teslamate_web/templates/geo_fence/new.html.leex:4
msgid "Geo-fences"
msgstr ""
@@ -158,8 +156,7 @@ msgstr ""
#, elixir-format
#: lib/teslamate_web/templates/geo_fence/form.html.leex:4
#: lib/teslamate_web/templates/geo_fence/form.html.leex:9
#: lib/teslamate_web/templates/geo_fence/index.html.leex:21
#: lib/teslamate_web/templates/geo_fence/form.html.leex:9 lib/teslamate_web/templates/geo_fence/index.html.leex:21
msgid "Name"
msgstr ""
@@ -197,8 +194,7 @@ msgstr ""
#, elixir-format
#: lib/teslamate_web/templates/settings/index.html.leex:94
#: lib/teslamate_web/templates/settings/index.html.leex:94
#: lib/teslamate_web/templates/settings/index.html.leex:113
#: lib/teslamate_web/templates/settings/index.html.leex:94 lib/teslamate_web/templates/settings/index.html.leex:113
#: lib/teslamate_web/templates/settings/index.html.leex:113
msgid "min"
msgstr ""
+4 -8
View File
@@ -73,8 +73,7 @@ msgstr ""
#, elixir-format
#: lib/teslamate_web/templates/geo_fence/edit.html.leex:3
#: lib/teslamate_web/templates/geo_fence/index.html.leex:3
#: lib/teslamate_web/templates/geo_fence/new.html.leex:3
#: lib/teslamate_web/templates/geo_fence/index.html.leex:3 lib/teslamate_web/templates/geo_fence/new.html.leex:3
#: lib/teslamate_web/templates/settings/index.html.leex:3
msgid "Home"
msgstr ""
@@ -147,8 +146,7 @@ msgstr ""
#, elixir-format
#: lib/teslamate_web/templates/geo_fence/edit.html.leex:4
#: lib/teslamate_web/templates/geo_fence/index.html.leex:4
#: lib/teslamate_web/templates/geo_fence/new.html.leex:4
#: lib/teslamate_web/templates/geo_fence/index.html.leex:4 lib/teslamate_web/templates/geo_fence/new.html.leex:4
msgid "Geo-fences"
msgstr ""
@@ -159,8 +157,7 @@ msgstr ""
#, elixir-format
#: lib/teslamate_web/templates/geo_fence/form.html.leex:4
#: lib/teslamate_web/templates/geo_fence/form.html.leex:9
#: lib/teslamate_web/templates/geo_fence/index.html.leex:21
#: lib/teslamate_web/templates/geo_fence/form.html.leex:9 lib/teslamate_web/templates/geo_fence/index.html.leex:21
msgid "Name"
msgstr ""
@@ -198,8 +195,7 @@ msgstr ""
#, elixir-format
#: lib/teslamate_web/templates/settings/index.html.leex:94
#: lib/teslamate_web/templates/settings/index.html.leex:94
#: lib/teslamate_web/templates/settings/index.html.leex:113
#: lib/teslamate_web/templates/settings/index.html.leex:94 lib/teslamate_web/templates/settings/index.html.leex:113
#: lib/teslamate_web/templates/settings/index.html.leex:113
msgid "min"
msgstr ""