Робот для Google Talk на базе Raspberry Pi

Программа обмена текстовыми сообщениями Google Talk обычно используется для общения между людьми. Тем не менее, технология, лежащая в её основе удобна для реализации программных роботов. Интернет-боты, они же веб-роботы, WWW роботы или просто «боты» также могут использовать эту технологию для исполнения автоматических функций с помощью интернета. Существует масса подобных ботов, предоставляющих различные службы, начиная от шуточных (jokes@askme.im) до сокращения URL (url@askme.im) и даже математических вычислений (math@bot.im). Подключение к подобным ботам не является сложной задачей, достаточно добавить адрес бота в ваши контакты. Затем, при необходимости, отправьте боту текстовую команду и он пришлёт в ответ требуемую информацию.

Бот Raspi похож на всех остальных интернет ботов. Для его настройки необходимо иметь отдельный адрес электронной почты, связанный с учетной записью Google Talk. Этот адрес должны будут добавить себе в контакты все желающие управлять ботом. Затем, как только будет запущен скрипт бота, он подключится к службе чата Google и появится среди ваших друзей в списке контактов.

Программное обеспечение бота представляет собой клиента протокола XMPP, написанного на языке Python. При запуске, скрипт подключается под своими учетными данными к службе Google Talk. Скрипт на языке Python является развитием проекта pygtalkrobot — открытого проекта бота gtalk (google talk) с использованием библиотек XMPPPY и PyDNS, а также с использованием кода проекта python-jabberbot.

Программное обеспечение

Бот требует наличия дополнительных модулей Python. Проще всего установить их с помощью менеджера пакетов pip. Если он не установлен, вы можете установить его с помощью apt-get:

sudo apt-get install python-pip git-core python2.7-dev

Затем обновите индекс easy_install:

sudo easy_install -U distribute

и установите модули GPIO, xmpppy и pydns:

sudo pip install RPi.GPIO xmpppy pydns

Затем скопируйте мой репозиторий с исходниками робота Raspi Gtalk:

git clone https://github.com/mitchtech/raspi_gtalk_robot.git

Теперь смените рабочий каталог:

cd raspi_gtalk_robot

Наконец, укажите имя пользователя и пароль в службе Google для своего робота. Это можно сделать с помощью полей BOT_GTALK_USER, BOT_GTALK_PASS, и BOT_ADMIN в строках с 31 по 33 файла raspiBot.py. Рекомендуется (но не является необходимым) создать для робота свою собственную учетную запись в службах Google. Кроме того, поскольку доступ к шине GPIO на компьютере Raspberry Pi предоставляется только суперпользователю, запускать робота необходимо с помощью команды sudo:

sudo python ./raspiBot.py

Скрипт, предлагаемый в качестве образца, понимает следующие команды:

[pinon|pon|on|high] [pin] : включает указанный выход GPIO
[pinoff|poff|off|low] [pin] : отключает указанный выход GPIO
[write|w] [pin] [state] : устанавливает указанное состояние указанному выходу
[read|r] [pin] : считывает состояние указанного выхода GPIO
[available|online|busy|dnd|away|idle|out|xa] [arg1] : определяет состояние подключения google talk и статусное сообщение в соответствии с аргументом
[shell|bash] [arg1] : выполняет команду оболочки, указанную в аргументе после слова «shell» или «bash»

Например, сообщение «pinon 10» даст команду включить 10-й выход GPIO, сообщение «read 8» даст команду считать текущее состояние 8-го входа GPIO, наконец сообщение «bash ps» запустит на выполнение команду оболочки «ps».

Железо

Конфигурация, показанная в видеоролике, включает в себя двухпозиционный переключатель, подключенный к входу 8 GPIO, а также светодиод, подключенный к 10-му выходу GPIO. Вот подробная схема подключения (схема сделана с помощью Fritzing):

raspi_gtalk_robot

Пример использования №1. Домашняя автоматизация

Одним из самых очевидных способов использования данной технологии является, конечно же, домашняя автоматизация. Робот Raspberry Pi доступен откуда угодно при помощи Google Talk, что на мой взгляд означает — доступен почти с любого устройства. Отправляйте сообщения роботу для включения или отключения света в доме, а также управления другими электроприборами.

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

Пример использования №2. Удаленный доступ

Робот Raspberry Pi может быть использован в качестве устройства удаленного доступа. В этой конфигурации, каждое сообщение, отправленное роботу будет обработано как команда операционной системы, результаты работы которой будут доставлены обратно пользователю в виде ответного сообщения. Конечно, такое устройство создает проблемы безопасности. Для защиты от несанкционированного доступа, робот отвечает только на сообщения Google talk от пользователя, указанного как администратор. По умолчанию, сообщения от остальных пользователей будут игнорироваться.

Вот небольшой список относительно безопасных команд, которые можно запускать удаленно с помощью робота Raspberry Pi:

vmstat — отображает активность системы, оборудования и прочую информацию
uptime — время непрерывной работы системы
w — показывает подключенного пользователя и его активный процесс
ps — выдает список запущенных процессов
free — объем свободной физической и виртуальной памяти
iostat — средняя загрузка процессора, активность дисков

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

Пример использования №3. Удаленная перезагрузка

Еще одна проблема, которая может быть решена с помощью робота на Raspberry Pi — это перезагрузка зависших компьютеров. Многие из нас попадали в такую ситуацию, когда необходимо получить удаленный доступ к компьютеру, который не отвечает на внешние запросы. В этом случае, приходится совершать поездку до места физического нахождения компьютера для того, чтобы нажать «большую красную кнопку» и вызвать перезагрузку этого компьютера. Подобных ситуаций легко можно избежать, используя робота на основе Raspberry Pi в качестве агента удаленной перезагрузки. Этой цели можно достигнуть, используя систему реле цепей питания, управляемых нашим роботом. В случае, когда любой из компьютеров, управляемых роботом, перестает отвечать на внешние запросы, достаточно просто отправить соответствующую команду в виде сообщения Google talk для размыкания заданного реле и перезагрузки повисшего компьютера. Ниже возможная схема включения:

raspi_remote_reboot

Оригинал статьи