Octoprint + Ikea TRADFRI = управление питанием принтера

megamih
Идет загрузка
Загрузка
17.05.2019
1572
9
печатает на Flyingbear Ghost
Техничка

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

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

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

12
После появления Octoprint в моём пространстве печатать стало веселее. Но что улучшить - всегда найдётся, и мой выбор пал на самое очевидное - отчего это я прямо руками принтер включаю и выключаю?

Снова поискал по сайту и интернетам - и не нашёл именно такого варианта, какой реализовал у себя.

Имея шлюз TRADFRI Gateway, установленный и настроенный в связке с Google Home Mini, закономерно решил использовать купленную про запас розетку TRADFRI Wireless control outlet.

Общаться со шлюзом необходимо по протоколу CoAP, клиент для которого умные люди совершенно бесплатно реализовали на C.

Поставим необходимое для сборки и установки

[CODE]sudo apt update

sudo apt install build-essential autoconf automake checkinstall git libtool libtool pkg-config jq

[/CODE]Подготовим код

[CODE]git clone --recursive https://github.com/obgm/libcoap.git

cd libcoap

git submodule update --init --recursive

[/CODE]Соберём приложение (будем использовать tinydtls, чтобы общаться со шлюзом безопасно)

[CODE]./autogen.sh

./configure --disable-documentation --disable-shared --with-tinydtls --enable-dtls --prefix=/usr

make

[/CODE]Подготовим инсталяционный пакет и установим (можно и просто установить - но так проще управлять всем этим, как по мне).

Создадим файл с кратким описанием пакета

[CODE]echo 'A C implementation of the Constrained Application Protocol (RFC 7252)' > ./description-pak

[/CODE]И соберём пакет

[CODE]sudo checkinstall --pkgversion '4.2.0'

0 - Maintainer: [ username ]

1 - Summary: [ A C implementation of the Constrained Application Protocol (RFC 7252) ]

2 - Name: [ libcoap ]

3 - Version: [ 4.2.0 ]

4 - Release: [ 1 ]

5 - License: [ GPL ]

6 - Group: [ checkinstall ]

7 - Architecture: [ amd64 ]

8 - Source location: [ libcoap ]

9 - Alternate source location: [ ]

10 - Requires: [ ]

11 - Provides: [ libcoap ]

12 - Conflicts: [ ]

13 - Replaces: [ ]

Enter a number to change any of them or press ENTER to continue:

[/CODE]Если хочется поменять какое-либо значение - вводим соответствующую цифру и жмём ENTER.

Если всё страивает - просто жмём ENTER.

В процессе подготовки пакета нас спросят, хотим ли мы лишних файлов (нет - жмём 'n') и можно ли их не включать в пакет (да - жмём 'y').

[CODE]Some of the files created by the installation are inside the home directory: /home

You probably don't want them to be included in the package.

Do you want me to list them? [n]: n

Should I exclude them from the package? (Saying yes is a good idea) [n]: y

[/CODE]И за такую храбрость наградят собранным и установленным пакетом

[CODE]**********************************************************************

Done. The new package has been installed and saved to

/home/username/libcoap/libcoap_4.2.0-1_amd64.deb

You can remove it from your system anytime using:

dpkg -r libcoap

**********************************************************************

[/CODE]Для начала общения со шлюзом необходимо получить ключ для пользователя, от имени которого будем общаться. Здесь %SECURITY_CODE% - как это ни странно, Security Code, написанный на нижней поверхности шлюза, %GATEWAY% - IP-адрес или DNS имя шлюза, а %USER_KEY% - то, что шлюз назначит нам в качестве ключа для пользователя octoprint (если ключ не будет использоваться в течение 6 недель - он будет аннулирован, и процедуру получения ключа нужно будет повторить)

[CODE]sudo su - octoprint

/usr/bin/coap-client -m post -u 'Client_identity' -k '%SECURITY_CODE%' -e '{'9090':'octoprint'}' 'coaps://%GATEWAY%:5684/15011/9063'

{'9091':'%USER_KEY%','9029':'1.4.0015'}

[/CODE]Теперь можно узнать адреса устройств, зарегистрированных на шлюзе.

[CODE]/usr/bin/coap-client -m get -u 'octoprint' -k '%USER_KEY%' 'coaps://%GATEWAY%:5684/15001'

[65542,65544,65543,65545]

[/CODE]

И что это за устройства

[CODE]/usr/bin/coap-client -m get -u 'octoprint' -k '%USER_KEY%' 'coaps://%GATEWAY%:5684/15001/65542' | jq -r '.'3'.'1''

TRADFRI remote control

/usr/bin/coap-client -m get -u 'octoprint' -k '%USER_KEY%' 'coaps://%GATEWAY%:5684/15001/65544' | jq -r '.'3'.'1''

TRADFRI bulb E27 opal 1000lm

/usr/bin/coap-client -m get -u 'octoprint' -k '%USER_KEY%' 'coaps://%GATEWAY%:5684/15001/65543' | jq -r '.'3'.'1''

TRADFRI bulb E27 opal 1000lm

/usr/bin/coap-client -m get -u 'octoprint' -k '%USER_KEY%' 'coaps://%GATEWAY%:5684/15001/65545' | jq -r '.'3'.'1''

TRADFRI control outlet

[/CODE]Теперь мы знаем, что 65545 - адрес розетки. Так давайте же её включать :)

[CODE]/usr/bin/coap-client -m put -u 'octoprint' -k '%USER_KEY%' -e '{ '3311': [{ '5850': 1 }] }' 'coaps://%GATEWAY%:5684/15001/65545'

[/CODE]И, конечно - выключать

[CODE]/usr/bin/coap-client -m put -u 'octoprint' -k '%USER_KEY%' -e '{ '3311': [{ '5850': 0 }] }' 'coaps://%GATEWAY%:5684/15001/65545'

[/CODE]Имея знания и силу, добавим красивую обёртку.

Сначала приготовим скрипты в папке '/opt/octoprint/scripts'

[CODE]mkdir /opt/octoprint/scripts

nano /opt/octoprint/scripts/poweron_printer

#!/bin/bash

/usr/bin/coap-client -m put -u 'octoprint' -k '%USER_KEY%' -e '{ '3311': [{ '5850': 1 }] }' 'coaps://%GATEWAY%:5684/15001/65545'

nano /opt/octoprint/scripts/poweroff_printer

#!/bin/bash

/usr/bin/coap-client -m put -u 'octoprint' -k '%USER_KEY%' -e '{ '3311': [{ '5850': 0 }] }' 'coaps://%GATEWAY%:5684/15001/65545'

chmod a+x /opt/octoprint/scripts/power*_printer

[/CODE]Добавим соответствующие пункты в системное меню Octoprint.

[CODE]nano /opt/octoprint/.octprint/config.yaml

system:

actions:

- action: power_on_printer

command: /opt/octoprint/scripts/poweron_printer

confirm: You are about to power-on the printer.

name: Power-on printer

- action: power_off_printer

command: /opt/octoprint/scripts/poweroff_printer

confirm: You are about to power-off the printer.

name: Power-off printer

[/CODE]И перезапустим Octoprint.

[CODE]systemctl restart octoprint

[/CODE]И снова включаем
И выключаем
Всё так хорошо идёт, что не будем останавливаться на достигнутом. Хочу авто-выключение по завершению печати.

Признанный лидер по этой части - плагин Shutdown Printer. Работать с устройствами Ikea он пока не умеет. Зато может отправлять GCODE. Вот и славненько.

Ставим ему в помощь плагин GCODE System Commands и добавляем два кастомных кода (по аналогии с M80 - Power On и M81 - Power Off)
А в плагине Shutdown Printer настраиваем режим GCODE
И не забываем про полезные опции
Вот теперь - хорошо :)

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

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

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

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

Комментарии

17.05.2019 в 09:57
1

Вопросы Автору:

1. работает ли описанное Вами по сегменту локальной сети(включая WiFi), без выхода (и какого-либо подключения к) в сеть Интернет?

2. Тестировалось ли функционирование 24/7 ? Если 'да', то как долго?

17.05.2019 в 12:45
1

1. работает ли описанное Вами по сегменту локальной сети(включая WiFi), без выхода (и какого-либо подключения к) в сеть Интернет?
Да, потому что этот способ использует TRADFRI Gateway только как шлюз CoAP(s) => ZigBee.
2. Тестировалось ли функционирование 24/7 ? Если 'да', то как долго?
Тут затрудняюсь дать правильный ответ - не совсем понял, как можно включение-выключение протестировать 24/7 :)
Поэтому отвечу, как есть: пользуюсь этим в течение последнего месяца. Принтер постоянно подключен через управляемую розетку. Схема (паттерн) использования: вечером включил Octoprint, отслайсил модель, включил принтер через меню Octoprint, отправил на печать и поставил галочку автовыключения. По завершении печати Octoprint ждёт охлаждения хотенда, 60 секунд показывает окошко отмены выключения и выключает принтер.
Печатаю нерегулярно - пока у меня это хобби, а не работа. Среднее время печати - 4 часа. Максимальное на текущий момент - 17. Иногда оставляю на ночь, но сплю тогда плохо :) и думаю об огнетушителях и установке сигнализации над принтером.

17.05.2019 в 16:12
0

Благодарю!

Очень интересные наблюдения.

17.05.2019 в 23:21
0

Мда. У меня 2 блока питания, один компьютерный. Когда ставлю очередную печать то включать вообще ничего не нужно. Нарезав модель в Слике нажимаю отправить на принтер, ставлю галочку начать печать после загрузки и всё. По воздуху г-код залетает в осьминожку, там срабатывает плагин PSU control, который включает компутерный БП, тот в свою очередь включат БП стола и всё, пию чай дальше. После печати и остывания всё само по тому же принципу отключится :)

18.05.2019 в 20:54
0

Мда
Если я правильно распознал - то это скепсис. А вот, что стало его причиной - никак не понять.
ставлю галочку начать печать после загрузки и всё
Вы же понимаете, что это вполне реализуемо и в этом случае? Для отправки на печать из слайсера (в моём случае это Cura) - OctoPrintPlugin. И просто добавить в самом начала стартового GCODE слайсера

M80
G4 S30


И, если так сильно не нравится плагин Shutdown Printer - в самом конце финишного

M109 R49
M81
пию чай дальше
Я же в свою очередь понимаю, что мне этот способ не совсем подходит - после включения принтера я обычно достаю пластик из коробки и заправляю его в принтер. Вот если поделитесь способом автоматизации этой части - честь и хвала :)

18.05.2019 в 21:24
0

Просто мне кажется Вы пошли своим путем в этом деле, а я пошел легким. Сброс ключа через 6 недель - это неприятная мелочь. А вот выключение через G-код сразу после печати - этого делать нельзя, можете поймать пробку. Поставьте лучше PSU control и настройте его на управление вашей розеткой и будет вам счастье :)
 Автоматизировать заправку пластика может специально обученная жена, но по мне уж лучше пусть командует пылесосом и стиралкой, а принтер - сугубо моя территория :)

18.05.2019 в 21:54
0

Сброс ключа через 6 недель - это неприятная мелочь.
После 6 недель не использования ключа, а не просто через 6 недель же.
Как только первый раз случится, 'оберну' в скрипте. И это актуально для любого плагина.
выключение через G-код сразу после печати
Где же сразу? А M109 R49 на что?
Поставьте лучше PSU control
Так а чем лучше? Функционал аналогичный по той части, что уже настроена.

18.05.2019 в 17:12
0

Мне показалось, что все то же самое через телеграм проще.

18.05.2019 в 20:57
0

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

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

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

Моя первая законченная миниатюра :)

Центрифуга(миксер) для паяльной пасты

Анонс тизер трейлера 2

Промышленные 3D принтеры большого формата печати

Angelina Jolie as Lara Croft прототип.

Сила прижима магнитов (тяги и подшипники в дельта принтере).