脚本如何记录车辆使用记录

wen 实用脚本 35

本文目录导读:

脚本如何记录车辆使用记录

  1. 基础文本记录脚本(Python - 手动输入)
  2. 自动采集OBD数据(Python + OBD-II适配器)
  3. 车载GPS轨迹记录(Bash + gpsd)
  4. 自动生成日报/周报(Shell + awk)
  5. Web界面管理(轻量级Flask + SQLite)
  6. 选择建议
  7. 额外考虑

记录车辆使用记录可以通过多种脚本实现,具体取决于你使用的平台(如Linux、Windows、车载系统等)以及数据采集方式(手动输入、传感器、OBD接口等),以下是几种常见场景及对应的脚本示例:

基础文本记录脚本(Python - 手动输入)

适合个人或小团队手动记录每次用车信息。

#!/usr/bin/env python3
import csv
import os
from datetime import datetime
FILE_NAME = "vehicle_usage.csv"
def log_usage():
    # 检查文件是否存在,不存在则创建并写入表头
    if not os.path.exists(FILE_NAME):
        with open(FILE_NAME, mode='w', newline='', encoding='utf-8') as f:
            writer = csv.writer(f)
            writer.writerow(["日期", "时间", "出发地", "目的地", "起始里程(km)", "结束里程(km)", "行驶里程(km)", "驾驶员", "备注"])
    # 获取用户输入
    date = input("日期 (YYYY-MM-DD, 默认今天): ") or datetime.now().strftime("%Y-%m-%d")
    time = input("时间 (HH:MM, 默认现在): ") or datetime.now().strftime("%H:%M")
    start = input("出发地: ")
    end = input("目的地: ")
    start_mile = input("起始里程 (km): ")
    end_mile = input("结束里程 (km): ")
    driver = input("驾驶员: ")
    note = input("备注 (可选): ")
    # 计算行驶里程
    try:
        distance = float(end_mile) - float(start_mile)
    except ValueError:
        distance = 0.0
    # 写入CSV
    with open(FILE_NAME, mode='a', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        writer.writerow([date, time, start, end, start_mile, end_mile, f"{distance:.1f}", driver, note])
    print(f"记录已保存至 {FILE_NAME},本次行驶 {distance:.1f} 公里。")
if __name__ == "__main__":
    while True:
        log_usage()
        again = input("是否继续记录?(y/n): ").strip().lower()
        if again != 'y':
            break

运行方式:保存为 log_vehicle.py,在终端执行 python3 log_vehicle.py


自动采集OBD数据(Python + OBD-II适配器)

使用ELM327或类似OBD适配器连接车辆OBD接口,自动读取里程、时间、油耗等数据(需安装python-obd库)。

#!/usr/bin/env python3
import obd
import csv
import time
from datetime import datetime
FILE_NAME = "obd_vehicle_log.csv"
def connect_obd():
    # 尝试连接OBD适配器(默认波特率38400或115200)
    connection = obd.OBD()  # 或者指定端口: obd.OBD("/dev/ttyUSB0")
    return connection
def log_obd_data(conn):
    if not conn.is_connected():
        print("OBD连接失败")
        return
    # 确保文件存在并写入表头
    with open(FILE_NAME, mode='a', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        if f.tell() == 0:  # 文件为空则写表头
            writer.writerow(["时间", "车速(km/h)", "发动机转速(RPM)", "里程(km)", "剩余油量(%)"])
    # 循环读取数据
    try:
        while True:
            now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            speed = conn.query(obd.commands.SPEED).value  # 返回km/h
            rpm = conn.query(obd.commands.RPM).value
            # 如果支持里程读取(部分车辆)
            # mileage = conn.query(obd.commands.FUEL_LEVEL).value  # 请根据实际命令调整
            fuel = conn.query(obd.commands.FUEL_LEVEL).value  # 百分比
            # 写入CSV
            with open(FILE_NAME, mode='a', newline='', encoding='utf-8') as f:
                writer = csv.writer(f)
                writer.writerow([now, speed, rpm, "", fuel])
            print(f"记录: {now} 速度={speed} km/h")
            time.sleep(2)  # 每隔2秒采集一次
    except KeyboardInterrupt:
        print("停止采集")
if __name__ == "__main__":
    conn = connect_obd()
    if conn.is_connected():
        log_obd_data(conn)
    else:
        print("无法连接OBD设备,请检查适配器与车辆连接。")

前置依赖pip install python-obd,并需购买ELM327蓝牙/WiFi适配器。


车载GPS轨迹记录(Bash + gpsd)

基于GPS设备实时记录车辆位置、速度、时间。

#!/bin/bash
# 需要安装 gpsd 和 gpspipe
LOG_FILE="gps_track_$(date +%Y%m%d).log"
if ! command -v gpspipe &> /dev/null; then
    echo "请先安装 gpsd 和 gpspipe"
    exit 1
fi
# 启动gpsd(如果未运行)
sudo gpsd /dev/ttyAMA0  # 替换为你的GPS设备端口
# 监听GPS数据并写入日志
gpspipe -w -n 100000 | while read line
do
    # 解析JSON数据,提取时间和经纬度(需安装 jq 以便解析)
    if command -v jq &> /dev/null; then
        time=$(echo "$line" | jq -r '.time // empty')
        lat=$(echo "$line" | jq -r '.lat // empty')
        lon=$(echo "$line" | jq -r '.lon // empty')
        speed=$(echo "$line" | jq -r '.speed // empty')
        if [ -n "$time" ] && [ -n "$lat" ] && [ -n "$lon" ]; then
            echo "$time $lat $lon $speed" >> "$LOG_FILE"
        fi
    else
        # 不解析JSON,直接保存原始数据
        echo "$line" >> "$LOG_FILE"
    fi
done

说明:适用于树莓派、GPS模块等场景,生成带时间戳的位置日志。


自动生成日报/周报(Shell + awk)

基于记录的CSV文件,汇总统计每日里程。

#!/bin/bash
# 统计 vehicle_usage.csv 中每日累计里程
REPORT_FILE="daily_report_$(date +%Y%m%d).txt"
echo "========== 车辆使用日报表 ==========" > "$REPORT_FILE"
echo "日期 | 行驶里程(km) | 驾驶员" >> "$REPORT_FILE"
echo "--------------------------------" >> "$REPORT_FILE"
awk -F',' 'NR>1 {print $1, $7, $8}' vehicle_usage.csv | awk '{
    sum[$1] += $2
    if (!($1 in drivers)) drivers[$1]=$3
}
END {
    for (date in sum) {
        printf "%s | %.1f | %s\n", date, sum[date], drivers[date]
    }
}' >> "$REPORT_FILE"
echo "报表已生成: $REPORT_FILE"

Web界面管理(轻量级Flask + SQLite)

提供一个网页端手动/自动记录,适合多人使用。

from flask import Flask, request, render_template, redirect
import sqlite3
from datetime import datetime
app = Flask(__name__)
DB_FILE = "vehicle.db"
def init_db():
    conn = sqlite3.connect(DB_FILE)
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS usage_records (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        date TEXT,
        time TEXT,
        start_loc TEXT,
        end_loc TEXT,
        start_mile REAL,
        end_mile REAL,
        distance REAL,
        driver TEXT
    )''')
    conn.commit()
    conn.close()
@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        date = request.form.get('date') or datetime.now().strftime("%Y-%m-%d")
        time = request.form.get('time') or datetime.now().strftime("%H:%M")
        start = request.form['start']
        end = request.form['end']
        start_mile = float(request.form['start_mile'])
        end_mile = float(request.form['end_mile'])
        driver = request.form['driver']
        distance = end_mile - start_mile
        conn = sqlite3.connect(DB_FILE)
        c = conn.cursor()
        c.execute("INSERT INTO usage_records VALUES (?,?,?,?,?,?,?,?)",
                  (None, date, time, start, end, start_mile, end_mile, distance, driver))
        conn.commit()
        conn.close()
        return redirect('/')
    conn = sqlite3.connect(DB_FILE)
    c = conn.cursor()
    c.execute("SELECT * FROM usage_records ORDER BY id DESC LIMIT 50")
    records = c.fetchall()
    conn.close()
    return render_template('index.html', records=records)
if __name__ == '__main__':
    init_db()
    app.run(host='0.0.0.0', port=5000, debug=False)

配套HTMLtemplates/index.html):略,可自行编写带表单和表格的页面。


选择建议

场景 推荐脚本
手动记录,简单快速 Python文本记录(方案1)
自动采集车辆发动机、速度数据 OBD脚本(方案2)
实时追踪车辆位置 GPS脚本(方案3)
生成统计报表 Shell + awk(方案4)
团队管理、Web可视化 Flask + SQLite(方案5)

额外考虑

  • 数据存储:CSV适合小规模,SQLite适合多用户查询,InfluxDB适合高频时序数据。
  • 合规性:记录车辆使用涉及隐私(如驾驶员、位置),需确保符合当地数据保护法规。
  • 硬件成本:OBD适配器约30-100元,GPS模块约50-200元。

根据你的实际需求(是否有OBD/GPS硬件、是否需要网络界面、记录频率等)选择合适的方案即可。

抱歉,评论功能暂时关闭!