Вариант авто-рестарта 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 секунды.
Еще больше интересных статей
Покраска пластика
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Приветствую сообщество
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Придумал, экструдер.....
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
Да я просто не могу понять зач...
Идея хорошая и исполнение тоже...
3. Директ. А не задумывались н...
Всем привет, кто-либо ставил 2...
Всем привет. Печатал коробку д...
Всем привет. Мой опыт в 3д печ...
Доброго времени суток, подскаж...