Кремень FMZ Реклама
Kremen FMHM Реклама

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

RamRT
Идет загрузка
Загрузка
17.02.2020
3837
9
Техничка

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

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

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

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
Комментарии к статье