家里装了阳光电源 (Sungrow) 的光伏逆变器, 白天经常有余电上网, 可上网电价又低, 就想让特斯拉尽量吃掉这部分余电, 而不是从电网买电充。折腾了个小服务, 分享一下。
原理不复杂:
- 通过 Modbus TCP 读逆变器的上网/余电功率(我这台是 input register 5600, 不同型号寄存器可能不一样, README 里写了怎么找)
- 通过 Tessie API 读车辆状态、控制充电启停和电流(A)
- 每 30s 一个循环: 按「当前充电功率 + 余电 − 缓冲」算目标功率, 取 5 分钟滑动平均。余电多就加大电流, 余电少就减小甚至暂停
- GPS 地理围栏, 只有停在家附近 50m 内才动作; valet 模式 / 没插枪直接跳过
按单相 230V 换算(澳洲电网), Go 写的, 几百行。镜像用 Dagger 构建, 配了 Makefile 和一套 k8s yaml, 丢集群里就能跑。刚加了 GitHub Actions, push 自动 build/publish 镜像。
GitHub(MIT): https://github.com/guiguan/tesla-sungrow-charge-controller
开源出来分享一下,欢迎拍砖,尤其想请教两点:
1. 大家都用什么读阳光电源的余电功率? 直接怼寄存器 / SunGather / Home Assistant?
2. 有没有更聪明的调节策略? 我现在就是很朴素的滑动平均 + 限幅。
原理不复杂:
- 通过 Modbus TCP 读逆变器的上网/余电功率(我这台是 input register 5600, 不同型号寄存器可能不一样, README 里写了怎么找)
- 通过 Tessie API 读车辆状态、控制充电启停和电流(A)
- 每 30s 一个循环: 按「当前充电功率 + 余电 − 缓冲」算目标功率, 取 5 分钟滑动平均。余电多就加大电流, 余电少就减小甚至暂停
- GPS 地理围栏, 只有停在家附近 50m 内才动作; valet 模式 / 没插枪直接跳过
按单相 230V 换算(澳洲电网), Go 写的, 几百行。镜像用 Dagger 构建, 配了 Makefile 和一套 k8s yaml, 丢集群里就能跑。刚加了 GitHub Actions, push 自动 build/publish 镜像。
GitHub(MIT): https://github.com/guiguan/tesla-sungrow-charge-controller
开源出来分享一下,欢迎拍砖,尤其想请教两点:
1. 大家都用什么读阳光电源的余电功率? 直接怼寄存器 / SunGather / Home Assistant?
2. 有没有更聪明的调节策略? 我现在就是很朴素的滑动平均 + 限幅。