Обновить myscript.py
Добавлен поиск пароля в логе
This commit is contained in:
134
myscript.py
134
myscript.py
@@ -7,6 +7,8 @@ import os
|
|||||||
import re
|
import re
|
||||||
import glob
|
import glob
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import time
|
||||||
|
import serial
|
||||||
|
|
||||||
class MainApp:
|
class MainApp:
|
||||||
def __init__(self, root):
|
def __init__(self, root):
|
||||||
@@ -24,6 +26,8 @@ class MainApp:
|
|||||||
self.small_font = ('Arial', 16)
|
self.small_font = ('Arial', 16)
|
||||||
|
|
||||||
self.create_widgets()
|
self.create_widgets()
|
||||||
|
# Автоматически открываем Minicom при запуске
|
||||||
|
self.root.after(1000, self.open_minicom) # Задержка 1 секунда перед открытием Minicom
|
||||||
|
|
||||||
def position_window_left(self):
|
def position_window_left(self):
|
||||||
"""Позиционирует окно по левому краю экрана"""
|
"""Позиционирует окно по левому краю экрана"""
|
||||||
@@ -82,13 +86,13 @@ class MainApp:
|
|||||||
# Кнопка Minicom
|
# Кнопка Minicom
|
||||||
self.minicom_btn = tk.Button(
|
self.minicom_btn = tk.Button(
|
||||||
self.root,
|
self.root,
|
||||||
text="Minicom",
|
text="Получить пароль",
|
||||||
font=self.big_font,
|
font=self.big_font,
|
||||||
bg='#FF9800',
|
bg='#FF9800',
|
||||||
fg='white',
|
fg='white',
|
||||||
width=15,
|
width=15,
|
||||||
height=2,
|
height=2,
|
||||||
command=self.open_minicom
|
command=self.get_password
|
||||||
)
|
)
|
||||||
self.minicom_btn.pack(pady=10)
|
self.minicom_btn.pack(pady=10)
|
||||||
|
|
||||||
@@ -153,7 +157,131 @@ class MainApp:
|
|||||||
# Добавляем начальное сообщение в лог
|
# Добавляем начальное сообщение в лог
|
||||||
self.add_to_log("✅ Приложение запущено и готово к работе")
|
self.add_to_log("✅ Приложение запущено и готово к работе")
|
||||||
self.add_to_log("📐 Окно позиционировано по левому краю (900x900)")
|
self.add_to_log("📐 Окно позиционировано по левому краю (900x900)")
|
||||||
|
|
||||||
|
def get_password(self):
|
||||||
|
"""Получает пароль от устройства"""
|
||||||
|
self.add_to_log("🔑 Запуск процесса получения пароля...")
|
||||||
|
self.status_var.set("Получение пароля...")
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Прошивка STM32 с firmware для получения UID
|
||||||
|
self.add_to_log("🔍 Прошивка STM32 для получения UID...")
|
||||||
|
stm32_firmware = os.path.expanduser("~/fw/getuid/STM32_GET_UID.bin")
|
||||||
|
|
||||||
|
|
||||||
|
if os.path.exists(stm32_firmware):
|
||||||
|
# Стираем флеш-память STM32
|
||||||
|
self.add_to_log("🧹 Стирание флеш-памяти STM32...")
|
||||||
|
erase_result = subprocess.run([
|
||||||
|
'st-flash', 'erase'
|
||||||
|
], capture_output=True, text=True, timeout=30)
|
||||||
|
|
||||||
|
if erase_result.returncode != 0:
|
||||||
|
self.add_to_log(f"❌ Ошибка стирания STM32: {erase_result.stderr}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Прошивка STM32
|
||||||
|
|
||||||
|
# Прошивка ESP32
|
||||||
|
self.add_to_log("📥 Прошивка ESP32 для получения пароля...")
|
||||||
|
port = "/dev/ttyUSB0"
|
||||||
|
|
||||||
|
# Файлы для ESP32
|
||||||
|
bootloader_path = os.path.expanduser("~/fw/getuid/bootloader.bin")
|
||||||
|
firmware_path = os.path.expanduser("~/fw/getuid/ET_22KW_1.0b.bin")
|
||||||
|
partition_path = os.path.expanduser("~/fw/getuid/partition-table.bin")
|
||||||
|
www_path = os.path.expanduser("~/fw/getuid/www.bin")
|
||||||
|
|
||||||
|
if not all([os.path.exists(p) for p in [bootloader_path, firmware_path, partition_path, www_path]]):
|
||||||
|
self.add_to_log("❌ Не все файлы прошивки GetUID найдены")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Стираем флеш-память ESP32
|
||||||
|
self.add_to_log("🧹 Стирание флеш-памяти ESP32...")
|
||||||
|
esp_erase_result = subprocess.run([
|
||||||
|
'esptool.py', '--chip', 'esp32', '--port', port, 'erase_flash'
|
||||||
|
], capture_output=True, text=True, timeout=60)
|
||||||
|
|
||||||
|
time.sleep(60) # Ждем после стирания
|
||||||
|
|
||||||
|
# Прошиваем ESP32
|
||||||
|
flash_command = [
|
||||||
|
'esptool.py', '--chip', 'esp32', '--port', port, '--baud', '460800',
|
||||||
|
'write_flash', '--flash_mode', 'dio', '--flash_freq', '40m', '--flash_size', 'detect',
|
||||||
|
'0x1000', bootloader_path,
|
||||||
|
'0x10000', firmware_path,
|
||||||
|
'0x8000', partition_path,
|
||||||
|
'0x210000', www_path
|
||||||
|
]
|
||||||
|
|
||||||
|
self.add_to_log(f"🔧 Команда прошивки: {' '.join(flash_command)}")
|
||||||
|
flash_result = subprocess.run(flash_command, capture_output=True, text=True, timeout=180)
|
||||||
|
|
||||||
|
if flash_result.returncode != 0:
|
||||||
|
self.add_to_log(f"❌ Ошибка прошивки ESP32: {flash_result.stderr}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.add_to_log("📥 Прошивка STM32 специальной прошивкой...")
|
||||||
|
flash_result = subprocess.run([
|
||||||
|
'st-flash', '--reset', 'write',
|
||||||
|
stm32_firmware, '0x08000000'
|
||||||
|
], capture_output=True, text=True, timeout=30)
|
||||||
|
|
||||||
|
if flash_result.returncode != 0:
|
||||||
|
self.add_to_log(f"❌ Ошибка прошивки STM32: {flash_result.stderr}")
|
||||||
|
return False
|
||||||
|
# Перезагрузка устройств
|
||||||
|
self.add_to_log("🔄 Перезагрузка устройств...")
|
||||||
|
|
||||||
|
# Перезагрузка ESP32
|
||||||
|
subprocess.run(['esptool.py', '--port', port, 'run'],
|
||||||
|
capture_output=True, text=True, timeout=20)
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
# Перезагрузка STM32
|
||||||
|
subprocess.run(['st-flash', 'reset'],
|
||||||
|
capture_output=True, text=True, timeout=20)
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
# Повторяем перезагрузку для надежности
|
||||||
|
self.add_to_log("🔄 Повторная перезагрузка устройств...")
|
||||||
|
subprocess.run(['esptool.py', '--port', port, 'run'],
|
||||||
|
capture_output=True, text=True, timeout=20)
|
||||||
|
time.sleep(5)
|
||||||
|
subprocess.run(['st-flash', 'reset'],
|
||||||
|
capture_output=True, text=True, timeout=20)
|
||||||
|
|
||||||
|
# Чтение данных с COM-порта
|
||||||
|
self.add_to_log("📋 Чтение данных с порта...")
|
||||||
|
try:
|
||||||
|
with serial.Serial(port, 115200, timeout=20) as ser:
|
||||||
|
time.sleep(2)
|
||||||
|
data = ser.read(10000)
|
||||||
|
received_data = data.decode(errors='ignore')
|
||||||
|
self.add_to_log(f"📟 Полученные данные: {received_data}")
|
||||||
|
|
||||||
|
# Updated pattern to match "Hash:: XXXXXXXXXXXX" format
|
||||||
|
import re
|
||||||
|
password_match = re.search(r'Hash:: ([A-Za-z0-9]+)', received_data)
|
||||||
|
if password_match:
|
||||||
|
password = password_match.group(1)
|
||||||
|
self.add_to_log(f"🔑 Найден пароль: {password}")
|
||||||
|
self.status_var.set(f"Пароль: {password}")
|
||||||
|
return password
|
||||||
|
else:
|
||||||
|
self.add_to_log("❌ Пароль не найден в полученных данных")
|
||||||
|
return None
|
||||||
|
except serial.SerialException as e:
|
||||||
|
self.add_to_log(f"❌ Ошибка чтения COM-порта: {str(e)}")
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
self.add_to_log(f"❌ Файл прошивки STM32 для получения UID не найден: {stm32_firmware}")
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
self.add_to_log(f"❌ Произошла ошибка при получении пароля: {str(e)}")
|
||||||
|
self.status_var.set("Ошибка получения пароля")
|
||||||
|
return None
|
||||||
|
|
||||||
def open_minicom(self):
|
def open_minicom(self):
|
||||||
"""Открывает minicom в отдельном терминале"""
|
"""Открывает minicom в отдельном терминале"""
|
||||||
try:
|
try:
|
||||||
@@ -267,7 +395,7 @@ class MainApp:
|
|||||||
"""Автоматический режим для STM32 или ESP32"""
|
"""Автоматический режим для STM32 или ESP32"""
|
||||||
self.status_var.set(f"Режим Авто {mcu_type.upper()} активирован")
|
self.status_var.set(f"Режим Авто {mcu_type.upper()} активирован")
|
||||||
self.add_to_log(f"🔄 Запуск автоматического режима для {mcu_type.upper()}...")
|
self.add_to_log(f"🔄 Запуск автоматического режима для {mcu_type.upper()}...")
|
||||||
import time
|
|
||||||
|
|
||||||
if mcu_type == 'test':
|
if mcu_type == 'test':
|
||||||
self.auto_mode_erase_stm32()
|
self.auto_mode_erase_stm32()
|
||||||
|
|||||||
Reference in New Issue
Block a user