OctoPrint Часть 2. Digital Resistance

Вы спросите где же первая часть? Она в процессе написания. Из-за говнюков из РКН пришлось срочно решать проблему с подключением принтера к Телеге, поэтому я по горячим следам, чирканул эту часть. Скоро выйдет часть первая ,когда я доделаю картинки и описалово фич осьминожки.

Одна из главных фич, ради которого я его прикрутил к своему принтеру это плагин OctoPrint-Telegram, ставится он из интерфейса плагин менеджера OctoPrinta не сложней чем установка софта на смартфон какой. Заходишь в местный маркет, тыкаешь установить. Готово.

А после, мы получаем практически полное управление принтером через месенджер Telegram из любой точки. Можем посмотреть фотку с камеры, можно получать фотки по ходу дела, наблюдая как идет печать. Можно подкорректировать температуру экструдера или силу охлаждения, если видим, что процесс идет не так как нужно. Остановить печать, само собой.
Можно даже начать печать, закачав через тот же телеграм gcode файл. Например, уходя из мастерской я прошу NN4Z когда он закончит свою печать оставить принтер на готове. А уже дома, допилив нужную модель, через Telegram забрасываю ее в OctoPrint и запускаю печать. Удаленно наблюдая, что все идет хорошо. Если же не задалось — останавливаю. Не судьба. Но это бывает редко, процесс у нас поставлен хорошо.

Да, можно управлять и по SSH и как то еще, но у меня интернет через мобильного оператора, серый IP и никакой DYNDNS тут не катит, порты просто не пробросить наружу. Только полноценный VPN кидать. Так что телеграм плагин просто спасает. Да удобней намного. С телефона рулить через SSH это редкостный изврат. А у плагина там вполне удобный интерфейс.

Плюс можно людей наблюдателями подключать. Они ничего не могут изменить, но могут смотреть на то, как идет печать или получать фотку итоговой печати в конце.

Все было хорошо пока не пришли пидорасы и не заблокировали нашу прелесть. И если с клиентами и месенджерами все отлично, они работают :)))) , то вот с плагином все печально. У него изначально не было возможности даже через прокси ходить, не говоря уже про получение через push новых адресов.

Пришлось прикручивать обходные пути.

▌VPN
Т.е. мы делаем тунель до VPN сервера где-то за границей и срем на голову этим ебланам из РКН с высокой колокольни. Метод ультимативный, но есть недостатки. Бесплатные VPN медленные и нестабильные, то работают то нет. Платные и хорошие хотят денег, которые для данной задачи как то излишние. Я тут нашел дешевый VPN, который стоит бакс в месяц. И в пол тыка прикрутился к малине. Работает он устойчиво, но как то медленно. Т.е. команды которые я отправляю на принтер исполняются спустя десятки секунд, а вот с принтера отчеты приходят нормально. Не могу понять кто виноват тут. Но вот так.

Да, ахтунг. Будьте внимательны! Деньги они снимают ежемесячно сами, как абонентскую плату. Так что не забудьте потом зайти в личный кабинет и отключить автоплатеж если не нужен.

От VPN провайдера нам нужен файл конфигурации *.ovpn и свой логин пароль. Для vpn99 конфиг надо скачать с их сайта. Для каждого сервера свой.

Логин и пароль положите в текстовый файл c именем pas в две строчки. Первая строка логин, вторая пароль. И сохраните. Откройте конфиг *.ovpn текстовым редактором и найдите там строчку:

1
auth-user-pass

И допишите к ней путь который будет у вашего текстового файла с логином и паролем, у меня получилось так:

1
auth-user-pass /home/pi/vpnkey/99vpn/pas

Сохраняем. Пока этих путей нет, но потом мы создадим под них все.

▌Суем ягоду в туннель
Сразу предупреждаю, что я с Linux работаю мало и редко, только когда сильно надо и поэтому мои познания его на уровне начинающего, так что не надо смотреть на это как на истину последней инстанции. Но в этом есть и плюс. Я подниму те моменты, которые более опытные не стали бы брать во внимание, как само собой разумеющееся. И буду все рассказывать на примере OctoPrint поставленного из образа as is с сайта. Т.е. для самых маленьких, кто этот октопринт по мануалам поставил и дальше его интерфейса в системе той не разбирался.

Итак, сначала нам потребуется две софтинки. Первая это PuTTY — SSH клиент с помощью которого мы будем ломиться в нашу малину и что-то там править.

Вторая это WinSCP — файловый менеджер который позволяет легко через ту же SSH гонять файлы из малины в комп и обратно. Есть разные способы, но этот самый наглядный для тех кто в первый раз это вообще делает.

Запускаем PuTTY и цепляемся к октопринту:

IP адрес указывай свой. А все остальное как есть. И жмем Open

Октопринт нас встретит предложением ввести логин и пароль. По дефолту логин: pi пароль: raspberry

Все, мы внутри. Теперь не делаем лишних движений, можно накосячить :) На Linux за работу с VPN отвечает такой пакет как openvpn. Надо его доустановить в малину, т.к. в исходном образе октопринта его нет.

Делаем обновление системы выполнив по очереди две команды:

1
sudo apt-get update

Она выяснит что там нового есть, есть ли новые версии установленных ранее пакетов и так далее.

1
sudo apt-get upgrade

А вторая команда установит все обновления, которые выявила первая. Может занять некоторое время и схавать мегов 300 траффика, если давно не обновлялись. sudo — означает ,что команда запускается от суперпользователя, может затребовать пароль (raspberry по умолчанию был). apt-get это менеджер пакетов. Что-то вроде андроид маркета или апстора, только текстовый :)

Когда все обновится ставим openvpn.

1
sudo apt-get install openvpn

Готово.

Следующим шагом надо положить наш конфиг и файл с логином и паролем в систему. Проще всего это сделать через WinSCP. Запускаем ее и логинимся в малину логин и пароль те же. PuTTY можно не закрывать.

Откроется файловый менеджер похожий на Total Commander или на Norton Commander в общем двухпанельный. На одной панели будет содержимое вашего компа, на другой содержимое флеша малины. Вы уже сразу будете в домашнем каталоге своего пользователя под которым залогинились:

1
/home/pi/

Выберите панель малины и нажмите F7, чтобы создать каталог с именем vpnkey, имя произвольное, но помните, что путь к ключу был /home/pi/vpnkey/99vpn/pas ? Вот.

Идем в папку vpnkey и создаем в ней папку 99vpn. Заходим в нее:

И копируем туда наш файл *.ovpn и файл с логином паролем pas.

Все. Теперь можно попробовать запустить VPN на самой малине. Возвращаемся в PuTTy

и запускаем командой:

1
sudo openvpn --config /home/pi/vpnkey/99vpn/vpn99-nl-tcp-80.ovpn

По экрану побежит прорва текста, показывающая что и куда там подключается и в итоге все встанет примерно в таком состоянии:

А телеграм плагин должен выйти в сеть. Можно попробовать рестартнуть сам октопринт (не всю систему, а только октопринт).

▌Добавляем в автозагрузку

Каждый раз вводить такую команду неудобно. Так что давайте добавим его в автозагрузку. Вариантов это сделать много, один из самых простых это сделать исполняемый shell скрипт и прописать его в /etc/rc.local

Вначале сделаем папочку под скрипты. Убедимся, что мы в домашней директории:

Выполним команду

1
cd ~

Это переход в /home/pi — каталог пользователя pi под которым мы вошли. Создадим директорию bin, там будут наши скрипты, и перейдем в нее:

1
2
mkdir ./bin
cd ./bin

Первая команда создаст в текущем каталоге еще один ,вторая в него перейдет. Перед курсором будет ~/bin это текущий путь. Мы в каталоге. Сделаем там скрипт. Это просто текстовый документ ,поэтому нам нужен текстовый редактор Nano. Следующая команда откроет текстовый редактор и откроет буфер файла с названием script_auto_run

1
sudo nano script_auto_run

Откроется вот такое окошко, в котором надо написать:

1
2
3
4
5
#!/bin/bash
#Script to start our app
echo "Autorun..."
 
sudo openvpn --config /home/pi/vpnkey/99vpn/vpn99-nl-tcp-80.ovpn &

То есть нашу команду для запуска VPN. #!/bin/bash — это указание через что запускать, через командный интерпретатор bash. Потом идет коммент и вывод сообщения на экран, что стартует автозапуск. А дальше наша, уже знакомая строка. Знак & в конце, чтобы запустилось все фоном. Жмем Ctrl+X и на вопрос сохранить — отвечаем Y. Enter. Скрипт готов. Теперь его надо сделать исполняемым. Выполните команду

1
sudo chmod 755 script_auto_run

Она сделает наш скрипт запускаемым. Проверьте как он запускается, выполнив

1
/home/pi/bin/script_auto_run

На экране должно быть Autorun…, а фоном стартанет наше VPN подключение.

Теперь пропишем это в rc.local. Выполним команду

1
sudo nano /etc/rc.local

Опять откроется редактор nano и в нем будет файл rc.local

Там может быть много всего, или не быть ничего (если файл создан только что). Это не важно. Если там пусто, то просто допишите в конце exit 0, а перед ним

/home/pi/bin/script_auto_run

Либо как у меня. Просто перед exit 0 вписать нашу строчку. Также, выход Ctrl+X, Y, Enter. Все, можно перезагрузить малину выполнив команду

1
sudo reboot

После перезагрузки поднимется vpn и телеграм плагин выйдет в сеть. Конечно это все очень примитивно. По хорошему надо бы по сron сделать так, что у нас периодически пингуется какой-нибудь из гарантированно заблокированных серверов телеграма, и если пинг пропадает, то перезапускать vpn. Но это отдельная заморочка.

▌Натягиваем на осьминога носок
Но работа через VPN мне показалась не очень стабильной. Может у VPN99 такой стремный сервис (мол чего вы хотите за такие деньги), не знаю, другие не пробовал. Сообщения от принтера, фотки печати, отзывы на команды доходили практически без задержек, а вот управляющие команды могли на принтер прийти с хорошей такой задержкой, порой до 30 секунд. Уж не знаю почему.

На гитхаб страничке телеграм-плагина уже пару недель как мной был создан фичреквест на добавление SOCKS5 прокси и спустя какое то время немец с ником Bart1909 взял и запилил Pull request, где запилил эту фичу. Не знаю как быстро ее примут и выкатят обновление плагина, медленно он обновляется. Но уже сейчас эту штуку можно вкорячить ручками.

Качаем измененный файл _init_.py

Теперь самое сложное. Надо понять куда его сунуть. Он может быть по адресу:

1
/home/pi/OctoPrint/venv/lib/python2.7/site-packages/octoprint_telegram/

У меня же он оказался по адресу:

1
/home/pi/oprint/lib/python2.7/site-packages/octoprint_telegram

В общем вам через WinSCP придется пошерстить в корневой директории во папках похожих на октопринтовские, чтобы найти папку где лежит вот эта шняга «python2.7/site-packages» в этой папке должны быть все плагины которые установлены.

В общем, вот этот файл надо заменить скачаным с гитхаба. Рекомендую переименовать старую в old*** если что вернете как было.

Теперь надо прописать адрес прокси в конфиге октопринта. Конфиг Octoprint находится в файле:

/home/pi/.octoprint/config.yaml

Через WinSCP их не видно, т.к. они скрытые. Надо включить показ скрытых файлов:

Options — Preference — Panels — Show Hidden Files

Так то лучше:

Идем туда, сохраняем старый конфиг, на всякий, скопировав его под именем old***

А потом через встроенный же редактор WinSCP правим конфиг файл:

И где то в конце, в районе вашего токен ключа, надо вписать две новые строки

http_proxy: socks5://login:password@mysuperproxy.com:port
https_proxy: socks5://login:password@mysuperproxy.com:port

Если прокси без логина и пароля, то просто

socks5://mysuperproxy.com:port

Сорян, но своей проксей поделиться не могу. Т.к. мне ее товарищ поднял на своем хостинге. Но найти их можно много где. Например тут выбирайте только не с первой страницы. Туда полно наших и иранцев сейчас ломится. Veesecurity тоже годные прокси для телеги предоставлял. Вы только перед использованием вкрутите эту прокси на десктоп или на телефон, главное на девайс который ходит через тот же интернет, что и малина. Чтобы точно быть увереным, что прокси жива и здорова. А то не будет работать, вы все облазите, а просто прокси дохлая. Так тоже бывает.

Сохраняем файлик. Выходим. Осталось совсем малось. Доустановить поддержку прокси socks5 .

Надо найти где валяются бинарики питона у октопринта. Где обитает программа pip. Это пакетный менеджер для питонячих программ.

Она должна быть там же, где вы нашли __init__.py, только уровнем выше. В bin папке

У меня это
/home/pi/oprint/bin

Но может быть и

/home/pi/OctoPrint/venv/bin/python/

Заходим в эту папку и ищем там файл pip. Если нашли, значит это оно. Вызваем терминал, прям отсюда. Нажав икноку с терминалом, черную такую:

Откроется черная консолька, убедитесь, что путь правильный. И выполните команду

1
./pip install requests[socks]

Пробежит куча текста и у вас установится поддержка носков. Может правда еще спросить запрос на установку, отвечай ей Y. У меня оно уже установлено, поэтому пип рапортует, что мол усе уже стоит.

Перезагружаем OctoPrint и бот должен выйти в сеть через прокси.

Digital Resistance!!! FUCK RKN!

7 thoughts on “OctoPrint Часть 2. Digital Resistance”

  1. Ди, у тебя что-то не совсем то с сайтом, страницы возвращают код 500 вместо 200. И кэш отвалился походу, стало грузится медленнее.

          1. Кэш вроде заработал. Но если делать Ctrl+F5, там все равно ответ 500. И когда я залогинен, то ответ 500.

Добавить комментарий

Ваш e-mail не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.