Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add ability to enable and disable data collection for cars #3993

Merged
merged 6 commits into from
Jul 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/teslamate/import.ex
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,8 @@ defmodule TeslaMate.Import do
settings = %CarSettings{
suspend_min: 0,
suspend_after_idle_min: 99999,
use_streaming_api: false
use_streaming_api: false,
enabled: true
}

%Car{car | settings: settings}
Expand Down
12 changes: 11 additions & 1 deletion lib/teslamate/settings.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ defmodule TeslaMate.Settings do
alias TeslaMate.Repo

alias __MODULE__.{GlobalSettings, CarSettings}
alias TeslaMate.{Log, Locations}
alias TeslaMate.{Log, Locations, Vehicles}
alias TeslaMate.Log.Car
import Core.Dependency, only: [call: 2]

def get_global_settings! do
case Repo.all(GlobalSettings) do
Expand Down Expand Up @@ -46,6 +47,7 @@ defmodule TeslaMate.Settings do
def update_car_settings(%CarSettings{car: %Car{}} = pre, attrs) do
Repo.transaction(fn ->
with {:ok, post} <- pre |> CarSettings.changeset(attrs) |> Repo.update(),
:ok <- on_enabled_change(pre, post),
:ok <- broadcast(pre.car, post) do
post
else
Expand Down Expand Up @@ -84,6 +86,14 @@ defmodule TeslaMate.Settings do
Locations.refresh_addresses(lang)
end

def on_enabled_change(%CarSettings{enabled: preEnabled}, %CarSettings{enabled: postEnabled}) do
if preEnabled != postEnabled do
call(Vehicles, :restart)
end

:ok
end

defp broadcast(car, settings) do
Phoenix.PubSub.broadcast(TeslaMate.PubSub, topic(car), settings)
rescue
Expand Down
4 changes: 3 additions & 1 deletion lib/teslamate/settings/car_settings.ex
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ defmodule TeslaMate.Settings.CarSettings do
field :req_not_unlocked, :boolean, default: false
field :free_supercharging, :boolean, default: false
field :use_streaming_api, :boolean, default: true
field :enabled, :boolean, default: true

has_one :car, Car, foreign_key: :settings_id
end
Expand All @@ -19,7 +20,8 @@ defmodule TeslaMate.Settings.CarSettings do
:suspend_after_idle_min,
:req_not_unlocked,
:free_supercharging,
:use_streaming_api
:use_streaming_api,
:enabled
]

@doc false
Expand Down
1 change: 1 addition & 0 deletions lib/teslamate/vehicles.ex
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ defmodule TeslaMate.Vehicles do
|> Keyword.get_lazy(:vehicles, &list_vehicles!/0)
|> Enum.map(&{Keyword.get(opts, :vehicle, Vehicle), car: create_or_update!(&1)})
|> Enum.uniq_by(fn {_mod, car: %Car{id: id}} -> id end)
|> Enum.filter(fn {_mod, car: %Car{settings: settings}} -> settings.enabled end)

Supervisor.init(children,
strategy: :one_for_one,
Expand Down
19 changes: 19 additions & 0 deletions lib/teslamate_web/live/settings_live/index.html.heex
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,25 @@
phx-change="change"
as={:"car_settings_#{@car}"}
>
<div class="columns is-mobile is-centered">
<div class="column">
<h2 class="title is-4"><%= gettext("Data Collection") %></h2>
<div class="field is-horizontal center-vertically">
<div class="field-label is-normal is-paddingless">
<%= label(f, :enabled, gettext("Enabled"), class: "label") %>
</div>
<div class="field-body">
<div class="field">
<div class="control">
<%= checkbox(f, :enabled, class: "switch is-rounded is-success") %>
<%= label(f, :enabled, nil) %>
</div>
</div>
</div>
</div>
</div>
</div>

<div class="columns is-mobile is-centered">
<div class="column">
<h2 class="title is-4"><%= gettext("Sleep Mode") %></h2>
Expand Down
70 changes: 38 additions & 32 deletions priv/gettext/da/LC_MESSAGES/default.po
Original file line number Diff line number Diff line change
Expand Up @@ -112,17 +112,17 @@ msgstr "ved at falde i søvn"
msgid "unavailable"
msgstr "ikke tilgængelig"

#: lib/teslamate_web/live/settings_live/index.html.heex:216
#: lib/teslamate_web/live/settings_live/index.html.heex:235
#, elixir-autogen, elixir-format
msgid "Length"
msgstr "Afstand"

#: lib/teslamate_web/live/settings_live/index.html.heex:231
#: lib/teslamate_web/live/settings_live/index.html.heex:250
#, elixir-autogen, elixir-format
msgid "Temperature"
msgstr "Temperatur"

#: lib/teslamate_web/live/settings_live/index.html.heex:213
#: lib/teslamate_web/live/settings_live/index.html.heex:232
#, elixir-autogen, elixir-format
msgid "Units"
msgstr "Enheder"
Expand All @@ -147,7 +147,7 @@ msgstr "Geografisk afgrænsning \"%{name}\" oprettet"
msgid "Geo-Fences"
msgstr "Geografiske afgrænsninger"

#: lib/teslamate_web/live/settings_live/index.html.heex:55
#: lib/teslamate_web/live/settings_live/index.html.heex:74
#, elixir-autogen, elixir-format
msgid "Idle Time Before Trying to Sleep"
msgstr "Inaktiv tid før forsøg på at falde i søvn"
Expand Down Expand Up @@ -183,13 +183,13 @@ msgstr "Gem"
msgid "Saving..."
msgstr "Gemmer..."

#: lib/teslamate_web/live/settings_live/index.html.heex:34
#: lib/teslamate_web/live/settings_live/index.html.heex:53
#, elixir-autogen, elixir-format
msgid "Time to Try Sleeping"
msgstr "Tid indtil forsøg på at sove"

#: lib/teslamate_web/live/settings_live/index.html.heex:45
#: lib/teslamate_web/live/settings_live/index.html.heex:68
#: lib/teslamate_web/live/settings_live/index.html.heex:64
#: lib/teslamate_web/live/settings_live/index.html.heex:87
#, elixir-autogen, elixir-format
msgid "min"
msgstr "min"
Expand Down Expand Up @@ -246,12 +246,12 @@ msgstr "Rækkevidde (beregnet)"
msgid "for"
msgstr "i"

#: lib/teslamate_web/live/settings_live/index.html.heex:80
#: lib/teslamate_web/live/settings_live/index.html.heex:99
#, elixir-autogen, elixir-format
msgid "Requirements"
msgstr "Krav"

#: lib/teslamate_web/live/settings_live/index.html.heex:88
#: lib/teslamate_web/live/settings_live/index.html.heex:107
#, elixir-autogen, elixir-format
msgid "Vehicle must be locked"
msgstr "Køretøjet skal være låst"
Expand All @@ -266,22 +266,22 @@ msgstr "Rækkevidde (nominel)"
msgid "Charger Power"
msgstr "Opladers effekt"

#: lib/teslamate_web/live/settings_live/index.html.heex:152
#: lib/teslamate_web/live/settings_live/index.html.heex:171
#, elixir-autogen, elixir-format
msgid "Preferred Range"
msgstr "Ønsket rækkevidde"

#: lib/teslamate_web/live/settings_live/index.html.heex:148
#: lib/teslamate_web/live/settings_live/index.html.heex:167
#, elixir-autogen, elixir-format
msgid "Range"
msgstr "Rækkevidde"

#: lib/teslamate_web/live/settings_live/index.html.heex:160
#: lib/teslamate_web/live/settings_live/index.html.heex:179
#, elixir-autogen, elixir-format
msgid "ideal"
msgstr "ideel"

#: lib/teslamate_web/live/settings_live/index.html.heex:161
#: lib/teslamate_web/live/settings_live/index.html.heex:180
#, elixir-autogen, elixir-format
msgid "rated"
msgstr "nominel"
Expand All @@ -291,7 +291,7 @@ msgstr "nominel"
msgid "Range (ideal)"
msgstr "Rækkevidde (ideel)"

#: lib/teslamate_web/live/settings_live/index.html.heex:151
#: lib/teslamate_web/live/settings_live/index.html.heex:170
#, elixir-autogen, elixir-format
msgid "The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle."
msgstr "Bilens overslag på den tilbageværende rækkevidde er baseret på et fast energiforbrug i Wh/km. Wh/km faktoren er bestem af Tesla og er ikke landespecifik, hvorimod den beregnede rækkevidde er baseret på myndighedernes testregler i de forskellige markeder for køretøjet."
Expand Down Expand Up @@ -322,7 +322,7 @@ msgid "Outside Temperature"
msgstr "Udetemperatur"

#: lib/teslamate_web/live/car_live/summary.html.heex:399
#: lib/teslamate_web/live/settings_live/index.html.heex:311
#: lib/teslamate_web/live/settings_live/index.html.heex:330
#, elixir-autogen, elixir-format
msgid "Version"
msgstr "Version"
Expand All @@ -342,29 +342,30 @@ msgstr "Ulåst"
msgid "Remaining Time"
msgstr "Tid tilbage"

#: lib/teslamate_web/live/settings_live/index.html.heex:286
#: lib/teslamate_web/live/settings_live/index.html.heex:305
#: lib/teslamate_web/templates/layout/root.html.heex:81
#, elixir-autogen, elixir-format
msgid "Dashboards"
msgstr "Oversigter"

#: lib/teslamate_web/live/settings_live/index.html.heex:264
#: lib/teslamate_web/live/settings_live/index.html.heex:283
#, elixir-autogen, elixir-format
msgid "URLs"
msgstr "URL'er"

#: lib/teslamate_web/live/settings_live/index.html.heex:178
#: lib/teslamate_web/live/settings_live/index.html.heex:267
#: lib/teslamate_web/live/settings_live/index.html.heex:197
#: lib/teslamate_web/live/settings_live/index.html.heex:286
#, elixir-autogen, elixir-format
msgid "Web App"
msgstr "Webapp"

#: lib/teslamate_web/live/settings_live/index.html.heex:125
#: lib/teslamate_web/live/settings_live/index.html.heex:32
#: lib/teslamate_web/live/settings_live/index.html.heex:144
#, elixir-autogen, elixir-format
msgid "Enabled"
msgstr "Aktiveret"

#: lib/teslamate_web/live/settings_live/index.html.heex:29
#: lib/teslamate_web/live/settings_live/index.html.heex:48
#, elixir-autogen, elixir-format
msgid "Sleep Mode"
msgstr "Dvaletilstand"
Expand Down Expand Up @@ -421,12 +422,12 @@ msgstr "Gemt!"
msgid "Fetching vehicle data ..."
msgstr "Henter data for køretøjet ..."

#: lib/teslamate_web/live/settings_live/index.html.heex:193
#: lib/teslamate_web/live/settings_live/index.html.heex:212
#, elixir-autogen, elixir-format
msgid "Addresses"
msgstr "Adresser"

#: lib/teslamate_web/live/settings_live/index.html.heex:174
#: lib/teslamate_web/live/settings_live/index.html.heex:193
#, elixir-autogen, elixir-format
msgid "Language"
msgstr "Sprog"
Expand Down Expand Up @@ -465,17 +466,17 @@ msgstr "Tidszone"
msgid "Sign in"
msgstr "Log ind"

#: lib/teslamate_web/live/settings_live/index.html.heex:103
#: lib/teslamate_web/live/settings_live/index.html.heex:122
#, elixir-autogen, elixir-format
msgid "Charge cost"
msgstr "Opladningspris"

#: lib/teslamate_web/live/settings_live/index.html.heex:106
#: lib/teslamate_web/live/settings_live/index.html.heex:125
#, elixir-autogen, elixir-format
msgid "Free Supercharging"
msgstr "Gratis supercharging"

#: lib/teslamate_web/live/settings_live/index.html.heex:142
#: lib/teslamate_web/live/settings_live/index.html.heex:161
#, elixir-autogen, elixir-format
msgid "General Settings"
msgstr "Basale indstillinger"
Expand Down Expand Up @@ -528,22 +529,22 @@ msgstr "Fortsæt"
msgid "Mileage"
msgstr "Kilometertal"

#: lib/teslamate_web/live/settings_live/index.html.heex:122
#: lib/teslamate_web/live/settings_live/index.html.heex:141
#, elixir-autogen, elixir-format
msgid "Streaming API"
msgstr "Streaming API"

#: lib/teslamate_web/live/settings_live/index.html.heex:332
#: lib/teslamate_web/live/settings_live/index.html.heex:351
#, elixir-autogen, elixir-format
msgid "Documentation"
msgstr "Dokumentation"

#: lib/teslamate_web/live/settings_live/index.html.heex:322
#: lib/teslamate_web/live/settings_live/index.html.heex:341
#, elixir-autogen, elixir-format
msgid "GitHub"
msgstr "GitHub"

#: lib/teslamate_web/live/settings_live/index.html.heex:317
#: lib/teslamate_web/live/settings_live/index.html.heex:336
#: lib/teslamate_web/templates/layout/root.html.heex:168
#, elixir-autogen, elixir-format
msgid "Update available"
Expand All @@ -570,7 +571,7 @@ msgstr "Pr. minut"
msgid "Software Update available (%{version})"
msgstr "Softwareopdatering tilgængelig (%{version})"

#: lib/teslamate_web/live/settings_live/index.html.heex:350
#: lib/teslamate_web/live/settings_live/index.html.heex:369
#, elixir-autogen, elixir-format
msgid "Sign out"
msgstr "Log Ud"
Expand Down Expand Up @@ -630,7 +631,7 @@ msgstr ""
msgid "To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>."
msgstr ""

#: lib/teslamate_web/live/settings_live/index.html.heex:246
#: lib/teslamate_web/live/settings_live/index.html.heex:265
#, elixir-autogen, elixir-format
msgid "Tire Pressure"
msgstr ""
Expand Down Expand Up @@ -659,3 +660,8 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy
msgid "You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming."
msgstr ""

#: lib/teslamate_web/live/settings_live/index.html.heex:29
#, elixir-autogen, elixir-format
msgid "Data Collection"
msgstr ""
Loading
Loading