habrahabr

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

  • суббота, 31 января 2015 г. в 02:11:31
http://habrahabr.ru/post/249265/



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

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

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

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

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». Например, можно активировать выключатель или запросить статус сигнализации.