动机

可能是职业病, 我对大部分带电的东西都很感兴趣 电动螺丝刀, 电视机, 电车, 交换机 . 同时我又对监控很感兴趣, 把数据捞出来, dashboard 上各种调, 数据可视化都很有意思.
为了这碟醋包顿饺子.

实现

大部分新能源汽车的移动端 APP 都提供了丰富的功能, 可以查看电量/续航/门窗状态/位置信息等等. 我买的老头乐牌 不敢说是哪家担心厂商把接口封了 新能源小轿车这部分支持也很不错. 希望行业都像特斯拉一样直接给接口, 而不是让用户去搞这种hacky的做法

抓包

iOS 上用 Stream 我总分不清 Stream 和 Steam 的区别 抓包, 因为需要解 HTTPS 内容所以要在手机上它的 CA 证书.
开始抓包后去老头乐刷新一下车辆状态, 就能看到完整的 HTTP 交互内容.

大概是这样的:

{
    "data":
    {
        "ac":
        {
            "temperature": 25.5,
            "out_temperature": 25.0,
            "ac_on": false,
            ...
        },
        "position":
        {
            "longitude": 80.512345,
            "latitude": 28.542161
        },
        "battery":
        {
            "soc": 84.5,
            "charging": 0,
            "max_soc": 100.0,
            ...
        },
        "tyre":
        {
            "1_temp": 26,
            "2_temp": 26,
            "3_temp": 27,
            "4_temp": 26,
            "1_press": 2.6,
            "2_press": 2.5,
            "3_press": 2.5,
            "4_press": 2.5
        }
}

请求头包含了移动端 app id, 时间, 车辆 id 等, 又很幸运看起来老头乐没有对 sign 做校验 可能说法不对, 不是专业搞安全的 , 因此可以不断重放这个请求但实际上拉取的是最新的状态.

收集数据

手写了很简陋的脚本, crontab 每分钟执行一次, 把数据拿出来 zabbix_sender 到 zabbix 里存起来.

这样就可以干一些很有意思的事情了.

可视化

轮胎扎了

刚好昨天老头乐告警说一个轮胎胎压低, 回去看了一下监控大概是这样的: Tyre Monitoring

这实际上很有意思, 从监控我们可以分析出一些有意思的 fact:

  • 轮胎是缓慢漏气的, 从 11/2 早上扎钉子开始大概花了两天时间, 从 2.6kPa 下降到 2kPa
  • 胎压和温度是相关的, 能明显观察到两者是正相关的 冬天来了, 记得给车胎稍微打点气
  • 如果开起来的话, 轮胎温度和气压都会小幅上升

后来叫了救援, 把车胎补了, 观察两天看看, 希望不用换新胎.
这个时候监控就很有用, 可以看是否还有漏气的趋势.

Geomap

另一个我觉得非常酷的用法是, 既然车子可以上报 GPS 位置信息, 那我可以收集过去几年的点来看我的移动轨迹, 画成热力图很酷.
遇到的第一个问题是火星坐标系, 直接把上报的经纬度落在地图上会发现总会飘移开几米. 后来经高人指点才知道这是某种 by design. 还好火星坐标系的算法几乎也是半公开的, 加上修正就好了.

lujiazui pvg

实现很简单, 把时间戳 + 经纬度放到一个 csv 里传到 kepler.gl Kepler.gl is a powerful open source geospatial analysis tool for large-scale data sets. 就好.
但很遗憾的是只有过去一年的数据了, zabbix history 只保存了 365d, 再早的就被清掉了, 遗憾.

不过就这一年的数据也足够有趣了 :

  • 去浦东机场, 大部分时间走华夏快速路. 只有节假日免费的时候才会走龙东高架转绕城高速
  • 大部分活动在浦东, 杨高南路很火热
  • 岔出去的几次(申嘉湖, S60) 都记得起当时是去干嘛了, 很有意思.

其它

还可以做什么 ?
比如可以把 SoC 和总里程放一起, 看电车续航到底虚标多少.

soc

  • 比如电量低的时候做告警, 提醒下次出门要补能了
  • 比如观察上海一年气温变化
  • 有 OTA 的时候天天提醒

没错大部分功能 APP 都能实现, 但折腾这些不就是 Because we(I) can 吗.

Todo

我对现在的 setup 还不太满意, 有些可以继续搞的更好玩一些, 有意思再做.

  • crontab 每分钟跑一次 py 变成一个优雅的系统服务
  • 数据进到 influxdb 这样的时序数据库里, zabbix 实在不适合存储这样的数据, 以能存 10 年为目标
  • 更完善优雅的告警和 dashboard
  • gepler.gl 集成到 dashboard 而不是只能手动跑
  • 现在还是只读, 有时间看能不能加上控制
  • 出一趟远门, 足够远, 在地图上留下长长的轨迹