scripts: setup-bt.sh + run.py --no-llm mode for first ELM test
This commit is contained in:
@@ -11,9 +11,12 @@
|
|||||||
7. Сохраняет всё в SQLite
|
7. Сохраняет всё в SQLite
|
||||||
|
|
||||||
Использование:
|
Использование:
|
||||||
DEEPSEEK_API_KEY=sk-... python run.py
|
DEEPSEEK_API_KEY=sk-... python run.py # полный цикл
|
||||||
|
python run.py --no-llm # только чтение данных (без LLM)
|
||||||
|
python run.py --no-llm --port /dev/rfcomm0 # свой порт
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from elmer.config import load
|
from elmer.config import load
|
||||||
@@ -24,21 +27,29 @@ from elmer.prompts import SYSTEM_PROMPT, build_user_prompt
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description="Elmer — диагностика авто через ELM327 + LLM")
|
||||||
|
parser.add_argument("--no-llm", action="store_true", help="Только чтение данных, без LLM")
|
||||||
|
parser.add_argument("--port", help="Порт ELM327 (по умолчанию из config.yaml)")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
config = load()
|
config = load()
|
||||||
|
|
||||||
# ── 1. ELM327 ────────────────────────────────────
|
# ── 1. ELM327 ────────────────────────────────────
|
||||||
print("🔌 Подключение к ELM327...")
|
print("🔌 Подключение к ELM327...")
|
||||||
elm_cfg = config["elm327"]
|
elm_cfg = config["elm327"]
|
||||||
|
port = args.port or elm_cfg["port"]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
elm = ELM327(port=elm_cfg["port"], baudrate=elm_cfg["baudrate"])
|
elm = ELM327(port=port, baudrate=elm_cfg["baudrate"])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ Не удалось открыть порт {elm_cfg['port']}: {e}")
|
print(f"❌ Не удалось открыть порт {port}: {e}")
|
||||||
print(" Проверь Bluetooth-сопряжение: bluetoothctl pair <MAC>")
|
print(" Проверь Bluetooth-сопряжение:")
|
||||||
|
print(" bash scripts/setup-bt.sh")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if not elm.init():
|
if not elm.init():
|
||||||
print("❌ ELM327 не ответил на ATZ. Проверь соединение.")
|
print("❌ ELM327 не ответил на ATZ. Проверь соединение.")
|
||||||
|
elm.close()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
print("✅ ELM327 готов")
|
print("✅ ELM327 готов")
|
||||||
|
|
||||||
@@ -70,11 +81,27 @@ def main():
|
|||||||
|
|
||||||
elm.close()
|
elm.close()
|
||||||
|
|
||||||
# ── 5. DeepSeek ──────────────────────────────────
|
# ── 5. Сохранение в SQLite (всегда) ──────────────
|
||||||
|
db = Database()
|
||||||
|
car_id = db.get_or_create_car(vin)
|
||||||
|
token_id = db.create_token(car_id)
|
||||||
|
for dtc in dtc_codes:
|
||||||
|
db.add_dtc(token_id, dtc["code"], dtc.get("description", ""), dtc["status"])
|
||||||
|
for p in parameters:
|
||||||
|
db.add_parameter(token_id, p["pid_code"], p["name"], p["value"], p["unit"])
|
||||||
|
print(f"\n💾 Сохранено в elmer.db (token_id={token_id})")
|
||||||
|
|
||||||
|
# ── 6. DeepSeek (опционально) ────────────────────
|
||||||
|
if args.no_llm:
|
||||||
|
print("\n⏭️ Пропуск LLM (--no-llm). Данные сохранены в elmer.db")
|
||||||
|
return
|
||||||
|
|
||||||
api_key = config["deepseek"]["api_key"]
|
api_key = config["deepseek"]["api_key"]
|
||||||
if not api_key:
|
if not api_key:
|
||||||
print("\n❌ DEEPSEEK_API_KEY не задан. Установи переменную окружения.")
|
print("\n❌ DEEPSEEK_API_KEY не задан.")
|
||||||
sys.exit(1)
|
print(" Установи: export DEEPSEEK_API_KEY=sk-...")
|
||||||
|
print(" Или запусти без LLM: python run.py --no-llm")
|
||||||
|
return
|
||||||
|
|
||||||
print("\n🧠 Отправка в DeepSeek...")
|
print("\n🧠 Отправка в DeepSeek...")
|
||||||
diagnoser = Diagnoser(
|
diagnoser = Diagnoser(
|
||||||
@@ -89,19 +116,9 @@ def main():
|
|||||||
print(answer)
|
print(answer)
|
||||||
print("=" * 60)
|
print("=" * 60)
|
||||||
|
|
||||||
# ── 6. Сохранение в SQLite ──────────────────────
|
|
||||||
db = Database()
|
|
||||||
car_id = db.get_or_create_car(vin)
|
|
||||||
token_id = db.create_token(car_id)
|
|
||||||
|
|
||||||
for dtc in dtc_codes:
|
|
||||||
db.add_dtc(token_id, dtc["code"], dtc.get("description", ""), dtc["status"])
|
|
||||||
for p in parameters:
|
|
||||||
db.add_parameter(token_id, p["pid_code"], p["name"], p["value"], p["unit"])
|
|
||||||
db.add_llm_message(token_id, "user", user_prompt)
|
db.add_llm_message(token_id, "user", user_prompt)
|
||||||
db.add_llm_message(token_id, "assistant", answer)
|
db.add_llm_message(token_id, "assistant", answer)
|
||||||
|
print(f"\n💾 LLM-ответ сохранён (token_id={token_id})")
|
||||||
print(f"\n💾 Сохранено в elmer.db (token_id={token_id})")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Executable
+50
@@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# setup-bt.sh — найти и подключить ELM327 по Bluetooth
|
||||||
|
# Запуск: bash scripts/setup-bt.sh
|
||||||
|
|
||||||
|
echo "🔍 Ищем Bluetooth-адаптер..."
|
||||||
|
if ! command -v bluetoothctl &>/dev/null; then
|
||||||
|
echo "❌ bluetoothctl не найден. Установи: sudo apt install bluez"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📡 Включаем Bluetooth..."
|
||||||
|
rfkill unblock bluetooth 2>/dev/null
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
echo "🔍 Сканируем устройства (5 сек)..."
|
||||||
|
bluetoothctl --timeout 5 scan on 2>/dev/null &
|
||||||
|
sleep 6
|
||||||
|
bluetoothctl scan off 2>/dev/null
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📋 Найденные устройства:"
|
||||||
|
bluetoothctl devices | while read -r line; do
|
||||||
|
echo " $line"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "⚡ Если ELM327 в списке — введи его MAC (например 11:22:33:44:55:66):"
|
||||||
|
read -r MAC
|
||||||
|
|
||||||
|
if [ -z "$MAC" ]; then
|
||||||
|
echo "❌ MAC не введён. Попробуй ещё раз."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🔗 Сопряжение с $MAC..."
|
||||||
|
bluetoothctl pair "$MAC" 2>&1
|
||||||
|
bluetoothctl trust "$MAC" 2>&1
|
||||||
|
|
||||||
|
echo "📡 Привязка к /dev/rfcomm0..."
|
||||||
|
sudo rfcomm bind 0 "$MAC" 2>&1
|
||||||
|
|
||||||
|
if [ -e /dev/rfcomm0 ]; then
|
||||||
|
echo "✅ /dev/rfcomm0 готов"
|
||||||
|
else
|
||||||
|
echo "⚠️ /dev/rfcomm0 не создался. Попробуй: sudo rfcomm bind 0 $MAC"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ Готово. Запускай: DEEPSEEK_API_KEY=sk-... python run.py"
|
||||||
|
echo " Или без LLM: python run.py --no-llm"
|
||||||
Reference in New Issue
Block a user