You can configure a Raspberry Pi Zero W or Raspberry Pi 4 so that your Tesla thinks it's a USB drive and will write dashcam footage to it. Since it's a computer:
- Scripts running on the Pi can automatically copy the clips to an archive server when you get home.
- The Pi can hold both dashcam clips and music files.
- The Pi can automatically repair filesystem corruption produced by the Tesla's current failure to properly dismount the USB drives before cutting power to the USB ports.
It is recommended to use the prebuilt image and one step setup instructions to get started, as the instructions below may be outdated.
If you've never worked with Raspberry Pi before, don't know what a Windows share is, or just want to see what this is all about, check out this YouTube video:
Note that archiving the clips can take from seconds to hours depending on how many clips you've saved and how strong the WiFi signal is in your Tesla. If you find that the clips aren't getting completely transferred before the car powers down after you park or before you leave you can use the Tesla app to turn on the Climate control. This will send power to the Raspberry Pi, allowing it to complete the archival operation.
Alternatively, you can provide your Tesla account credentials and VIN in TeslaUSB's settings, which will allow it to use the Tesla API to keep the car awake while the files transfer.
You're welcome to contribute to this repo by submitting pull requests and creating issues. For pull requests, please split complex changes into multiple pull requests when feasible, and follow the existing code style.
- You park in range of your wireless network.
- Your wireless network is configured with WPA2 PSK access.
Required:
- Raspberry Pi Zero W (Adafruit or Amazon) or Raspberry Pi 4 (Adafruit or Amazon)
Note: Of the many varieties of Raspberry Pi available only the Raspberry Pi Zero W and Raspberry Pi 4 will work with TeslaUSB.
- A Micro SD card, at least 64 GB in size, and an adapter (if necessary) to connect the card to your computer.
- A mechanism to connect the Pi to the Tesla: a USB A/Micro B cable for the Pi Zero W, or a USB A/Micro C cable for Pi 4
Optional:
- A case for the Pi Zero. The "Official" case: Adafruit or Amazon. There are many others to choose from.
- A cooler for the Pi 4. The Raspberry Pi 4 uses much more power than the Pi Zero W, and as a result can get quite hot. The "armor case" (available with or without fans) appears to do a good job of protecting the Pi while keeping it cool.
- USB Splitter if you don't want to lose a front USB port. The Onvian Splitter has been reported working by multiple people on reddit.
Download: Raspberry Pi OS Lite
NOTE: it is highly recommended that you use the prebuilt teslausb image instead and follow the one step headless setup process.
Download and install: Etcher
MacOS: After downloading and attempting to open Etcher, you may get a security warning. Go to System Preference -> Security and Privacy -> General and click allow. If Etcher complains that it cannot write the image, start the program using sudo from the terminal using the command:
sudo /Applications/balenaEtcher.app/Contents/MacOS/balenaEtcher
There are four phases to setting up the Pi:
- Get the OS onto the Micro SD card.
- Get a shell on the Pi.
- Set up the archive for dashcam clips.
- Set up the USB storage functionality.
AGAIN: it is highly recommended that you use the prebuilt teslausb image instead and follow the one step headless setup process.
LAST WARNING: it is highly recommended that you use the prebuilt teslausb image instead and follow the one step headless setup process.
These instructions tell you how to get Raspberry PI OS onto your MicroSD card. Basically:
- Connect your Micro SD card to your computer.
- Use Etcher to write the zip file you downloaded to the Micro SD card.
Note: you don't need to uncompress the zip file you downloaded.
Follow the instructions corresponding to the OS you used to flash the OS onto the Micro SD card:
- Windows: Instructions.
- MacOS or Linux: Instructions.
Whichever instructions you followed above will leave you in a command shell on the Pi. Use this shell for the rest of the steps in these instructions.
First you need to get into a root shell on the Pi:
sudo -i
You'll stay in this root shell until you run the "halt" command in the "Set up USB storage functionality" below.
Follow the instructions corresponding to the technology you'd like to use to host the archive for your dashcam clips. You must choose just one of these technologies; don't follow more than one of these sets of instructions:
- Windows file share, MacOS Sharing, or Samba on Linux: Instructions.
- SFTP/rsync: Instructions
- Google Drive, Amazon S3, DropBox, Microsoft OneDrive: Instructions
Indicate how much of the sd card you want to allocate to the car for recording dashcam footage and music by running this command:
export CAM_SIZE=<number or percentage>
For example, using export CAM_SIZE=100%
would allocate 100% of the space to recording footage from your car and would not create a separate music partition. export CAM_SIZE=50%
would allocate half of the space for a dashcam footage drive and not create a music partition, unless otherwise specified. If you don't set CAM_SIZE
, the script will allocate 90% of the total space to the dashcam by default. Size can be specified as a percentage or as an absolute value, e.g. export CAM_SIZE=30G
would allocate 30 gigabytes for dashcam footage (technically 30 "gibibytes", or 32212254720 bytes).
To specify the size of the music drive, use export MUSIC_SIZE=<number or percentage>
. NOTE the music drive size needs to be explicitly specified and defaults to 0 (no music drive), but the default used to be to use all the remaining space.
For example, if there is 100 gigabyte of free space, then
export CAM_SIZE=50%
export MUSIC_SIZE=10%
would allocate 50 gigabytes for camera and 10 gigabytes for music, leaving 40 gigabytes free.
Note: the current recommended CAM_SIZE is 30 gigabytes, i.e. export CAM_SIZE=30G
. This is large enough that the car won't display the "USB too small" warning, holds about 25-30 Saved/Sentry events (each event is 10 minutes worth of video, unless they overlap in which case they're smaller). If you anticipate needing more space for saved recordings, for example if your car generally reports many more Sentry events because you park in a busy area, or if you're going to be away from wifi for multiple days, then increase size as needed.
In order for teslausb to preserve recordings older than an hour, there needs to be enough free space on the sd card, at least 'CAM_SIZE' worth, preferably much more, so use of a large sd card or SSD drive is recommended.
If you'd like to receive a notification when your Pi finishes archiving clips follow these Instructions.
The default network hostname for the Pi will become teslausb
. If you want to have more than one TeslaUSB devices on your network (for example you have more than one Tesla in your houseold), then you can specify an alternate hostname for the Pi by running this command:
export TESLAUSB_HOSTNAME=<new hostname>
For example, you could use export TESLAUSB_HOSTNAME=teslausb-ModelX
Make sure that whatever you speicfy for the new hostname is compliant with the rules for DNS hostnames; for example underscore (_) is not allowed, but dash (-) is allowed. Full rules are in RFC 1178 at https://tools.ietf.org/html/rfc1178
- Run these commands:
mkdir -p /root/bin cd /root/bin wget https://raw.githubusercontent.com/marcone/teslausb/main-dev/setup/pi/setup-teslausb chmod +x setup-teslausb ./setup-teslausb
- Run this command:
halt
- Disconnect the Pi from the computer.
On the next boot, the Pi hostname will become teslausb
, so future ssh
sessions will be ssh pi@teslausb.local
. If you specified your own hostname, be sure to use that name (for example ssh pi@teslausb-ModelX.local
)
Your Pi is now ready to be plugged into your Tesla. If you want to add music to the Pi, follow the instructions in the next section.
Note: If you set
CAM_SIZE
to100%
then skip this step.
Connect the Pi to a computer. If you're using a cable be sure to use the port labeled "USB" on the circuitboard.
- Wait for the Pi to show up on the computer as a USB drive.
- Copy any music you'd like to the drive labeled MUSIC.
- Eject the drives.
- Unplug the Pi from the computer.
- Plug the Pi into your Tesla.
Alternatively, you can configure the Pi to automatically copy from a CIFS share. To do this, define the "MUSIC_SHARE_NAME" variable to point at a CIFS share and folder. The share currently must exist on the same server as the one where recordings will be backed up, and use the same credentials. The Pi will sync down ALL music it finds under the specified folder, so be sure there is enough space on the Pi's music drive.
For example, if you have your music on a share called 'Music', and on that share have a folder called 'CarMusic' where you copied all the songs that you want to have available in the car, use export MUSIC_SHARE_NAME=Music/CarMusic
in the setup file.
Note: if you find that not all music is being copied, you may have unsupported characters in file names, such as
"
,:
or>
. If this is the case, either enable name-mangling on your server, or enable catia.
The setup process configures the Pi with read-only file systems for the operating system but with read-write access through the USB interface. This means that you'll be able to record dashcam video and add and remove music files but you won't be able to make changes to files on / or on /boot. This is to protect against corruption of the operating system when the Tesla cuts power to the Pi.
To make changes to the system partitions:
ssh pi@teslausb.
sudo -i
/root/bin/remountfs_rw
Then make whatever changes you need to. The next time the system boots the partitions will once again be read-only.
To enable teslausb to act as a wifi access point with the given SSID and password, find this section in your teslausb_setup_variables.conf file and uncomment the exports. Remember to change the password to something that protects your Pi. You will not get access to the Internet but you will be able to ssh into your Pi, or access the recordings via Samba. Be careful when using this option: your AP_PASS setting is all that protects your Pi from someone remotely accessing it. To further add to the security, you may want to follow the items in the Security section that follows.
# SSID, so you can access it while on the road.
#export AP_SSID='TESLAUSB WIFI'
# Change this! The setup script will not accept the default 'password'
# Also note that the wifi password must be at least 8 characters.
#export AP_PASS='password'
# IP address is optional. The AP will give its clients IP addresses in the
# x.x.x.100-150 range so make sure you don't put the AP's IP address in
# that range.
#export AP_IP='192.168.66.1'
As a little discussion of security for your Pi, please keep in mind the following items.
-
If WiFi Access Point is configured, the AP password needs to be worth while. Make it something better than Passw0rd, more than 8 characters. The longer the password the better. See here or here for password strength.
-
Change the password for the pi account. To do that, make the system RW and use the passwd command to change the password. To do that, follow the instructions below. The last command will reboot your Pi: (Starting at the pi sign-on)
ssh pi@teslausb.local
sudo -i
cd bin
./remountfs_rw
passwd pi
reboot
- Remember that the root user has a copy of your configuration file. Try the best you can to protect it. If your Pi is taken or car is stolen and you enabled the optional "use Tesla API to keep your car awake" feature, change your Tesla account password QUICKLY! Remember that if they don't have a "key" or your Tesla Account and Password, the car will not drive for them. Also consider activating a Drive Password on your Tesla. Its only 4 digits, but that's a lot of combinations to guess.
This repo contains steps and scripts originally from this thread on Reddit
Many people in that thread suggested that the scripts be hosted on Github but the author didn't seem interested in making that happen. I've hosted the scripts here with his/her permission.
- 部分依赖网络服务的操作[中国化],避免一些特别的原因导致的启动失败,同步失败等情况;
- 增加镜像制作脚本;
- 调整启动归档的逻辑,适配车上有 Wifi 的场景;
- 页面功能丰富,支持修改 wifi 配置、升级等;
- 完善依赖网络服务[中国化];
- 支持 Rclone 方式的音乐同步;
- 支持网页端下载视频。