Manual install - Debian (no support)
This document provides the necessary steps for installation of TeslaMate on a vanilla Debian or Ubuntu system. The recommended and most straightforward installation approach is through the use of Docker, however this walkthrough provides the necessary steps for manual installation in an aptitude (Debian/Ubuntu) environment.
Requirements
Click on the following items to view detailed installation steps.
Note that in very recent distributions, you might have the required versions already packaged. However, the contents or naming of the Debian/Ubuntu packages might slightly differ than the ones from upstream, so you might need to install extra packages or do other tweaks.
Postgres (v17.3+)
Elixir (v1.16+)
Grafana (v12.0.1+)
An MQTT Broker (e.g. Mosquitto)
Node.js (v20+)
Clone TeslaMate git repository
The following command will clone the source files for the TeslaMate project. This should be run in an appropriate directory within which you would like to install TeslaMate. You should also record this path and provide them to the startup scripts proposed at the end of this guide.
cd /usr/src
git clone https://github.com/teslamate-org/teslamate.git
cd teslamate
git checkout $(git describe --tags `git rev-list --tags --max-count=1`) # Checkout the latest stable version
Create PostgreSQL database
The following commands will create a database called teslamate on the PostgreSQL database server, and a user called teslamate. When creating the teslamate user, you will be prompted to enter a password for the user interactively. This password should be recorded and provided as an environment variable in the startup script at the end of this guide.
sudo -u postgres psql
postgres=# create database teslamate;
postgres=# create user teslamate with encrypted password 'your_secure_password_here';
postgres=# grant all privileges on database teslamate to teslamate;
postgres=# ALTER USER teslamate WITH SUPERUSER;
postgres=# \q
Note: The superuser privileges can be revoked after running the initial database migrations.
Compile Elixir Project
mix local.hex --force; mix local.rebar --force
mix deps.get --only prod
npm install --prefix ./assets && npm run deploy --prefix ./assets
MIX_ENV=prod mix do phx.digest, release --overwrite
Set your system locale
You may need to set your system locale. If you get an error when running the TeslaMate service which indicates that you don't have a UTF-8 capable system locale set, run the following commands to set the locale on your system:
sudo locale-gen en_US.UTF-8
sudo localectl set-locale LANG=en_US.UTF-8
Starting TeslaMate at boot time
- systemd
- screen
Create a systemd service at /etc/systemd/system/teslamate.service:
[Unit]
Description=TeslaMate
After=network.target
After=postgresql.service
[Service]
Type=simple
# User=username
# Group=groupname
Restart=on-failure
RestartSec=5
Environment="HOME=/usr/src/teslamate"
Environment="LANG=en_US.UTF-8"
Environment="LC_CTYPE=en_US.UTF-8"
Environment="TZ=Europe/Berlin"
Environment="PORT=4000"
Environment="ENCRYPTION_KEY=your_secure_encryption_key_here"
Environment="DATABASE_USER=teslamate"
Environment="DATABASE_PASS=#your secure password!
Environment="DATABASE_NAME=teslamate"
Environment="DATABASE_HOST=127.0.0.1"
Environment="MQTT_HOST=127.0.0.1"
WorkingDirectory=/usr/src/teslamate
ExecStartPre=/usr/src/teslamate/_build/prod/rel/teslamate/bin/teslamate eval "TeslaMate.Release.migrate"
ExecStart=/usr/src/teslamate/_build/prod/rel/teslamate/bin/teslamate start
ExecStop=/usr/src/teslamate/_build/prod/rel/teslamate/bin/teslamate stop
[Install]
WantedBy=multi-user.target
MQTT_HOSTshould be the IP address of your MQTT broker. If you do not have one installed, the MQTT functionality can be disabled withDISABLE_MQTT=true.TZshould be your local timezone. Work out your timezone name using the TZ database name in the linked Wikipedia page.
Start the service:
sudo systemctl start teslamate
And automatically get it to start on boot:
sudo systemctl enable teslamate
Create the following file: /usr/local/bin/teslamate-start.sh
You should at least substitute the following details:
MQTT_HOSTshould be the IP address of your MQTT broker. If you do not have one installed, the MQTT functionality can be disabled with 'DISABLE_MQTT=true'.TZshould be your local timezone. Work out your timezone name using the TZ database name in the linked Wikipedia page.TESLAMATEPATHshould be the path that you ran thegit clonewithin.
export ENCRYPTION_KEY="your_secure_encryption_key_here"
export DATABASE_USER="teslamate"
export DATABASE_PASS="your_secure_password_here"
export DATABASE_HOST="127.0.0.1"
export DATABASE_NAME="teslamate"
export MQTT_HOST="127.0.0.1"
export MQTT_USERNAME="teslamate"
export MQTT_PASSWORD="teslamate"
export MQTT_TLS="false"
export TZ="Europe/Berlin"
export TESLAMATEPATH=/usr/src/teslamate
$TESLAMATEPATH/_build/prod/rel/teslamate/bin/teslamate start
The following command needs to be run once during the installation process in order to create the database schema for the TeslaMate installation:
export ENCRYPTION_KEY="your_secure_encryption_key_here"
export DATABASE_USER="teslamate"
export DATABASE_PASS="your_secure_password_here"
export DATABASE_HOST="127.0.0.1"
export DATABASE_NAME="teslamate"
_build/prod/rel/teslamate/bin/teslamate eval "TeslaMate.Release.migrate"
Add the following to /etc/rc.local, to start a screen session at boot time and run the TeslaMate server within a screen session. This lets you interactively connect to the session if needed.
# Start TeslaMate
cd /usr/src/teslamate
screen -S teslamate -L -dm bash -c "cd /usr/src/teslamate; ./start.sh; exec sh"
Import Grafana Dashboards
-
Visit localhost:3000 and log in. The default credentials are:
admin:admin. -
Create a data source with the name "TeslaMate":
Type: PostgreSQL
Default: YES
Name: TeslaMate
Host: localhost
Database: teslamate
User: teslamate Password: your_secure_password_here
SSL-Mode: disable
Version: 10 -
Install
jq:sudo apt install jq -
Manually import the dashboard files or use the
dashboards.shscript. First create a "Service Account" calledTeslaMateunder Grafana's Administration > User and access menu. Then create an API token for this service account (in place of<mytoken>below) and run the script:$ env GRAFANA_API_TOKEN=<mytoken> ./grafana/dashboards.sh restore
URL: http://localhost:3000
GRAFANA_API_TOKEN: mytoken
DASHBOARDS_DIRECTORY: ./grafana/dashboards
GRAFANA_ORG_NAMESPACE: default
RESTORED locations.json into Grafana folder 'TeslaMate' ...
RESTORED drive-stats.json into Grafana folder 'TeslaMate' ...
...tipTo point to a different Grafana instance use the URL variable:
env URL=https://mygrafana.example.net GRAFANA_API_TOKEN=<mytoken> ./grafana/dashboards.sh restoretipIn case you use a Grafana installation that runs on a separate server (for example, an already existing Grafana install), set the
URLvariable to point to it (the default points tohttp://localhost:3000, use a full URL, including protocol, host and port):URL=<your-grafana-instance-url> ./grafana/dashboards.sh restore