Металл2024 Реклама
Метобр2024 Реклама

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

megamih
Идет загрузка
Загрузка
17.05.2019
2596
9
Техничка

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

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

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

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]И снова включаем
Octoprint + Ikea TRADFRI = управление питанием принтера
И выключаем
Octoprint + Ikea TRADFRI = управление питанием принтера
Всё так хорошо идёт, что не будем останавливаться на достигнутом. Хочу авто-выключение по завершению печати.

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

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

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

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

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

12
Комментарии к статье
Кремень КБ Реклама
Кремень КМ Реклама