Для выполнения типовых операций типа загрузки/выгрузки или вызова собственных макросов можно использовать полноценную компьютерную 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
если ответ выглядит так, то значит все получилось
Комментарии