OctoPrint включение принтера и печать по расписанию.

RamRT
Идет загрузка
Загрузка
17.02.2020
1143
9
печатает на Ender 3 Pro
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

5

Замена штатной платы в связке с Raspberry Pi и управлением по OctoPrint вдохнула в мой бюджетный Ender 3 PRO новую жизнь, а мне подарила новые впечатления. Рано или поздно задался вопросом, а как в этой связке настроить печать по расписанию. Ночью, даже при новых тихих драйверах, не сильно приятно слышать возню принтера, а вот если бы рано утром печать начиналась автоматически, это было бы здорово. Поиск ответа особо результатов не дал. Сделал по своему, все работает как и планировалось. Вот решил поделиться.

    1. Настроил питание принтера по видео Сергея Ирбиса (ссылка) через релейный модуль для Arduino. Очень важно прописать команды включения и отключения принтера в файле /home/pi/.octoprint/config.yaml. У меня блок, описывающий новые кнопки, выглядит так:

system:

    actions:

    - action: power_on

        command: /home/pi/OctoPrint/sh/poweron.sh

        confirm: Turn on printer.

        name: Printer ON

    - action: power_off

        command: /home/pi/OctoPrint/sh/poweroff.sh

        confirm: Turn off printer.

        name: Printer OFF

        Файл config.yaml очень чувствителен к структуре табуляции, так что предоставленный кусок кода только для     примера.

    2. Управление командами OctoPrint сделал на его API в простом Shell скрипте. API в ответ формирует json файл, и чтоб его распарсить, установил первое что подсказал гугл. Выполнил команду:

        sudo apt install jq

    3. В папке где лежат скрипты управления питанием принтера (у меня /home/pi/OctoPrint/sh/) создал новый файл autoprint.sh со следующем содержанием:

#!/bin/bash

# Vars

FILE="$(date +%Y-%m-%d_%H).gcode"

SERVER="http://192.168.0.15:5000" # Пишем домен своего сервера OctoPrint в сети;

API="37868768768787687876" # Пишем API для подключения к OctoPrint;

REQUEST=`curl -H "X-Api-Key: $API" -X GET $SERVER/api/files/local/$FILE | jq '.name'`

if [[ "$REQUEST" = "\"$FILE\"" ]]; then

 curl -H "X-Api-Key: $API" -X POST $SERVER/api/system/commands/custom/power_on

 sleep 30s

 curl -H "X-Api-Key: $API" -H "Content-Type: application/json" --request POST --data '{"command": "connect"}' $SERVER/api/connection

 sleep 10s

 curl -H "X-Api-Key: $API" -H "Content-Type: application/json" --request POST --data '{"command": "select", "print": "true"}' $SERVER/api/files/local/$FILE

else

   echo "Файл не найден. $FILE"

   exit 1

fi

    4. В заключении создал задачу в cron для исполнения скрипта каждый день с 5ти утра до 12ти. Запустил команду от пользователя pi:

        crontab -e

При первом запуске предложит выбрать желаемый редактор, и в открывшемся файле в конец вставил строку:

        01 05-12 * * * /home/pi/OctoPrint/sh/autoprint.sh

Опишу принцип работы. Каждый день с 5ти утра до 12ти дня раз в час cron запускает скрипт, который берет текущую дату и проверяет в загруженных файлах OctoPrint файл с названием вида YYYY-mm-dd_hh.gcode, где YYYY - год, mm - номер месяца, dd - день месяца, hh - час дня от 05 до 12. Если к примеру я хочу чтоб завтра в 7 часов утра принтер начал автоматически печатать нужную мне модель, я переименую нарезанный в слайсере gcode в файл 2020-02-18_07.gcode и через интерфейс OctoPrint просто его загружу в список (Upload). В назначенную дату и час скрипт обнаружит файл, отправит API команду на исполнение прописанной ранее кнопки включить релейный модуль, далее отправит API команду на подключение OctoPrint к принтеру и затем команду на печать файла.

Вопросы и конструктивную критику пишите в комментарии, по возможности отвечу. Спасибо ;)

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

5
Комментарии к статье

Комментарии

18.02.2020 в 09:55
3

Понятно, что правильно настроенный принтер начинает печатать без лишних танцев вокруг него. Но я почему-то стремаюсь запускать не глядя и всё равно каждый раз при запуске смотрю, как там лёг первый слой.

Утром проснулся, по дороге в туалет подошёл к принтеру, нажал кнопку. Потом по дороге обратно заглянул, убедился что всё нормально. Вот и весь скрипт )

18.02.2020 в 12:38
0

как быстро у вас стол и сопло нагреваются, если хватает времени проведенного в туалете. 

А если серьезно, то задумка классная, но по-моему печатать по модельке в день не самая лучшая затея, а если будет допустим сборная модель танка?

18.02.2020 в 21:38
0

Можно запланировать на печать самую большую из частей, а проснувшись уже остальные вручную) 

19.02.2020 в 10:45
0

С момента включения до начала печати обычно 1.5-2 минуты.

Действия такие:

1. Главное меню, подготовка, преднагрев ПЛА - начинает греться голова и стол.

2. (сразу, не дожидаясь полного нагрева) Главное меню, печать с СД, выбор файла.

3. ... печать пошла.

Принтер прюша i3 железный, стол 220х220, грелка штатная текстолитовая от 12В+стекло+фольгированный утеплитель снизу.

Печатаю обычно ПЛА. Для ПЕТГ прогрев стола чуть дольше - 2-3 минуты.

14.03.2020 в 05:17
0

Я пока не очень понимаю возможности Octoprint, позвольте уточнить: где физически должен находиться файл с g-кодом

а) В режиме ожидания?

б) В процессе печати?

14.03.2020 в 20:07
0

В обоих случаях файл находится на сервере OctoPrint. Загружается через web-интерфейс, кнопка Upload. 

14.03.2020 в 20:33
0

Что есть "сервер OctoPrint" физически? Дисковый накопитель на PC или ноутбук? Или дисковый накопитель на плате OctoPrint?

14.03.2020 в 20:50
0

OctoPrint это сервис. Установить можно на PC или как в моем случае на плату RaspberryPi. Соответственно файл физически на дисководом носителе данного устройства. 

14.03.2020 в 21:03
0

Вот, теперь понял.

А на дисковол платы RaspberryPi файл с g-кодом можно удалённо с PC передать?

14.03.2020 в 21:02

Комментарий удалён

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Добавление собственных пунктов в меню Marlin

Petg+ДХМ = Flex?

Влажная палитра

Как сделать многоразовый фильтр к респиратору

Зачем покупать ребенку 3D ручку, или ремонт напечатанных деталей

Ещё вариант шкафа для филамента.