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

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

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

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

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

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



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



Подготовим код



git clone --recursive https://github.com/obgm/libcoap.git cd libcoap git submodule update --init --recursive



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



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



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

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



echo "A C implementation of the Constrained Application Protocol (RFC 7252)" > ./description-pak



И соберём пакет



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:



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

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

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



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



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



********************************************************************** 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 **********************************************************************



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



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"}



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



/usr/bin/coap-client -m get -u 'octoprint' -k '%USER_KEY%' 'coaps://%GATEWAY%:5684/15001' [65542,65544,65543,65545]




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



/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



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



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



И, конечно - выключать



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



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

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



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



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



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



И перезапустим Octoprint.



systemctl restart octoprint



И снова включаем
Octoprint + Ikea TRADFRI = управление питанием принтера

И выключаем

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

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

Ставим ему в помощь плагин GCODE System Commands и добавляем два кастомных кода (по аналогии с M80 - Power On и M81 - Power Off)

А в плагине Shutdown Printer настраиваем режим GCODE

И не забываем про полезные опции

Вот теперь - хорошо
Источник: 3dtoday.ru
2018 3dtrands.ru - самые последние тренды в 3D мире.