gitextract_eqx17o02/ ├── .credo.exs ├── .dialyzer_ignore.exs ├── .dockerignore ├── .envrc ├── .formatter.exs ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ └── config.yml │ ├── actions/ │ │ ├── build/ │ │ │ └── action.yml │ │ ├── grafana/ │ │ │ └── action.yml │ │ ├── merge/ │ │ │ └── action.yml │ │ └── setup-elixir-and-cache-deps/ │ │ └── action.yml │ ├── dependabot.yml │ └── workflows/ │ ├── buildx.yml │ ├── check_if_pr_from_outside_repo.yml │ ├── check_paths.yml │ ├── cleanup_caches.yml │ ├── cleanup_largest_caches.yml │ ├── devops.yml │ ├── elixir_dep_verification_and_static_analysis.yml │ ├── elixir_test.yml │ ├── ensure_linting.yml │ ├── ghcr_build.yml │ ├── ghcr_purge.yml │ ├── spell_check.yml │ ├── stale.yml │ └── update-flake-lock.yml ├── .gitignore ├── .markdownlint.yaml ├── .node-version ├── .typos.toml ├── CHANGELOG.md ├── CONTRIBUTING ├── Dockerfile ├── LICENSE ├── Makefile ├── README.md ├── SECURITY.md ├── TRADEMARK.md ├── VERSION ├── assets/ │ ├── css/ │ │ ├── app.scss │ │ ├── themes/ │ │ │ ├── dark.scss │ │ │ └── light.scss │ │ └── vendor/ │ │ └── modal-fx.scss │ ├── js/ │ │ ├── app.js │ │ ├── hooks.js │ │ ├── main.js │ │ └── socket.js │ ├── package.json │ └── scripts/ │ └── build.js ├── config/ │ ├── config.exs │ ├── dev.exs │ ├── prod.exs │ ├── runtime.exs │ └── test.exs ├── coveralls.json ├── entrypoint.sh ├── flake.nix ├── grafana/ │ ├── Dockerfile │ ├── dashboards/ │ │ ├── battery-health.json │ │ ├── charge-level.json │ │ ├── charges.json │ │ ├── charging-stats.json │ │ ├── database-info.json │ │ ├── drive-stats.json │ │ ├── drives.json │ │ ├── efficiency.json │ │ ├── internal/ │ │ │ ├── charge-details.json │ │ │ ├── drive-details.json │ │ │ └── home.json │ │ ├── locations.json │ │ ├── mileage.json │ │ ├── overview.json │ │ ├── projected-range.json │ │ ├── reports/ │ │ │ └── dutch-tax.json │ │ ├── states.json │ │ ├── statistics.json │ │ ├── timeline.json │ │ ├── trip.json │ │ ├── updates.json │ │ ├── vampire-drain.json │ │ └── visited.json │ ├── dashboards.sh │ ├── dashboards.yml │ └── datasource.yml ├── lib/ │ ├── tesla_api/ │ │ ├── auth/ │ │ │ └── refresh.ex │ │ ├── auth.ex │ │ ├── error.ex │ │ ├── middleware/ │ │ │ ├── follow_redirects.ex │ │ │ └── token_auth.ex │ │ ├── stream/ │ │ │ └── data.ex │ │ ├── stream.ex │ │ ├── vehicle/ │ │ │ └── state.ex │ │ └── vehicle.ex │ ├── tesla_api.ex │ ├── teslamate/ │ │ ├── api.ex │ │ ├── application.ex │ │ ├── auth/ │ │ │ └── tokens.ex │ │ ├── auth.ex │ │ ├── convert.ex │ │ ├── custom_expressions.ex │ │ ├── database_check.ex │ │ ├── dependency.ex │ │ ├── http.ex │ │ ├── import/ │ │ │ ├── csv.ex │ │ │ ├── fake_api.ex │ │ │ └── line_parser.ex │ │ ├── import.ex │ │ ├── locations/ │ │ │ ├── address.ex │ │ │ ├── geo_fence.ex │ │ │ └── geocoder.ex │ │ ├── locations.ex │ │ ├── log/ │ │ │ ├── car.ex │ │ │ ├── charge.ex │ │ │ ├── charging_process.ex │ │ │ ├── drive.ex │ │ │ ├── position.ex │ │ │ ├── state.ex │ │ │ └── update.ex │ │ ├── log.ex │ │ ├── mqtt/ │ │ │ ├── handler.ex │ │ │ ├── publisher.ex │ │ │ ├── pubsub/ │ │ │ │ └── vehicle_subscriber.ex │ │ │ └── pubsub.ex │ │ ├── mqtt.ex │ │ ├── release.ex │ │ ├── repair.ex │ │ ├── repo.ex │ │ ├── settings/ │ │ │ ├── car_settings.ex │ │ │ └── global_settings.ex │ │ ├── settings.ex │ │ ├── terrain.ex │ │ ├── updater.ex │ │ ├── vault.ex │ │ ├── vehicles/ │ │ │ ├── vehicle/ │ │ │ │ └── summary.ex │ │ │ └── vehicle.ex │ │ └── vehicles.ex │ ├── teslamate.ex │ ├── teslamate_web/ │ │ ├── cldr.ex │ │ ├── controllers/ │ │ │ ├── car_controller.ex │ │ │ ├── drive_controller.ex │ │ │ └── fallback_controller.ex │ │ ├── endpoint.ex │ │ ├── gettext.ex │ │ ├── health_check.ex │ │ ├── live/ │ │ │ ├── car_live/ │ │ │ │ ├── index.ex │ │ │ │ ├── index.html.heex │ │ │ │ ├── summary.ex │ │ │ │ └── summary.html.heex │ │ │ ├── charge_live/ │ │ │ │ ├── cost.ex │ │ │ │ └── cost.html.heex │ │ │ ├── geofence_live/ │ │ │ │ ├── form.ex │ │ │ │ ├── form.html.heex │ │ │ │ ├── index.ex │ │ │ │ └── index.html.heex │ │ │ ├── import_live/ │ │ │ │ ├── index.ex │ │ │ │ └── index.html.heex │ │ │ ├── init_assigns.ex │ │ │ ├── settings_live/ │ │ │ │ ├── index.ex │ │ │ │ └── index.html.heex │ │ │ └── signin_live/ │ │ │ ├── index.ex │ │ │ └── index.html.heex │ │ ├── plugs/ │ │ │ └── put_session.ex │ │ ├── router.ex │ │ ├── templates/ │ │ │ ├── drive/ │ │ │ │ └── gpx.xml.eex │ │ │ └── layout/ │ │ │ ├── app.html.heex │ │ │ ├── live.html.heex │ │ │ ├── root.html.heex │ │ │ └── root.xml.eex │ │ └── views/ │ │ ├── car_view.ex │ │ ├── changeset_view.ex │ │ ├── drive_view.ex │ │ ├── error_helpers.ex │ │ ├── error_view.ex │ │ └── layout_view.ex │ └── teslamate_web.ex ├── mix.exs ├── nix/ │ ├── backup_and_restore.nix │ ├── flake-modules/ │ │ ├── checks.nix │ │ ├── devenv.nix │ │ ├── formatter.nix │ │ └── package.nix │ ├── maintenance.nix │ └── module.nix ├── priv/ │ ├── gettext/ │ │ ├── ca/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── da/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── de/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── default.pot │ │ ├── en/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── errors.pot │ │ ├── es/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── fi/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── fr/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── it/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── ja/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── ko/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── nb/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── nl/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── sv/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── th/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── tr/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── uk/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ ├── zh_Hans/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── default.po │ │ │ └── errors.po │ │ └── zh_Hant/ │ │ └── LC_MESSAGES/ │ │ ├── default.po │ │ └── errors.po │ ├── repo/ │ │ ├── migrations/ │ │ │ ├── .formatter.exs │ │ │ ├── 20190330150000_create_car.exs │ │ │ ├── 20190330160000_create_trips.exs │ │ │ ├── 20190330170000_create_positions.exs │ │ │ ├── 20190330180000_create_states.exs │ │ │ ├── 20190330190000_create_charging_processes.exs │ │ │ ├── 20190330200000_create_charges.exs │ │ │ ├── 20190408203117_create_updates.exs │ │ │ ├── 20190415103933_add_inside_temp.exs │ │ │ ├── 20190415115227_add_battery_heater_fields.exs │ │ │ ├── 20190415130006_create_addresses.exs │ │ │ ├── 20190415130705_add_addresses_to_trips.exs │ │ │ ├── 20190415192200_add_address_to_charging_process.exs │ │ │ ├── 20190416125429_add_indexes_on_dates.exs │ │ │ ├── 20190525125700_rename_soc_fields.exs │ │ │ ├── 20190717184003_add_fkey_indexes.exs │ │ │ ├── 20190729142656_add_conversion_functions.exs │ │ │ ├── 20190729181314_fix_trip_efficiency.exs │ │ │ ├── 20190730101523_create_tokens.exs │ │ │ ├── 20190731154452_create_settings.exs │ │ │ ├── 20190805092941_fix_incomplete_charging_processes.exs │ │ │ ├── 20190810105216_unit_of_length_and_temperature.exs │ │ │ ├── 20190810131321_persist_suspend_settings.exs │ │ │ ├── 20190810151901_create_geofences.exs │ │ │ ├── 20190812191616_rename_trips_to_drives.exs │ │ │ ├── 20190813184320_fix_incomplete_charging_processes_v2.exs │ │ │ ├── 20190814152810_increase_suspend_min.exs │ │ │ ├── 20190816165713_extend_car_table.exs │ │ │ ├── 20190816200723_add_est_battery_range_km.exs │ │ │ ├── 20190821143938_add_constraints.exs │ │ │ ├── 20190821155748_drop_consumption_columns.exs │ │ │ ├── 20190823173437_add_sleep_requirements.exs │ │ │ ├── 20190826142828_fix_incomplete_charging_processes_v3.exs │ │ │ ├── 20190828094708_add_battery_range.exs │ │ │ ├── 20190828104902_add_elevation.exs │ │ │ ├── 20190828122529_add_m_to_ft_conversion_helper.exs │ │ │ ├── 20190828150058_do_not_require_efficiency.exs │ │ │ ├── 20190903151524_add_unique_index_on_vins.exs │ │ │ ├── 20190913165850_add_range_enum.exs │ │ │ ├── 20190913175011_add_rated_range_to_drives.exs │ │ │ ├── 20190913175543_set_start_and_end_rated_range_km.exs │ │ │ ├── 20190925152807_create_geo_extensions.exs │ │ │ ├── 20190925161034_create_index_on_address_positions.exs │ │ │ ├── 20190925182253_add_geofence_id_to_addresses.exs │ │ │ ├── 20190928155641_add_base_url_setting.exs │ │ │ ├── 20191003130650_add_start_and_end_position_to_drives.exs │ │ │ ├── 20191003132415_add_position_ids_and_apply_geofences.exs │ │ │ ├── 20191007105010_add_new_fkey_indexes.exs │ │ │ ├── 20191008191431_fix_ll_to_earth.exs │ │ │ ├── 20191017003836_add_est_total_charge_energy.exs │ │ │ ├── 20191020130234_increase_datetime_precision.exs │ │ │ ├── 20191026144449_drop_cp_confidence_and_interval.exs │ │ │ ├── 20191026145925_phase_correction.exs │ │ │ ├── 20191026185642_calculate_charge_energy_used.exs │ │ │ ├── 20191117042320_add_cost_field_to_charges.exs │ │ │ ├── 20191117143038_add_grafana_url.exs │ │ │ ├── 20191117171307_car_settings.exs │ │ │ ├── 20191119162847_geofence_sleep.exs │ │ │ ├── 20191212215130_remove_phase_correction.exs │ │ │ ├── 20191212230527_recalc_energy_used.exs │ │ │ ├── 20200103073606_add_usable_battery_level.exs │ │ │ ├── 20200116190926_charges_add_usable_battery_level.exs │ │ │ ├── 20200120130125_add_language.exs │ │ │ ├── 20200120142602_replace_place_id_with_osmid.exs │ │ │ ├── 20200203120311_cascade_delete.exs │ │ │ ├── 20200203180529_location_based_charge_cost.exs │ │ │ ├── 20200212001245_location_based_charge_cost_increase_scale.exs │ │ │ ├── 20200216121330_use_rated_as_default_preferred_range.exs │ │ │ ├── 20200302100654_add_vehicle_config_attrbitues.exs │ │ │ ├── 20200306130218_update_cities.exs │ │ │ ├── 20200306133847_add_flat_fee.exs │ │ │ ├── 20200318164021_use_streaming_api.exs │ │ │ ├── 20200320140020_drop_power_avg.exs │ │ │ ├── 20200401170940_remove_sleep_mode_toggles.exs │ │ │ ├── 20200401171402_remove_sleep_mode_requirements.exs │ │ │ ├── 20200401171923_enable_streaming.exs │ │ │ ├── 20200410112005_database_efficiency_improvements.exs │ │ │ ├── 20200502140646_drop_unused_indexes.exs │ │ │ ├── 20200528163852_cost_by_minute.exs │ │ │ ├── 20200528173223_rename_unit_enums.exs │ │ │ ├── 20200528175158_optimize_conversion_helpers.exs │ │ │ ├── 20200709165119_change_sleep_requirements_default.exs │ │ │ ├── 20210130174838_use_variable_length_type_for_tokens.exs │ │ │ ├── 20210812173700_car_priorities.exs │ │ │ ├── 20210831153305_add_not_null_constraint_to_display_priority.exs │ │ │ ├── 20211022103654_add_not_null_constraint_to_start_date.exs │ │ │ ├── 20220123131732_encrypt_api_tokens.exs │ │ │ ├── 20220422132017_add_marketing_name_to_car.exs │ │ │ ├── 20220617170400_add_tire_pressures.exs │ │ │ ├── 20220718085412_add_unit_of_pressure_to_global_settings.exs │ │ │ ├── 20230417225712_composite_index_to_position.exs │ │ │ ├── 20240603152807_add_enabled_to_car_settings.exs │ │ │ ├── 20240627021414_add_lfp_battery_car_setting.exs │ │ │ ├── 20240915193446_composite_index_with_predicate_to_position.exs │ │ │ ├── 20240929084639_recreate_geo_extensions.exs │ │ │ ├── 20250407155134_upgrade_earthdistance.exs │ │ │ ├── 20250613133700_add_and_calculate_elevation_changes.exs │ │ │ ├── 20250924215353_create_private_schema.exs │ │ │ ├── 20251207212310_add_theme_mode_to_settings.exs │ │ │ └── 20251225150000_replace_positions_date_indexes.exs │ │ └── seeds.exs │ └── static/ │ ├── browserconfig.xml │ ├── robots.txt │ └── site.webmanifest ├── test/ │ ├── fixtures/ │ │ └── import/ │ │ ├── 01_complete/ │ │ │ ├── TeslaFi62016.csv │ │ │ └── TeslaFi72016.csv │ │ ├── 02_timezone/ │ │ │ └── TeslaFi92019.csv │ │ ├── 03_empty/ │ │ │ ├── TeslaFi52018.csv │ │ │ └── TeslaFi62018.csv │ │ ├── 04_error/ │ │ │ ├── TeslaFi110017.csv │ │ │ ├── TeslaFi112017.csv │ │ │ └── TeslaFi122017.csv │ │ ├── 05_dst/ │ │ │ └── TeslaFi102019.csv │ │ ├── 06_two_cars/ │ │ │ └── TeslaFi62020.csv │ │ └── 07_alternative_variant/ │ │ └── 112023.csv │ ├── support/ │ │ ├── conn_case.ex │ │ ├── data_case.ex │ │ ├── mocks/ │ │ │ ├── api.ex │ │ │ ├── auth.ex │ │ │ ├── geocoder.ex │ │ │ ├── locations.ex │ │ │ ├── log.ex │ │ │ ├── mqtt_publisher.ex │ │ │ ├── pubsub.ex │ │ │ ├── settings.ex │ │ │ ├── srtm.ex │ │ │ ├── terrain.ex │ │ │ ├── vehicle.ex │ │ │ └── vehicles.ex │ │ ├── test_helper.ex │ │ └── vehicle_case.ex │ ├── teslamate/ │ │ ├── api_test.exs │ │ ├── auth_test.exs │ │ ├── http_test.exs │ │ ├── import_test.exs │ │ ├── locations/ │ │ │ ├── addresses_test.exs │ │ │ ├── geocoder_test.exs │ │ │ └── geofences_test.exs │ │ ├── log/ │ │ │ ├── log_car_test.exs │ │ │ ├── log_charging_test.exs │ │ │ ├── log_drive_test.exs │ │ │ ├── log_state_test.exs │ │ │ └── log_update_test.exs │ │ ├── mqtt/ │ │ │ └── pubsub/ │ │ │ └── vehicle_subscriber_test.exs │ │ ├── settings_test.exs │ │ ├── terrain/ │ │ │ └── update_positions_test.exs │ │ ├── terrain_test.exs │ │ ├── updater_test.exs │ │ ├── vault_test.exs │ │ ├── vehicles/ │ │ │ ├── identification_test.exs │ │ │ ├── vehicle/ │ │ │ │ ├── charging_sync_test.exs │ │ │ │ ├── charging_test.exs │ │ │ │ ├── driving_test.exs │ │ │ │ ├── streaming_test.exs │ │ │ │ ├── suspend_logging_test.exs │ │ │ │ ├── suspend_test.exs │ │ │ │ └── updating_test.exs │ │ │ ├── vehicle_sync_test.exs │ │ │ └── vehicle_test.exs │ │ └── vehicles_test.exs │ ├── teslamate_web/ │ │ ├── controllers/ │ │ │ ├── car_controller_test.exs │ │ │ └── drive_controller_test.exs │ │ ├── live/ │ │ │ ├── car_index_live_test.exs │ │ │ ├── car_summary_live_test.exs │ │ │ ├── charge_cost_live_test.exs │ │ │ ├── geofence_live_test.exs │ │ │ ├── import_test.exs │ │ │ ├── settings_test.exs │ │ │ └── sign_in_test.exs │ │ └── views/ │ │ ├── error_view_test.exs │ │ ├── layout_view_test.exs │ │ └── page_view_test.exs │ └── test_helper.exs ├── treefmt.toml └── website/ ├── .gitignore ├── README.md ├── docs/ │ ├── advanced_guides/ │ │ ├── apache.md │ │ ├── traefik.md │ │ └── unix_domain_sockets.md │ ├── configuration/ │ │ ├── api.md │ │ └── environment_variables.md │ ├── development.mdx │ ├── faq.md │ ├── import/ │ │ ├── tesla_apiscraper.md │ │ └── teslafi.md │ ├── installation/ │ │ ├── docker.md │ │ ├── nixos.md │ │ └── unsupported/ │ │ ├── debian.md │ │ ├── freebsd.md │ │ └── unraid.md │ ├── integrations/ │ │ ├── Node-RED/ │ │ │ └── Teslamate-flows.json.example │ │ ├── Node-RED.md │ │ ├── home_assistant.md │ │ └── mqtt.md │ ├── maintenance/ │ │ ├── backup_restore.mdx │ │ ├── manually_fixing_data.mdx │ │ └── upgrading_postgres.md │ ├── projects.md │ ├── screenshots.mdx │ └── upgrading.mdx ├── docusaurus.config.js ├── package.json ├── sidebars.js └── src/ ├── css/ │ └── custom.css └── pages/ ├── index.js └── styles.module.css