TeslaSolarCharger
TeslaSolarCharger is a service to set one or multiple Teslas' charging current using the datalogger TeslaMate.
Table of Contents
How to install
You can either install the software in a Docker container or download the binaries and deploy it on any server. In June 2024, Tesla implemented rate limits to their API, so there is a BLE (Bluetooth Low Energy, implemented since Bluetooth Version 4.0) capable device needed near the car. You can find details on how to set up BLE here.
Docker compose
The easiest way to use TeslaSolarCharger is with Docker.
Depending on your system, you have to install Docker first. To do this on a RaspberryPi (should be the same on standard Linux systems), you need to execute the following commands in your Terminal window:
- Install Docker
curl -sSL https://get.docker.com | sh
- Add permissions to the
pi
user. If you have another username, update the command accordinglysudo usermod -aG docker pi
- Reboot your Raspberry Pi
- Test the Docker installation
docker run hello-world
If any issues occur, try to identify them using this more detailed instruction.
If you are using a Windows host, install the Software from here. Windows 11 is highly recommended. Select Linux Containers in the installation process.
Setting up TeslaMate including TeslaSolarCharger
To set up TeslaSolarCharger, you must create a docker-compose.yml
(name is important!) file in a new directory. Note: During the setup, some additional data folders to persist data will be created in that folder, so it is recommended to use a new directory for your docker-compose.yml
.
docker-compose.yml content
The needed content of your docker-compose.yml
depends on your inverter. By default, TeslaSolarCharger can consume JSON/XML REST APIs. To get the software running on SMA or SolarEdge, you can use specific plugins which create the needed JSON API. You can use the software with any ModbusTCP-capable inverter also.
Content without using a plugin
Below you can see the content for your docker-compose.yml
if you are not using any plugin. Note: I recommend changing as few things as possible on this file as this will increase the effort to set everything up but feel free to change the database password, encryption key, and Timezone. Important: If you change the password or the encryption key, you need to use the same password and encryption key at all points in your docker-compose.yml
version: '3.3'
services:
teslamate:
image: teslamate/teslamate:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=secret ##You can change your password here
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
- ENCRYPTION_KEY=supersecret ##You can change your encryption key here
- TZ=Europe/Berlin ##You can change your Timezone here
ports:
- 4000:4000
volumes:
- ./import:/opt/app/import
cap_drop:
- all
database:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=teslamate
- POSTGRES_PASSWORD=secret ##You can change your password here
- POSTGRES_DB=teslamate
volumes:
- teslamate-db:/var/lib/postgresql/data
grafana:
image: teslamate/grafana:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=secret ##You can change your password here
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
ports:
- 3100:3000
volumes:
- teslamate-grafana-data:/var/lib/grafana
mosquitto:
image: eclipse-mosquitto:2
restart: always
command: mosquitto -c /mosquitto-no-auth.conf
#ports:
# - 1883:1883
volumes:
- mosquitto-conf:/mosquitto/config
- mosquitto-data:/mosquitto/data
teslamateapi:
image: tobiasehlert/teslamateapi:latest
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
restart: always
depends_on:
- database
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=secret ##You can change your password here
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
- TZ=Europe/Berlin ##You can change your Timezone here
- ENABLE_COMMANDS=true
- COMMANDS_ALL=true
- API_TOKEN_DISABLE=true
- ENCRYPTION_KEY=supersecret ##You can change your encryption key here
#ports:
# - 8080:8080
teslasolarcharger:
image: pkuehnel/teslasolarcharger:latest
container_name: teslasolarcharger
logging:
driver: "json-file"
options:
max-file: "10"
max-size: "100m"
restart: always
depends_on:
- teslamateapi
environment:
# - Serilog__MinimumLevel__Default=Verbose #uncomment this line and recreate container with docker compose up -d for more detailed logs
- TZ=Europe/Berlin ##You can change your Timezone here
ports:
- 7190:80
volumes:
- teslasolarcharger-configs:/app/configs
volumes:
teslamate-db:
teslamate-grafana-data:
mosquitto-conf:
mosquitto-data:
teslasolarcharger-configs:
Content using SMA plugin
The SMA plugin is used to access your EnergyMeter (or Sunny Home Manager 2.0) values.
To use the plugin, add these lines to the bottom of your docker-compose.yml
.
smaplugin:
image: pkuehnel/teslasolarchargersmaplugin:latest
container_name: teslasolarcharger_smaplugin
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
restart: always
network_mode: host
environment:
- ASPNETCORE_URLS=http://+:7192
You can also copy the complete content from here:
Complete file using SMA plugin
version: '3.3'
services:
teslamate:
image: teslamate/teslamate:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=secret ##You can change your password here
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
- ENCRYPTION_KEY=supersecret ##You can change your encryption key here
- TZ=Europe/Berlin ##You can change your Timezone here
ports:
- 4000:4000
volumes:
- ./import:/opt/app/import
cap_drop:
- all
database:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=teslamate
- POSTGRES_PASSWORD=secret ##You can change your password here
- POSTGRES_DB=teslamate
volumes:
- teslamate-db:/var/lib/postgresql/data
grafana:
image: teslamate/grafana:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=secret ##You can change your password here
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
ports:
- 3100:3000
volumes:
- teslamate-grafana-data:/var/lib/grafana
mosquitto:
image: eclipse-mosquitto:2
restart: always
command: mosquitto -c /mosquitto-no-auth.conf
#ports:
# - 1883:1883
volumes:
- mosquitto-conf:/mosquitto/config
- mosquitto-data:/mosquitto/data
teslamateapi:
image: tobiasehlert/teslamateapi:latest
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
restart: always
depends_on:
- database
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=secret ##You can change your password here
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
- TZ=Europe/Berlin ##You can change your Timezone here
- ENABLE_COMMANDS=true
- COMMANDS_ALL=true
- API_TOKEN_DISABLE=true
- ENCRYPTION_KEY=supersecret ##You can change your encryption key here
#ports:
# - 8080:8080
teslasolarcharger:
image: pkuehnel/teslasolarcharger:latest
container_name: teslasolarcharger
logging:
driver: "json-file"
options:
max-file: "10"
max-size: "100m"
restart: always
depends_on:
- teslamateapi
environment:
# - Serilog__MinimumLevel__Default=Verbose #uncomment this line and recreate container with docker compose up -d for more detailed logs
- TZ=Europe/Berlin ##You can change your Timezone here
ports:
- 7190:80
volumes:
- teslasolarcharger-configs:/app/configs
smaplugin:
image: pkuehnel/teslasolarchargersmaplugin:latest
container_name: teslasolarcharger_smaplugin
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
restart: always
network_mode: host
environment:
- ASPNETCORE_URLS=http://+:7192
volumes:
teslamate-db:
teslamate-grafana-data:
mosquitto-conf:
mosquitto-data:
teslasolarcharger-configs:
Content using SolarEdge plugin
The SolarEdge Plugin uses the cloud API, which is limited to 300 which is reset after 15 minutes. When the limit is reached the solaredge API does not gather any new values. This results in TSC displaying 0 grid and home battery power until 15 minutes are over.
To use the plugin, just add these lines to the bottom of your docker-compose.yml
. Note: You have to change your site ID and your API key in the CloudUrl
environment variable
solaredgeplugin:
image: pkuehnel/teslasolarchargersolaredgeplugin:latest
container_name: teslasolarcharger_solaredgeplugin
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
restart: always
environment:
- CloudUrl=https://monitoringapi.solaredge.com/site/1561056/currentPowerFlow.json?api_key=asdfasdfasdfasdfasdfasdf& ##Change your site ID and API Key here
ports:
- 7193:80
You can also copy the complete content from here:
Complete file using SolarEdge plugin
version: '3.3'
services:
teslamate:
image: teslamate/teslamate:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=secret ##You can change your password here
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
- ENCRYPTION_KEY=supersecret ##You can change your encryption key here
- TZ=Europe/Berlin ##You can change your Timezone here
ports:
- 4000:4000
volumes:
- ./import:/opt/app/import
cap_drop:
- all
database:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=teslamate
- POSTGRES_PASSWORD=secret ##You can change your password here
- POSTGRES_DB=teslamate
volumes:
- teslamate-db:/var/lib/postgresql/data
grafana:
image: teslamate/grafana:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=secret ##You can change your password here
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
ports:
- 3100:3000
volumes:
- teslamate-grafana-data:/var/lib/grafana
mosquitto:
image: eclipse-mosquitto:2
restart: always
command: mosquitto -c /mosquitto-no-auth.conf
#ports:
# - 1883:1883
volumes:
- mosquitto-conf:/mosquitto/config
- mosquitto-data:/mosquitto/data
teslamateapi:
image: tobiasehlert/teslamateapi:latest
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
restart: always
depends_on:
- database
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=secret ##You can change your password here
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
- TZ=Europe/Berlin