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

Автор оригинала: Emmeshop Electronics

  • Перевод

2250f8da5ea2443db721e03f5f5e70ce.jpg Один итальянский магазинчик нащупал новые способы использования Телеграма (и ранее 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 

8d28ed46fc384eb1af25529484889a2b.pngШаг второй: тест

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/

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий