Двойной klipper

Поделиться:
Двойной klipper

Доброго времени суток всем! Конечно, речь пойдёт не о гонках, как можно подумать из названия, а всего лишь об использовании klipper на 2-х машинах и одном orange pi pc. А картинка, так, улыбнуться.
Хочу сказать отдельное спасибо товарищу unisys за помощь и, конечно, товарищам с гитхаба klipper
Часть материалов взята из статьи «НастройкаOctoPrint для работы с несколькими принтерами»

Не буду долго занудствовать, перейду сразу к описанию.

Условия:
1. Наличие ПК под управлением armbian Stretch (Debian).
2. Наличие установленного и настроенного octoprint.
3. Наличие установленного и настроенного klipper.
4. 2 принтера, на которых хочется запустить klipper.
Первое что нам понадобится, это создать копию octoprint (более подробнее, по ссылке выше).
cp -R /home/pi/.octoprint /home/pi/.octoprint2
Копируем конфигурацию Octoprint
sudo cp /etc/default/octoprint /etc/default/octoprint2
Меняем настройки в файле конфигурации
sudo nano /etc/default/octoprint2
Необходимо поправить пару строк
HOST=0.0.0.0
PORT=5001
D AEMON_ARGS="--host=$HOST --port=$PORT --basedir /home/pi/.octoprint2/"
Выйти и сохранить Ctrl+X, затем Y, потом Enter (Эта последовательность повторяется во всех редактируемых файлах, я ее буду дальше пропускать, но стоит запомнить!)
Копируем скрипт запуска
sudo cp /etc/init.d/octoprint /etc/init.d/octoprint2
И правим его
sudo nano /etc/init.d/octoprint2
В верхней части этого файла вносим изменения! Измените каждое имя от «octoprint» до «octoprint2» и «OctoPrint» до «OctoPrint2», но оставьте строку «DAEMON=/usr/bin/octoprint» нетронутой! (Для тех у кого в /etc/init.d/octoprint2 есть такое # Author: Sami Olmari & Gina Hau? ge Надо вручную определить демона:
DAEMON=/usr/bin/octoprint
Примерно так:
#!/bin/sh
### BEGIN INIT INFO
# Provides: octoprint2
# Required-Start: $local_fs networking
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: OctoPrint2 daemon
# Description: Starts the OctoPrint2 daemon with the user specified in
# /etc/default/octoprint2.
### END INIT INFO
# Author: Sami Olmari
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="OctoPrint2 Daemon"
NAME="OctoPrint2"
DAEMON=/usr/bin/octoprint
PIDFILE=/var/run/$NAME.pid
PKGNAME=octoprint2
SCRIPTNAME=/etc/init.d/$PKGNAME
Пере запускаем демона
sudo systemctl daemon- reload
Чтобы все автоматически запускалось обновляем rc.d
sudo update-rc.d octoprint2 defaults
Запускаем новый экземпляр Octoprint
sudo /etc/init.d/octoprint2 start
Проверяем был ли успешно добавлен сервис
systemctl status octoprint2.service
Все должно работать, как надо статус должен быть Active. (Для выхода жмем Ctrl+C). Копия octoprint будет доступна по вашему адресу и порт 5001.
Теперь к основному, ради чего это все делалось – клон klipper:

Первый способ:
Копируем автозапуск klipper
sudo cp /etc/init.d/klipper /etc/init.d/klipper2
Открываем для редактирования
sudo nano /etc/init.d/klipper2
и удаляем все, кроме
#!/bin/bash !
Добавляем строку
~/klippy-env/bin/python ~/klipper/klippy/klippy. py ~/printer2.cfg -l /tmp/klippy2.log -I /tmp/ printer2 &
Знак & - позволит запускаться процессу фоновым.
Делаем активным скриптом
sudo chmod +x /etc/init.d/klipper2
Перезапускаем демона
sudo systemctl daemon-reload
Чтобы все автоматически запускалось обновляем rc.d
sudo update-rc.d klipper2 defaults
Запускаем новый экземпляр
sudo /etc/init.d/klipper2 start
Сервис klipper запустился и работал, но что-то мне не понравилось (честно не помню), я пошел другим путём. Единственное в octoprint следует поменять значения с /tmp/printer на /tmp/printer2. То же самое в плагине octoklipper! А также printer. cfg на printer2. cfg.

Второй способ:
Копируем автозапуск клипера и параметры
sudo cp /etc/init.d/klipper /etc/init.d/klipper2
sudo cp /etc/default/klipper /etc/default/klipper2
sudo cp /var/run/klipper.pid /var/run/klipper2.pid
открываем конфигурацию
sudo nano /etc/default/klipper2
и меняем ARGS: изменить путь к конфигу и к логу и не забываем добавить в конце перед кавычками -I /tmp/printer2. Концовка выглядит примерно вот так:
printer2.cfg -l /tmp/klippy2.log -I /tmp/printer2"
Далее открываем автозапуск
sudo nano /etc/init.d/klipper2
и все значения klipper надо поменять на klipper2 (Во всех строках после klipper добавить цифру 2!)
После редактирования сохраняемся и продолжаем. Делаем активным скриптом
sudo chmod +x /etc/init.d/klipper2
Перезапускаем демона
sudo systemctl daemon-reload
Чтобы все автоматически запускалось обновляем rc.d
sudo update-rc.d klipper2 defaults
Запускаем новый экземпляр klipper
sudo /etc/init.d/klipper2 start
Проверяем, был ли успешно добавлен сервис
systemctl status klipper2.service
если есть зеленым activ то все хорошо (может понадобиться нажать CTRL+C для выхода)
Все. Сервис klipper2 запущен и можно подключаться ко второму принтеры, единственное в octoprint следует поменять значения с /tmp/printer на /tmp/printer2. То же самое в плагине octoklipper!

И напоследок. Если вы столкнулись с тем, что у вас две одинаковые китайские платы управления принтером, то у них совпадают вендор и продукт ид. Т.е. платы братья близнецы и вставляя в порт ПК, не всегда удается получить доступ к нужной плате. На форуме есть специалисты, которые лучше разбираются и объяснят это, поэтому перейду сразу к действиям, которые позволят это исправить:

Делаем привязку 2-х одинаковых плат к порту:
Подключаем устройства в порты и смотрим уникальность оборудования
udevadm info --name=/dev/ttyACMx --attribute-walk
Где x-число, соответствующее порту устройства от 0 до 9. В списке атрибутов необходимо найти уникальный для устройства атрибут (check idVendor и idProduct, или usb от 0 до 9, или, как в моем случае , USB с обозначением 6-1:1.0 – первая плата, 8-1:1.0 – вторая плата).
Дальше создаем фал правила и открываем его
sudo nano /etc/udev/rules.d/99-custom.rules
Если вы нашли уникальный атрибут устройства idVendor, то напишите следующую строку в файле правил:
ACTION=="add",SUBSYSTEM=="tty",ATTRS{idVendor}=="{VendorID}",ATTRS{idProduct}=="{ProductID}",SYMLINK+="{PrinterName}",GROUP="dialout"
Если нет ничего уникального в двух ваших платах, вы можете сделать статическое назначение на основе ядра USB (поэтому в основном любое устройство, которое вы подключаете к данному порту, создает символическую ссылку с тем же именем). Он хорошо работает даже с USB-концентраторами! Но не стоит путать эти устройства местами.
Мой пример:
ACTION=="add",SUBSYSTEM=="tty",KERNELS=="6-1:1.0",SYMLINK+="fribot",GROUP="dialout"
ACTION=="add",SUBSYSTEM=="tty",KERNELS=="8-1:1.0",SYMLINK+="p905",GROUP="dialout"
В данной группе меняете значения KERNELS 6-1:1.0 и 8-1:1.0 на свои, а так же fribot и p905. Сохраняемся и перезагружаем правила udevadm:
udevadm control -- reload
Теперь, если все прошло правильно, вы можете подключить устройство и ввести в своем терминале:
ls /dev/p905
чтобы увидеть, если вы успешно создали символическую ссылку. Поскольку это символическая ссылка, вы сможете получить доступ к /dev/p905 и /dev/ttyACM0, но они будут указывать на одно и то же устройство. Выскочит что-то типа такого: dev/p905 ……….. => dev/ttyACM0. Значит все хорошо и в настройках printer2. cfg можно прописать
[mcu]
serial: /dev/fribot # или указанное вами имя.
На этом все, что я хотел вам изложить. Предупреждаю сразу, дабы избежать глупых вопросов: у меня все работает, но я не владею достаточными знаниями, чтобы вам помочь или исправить ошибку. Если у кого-то есть, что добавить, исправить, поругать, то прошу в комментарии.
Источник: 3dtoday.ru
2018 3dtrands.ru - самые последние тренды в 3D мире.