Sovol SV08 управление с клавиатуры.

Для выполнения типовых операций типа загрузки/выгрузки или вызова собственных макросов можно использовать полноценную компьютерную USB клавиатуру или беспроводной pad, как в моем случае. Метод должен работать на любом принтере под управлением klipper.

Для перехвата событий/нажатия клавиш будем использовать пакет evdev  Подключаем клавиатуру в USB порт,  для определения пути к устройству в терминале отправляем команду

python3 -m evdev.evtest

в результате получим список устройств используемых для ввода в моем случае путь к необходимому устройсву /dev/input/event3

Для управления принтером будем использовать Мoonraker API используя вызов HTTP типа http://127.0.0.1:7125/printer/gcode/script?script=G28

Для отправки HTTP запросов установим пакет requests

sudo pip3 install requests

проверим доступность пакета

sudo python3 -c "import requests; print(requests.__version__)"

Осталось написать скрипт который обрабатывает нажатия клавиш и отправляет http запрос для вызова команды g кода или макроса.

По пути /home/biqu   создадим папку /scripts и в ней файл sv08_keyboard.py со следующим содержимым

# Импорт необходимых библиотек
from evdev import InputDevice, categorize, ecodes  # Для работы с устройствами ввода 
import requests  # Для отправки HTTP-запросов

# Инициализация устройства ввода. Указываем путь к устройству.
dev = InputDevice('/dev/input/event3')

# Словарь сопоставления кнопок и URL-адресов
# Формат: 'КНОПКА': 'URL_GCODE_МАКРОС'
KEY_URL_MAP = {
    'KEY_HOME': 'http://127.0.0.1:7125/printer/gcode/script?script=G28',  # Возврат в исходное положение (G28)
    'KEY_INSERT': 'http://127.0.0.1:7125/printer/gcode/script?script=QUAD_GANTRY_LEVEL',  # Калибровка портала
    'KEY_DELETE': 'http://127.0.0.1:7125/printer/gcode/script?script=BED_MESH_CALIBRATE',  # Калибровка стола
    'KEY_1': 'http://127.0.0.1:7125/printer/gcode/script?script=PARKFRONT',  # Парковка спереди
    'KEY_2': 'http://127.0.0.1:7125/printer/gcode/script?script=PARKBED',  # Парковка над столом
    'KEY_3': 'http://127.0.0.1:7125/printer/gcode/script?script=PARKREAR'  # Парковка сзади
}

# Бесконечный цикл чтения событий с устройства
for event in dev.read_loop():
    # Фильтрация событий: обрабатываем только события клавиш
    if event.type == ecodes.EV_KEY:
        # Определение категории события (какая кнопка и какое состояние)
        key = categorize(event)
        
        # Проверка: обрабатываем только момент нажатия кнопки (не отпускание)
        # и проверяем наличие кнопки в нашем словаре
        if key.keystate == key.key_down and key.keycode in KEY_URL_MAP:
            # Информационное сообщение о нажатии
            print(f"Key {key.keycode} pressed")
            
            try:
                # Отправка GET-запроса по URL из словаря
                # timeout=2 - ждем ответа сервера максимум 2 секунды
                response = requests.get(KEY_URL_MAP[key.keycode], timeout=2)
                
                # Вывод информации об успешном запросе
                print(f"URL called: {KEY_URL_MAP[key.keycode]}")
                # Код статуса HTTP-ответа (200 = OK, 404 = Not Found и т.д.)
                print(f"Response: {response.status_code}")
            except Exception as e:
                # Обработка ошибок (например, проблемы с сетью, недоступен сервер)
                print(f"Error: {e}")

добавляем файлу прав

sudo chmod +x sv08_keyboard.py

запустим скрипт

sudo python3 /home/biqu/scripts/sv08_keyboard.py

Теперь, если нажимать прописанные клавиши, то должны вызываться сопоставленные им макросы. Если все работает как планировалось, осталось добавить вызов скрипта в автозагрузку. Сделаем это через systemd. Создадим файл

sudo nano /etc/systemd/sv08_keyboard.service

наполним его следующим содержимым

[Unit]
Description=Home SV08 Key Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/biqu/scripts/sv08_keyboard.py
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Сохраним и выйдем. Запустим сервис

sudo systemctl daemon-reload
sudo systemctl start sv08_keyboard
sudo systemctl enable sv08_keyboard  # Для автозапуска при старте системы

проверим статус

sudo systemctl status Sv08_keyboard

если ответ выглядит так, то значит все получилось

Комментарии

Добавить комментарий