Octoprint + Ikea TRADFRI = управление питанием принтера
Снова поискал по сайту и интернетам - и не нашёл именно такого варианта, какой реализовал у себя.
Имея шлюз 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И не забываем про полезные опцииВот теперь - хорошо :)
Еще больше интересных статей
Подсветка для Ender 3 и Sprite Extruder с обдувом K3D
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Попросили меня подробнее написать про подсветку на моем Ender 3....
Охлаждение мотора директа
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
GCODE: Основы
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
GCODE: Плюшки от ПавлушкиПосле написания предыдущей...
Комментарии и вопросы
Ну что вы все как дети малые.....
Ахаха, да)) Лучше и не скажешь...
У нас огромный голод высококва...
Здравствуйте! Есть кто занимае...
Коллеги, уже задолбался с прин...
Спаситепомогите, это уже не эх...