Содержание
Автор оригинала: Emmeshop Electronics
- Перевод
Один итальянский магазинчик нащупал новые способы использования Телеграма (и ранее WhatsApp’а), установив его на одноплатный миниатюрный компьютер Raspberry Pi. Как выясняется, мессенджер можно использовать для удалённого общения с собственной техникой. Ниже – перевод статей (1, 2) с сайта Instructables.com. Если есть уточнения по переводу, напишите об этом в комментариях.I. Telegram на Raspberry PiШаг первый: инсталляцияПонадобится: Raspberry Pi B or B+, с последней версией Raspbian, или карта MIcroSD на 8Гб класса 10 с той же предустановленной Raspbian. Сначала обновите пакеты программ:
sudo apt-get update
sudo apt-get upgrade
Установите библиотеки: readline или libedit, openssl и (если вы хотите использовать конфигурацию) libconfig и liblua. Если вам удобнее без них, проставьте –disable-libconfig и –disable-liblua соответственно.
sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev make
Клонируйте архив GitHub
git clone --recursive https://github.com/vysheng/tg.git && cd tg
./configure
make
Выполнение этой команды займёт некоторое время, после чего установка будет завершена.Upd: запустите мессенджер и настройте аккаунт, введя номер телефона и(ли) ник. См.Шаг второй: автоматическая отправка сообщений Чтобы автоматически отправить сообщение, создайте файл
sudo nano /home/pi/tg.sh
с таким содержимым:
#!/bin/bash to=$1 msg=$2 tgpath=/home/pi/tg cd ${tgpath} (echo "msg $to $msg"; echo "safe_quit") | ${tgpath}/bin/telegram-cli -k tg-server.pub -W
Сохраните и закройте его, дав разрешение на действия:
sudo chmod -R 0655 /home/pi/tg.sh
Протестируйте его с помощью
/home/pi/tg.sh Name_lastname "your message"
Чтобы отправить фото, создайте файл
sudo nano /home/pi/tg_photo.sh
и впишите в него
#!/bin/bash to=$1 msg=$2 tgpath=/home/pi/tg cd ${tgpath} (echo "send_photo $to $msg"; echo "safe_quit") | ${tgpath}/bin/telegram-cli -k tg-server.pub -W
Сохраните и закройте его, дав разрешения:
sudo chmod -R 0655 /home/pi/tg_photo.sh
и протестируйте с помощью
/home/pi/tg_photo.sh Name_Lastname /folder/photo.png
II. Дистанционное управление Raspberry Pi через Telegram
Телеграм – весьма разносторонний мессенджер для отправки мгновенных сообщений, в котором можно работать, используя один телефонный номер, одновременно на нескольких устройствах. В предыдущем обзоре мы увидели, как его установить, как отправлять текст и медиафайлы. Мы также убедились, что в Raspberry можно настроить автоматическую отправку сообщений через Telegram. На этот раз мы попросим Raspberry выполнить конкретное действие как функцию полученного сообщения: например, мы могли бы послать слово «photo», чтобы Raspberry прислал нам фотографию дома, или «lamp», чтобы он повернул лампу, или «open», чтобы открыть дверь гаража. Начнём.Шаг первый: инсталляция Начинаем на основе описанных выше действий. Чтобы перехватить новое входящее сообщение, мы создаём файл action.lua (я опускаю описание языка Lua со ссылкой на официальный сайт, так как хабраюзеры с ним, очевидно, знакомы. — Прим. пер.):sudo nano /home/pi/tg/action.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». Перейдите в tg
cd /home/pi/tg
и напишите:
bin/telegram-cli -k tg-server.pub -W -s action.lua
Попробуйте отправить сообщение. Если всё верно, Телеграм отвечает только на «ping» (не на «PING»), и мы должны увидеть что-то вроде этого:
Окей, давайте попробуем что-то более занятное. Установите камеру Raspberry (см. этот туториал) и создайте новую папку, куда по умолчанию будут сохраняться фотографии с этой камеры.sudo mkdir /home/pi/camera
Создайте новый файл «camera.ch»
sudo nano /home/pi/camera/camera.sh
вот с этой начинкой
#!/bin/bash raspistill -w 800 -h 600 -o /home/pi/camera/photo.jpg
Сохраните и закройте его, дав разрешение на действия
sudo chmod -R 0655 /home/pi/camera/camera.sh
Отредактируйте «action.lua»
sudo nano /home/pi/tg/action.lua
и добавьте эти строки в функцию on_msg_receive:
if (msg.text=='photo') then os.execute('/home/pi/camera/camera.sh') send_photo (msg.from.print_name, '/home/pi/camera/photo.jpg', ok_cb, false) end
Шаг второй: тест
bin/telegram-cli -k tg-server.pub -W -s action.lua
Теперь, если вы пошлёте сообщением слово «photo», Raspberry ответит фотографией. Чтобы задать дополнительные команды, просто измените файл «action.lua», добавив новый блок «if». Например, можно активировать выключатель или запросить статус сигнализации.
Используем 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 используется для подсветки светодиодов.
import datetime # Importing the datetime library import telepot # Importing the telepot library from telepot.loop import MessageLoop # Library function to communicate with telegram bot import RPi.GPIO as GPIO # Importing the GPIO library to use the GPIO pins of Raspberry pi from time import sleep # Importing the time library to provide the delays in program
Всякий раз, когда Pi получает сообщение от бота Telegram, она вызывает функцию handle. В этой функции мы читаем сообщение и отделяем текст. Затем мы сравниваем текст и отвечаем на него соответствующим образом.
def handle(msg): chat_id = msg['chat']['id'] # Receiving the message from telegram command = msg['text'] # Getting text from the message print ('Received:') print(command) # Comparing the incoming message to send a reply according to it if command == '/hi': bot.sendMessage (chat_id, str("Hi! MakerPro")) elif command == '/time': bot.sendMessage(chat_id, str("Time: ") + str(now.hour) + str(":") + str(now.minute) + str(":") + str(now.second)) elif command == '/date': bot.sendMessage(chat_id, str("Date: ") + str(now.day) + str("/") + str(now.month) + str("/") + str(now.year)) elif command == '/red_1': bot.sendMessage(chat_id, str("Red led is ON")) GPIO.output(red_led_pin, True)
Вам нужно будет ввести свой токен бота ниже. «Bot.getMe()» будет проверять, успешно ли было установлено соединение между Pi и ботом Telegram, и напечатает ответ.
bot = telepot.Bot('542543102:AAE7xb6_XGAn9Yh-4PPJmfK5YK9TEA4') print (bot.getMe())
Приведенная ниже команда начнет слушать бота, и всякий раз, когда будет получено сообщение, вызовет функцию дескриптора handle.
MessageLoop(bot, handle).run_as_thread()
Полный код приведен ниже.
Код целиком
import datetime # Importing the datetime library import telepot # Importing the telepot library from telepot.loop import MessageLoop # Library function to communicate with telegram bot import RPi.GPIO as GPIO # Importing the GPIO library to use the GPIO pins of Raspberry pi from time import sleep # Importing the time library to provide the delays in program red_led_pin = 21 # Initializing GPIO 21 for red led green_led_pin = 20 # Initializing GPIO 20 for green led GPIO.setmode(GPIO.BCM) # Use Board pin numbering GPIO.setup(red_led_pin, GPIO.OUT) # Declaring the GPIO 21 as output pin GPIO.setup(green_led_pin, GPIO.OUT) # Declaring the GPIO 20 as output pin now = datetime.datetime.now() # Getting date and time def handle(msg): chat_id = msg['chat']['id'] # Receiving the message from telegram command = msg['text'] # Getting text from the message print ('Received:') print(command) # Comparing the incoming message to send a reply according to it if command == '/hi': bot.sendMessage (chat_id, str("Hi! MakerPro")) elif command == '/time': bot.sendMessage(chat_id, str("Time: ") + str(now.hour) + str(":") + str(now.minute) + str(":") + str(now.second)) elif command == '/date': bot.sendMessage(chat_id, str("Date: ") + str(now.day) + str("/") + str(now.month) + str("/") + str(now.year)) elif command == '/red_1': bot.sendMessage(chat_id, str("Red led is ON")) GPIO.output(red_led_pin, True) elif command == '/red_0': bot.sendMessage(chat_id, str("Red led is OFF")) GPIO.output(red_led_pin, False) elif command == '/green_1': bot.sendMessage(chat_id, str("Green led is ON")) GPIO.output(green_led_pin, True) elif command == '/green_0': bot.sendMessage(chat_id, str("Green led is OFF")) GPIO.output(green_led_pin, False) # Insert your telegram token below bot = telepot.Bot('542543102:AAE7xb6_XGAn9Yh-4PPJmfK5YK9TEA4') print (bot.getMe()) # Start listening to the telegram bot and whenever a message is received, the handle function will be called. MessageLoop(bot, handle).run_as_thread() print ('Listening....') while 1: sleep(10)
На этом пока всё. Вы создали свою программу для бота Телеграма и Raspberry Pi.
Используемые источники:
- https://habr.com/ru/post/249265/
- https://arduinoplus.ru/bot-telegram-raspberry-pi/