Raspberry pi и telegram: создаем бота для управления устройствами

Создаем бота Telegram и используем с Raspberry Pi

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

В этой проекте мы создадим бота Телеграм, способного отправлять и получать сообщения от Raspberry Pi. Мы запрограммируем “Малину Пи”, чтобы получить время и дату. Мы также сможем управлять контактами GPIO от Raspberry, подключив два светодиода к контактам Raspberry Pi GPIO.

Telegram – это приложение для обмена сообщениями, такое же как WhatsApp или Viber, но в Telegram можно создавать ботов. Для этого в нем есть бот API, которое позволяет не только человеку общаться с ними, но и машинам.

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

Что нам понадобится

Набор комплектующих не велик:

  • Raspberry Pi
  • 2 светодиода
  • 2 резистора на 220 Ом

Установка и создание бота Телеграм

Сначала перейдите в магазин Google Play и загрузите приложение Telegram.

Когда вы откроете приложение, он спросит ваш номер телефона. Введите номер, и Telegram отправит код подтверждения. Вам нужно будет ввести код для подтверждения своей учетной записи.

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

Теперь нам нужно создать нового бота, который будет отправлять и получать сообщения с помощью Raspberry Pi. В Telegram есть BotFather, который поможет нам создать бота. Найдите «botfather» в приложении.

Затем напишите «/start», чтобы начать общение с ботом.

После этого напишите «/newbot», чтобы запросить нового бота.

Теперь он попросит вас назвать своего нового бота.

Затем он попросит имя пользователя для бота. Введите уникальное имя пользователя, чтобы создать своего бота. В полученном сообщении появится токен. Сохраните его, поскольку он вам понадобится в коде.

Затем найдите бота, используя его, чтобы подтвердить, что бот создан.

Мы закончили создание бота. Теперь нам нужно написать код для Raspberry Pi, который заставит его отвечать на сообщения от бота. Но перед этим нужно произвести некоторые соединения с Raspberry Pi.

Схема соединения

Подключите положительный провод красного светодиода к GPIO 21 от Raspberry Pi и подсоедините отрицательный провод красного светодиода к земле через резистор 220 Ом.

Аналогичным образом подключите положительный провод зеленого светодиода к GPIO 20 от Raspberry Pi и отрицательный вывод зеленого светодиода на землю через 220-омный резистор.

Установка правильной библиотеки в Raspbian

Нам нужно установить библиотеку телепорта в Raspbian. Введите следующую команду в терминале, чтобы её установить:

sudo pip install telepot

Объяснение кода бота Telegram

Во-первых, мы добавили необходимые библиотеки для этого проекта. Библиотека телепорта позволяет нашей “малине” общаться с ботом Telegram с использованием API. Библиотека даты и времени используется для получения даты и времени. Библиотека GPIO используется для подсветки светодиодов.

Всякий раз, когда Pi получает сообщение от бота Telegram, она вызывает функцию handle. В этой функции мы читаем сообщение и отделяем текст. Затем мы сравниваем текст и отвечаем на него соответствующим образом.

Вам нужно будет ввести свой токен бота ниже. «Bot.getMe()» будет проверять, успешно ли было установлено соединение между Pi и ботом Telegram, и напечатает ответ.

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

Полный код приведен ниже.

Код целиком

На этом пока всё. Вы создали свою программу для бота Телеграма и Raspberry Pi.

Учим Raspberry Pi принимать Telegram’мы с помощью Bot API и Python

Давно хотел прикрутить к своей домашней Raspberry Pi удобный интерфейс «общения», который бы удовлетворял главному требованию — простота и лёгкость, с доступом из любой точки мира и с помощью любого оборудования (но в первую очередь — со смартфона).

В связи с отсутствием дома выделенного IP и наличием сурового и неподкупного NAT варианты с SSH клиентами и web-интерфейсами отпали сразу. Для небольших потребностей решение тоже должно быть простое, быстрое и, в качестве бонуса, надежное. Так что идея использования протокола одного из распространенных мессенджеров показалась мне весьма привлекательной. Под прицел попали Jabber, Telegram и WhatsApp.

Против Jabber сыграло нежелание устанавливать лишний клиент. Ну а так как Telegram — это, IMHO, тот же WhatsApp, только лучше и удобнее (и даже чуточку безопаснее), то именно на нём я и решил остановить свой выбор. К тому же появившаяся недавно в Telegram возможность создавать своих рабов ботов и взаимодействовать с ними с помощью очень простого API позволяет избавиться от необходимости регистрировать новый аккаунт, а так же дает некоторые очень полезные и удобные возможности.

На самом деле всё действительно настолько просто, что опытным человекам хватит и 30 минут, чтобы разобраться, поднять и настроить своего бота. Остальным же: Добро Пожаловать!

Результат поиска в рунете по словосочетанию «Telegram & Raspberry» оказался богат только на статью с Хабра «Raspberry и Telegram: предпосылки создания умного дома», в которой описываются базовые манипуляции с клиентом Telegram. Кстати, достаточно сырой продукт и заставить его нормально работать мне так и не удалось (на ровном месте через раз отказывается парсить одни и те же команды). Но, к счастью, мне он уже не нужен.

Итак, нам необходимо создать бота, для чего в любом клиенте Telegram’a (желательно последней версии) находим контакт с именем BotFather и просим его о /help. На что он ответит в достаточной мере подробной инструкцией и останется только следовать ей. Команды для совсем лентяев:

Готово! Теперь BotFather предложит нам запомнитьсохранить token для досупа к боту через HTTP API, который нам скоро пригодится.

Так как программист я очень начинающий, то хорошо знаком только с Python, который, тем не менее, прекрасно подходит для данной задачи. Начнем.

Для существенного облегчения жизни и сокращения кода, предлагаю установить библиотеку для упрощения HTTP-запросов requests с помощью команды:

Теперь вся задача сводится к написанию простого скрипта, который через заданный промежуток времени будет запрашивать у сервера обновления сообщений. Если таковые имеются и сообщение отправлено определенным заранее пользователем, а так же содержит в тексте заданную команду, тогда будет выполнятся соответствующее этой команде действие. Такой скрипт я и предлагаю вашему вниманию. Пока это всего лишь шаблон, который можно адаптировать под свои нужды, но со временем планирую сделать из него что-то более приличное.

Чтобы запустить данный скрипт в фоновом режиме на Raspberry Pi, можно воспользоваться двумя способами:
1) С помощью screen. Инструкция по использованию тут.
2) Командами:

Если хотите поставить этот скрипт в автозапуск, необходимо в файл /etc/rc.local, перед строкой ‘exit 0’, добавить:

И естественно, на вашей Raspberry должен быть установлен python2.7.

Это, конечно же, только начало, наброски. Чуть позже прикручу несколько интересных функций. Например, получение снимка с камеры по команде и некоторые посложнее, такие как как управление гирляндой на WS2801 и другие.

Буду очень рад любым замечаниям, советам и предложениям.

Также, как вы уже заметили, скрипт проверяет сообщения с определенным промежутком времени. Реализовать прием WebHook без посредника не представляется возможным. Игрался со значениями «timeout» в методе «getUpdates», — безрезультатно. Буду благодарен за любые идеи и на этот счет.

Бот Telegram для управления Raspberry Pi через интерактивный shell

Я пытаюсь написать программу для бота Telegram для управления моей Raspberry Pi, так что каждое сообщение, которое я отправляю боту, будет интерпретироваться как команда shell [1][2].

Raspberry Pi-это версия 2 model B и работает под управлением Arch Linux ARM. Программа написана на языке Python 3.6.0 с модулем Telepot, и выполняется из Pi.

До сих пор я использовал подпроцесс модуля для выполнения команд, например:

Бот работает просто отлично, но проблема в том, что я не могу выполнить каждую команду, как в реальном shell. Я говорю особенно о тех интерактивных командах, которые обходят STDOUT и посылают свои выходные данные непосредственно в tty ( ssh , ftp . которые обычно запрашивают пароль и ждут, пока пользователь не введет его). подпроцесс не позволяет выполнять чтение или запись в tty. Фактически, если я отправлю своему боту команду tty , он ответит: not a tty .
Кроме того , некоторые команды shell динамически обновляют свои выходные данные или продолжают работать до тех пор, пока не произойдет какое-либо событие (например, ping 8.8.8.8 или grep pattern ), и мне не удалось воспроизвести их, потому что я не могу отправить Ctrl+C или Ctrl+D . Обратите внимание, что это вторая проблема, потому что можно перенаправить вывод pings в файл (в то время как невозможно перенаправить [sudo] Password for user: ); но в этом случае я не могу отправить ввод в shell.
Кроме того, в качестве опции было бы интересно, если бы бот мог понимать трубы, перенаправления и глобализацию.
Что сопутствует этим проблемам, так это, на мой взгляд, тот факт, что я не могу взаимодействовать с shell. Я считаю, что решение всех этих проблем-только одно.

Итак, вопрос в том, как я могу реализовать такую ботовую программу, которая позволяет мне запускать интерактивные команды shell через нее [3]?

Пример конечного результата, которого я хотел бы достичь (в виде разговора между мной и ботом):

Я: sudo chmod 777 file.txt

Бот: [sudo] пароль для пользователя:

Бот: Добро пожаловать на хостинг.

P.S.
Я пробовал модуль pexpect для Python, но я думаю, что это не так хорошо для меня, потому что я не ожидаю какого-либо конкретного вывода; я просто хочу получить все, что дает мне shell. (Возможно, есть способ сделать то, что я хочу, что я не знаю?)
Я также пробовал использовать файлы fifo, но они не работают, так как они подключены к STDIN и STDOUT, а не к tty.

[1] Пример: Я отправляю сообщение pwd , а бот отвечает /working/directory .
[2] правда, я мог бы использовать ssh или аналогичный; однако меня интригует то, что бот будет работать независимо от операционной системы машины, которая выполняет запрос, будь то Linux, Windows, Android или что-нибудь еще, без установки дополнительного программного обеспечения (даже без установки Telegram, поскольку существует Telegram web).
[3] Вопрос также мог быть: как я могу подключиться непосредственно к tty через скрипт? Скрипт также может быть написан на bash или другом языке, если это проще. Но я не хочу предвзято относиться к вам, я открыт для любого решения. Как только у меня есть вход/выход в переменной, отправка сообщений не является проблемой.

1 Ответ

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

По ссылке выше вы можете найти инструкцию по установке и использованию ‘shell bot’; оттуда вы также можете добраться до исходного кода на github.

Хотя он и не написан в Python, но в node.js году, он кажется мне совершенным. Он обновляет сообщения на лету, а также может выполнять графические команды.

P.S. Вы даже можете запустить vim через бота!

Похожие вопросы:

Я хотел бы создать пользовательский интерфейс для управления Raspberry Pi с помощью arm через USB. Каков наилучший язык программирования, который позволит мне создать пользовательский интерфейс и.

Я пытался использовать приложение boot a java через скрипт shell при запуске Raspberry Pi 2 некоторое время без какого-либо успеха. Я прошел через бесчисленные темы и учебники без радости. Я.

Я пытаюсь использовать команды Microsoft для управления устройствами Raspberry Pi. В основном я предполагаю, что напишу приложение для запуска на raspberry pi. Когда он будет запущен, Pi появится в.

Теперь я запускаю Raspbian на Raspberry Pi, и я хотел бы сделать для него панель управления, чтобы я мог управлять своим Raspberry Pi в веб-браузере. Но как я могу выполнить команды в NodeJS?

Я новичок в мире IoT и хотел бы сделать простой прототип, чтобы лучше понять его. Мой вариант использования-подключить устройство IoT к существующему приложению. Я рассматриваю следующий сценарий.

Я сделал telegram-бота, используя python и pyTelegramBotAPI api. Дело в том, что когда я запускаю своего бота более 5 минут, он выдает ошибку conection reset by peer. Поэтому я решил сделать.

У меня есть raspberry pi, и у меня есть программа, которая должна работать только тогда, когда я хочу ее из приложения. Итак, в основном нужно подключиться к моей raspberry pi из общедоступного.

Я запускаю приложение на своем Raspberry Pi, которое включает в себя следующую строку в скрипте shell, sleep 1800 Затем мне пришло в голову, что у Raspberry Pi нет способа следить за временем. Как я.

Я являюсь частью проекта по созданию системы, и одним из требований является то, что мы должны использовать raspberry pi. Проблема, с которой мы сталкиваемся, заключается в том, что у одного.

Я пытаюсь найти лучший способ перезапустить Raspberry PI из Cumulocity, из коробки, используя агент PI. Это пример использования, когда температура CPU из PI повышается, Кумулятивность вызовет.

Raspberry Pi

Поиск

Рубрики

Облако тэгов

Боковое меню

Raspberry и Telegram: предпосылки создания умного дома

Один итальянский магазинчик нащупал новые способы использования Телеграма (и ранее WhatsApp’а), установив его на одноплатный миниатюрный компьютер Raspberry Pi. Как выясняется, мессенджер можно использовать для удалённого общения с собственной техникой. Ниже – перевод статей с сайта Instructables.com. Если есть уточнения по переводу, напишите об этом в комментариях.

I. Telegram на Raspberry Pi

Шаг первый: инсталляция

Понадобится: Raspberry Pi B or B+, с последней версией Raspbian, или карта MIcroSD на 8Гб класса 10 с той же предустановленной Raspbian.

Сначала обновите пакеты программ:

Установите библиотеки: readline или libedit, openssl и (если вы хотите использовать конфигурацию) libconfig и liblua. Если вам удобнее без них, проставьте –disable-libconfig и –disable-liblua соответственно.

Клонируйте архив GitHub

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

Upd: запустите мессенджер и настройте аккаунт, введя номер телефона и(ли) ник. См.

Шаг второй: автоматическая отправка сообщений

Чтобы автоматически отправить сообщение, создайте файл

с таким содержимым:

Сохраните и закройте его, дав разрешение на действия:

Протестируйте его с помощью

Чтобы отправить фото, создайте файл

и впишите в него

Сохраните и закройте его, дав разрешения:

и протестируйте с помощью

II. Дистанционное управление Raspberry Pi через Telegram

Телеграм – весьма разносторонний мессенджер для отправки мгновенных сообщений, в котором можно работать, используя один телефонный номер, одновременно на нескольких устройствах.

В предыдущем обзоре мы увидели, как его установить, как отправлять текст и медиафайлы. Мы также убедились, что в Raspberry можно настроить автоматическую отправку сообщений через Telegram.

На этот раз мы попросим Raspberry выполнить конкретное действие как функцию полученного сообщения: например, мы могли бы послать слово «photo», чтобы Raspberry прислал нам фотографию дома, или «lamp», чтобы он повернул лампу, или «open», чтобы открыть дверь гаража. Начнём.

Шаг первый: инсталляция

Начинаем на основе описанных выше действий. Чтобы перехватить новое входящее сообщение, мы создаём файл action.lua (я опускаю описание языка Lua со ссылкой на официальный сайт, так как хабраюзеры с ним, очевидно, , знакомы. — Прим. пер.):

со следующим содержимым:

function on_msg_receive (msg)
if msg.out then
return
end
if (msg.text==’ping’) then
send_msg (msg.from.print_name, ‘pong’, ok_cb, false)
end
end

function on_our_id (id)
end

function on_secret_chat_created (peer)
end

function on_user_update (user)
end

function on_chat_update (user)
end

function on_get_difference_end ()
end

function on_binlog_replay_end ()
end

Сохраните и закройте файл. Теперь, когда входящее сообщение – «ping», Телеграм отвечает сообщением «pong».

Попробуйте отправить сообщение. Если всё верно, Телеграм отвечает только на «ping» (не на «PING»), и мы должны увидеть что-то вроде этого:

Окей, давайте попробуем что-то более занятное.
Установите камеру Raspberry (см. этот туториал) и создайте новую папку, куда по умолчанию будут сохраняться фотографии с этой камеры.

Создайте новый файл «camera.ch»

вот с этой начинкой

raspistill -w 800 -h 600 -o /home/pi/camera/photo.jpg

Сохраните и закройте его, дав разрешение на действия

и добавьте эти строки в функцию on_msg_receive:

Шаг второй: тест

Теперь, если вы пошлёте сообщением слово «photo», Raspberry ответит фотографией.

Чтобы задать дополнительные команды, просто измените файл «action.lua», добавив новый блок «if». Например, можно активировать выключатель или запросить статус сигнализации.

25.01.2018 в 00:08, Просмотров: 3149

of your page –>
of your page –>

Источники:

http://habr.com/post/261473/

http://coderoad.ru/42307925/%D0%91%D0%BE%D1%82-Telegram-%D0%B4%D0%BB%D1%8F-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-Raspberry-Pi-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9-shell

http://4raspberrypi.ru/content.php?p=29&c=Raspberry%20i%20Telegram:%20predposylki%20sozdaniya%20umnogo%20doma

http://arduinoplus.ru/robot-koka-kola/

Ссылка на основную публикацию