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

Осталось сделать поясняющие значки на кнопках и будет почти как промышленный станок с ЧПУ