江湖夜雨十年灯

绿联 NAS 安装 TeslaMate

李二花 / 2024-05-24


背景

昨天看了一篇少数派的文章,特斯拉 Tesla model Y 提车指南, 准备事项里有一项是提前安装好 TeslaMate, 我本来是准备提车之后再说的,但是经过了解后发现,部署好 TeslaMate 之前的数据是无法回补的,所以就需要提前把服务部署好。

随便在 YouTube 上刷了刷,很多博主介绍自己的经验,TuTu 生活志讲了她使用 OrangePi 部署的方法,还有博主讲到部署到自己 VPS 的, 具体的部署流程大同小异,只不过有些是为了给没有 Linux 使用基础的非程序员群体降低使用门槛做了很好的一键傻瓜部署方案, 但是核心都是基于 TeslaMate 的文档来的。

下面就记录下我在我的绿联 DH2600 上部署 TeslaMate 的流程, 跟在 Linux 机器不一样的点是绿联的机器是 OpenWrt 系统的,加上绿联自己的一些魔改, 因此前面的步骤会有一些特殊的地方。

机器

绿联 NAS 系统是 OpenWrt(OpenWrt 项目是一个针对嵌入式设备的 Linux 操作系统), 绿联没有直接开放 sshd, 需要在界面上打开,并且每次时限是 3 天。

打开之后, 会给到一个 secret key, 然后使用如下命令登录机器

ssh root@youip -P 922

安装 docker-compose

Docker 界面

因为机器上已经有 Docker 了,因此只需要再安装 docker-compose 就好,执行如下命令之一,注意替换为对应的版本号。

curl -L "https://github.com/docker/compose/releases/download/{版本号}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
如果下载缓慢,可以在本地机器下载好,然后复制到绿联上。

去 https://github.com/docker/compose/releases 下载对应的 linux_x86-64 版本的 docker-compose

然后使用 scp 复制到机器里

scp -P 922 docker-compose(下载的二进制文件) root@ip:/tmp/

这样就把下载的二进制文件复制到了目标机器的 /tmp/ 文件下
然后把他移动到 /usr/bin/ 下,然后增加可执行权限即可

chmod +x /usr/bin/docker-compose

部署 TeslaMate

首先在绿联上找一个位置,创建一个 teslamate 的文件夹,我们之后所有的数据等都在这个目录中。

teslamate.png

然后在命令行界面,使用如下命令找到这个目录所在的位置

command: find / -name teslamate
result: /mnt/dm-0/.ugreen_nas/197515/teslamate 

然后在这个目录下创建一个 docker-compose.yml, 注意修改里面的 key 相关的变量。

services:
  teslamate:
    image: teslamate/teslamate:latest
    restart: always
    environment:
      - ENCRYPTION_KEY=ENCRYPTION_KEY #replace with a secure key to encrypt your Tesla API tokens
      - DATABASE_USER=teslamate
      - DATABASE_PASS=DATABASE_PASS #insert your secure database password!
      - 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=DATABASE_PASS #insert your secure database password!
      - POSTGRES_DB=teslamate
    volumes:
      - teslamate-db:/var/lib/postgresql/data

  grafana:
    image: teslamate/grafana:latest
    restart: always
    environment:
      - DATABASE_USER=teslamate
      - DATABASE_PASS=DATABASE_PASS #insert your secure database password!
      - 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:

然后 docker-compose up -d 启动即可。

启动之后,在 docker 的管理界面会有如下的显示

teslamate.png

启动之后,访问 NasIp:3000NasIp:4000 就可以看到如下两个界面

暴露出来

之前一篇文章cloudflare 内网穿透与鉴权讲过如何把外网服务暴露到公网,并且加上邮箱验证的, 按照这个方案,又安装启动了一个 cloudflared, 然后把这两个端口的服务暴露到了公网环境即可。

teslamate.png

teslamate.png

其他注意

文档写了很多其他的东西,其中需要特别注意的是数据的备份与恢复,可以写一个定时脚本,定期备份数据

docker compose exec -T database pg_dump -U teslamate teslamate > "teslamate.$(date +"%Y-%m-%d").back"

TODO: 之后还可以写一个 crontab 来执行 dairy 事项。

结束

当然,鸡蛋不能放在一个篮子里,我还在我的 VPS 部署了一套,因为是标准的 Linux 环境,部署非常简单,这样主备都有,不容易出问题。

多看 TeslaMate 的文档,里面还有很多有意思的项目。