TeslaMate 사용 가이드

✍🏼 작성일 2023년 09월 06일    💡 수정일 2023년 09월 08일
🖥  설명:TeslaMate 설치 및 사용 과정에서 발생하는 몇 가지 문제점 소개

💡이 가이드는 약간의 프로그래밍 지식이 필요하며, 터미널과 명령줄이 무엇인지 알아야 합니다.

💡이 튜토리얼은 Docker를 사용하여 TeslaMate를 설치하는 방법을 설명합니다. 만약 소프트 라우터 환경에서 작업 중이라면, 브라우저에서 접근할 수 있도록 포트 매핑과 같은 추가 작업이 필요할 수 있습니다. 저는 Mac 컴퓨터를 항상 켜놓고 사용하기 때문에 Mac 시스템의 Docker에 설치했습니다.

💡아쉽게도 TeslaMate는 차량의 과거 정보를 가져올 수 없습니다. 따라서 TeslaMate를 설치한 이후의 차량 주행 데이터만 확인할 수 있으며, TeslaMate 서비스를 종료하면 관련 주행 데이터를 기록할 수 없습니다.

서문

"TeslaMate"는 간단히 번역하면 "테슬라 동반자"입니다. 이는 오픈 소스 소프트웨어로, 차량이 테슬라 서버에 보고하는 데이터를 가져와 Grafana라는 웹 데이터 시각화 대시보드 도구로 표시합니다.

TeslaMate 저장소:

GitHub - adriankumpf/teslamate: A self-hosted data logger for your Tesla 🚘 A self-hosted data logger for your Tesla 🚘. Contribute to adriankumpf/teslamate development by creating an account on GitHub. https://github.com/adriankumpf/teslamate#teslamate

TeslaMate 문서:

Docker install | TeslaMate This document provides the necessary steps for installation of TeslaMate on a any system that runs Docker. For a walkthrough that provides the necessary steps for manual installation see Manual Install. https://docs.teslamate.org/docs/installation/docker


테슬라 엔지니어들은 이러한 데이터를 수집하여 차량의 빅데이터 분석, 소프트웨어 최적화, 배터리 충전 최적화 등에 활용합니다. 우리 개인 차주들은 이러한 정보를 통해 자신의 차량에 대한 상세한 데이터(예: 과거 주행 기록, 일일 주행 거리, 전력 소모량, 충전 효율 등)를 더 잘 이해할 수 있습니다.

이 블로그 글이 작성된 이유는 TeslaMate 문서가 설치 방법만 설명하고(매우 간단함), 설치 후 원하는 대시보드를 보기 위해 어떻게 구성해야 하는지 알려주지 않기 때문입니다. 또한 인터넷의 일부 콘텐츠 팜은 SEO 기술을 통해 상위에 노출되지만, 대부분은 공식 문서 내용을 복사한 것뿐입니다. 원하는 정보를 찾는 것은 다소 어려웠으며, 저는 설치부터 완성까지 설명하는 어떤 글도 보지 못했습니다. 따라서 이 글은 처음부터 설명합니다.

먼저 결과물 사진을 보여드립니다(사용자는 패널을 커스터마이즈할 수 있음):

TeslaMate 成果图

1. Docker 설치

서두에서 언급했듯이, 저는 Docker를 사용하여 설치했습니다. TeslaMate 문서는 Docker와 Docker Compose를 설치할 것을 요구합니다(무엇인지 몰라도 일단 설치하세요). 우리는 Docker Desktop만 설치하면 이 둘을 모두 설치할 수 있습니다. Docker Desktop 다운로드 링크는 다음과 같습니다:

Docker Desktop: The #1 Containerization Tool for Developers | Docker Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux. https://www.docker.com/products/docker-desktop/

설치 후 실행하고, 임의의 디렉토리(TeslaMate의 모든 파일이 이 디렉토리에 저장되며 삭제하지 마세요)를 선택한 후 공식 docker-compose.yml 파일을 넣습니다. 저는 ~/Developer/Docker/TeslaMate 아래에 배치했으며, docker-compose.yml 내용은 다음과 같습니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
version: '3'

services:
teslamate:
image: teslamate/teslamate:latest
restart: always
environment:
- ENCRYPTION_KEY= #设置 TeslaMate API 加密密码,注意等号后面不要有空格
- DATABASE_USER=teslamate
- DATABASE_PASS= #设置安全数据库密码,注意等号后面不要有空格
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
ports:
- 4000:4000
volumes:
- ./import:/opt/app/import
cap_drop:
- all

database:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=teslamate
- POSTGRES_PASSWORD= #设置数据库密码,注意等号后面不要有空格
- POSTGRES_DB=teslamate
volumes:
- teslamate-db:/var/lib/postgresql/data

grafana:
image: teslamate/grafana:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS= #设置 grafana 的数据库密码,注意等号后面不要有空格
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
ports:
- 3000: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

volumes:
teslamate-db:
teslamate-grafana-data:
mosquitto-conf:
mosquitto-data:

일부 서비스의 비밀번호 설정은 다른 서비스의 비밀번호와 일치해야 합니다. 따라서 위의 모든 비밀번호를 동일하게 설정하는 것이 번거로움을 줄일 수 있습니다. 특히 = 뒤에 공백이 없어야 합니다. 이후 터미널을 열고 다음 명령을 실행합니다(각 줄을 복사한 후 터미널에 붙여넣고 엔터를 누르세요):

1
2
3
# 假设你放上述文件的目录为 ~/Developer/Docker/TeslaMate
cd ~/Developer/Docker/TeslaMate
docker compose up -d

완료 후 Docker Desktop을 열면 다음과 같은 화면이 나타납니다:

安装完成后截图

2. 테슬라 계정 로그인 및 권한 부여

위 단계가 오류 없이 완료되면 모든 서비스가 Running 상태인지 확인하세요(위 스크린샷의 각 서비스 이름을 클릭하여 해당 로그를 확인하고 error와 같은 오류가 있는지 확인할 수 있습니다). 브라우저에서 localhost:4000을 열면 API Token과 Refresh Token을 입력하라는 메시지가 표시됩니다. 이 두 가지를 얻는 방법은 공식 문서에 설명되어 있으며, 여기에서 확인할 수 있습니다:

Frequently Asked Questions | TeslaMate How to generate your own tokens https://docs.teslamate.org/docs/faq/#how-to-generate-your-own-tokens

여기서 저는 세 번째 방법인 "Tesla Auth (macOS, Linux, Windows)"를 사용했습니다. 다음 링크를 클릭하여 자신의 시스템에 맞는 버전을 확인하고 해당 파일(실행 가능한 파일)을 다운로드하세요.

GitHub - adriankumpf/tesla_auth: Securely generate API tokens for third-party access to your Tesla. Tesla에 대한 타사 액세스를 위한 API 토큰을 안전하게 생성합니다. - GitHub - adriankumpf/tesla_auth: Tesla에 대한 타사 액세스를 위한 API 토큰을 안전하게 생성합니다. https://github.com/adriankumpf/tesla_auth#download

MacOS에서 직접 더블 클릭으로 열거나(또는 터미널에서 열 경우) 실행 파일이 위험할 수 있다는 경고가 표시되면, 系统设置-隐私与安全性로 이동하여 "계속 열기"를 클릭하면 됩니다. 열리면 Tesla 계정 로그인 창이 나타나며, 로그인 완료 후 페이지에 Tesla의 API 토큰과 Refresh Token이 표시됩니다(스크린샷은 생략). 이를 localhost:4000 페이지의 해당 위치에 복사하면 로그인에 성공하며, 성공 화면은 다음과 같습니다:

TeslaMate 授权成功界面

이제 인증이 완료되었으며, 다음으로 Grafana를 구성합니다.

三、Grafana 기본 개념

Grafana는 매우 강력한 웹 기반 데이터 시각화 대시보드 도구로, 사용법이 상대적으로 복잡하며 한글화 방법은 연구하지 않았습니다. 다행히 Tesla 데이터 필드는 간단하여 한글화가 필요 없습니다. 여기서는 사용자 정의를 위해 관련 개념을 간단히 소개합니다.

Dashboard와 Panel

Dashboard는 다양한 데이터를 표시하는 인터페이스로, 다른 Panel을 표시할 수 있습니다. Panel은 데이터베이스에서 데이터를 조회한 후 시각화하는 모듈로, 아래 각 빨간 상자는 하나의 Panel입니다:

N 个 Panel 组成了一个 Dashboard

Panel은 다른 Dashboard 간에 복사할 수 있으며 방법은 다음과 같습니다:

Panel 复制

복사 후 다른 Dashboard에 붙여넣을 수 있습니다. Dashboard 오른쪽 상단의 Add Panel 버튼을 클릭하거나(또는 처음 Dashboard를 생성할 때)(이전 단계에서 Panel에 Copy를 클릭하지 않았다면 아래 그림의 네 번째 "Paste from Clipboard"가 나타나지 않음) 다음과 같은 새 Panel이 생성됩니다:

粘贴刚刚复制的 Panel

Variable(변수) 및 JSON Model

Variable

각 Dashboard는 Panel에서 사용할 Variable을 설정할 수 있습니다. Panel이 Variable을 어떻게 사용할까요? Panel의 데이터는 SQL 쿼리를 통해 조회되며, SQL 문법 중 일부는 grafana의 SQL 템플릿 문법입니다. 다음은 고도(altitude)를 조회하는 SQL 문법입니다:

1
2
3
4
5
6
7
8
9
10
SELECT
$__time(date),
ROUND(convert_m(elevation, '$alternative_length_unit')) AS elevation_[[alternative_length_unit]]
FROM
positions
WHERE
car_id = $car_id AND
$__timeFilter(date)
ORDER BY
date ASC

여기서 $ 기호가 붙은 것은 미리 정의된 Variable입니다. 일부는 내장된 변수(예: $__timeFilter)이고, 일부는 사용자 정의 변수(예: $alternative_length_unit)입니다. 사용자 정의 변수는 Dashboard에서 설정한 Variable입니다. Dashboard의 Variable은 Dashboard 오른쪽 상단의 Dashboard Setting에서 구성할 수 있습니다:

Variable 配置

JSON Model

때로는 Dashboard에서 Panel을 복사해 새 Dashboard에 붙여넣었을 때 Panel이 정상적으로 데이터를 표시하지 않는 경우가 있습니다. 이는 원본 Panel에서 사용한 Variable을 원본 Dashboard에서 새 Dashboard로 복사하지 않아 SQL 문법 오류가 발생하고 데이터를 조회할 수 없기 때문입니다. 하지만 Dashboard의 Variable이 많다면 하나씩 복사하는 것이 매우 번거롭습니다. 이때 JSON Model을 사용하면 해결할 수 있습니다.

JSON Model은 Dashboard 구성의 JSON 형식이므로, 특정 Dashboard의 해당 필드 내용을 복사해 대상 Dashboard에 붙여넣기만 하면 됩니다. Variable은 JSON Model에서 templating 필드에 해당하며, list 내 해당 항목을 대상 Dashboard의 JSON Model templating 필드의 list 필드에 항목으로 추가하면 됩니다(Save Changes를 클릭한 후 Save dashboard를 클릭하는 것을 잊지 마세요):

直接复制对应 JSON

Grafana에는 더 많은 복잡한 기능이 있지만, Tesla 데이터 시각화에는 이 정도만 알아도 충분합니다.

四、Grafana 구성

localhost:3000에 접속한 후 먼저 로그인해야 합니다. 처음에는 기본 사용자 이름과 비밀번호가 모두 admin이며, 첫 로그인 성공 후 비밀번호를 설정하라는 메시지가 표시됩니다. 설정 후 접속하면 다음과 같은 화면이 나타납니다:

Grafana 默认 Dashboard

여기서 TeslaMate는 이미 다양한 대시보드를 구성해 놓았습니다. 왼쪽의 이 부분을 클릭하면 폴더 디렉토리 아래의 각 대시보드를 확인할 수 있습니다:

查看 TeslaMate 预设的 Dashboard

各种 Dashboard

아무거나 하나 클릭해 보세요, 예를 들어 Drive Stats를 선택하면 해당 대시보드의 다양한 패널을 볼 수 있습니다:

Drive Stats Dashboard

하지만 우리는 여러 개의 이러한 사전 설정된 대시보드의 패널을 우리의 필요에 맞춰 새로운 대시보드로 통합하고 싶을 것입니다. 이 경우에는 이전 단계인 'Grafana 개념’에서 설명한 패널 복사, 변수 복사(JSON 모델 복사) 작업이 필요합니다. 여러분은 자신의 요구에 맞는 대시보드를 직접 구성할 수 있습니다.

5. 기타

여기에는 Grafana의 다른 몇 가지 사용 문제가 있습니다. 간단히 설명하겠습니다.

패널 제목 설정:

패널 상단의 Edit을 클릭한 후 오른쪽에서 Title을 수정하면 됩니다:

修改 Panel 标题

지도가 표시되지 않음: 설명이 필요 없습니다. VPN 환경이 필요합니다.

자신의 대시보드를 기본값으로 설정:

다음과 같이 설정하세요:

配置默认的 Dashboard

대시보드에서 마우스를 패널 위에 올렸을 때 다른 패널도 해당 시간대의 데이터를 동시에 표시하도록 하는 방법?

이 기능은 주로 선 그래프 패널의 운전 정보에서 속도를 확인할 때, 다른 지도 패널에서 해당 위치를 동시에 확인하고 싶을 때 사용됩니다. 대시보드 설정을 통해 해결할 수 있으며, 아래 그림에서 두 번째 옵션으로 설정하면 됩니다(기본값은 첫 번째입니다):

보안성? TeslaMate는 해외 오픈소스 소프트웨어로, 보안성은 보장됩니다.

기기를 변경할 때 데이터를 어떻게 마이그레이션하나요? TeslaMate 문서를 참조하시면 자세한 설명이 있습니다.

공인망에서 Grafana에 어떻게 접근하나요? DDNS를 사용해야 합니다. 이 부분은 직접 탐구해 보세요.

궁극의 알림: 패널을 수정한 후에는 반드시 오른쪽 상단의 Save를 클릭하세요.

대시보드를 주기적으로 새로 고치는 방법: 대시보드 오른쪽 상단에서 새로 고침 간격을 설정할 수 있습니다. 일반적으로 큰 디스플레이에 올려놓고 하루 종일 실시간으로 데이터 변화를 확인할 때 사용합니다.

- EOF -
이 글의 최초 게시: TeslaMate 사용 가이드 - Xheldon Blog