он копирует файлы но нужно вставить еще на usb накопитель
import os
import time
import RPi.GPIO as GPIO
import openpyxl
import pyperclip
import requests
import subprocess
from datetime import datetime
import threading
import shutil  # Импортируем shutil для копирования файлов

# URL сервера Flask
FLASK_SERVER_URL = "http://192.168.50.99:80"  # Адрес сервера
worker_name = 'ARM1'

# Подключаем GPIO-пин для кнопки
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Путь к файлам, которые нужно скопировать (локальные файлы на RPi)
source_files = ['/home/moon/force_upgrade', '/home/moon/ModelC-A_FW_V2.0.9.zip']

# Интервал для отправки heartbeat в секундах
HEARTBEAT_INTERVAL = 30

def check_internet(url='https://www.google.com/', timeout=5):
    """
    Проверяет наличие интернет-соединения путем попытки доступа к указанному URL.
    """
    try:
        _ = requests.get(url, timeout=timeout)
        return True
    except requests.RequestException:
        return False

def send_heartbeat():
    """
    Отправляет периодические запросы heartbeat на сервер с информацией о статусе интернет-соединения.
    """
    while True:
        internet_up = check_internet()
        try:
            response = requests.post(
                f"{FLASK_SERVER_URL}/register_user",
                json={'worker_name': worker_name, 'internet_up': internet_up},
                headers={'Content-Type': 'application/json'},
                timeout=10
            )
            if response.status_code == 200:
                print(f"[{datetime.now()}] Успешная регистрация/обновление статуса на сервере: {'Онлайн' if internet_up else 'Нет интернета'}")
            else:
                try:
                    error_message = response.json().get('message', 'Неизвестная ошибка')
                except ValueError:
                    error_message = 'Не удалось декодировать ответ сервера'
                print(f"[{datetime.now()}] Ошибка при регистрации/обновлении статуса на сервере: {error_message}")
        except requests.exceptions.ConnectionError:
            print(f"[{datetime.now()}] Ошибка подключения к серверу. Сервер недоступен.")
        except Exception as e:
            print(f"[{datetime.now()}] Ошибка при регистрации: {e}")
        time.sleep(HEARTBEAT_INTERVAL)

# Запуск потока heartbeat
heartbeat_thread = threading.Thread(target=send_heartbeat, daemon=True)
heartbeat_thread.start()

while True:
    # Проверяем состояние кнопки
    if GPIO.input(17) == False:
        # Находим подключенные USB накопители
        usb_drives = [f'/media/moon/{d}' for d in os.listdir('/media/moon/') if os.path.isdir(f'/media/moon/{d}')]

        # Копируем файлы на USB накопитель
        if len(usb_drives) > 0:
            destination = usb_drives[0]
            for file in source_files:
                filename = os.path.basename(file)
                
                # Полный путь к целевому файлу
                dest_path = os.path.join(destination, filename)
                
                try:
                    # Проверяем, что источник и назначение не совпадают
                    if os.path.abspath(file) == os.path.abspath(dest_path):
                        print(f"[{datetime.now()}] Файл {filename} уже находится в целевой директории.")
                        continue
                    
                    # Проверяем существование исходного файла
                    if not os.path.exists(file):
                        print(f"[{datetime.now()}] Исходный файл {file} не существует.")
                        continue
                    
                    # Копирование файла с использованием shutil
                    shutil.copy(file, destination)
                    print(f"[{datetime.now()}] Файл {filename} скопирован в {destination}!")
                except Exception as e:
                    print(f"[{datetime.now()}] Ошибка при копировании файла {filename}: {e}")
        
            arma_type = 'CFA'
            # Автоматически определяем текущую дату
            selected_date = datetime.now().strftime("%Y-%m-%d")

            # Получаем текущую дату и время
            current_datetime = datetime.now()

            # Отправляем данные на сервер Flask
            data = {
                'date': selected_date,
                'worker_name': worker_name,
                'timestamp': current_datetime.strftime("%Y-%m-%d %H:%M:%S"),
                'arma_type': arma_type,
            }

            try:
                response = requests.post(
                    f"{FLASK_SERVER_URL}/update_table", 
                    json=data,
                    headers={'Content-Type': 'application/json'},
                    timeout=10
                )

                # После успешной отправки данных на сервер
                if response.status_code == 200:
                    response_data = response.json()
                    if response_data.get('status') == 'success':
                        print(f"[{datetime.now()}] Данные успешно отправлены на сервер для даты {selected_date}")
                        
                        # Здесь можно добавить код для автоматического обновления таблицы
                        # Например, вызвать функцию updateTable() через AJAX
                        try:
                            update_response = requests.get(f"{FLASK_SERVER_URL}/get_table_data", params={'date': selected_date}, timeout=10)
                            if update_response.status_code == 200:
                                print(f"[{datetime.now()}] Таблица успешно обновлена.")
                            else:
                                print(f"[{datetime.now()}] Ошибка при обновлении таблицы.")
                        except Exception as e:
                            print(f"[{datetime.now()}] Ошибка при обновлении таблицы: {e}")
                    else:
                        print(f"[{datetime.now()}] Ошибка на сервере: {response_data.get('message', 'Неизвестная ошибка')}")
                    
            except requests.exceptions.ConnectionError:
                print(f"[{datetime.now()}] Ошибка подключения к серверу. Сервер недоступен.")
                print(f"[{datetime.now()}] Данные будут сохранены локально.")
                save_locally = True
            except Exception as e:
                print(f"[{datetime.now()}] Ошибка при отправке данных: {e}")
                print(f"[{datetime.now()}] Данные будут сохранены локально.")
                save_locally = True
            else:
                save_locally = response.status_code != 200
        else:
            print(f"[{datetime.now()}] Нет подключенных USB накопителей!")
    time.sleep(0.1)