自从氪金购买了 Car Scanner Pro 安卓应用后,每次出行都打开 Dashboard 放在手机后台,这样 Recorder 就可以自动记录相关的 PID 和值了
但毕竟手机屏幕有限,每次出行结束后查看回放并不是很方便,于是考虑放在电脑上进行可视化分析,正巧赶上了腾讯云 BI 的活动,于是尝试使用腾讯云 BI 进行可视化分析
支持以 CSV 的格式进行导出,这样就可以放到其他工具里进行分析了,目前 CSV 支持两种导出格式
第一种格式内容如下(经纬度已做 mask 处理)
[root@cn-tx-bj7-c8 ~]# head 2024-06-07_19-44-55_1.csv
"SECONDS";"PID";"VALUE";"UNITS";"LATITUDE";"LONGTITUDE";
"71105.004622";"环境温度";"21";"℃";"<rm>";"<rm>";
"71105.147622";"进气温度";"27";"℃";"<rm>";"<rm>";
"71105.274622";"冷却液温度";"23";"℃";"<rm>";"<rm>";
"71105.413622";"发动机转速";"0";"rpm";"<rm>";"<rm>";
"71105.413622";"发动机转速 x1000";"0";"rpm";"<rm>";"<rm>";
"71105.538622";"节气门位置";"18.0392156862745";"%";"<rm>";"<rm>";
"71105.669622";"车速";"0";"km/h";"<rm>";"<rm>";
"71105.805622";"计算增压";"-0.01325";"bar";"<rm>";"<rm>";
"71105.805622";"进气歧管绝对压力";"100";"kPa";"<rm>";"<rm>";
不难看出这种格式是每一行记录着 PID 以及对应的单位和值
第二种格式内容如下(经纬度已做 mask 处理)
[root@cn-tx-bj7-c8 ~]# head 2024-06-07_19-44-55.csv
time,"Accelarator Pedal Position (%)","Cylinder Head Temp (℃)","Odometer (km)","冷却液温度 (℃)","发动机转速 (rpm)","发动机转速 x1000 (rpm)","已用油量 (L)","已用油量(总计) (L)","平均GPS速度 (km/h)","平均油耗 (L/100km)","平均油耗 10 sec (L/100km)","平均油耗(总计) (L/100km)","平均速度 (km/h)","燃料花费 (¥)","燃料花费(总计) (¥)","环境温度 (℃)","瞬时引擎功率(根据燃油消耗) (kW)","瞬时油耗(升/100公里) (L/100km)","节气门位置 (%)","节油器(基于燃油系统状态和油门位置) ()","行驶距离 (km)","行驶距离(总计) (km)","计算出的发动机负荷值 (%)","计算增压 (bar)","计算的瞬时燃油率 (L/h)","车辆加速 (g)","车速 (km/h)","进气歧管绝对压力 (kPa)","进气温度 (℃)","速度 (GPS) (km/h)","高度 (GPS) (m)",Latitude,Longtitude,
19:45:05.005,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,,,<rm>,<rm>,
19:45:05.148,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,<rm>,<rm>,
19:45:05.275,,,,23,,,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
19:45:05.414,,,,,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
19:45:05.539,,,,,,,,,,,,,,,,,,,18.0392156862745,,,,,,,,,,,,,<rm>,<rm>,
19:45:05.670,,,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,<rm>,<rm>,
19:45:05.806,,,,,,,,,,,,,,,,,,,,,,,,-0.01325,,,,100,,,,<rm>,<rm>,
19:45:06.069,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,<rm>,<rm>,
19:45:06.207,,,77845.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
不难看出这种格式是将所有存在的 PID 做了汇总,然后具体时间点只记录实际获取到值的 PID
CSV 管理起来不方便,于是计划将 CSV 导入至数据库,在常见的数据库中(MySQL、PG、ES 和 CK)中最终选择了 CK
毕竟是与时序相关的数据流,并且原始数据不会修改,CK 应该算是合适的数据库了
先尝试使用 CSV #2 这种格式进行导入,开始踩坑
首先,CSV 中的列名是中英文混合的,正常应该是全中文,部分翻译不完全所以才显示的英文,建表肯定是得全部使用英文了
CSV 列名如下
time,"Accelarator Pedal Position (%)","Cylinder Head Temp (℃)","Odometer (km)","冷却液温度 (℃)","发动机转速 (rpm)","发动机转速 x1000 (rpm)","已用油量 (L)","已用油量(总计) (L)","平均GPS速度 (km/h)","平均油耗 (L/100km)","平均油耗 10 sec (L/100km)","平均油耗(总计) (L/100km)","平均速度 (km/h)","燃料花费 (¥)","燃料花费(总计) (¥)","环境温度 (℃)","瞬时引擎功率(根据燃油消耗) (kW)","瞬时油耗(升/100公里) (L/100km)","节气门位置 (%)","节油器(基于燃油系统状态和油门位置) ()","行驶距离 (km)","行驶距离(总计) (km)","计算出的发动机负荷值 (%)","计算增压 (bar)","计算的瞬时燃油率 (L/h)","车辆加速 (g)","车速 (km/h)","进气歧管绝对压力 (kPa)","进气温度 (℃)","速度 (GPS) (km/h)","高度 (GPS) (m)",Latitude,Longtitude,
转化成英文列名如下
CREATE TABLE IF NOT EXISTS car_scanner_record (
time DateTime64(3),
accelarator_pedal_position_percentage Float64,
cylinder_head_temp_c Float64,
odometer_km Float64,
cooling_liquid_temp_c Float64,
engine_speed_rpm UInt32,
engine_speed_x1000_rpm UInt16,
fuel_used_l Float64,
fuel_used_total_l Float64,
average_gps_speed_km_h Float64,
average_fuel_consumption_l_100km Float64,
average_fuel_consumption_10_sec_l_100km Float64,
average_fuel_consumption_total_l_100km Float64,
average_speed_km_h Float64,
fuel_cost_yen Float64,
fuel_cost_total_yen Float64,
ambient_temperature_c Float64,
instantaneous_engine_power_kw Float64,
instantaneous_fuel_consumption_l_100km Float64,
throttle_position_percentage Float64,
fuel_saver_status UInt8,
trip_distance_km Float64,
trip_distance_total_km Float64,
calculated_engine_load_value_percentage Float64,
calculated_boost_bar Float64,
calculated_instantaneous_fuel_rate_l_h Float64,
vehicle_acceleration_g Float64,
vehicle_speed_km_h Float64,
intake_manifold_absolute_pressure_kpa Float64,
intake_air_temperature_c Float64,
speed_gps_km_h Float64,
altitude_gps_m Float64,
latitude Float64,
longtitude Float64,
geo Point MATERIALIZED (longtitude, latitude)
)
ENGINE = MergeTree()
ORDER BY time;
其中时间字段类型选择了 DateTime64(3),需要排序
数值型字段,整数类型选择了 UInt8 和 UInt32,浮点类型选择了 Float64
可以看到经纬度字段除了通过浮点类型保留原始的经纬度 latitude 和 longtitude
还新增了一个字段 geo,使用了 Point 类型用于存储地理位置信息,并通过物化视图取值,ck 真方便
使用的版本是:ClickHouse 24.4.1.2088
可以看到表已经建好了,但是目前还没有导入数据
接下来使用 GUI 工具导入数据,毕竟图形化工具更直观
下一步
选择 CSV 文件
因为 CSV 表头末尾多了一个逗号,识别为多了一列,设置跳过即可
继续
报错了,是因为 CSV 文件中只有时间而没有日期
于是需要自行补充日期,运行
[root@cn-tx-bj7-c8 ~]# sed -i 's/^/2024-06-07 /' 2024-06-07_19-44-55.csv
[root@cn-tx-bj7-c8 ~]# head 2024-06-07_19-44-55.csv
2024-06-07 time,"Accelarator Pedal Position (%)","Cylinder Head Temp (℃)","Odometer (km)","冷却液温度 (℃)","发动机转速 (rpm)","发动机转速 x1000 (rpm)","已用油量 (L)","已用油量(总计) (L)","平均GPS速度 (km/h)","平均油耗 (L/100km)","平均油耗 10 sec (L/100km)","平均油耗(总计) (L/100km)","平均速度 (km/h)","燃料花费 (¥)","燃料花费(总计) (¥)","环境温度 (℃)","瞬时引擎功率(根据燃油消耗) (kW)","瞬时油耗(升/100公里) (L/100km)","节气门位置 (%)","节油器(基于燃油系统状态和油门位置) ()","行驶距离 (km)","行驶距离(总计) (km)","计算出的发动机负荷值 (%)","计算增压 (bar)","计算的瞬时燃油率 (L/h)","车辆加速 (g)","车速 (km/h)","进气歧管绝对压力 (kPa)","进气温度 (℃)","速度 (GPS) (km/h)","高度 (GPS) (m)",Latitude,Longtitude,
2024-06-07 19:45:05.005,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:05.148,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27,,,<rm>,<rm>,
2024-06-07 19:45:05.275,,,,23,,,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:05.414,,,,,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:05.539,,,,,,,,,,,,,,,,,,,18.0392156862745,,,,,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:05.670,,,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,<rm>,<rm>,
2024-06-07 19:45:05.806,,,,,,,,,,,,,,,,,,,,,,,,-0.01325,,,,100,,,,<rm>,<rm>,
2024-06-07 19:45:06.069,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,<rm>,<rm>,
2024-06-07 19:45:06.207,,,77845.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<rm>,<rm>,
第一行无需替换,手动修改下改回 time
然后预览数据,均可正常匹配
进入控制台:https://console.cloud.tencent.com/bi/overview
申请试用专业版
给了一个月的时间
创建项目 CarScannerPro,新建数据源
选择自有 ck
一键测试失败了,并不能连接成功,明明开放了外网访问自己的电脑上也可以正常连接
自己有个 TDSQL-C,无奈只好将数据存储至 MySQL 5.7,重新建表
USE car_scanner_pro;
CREATE TABLE IF NOT EXISTS car_scanner_record (
time DATETIME(3),
accelarator_pedal_position_percentage DOUBLE,
cylinder_head_temp_c DOUBLE,
odometer_km DOUBLE,
cooling_liquid_temp_c DOUBLE,
engine_speed_rpm INT UNSIGNED,
engine_speed_x1000_rpm INT UNSIGNED,
fuel_used_l DOUBLE,
fuel_used_total_l DOUBLE,
average_gps_speed_km_h DOUBLE,
average_fuel_consumption_l_100km DOUBLE,
average_fuel_consumption_10_sec_l_100km DOUBLE,
average_fuel_consumption_total_l_100km DOUBLE,
average_speed_km_h DOUBLE,
fuel_cost_yen DOUBLE,
fuel_cost_total_yen DOUBLE,
ambient_temperature_c DOUBLE,
instantaneous_engine_power_kw DOUBLE,
instantaneous_fuel_consumption_l_100km DOUBLE,
throttle_position_percentage DOUBLE,
fuel_saver_status INT,
trip_distance_km DOUBLE,
trip_distance_total_km DOUBLE,
calculated_engine_load_value_percentage DOUBLE,
calculated_boost_bar DOUBLE,
calculated_instantaneous_fuel_rate_l_h DOUBLE,
vehicle_acceleration_g DOUBLE,
vehicle_speed_km_h DOUBLE,
intake_manifold_absolute_pressure_kpa DOUBLE,
intake_air_temperature_c DOUBLE,
speed_gps_km_h DOUBLE,
altitude_gps_m DOUBLE,
latitude DOUBLE,
longtitude DOUBLE,
PRIMARY KEY (time)
);
创建完成
重新导入之后,连接数据源,成功!
选择第一个
选择全部字段,可惜时间类型不支持毫秒
+1
在「仪表盘」中创建「Record」页面,然后就可以在组件库中使用各种组件了
需要输入的有【维度】【指标】和【条件】,这里选择几个典型的
立即分析
保存就能预览查询的结果
保存,预览
保存,预览
官方示例就是车速 2333
这里需要添加两个仪表盘
预览,保存
像不像是高德地图的「点亮城市」统计
保存,预览
需要关联上述 5 个图表的 time 字段
分享页面
切换时间选择器,5 个图表也跟着联动查询
从腾讯云图用到腾讯云 BI,只要成功对接了数据后都是开箱即用
图表类型非常丰富,这里限于篇幅只演示了几种类型,实际还有很多 PID 可以利用图表进行展示,毕竟不是官方文档,没必要每种都用一遍
当然,本文所述的分析只是最基础的,还有更多分析的方向 RT(by Gemini 1.5 Pro)
看到异常值检测觉得这个方向不错,也就是告警功能,最简单的比如针对历史图表当值发生异常变化时在图表中标红显示,应该是比较实用的功能了
文档中也有关于配置告警的功能:https://cloud.tencent.com/document/product/590/95713
今天周日写了整整一下午,更多方向就留给读者们自己思考吧,欢迎 DM
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。