Вариант авто-рестарта Klipper при включении принтера
Принтер у меня после печати выключен, а малина постоянно в боевой готовности, поэтому озадачился перезапуском klipper после включения принтера.
Сначала сделал через планировщик, как описано тут, но работало как то не стабильно, может перезапустить, а может и нет. Пробовал варианты в тырнете перезапуска без задержки, но заметил что перезапускается служба по нескольку раз подряд и как то раз сервис вообще вылетел. В общем решил сделать свой вариант.
Линукс я не знаю, но методом двухчасового гугления и эмпирики созрело решение. Можно поставить хук на модификацию файла в определенной папке. Файл в папке будем менять с помощью того же правила в udev.
Выясняем PRODUCT нашего принтера при подключении через usb, как это сделать написано в вышеназванной статье.
Создаем правило для устройства.
sudo nano /etc/udev/rules.d/99-klipper.rules
Добавляем строку
ACTION=="add", SUBSYSTEM=="usb", ENV{PRODUCT}=="<Ваш PRODUCT>", RUN+="/bin/sh -c 'echo > /dev/3dprinter/klipper_restart'"
Теперь при включении устройства будет меняться файл /dev/3dprinter/klipper_restart
Теперь создаем в /home/pi/scripts/ простенькую програмку на питоне, которая будет ловить события изменения файлов в папке /dev/3dprinter и перезапускать klipper.
import time
import fcntl
import os
import signal
from threading import Event
FNAME = "/dev/3dprinter"
#file change event callback
def handler(signum, frame):
#wait 3 seconds
time.sleep(3)
#restart klipper
dev = os.open("/tmp/printer", os.O_RDWR)
os.write(dev,"RESTART\n".encode())
#return one shot event hook
fcntl.fcntl(fd, fcntl.F_NOTIFY,fcntl.DN_MODIFY)
#set one shot event hook
signal.signal(signal.SIGIO, handler)
fd = os.open(FNAME, os.O_RDONLY)
fcntl.fcntl(fd, fcntl.F_SETSIG, 0)
fcntl.fcntl(fd, fcntl.F_NOTIFY,fcntl.DN_MODIFY)
#infinity delay
Event().wait()
Создаем стартовый скрипт, в нем также необходимо создавать папку /dev/3dprinter, так как она будет удалена системой после перезагрузки.
sudo mkdir /dev/3dprinter
cd /home/pi/scripts/
sudo python3 ./klipper_restart.py &
Скрипт кидаем в rc.local.
Теперь при включении принтера klipper автоматически перезагрузится один раз спустя 3 секунды.
Еще больше интересных статей
Внезапно 3D-печать в Пятерочке
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Bambu Lab A1 не догревает стол
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Наблюда-Ski 04.6: Наращиваем в длину, или Фьюз и не только
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Недавно было несколько тем по сращиванию прутков,
и для начи...
Комментарии и вопросы
Кстати, компас v22, сборка 22....
Здравствуйте! Очень полезная в...
В предыдущей статье https://3d...
Здравствуйте всем кто читает д...
Не могу понять почему образовы...
Всем привет, кто может подсказ...
Всем доброго дня\вечера\ночи!...