Main

Управление системой через Skype

<<< Сценарии

Что понадобится: Установить на сервер где установлена система MajorDoMo , программное обеспечение Skype.

Принцип заключается в следующем:

В системе MajorDoMo Project есть скрипт, который при запуске слушает все входящие сообщения и пытается их обработать через общий обработчик команд.

Как это работает

В системе существует Class: Skype

В данном классе имеются два метода:

  • Новое сообщение (onNewMessage)
  • Изменение статуса (onStatusChange)

А также, добавлен объект mySkype который унаследовал методы вышеуказанного класса...

Метод onNewMessage , объекта mySkype имеет код следующего вида

Из данного кода видно, что система может получать команды от пользователя skype с ником "Test" , от других пользователей команды будут игнорироваться. Далее при получении команды от "Правильного пользователя" через общий обработчик команд, который был описан на примере голосового управления системой Простое голосовое управление системой происходит выполнение произвольной команды, либо сценария.

В итоге мы получили простое и удобное средство управления системой дистанционно с помощью свободно распространяемого программного обеспечения Skype.

 
 

Обсуждение

 

Vit: Обсуждение страницы Управление системой через Skype

anemcov: Сергей, озадачился подключением Скайп под Линукс. Поле для деятельности подготовил - скайп запускается и даже принимает - отправляет сообщения из php-скриптов. Теперь пытаюсь вкурить логику работы модуля Скайп в МажорДоМо. Судя по циклу_скайп, скрипт периодически отправляет сообщения пользователям в скайп - здесь вроде все понятно: запрос к базе, получили сообщения для пользователей, а потом отправили по разным логинам кому что причитается. Дальше обработка входящих сообщений. Я так понял, что в Винде регистрируется некий класс, который через механизм COM-объектов получает от Skype входящие сообщения. И вот дальше у меня ступор. Судя по коду скрипта, эти сообщения прямо в скрипте и обрабатываются (на ping получаем pong, либо пытаемся обработать через модуль команд commandReceived). Но я никак не могу понять, в какой момент происходит вызов метода onNewMessage объекта mySkype. HTTP-запросов в цикле_скайп я не увидел. Что я упустил?

sergejey: Не упустил, похоже я так и не подключил этот метод. Это можно сделать добавив после строчки getObject("ThisComputer")->raiseEvent("commandReceived", array("command"=>$qrys[$i])); такую строчку: callMethod("mySkype.onNewMessage",array("message"=>$qrys[$i])); Ещё можно использовать модуль Шаблоны поведения для обработки команд, т.к. он реагирует на историю сообщений в чате системы, а скрипт работы со скайпом пишет в чат то, что приходит на скайп. Ну и буду рад если поделишься потом итоговым скриптом, чтобы обновить его в основной ветке исходников :)

anemcov: Не упустил, ... Ну и буду рад если поделишься потом итоговым скриптом, чтобы обновить его в основной ветке исходников :) Ближе к выходным - по вечерам разбираюсь, на работе приходится работать :)

anemcov: Установку проводил на основе примеров из интернета. Общие принципы: - на сервере X-Server не поднимаем - будем использовать Xvfb - общаться со скайпом будем через dbus - скайп будем использовать только в текстовом режиме - для выполнения первоначальной настойки будем использовать доступ через VNC Для начала установим компоненты для работы с dbus apt-get install php5-dev apt-get install php-pear pear install PEAR apt-get install libdbus-1-dev libxml2-dev pecl install dbus-beta пропишем в настройки PHP использование модуля dbus echo -e "; configuration for php DBus module\nextension=dbus.so"| tee -a /etc/php5/conf.d/dbus.ini Проконтролируем, что все поставилось php -i | grep -n -i dbus должны увидеть что-то типа DBus support => enabled Теперь непосредственно Скайп так как у меня Debian sqweeze с ядром 2.6.32 - скачанный с сайта по ссылке дистрибутив не заработал (экспериментировал с обновлением ядра для 3-й версии - там все получилось). Я скачивал старенький дистрибутив. Итак, приступаем wget http://download.skype.com/linux/skype-debian_4.0.0.7-1_i386.deb dpkg -i skype-debian_4.0.0.7-1_i386.deb 99%, что вы получите ругань на неудовлетворенные зависимости. Делаем так: apt-get -f install и пробуем еще раз dpkg -i skype-debian_4.0.0.7-1_i386.deb есть вероятность, что ничего не получится. У меня решению проблемы помогло добавление в /etc/apt/source.list напротив каждого репозитария параметра Contrib Если у вас все прошло хорошо, приступаем к последнему этапу шаманства :) Первое замечание: у меня Apache и скрипты cycle.php исполняются от имени пользователя www-data. Поэтому и запуск скайпа я буду делать от имени этого пользователя. Второе замечание: домашней директорией пользователя www-data является каталог /var/www, в котором этот пользователь царь и бог :) поэтому я приодически на все файлы и каталоги проверяю выставленного владельца и права доступа. Итак, если у вас еще не установлен пакет sudo - ставим apt-get install sudo Я дал пользователю www-data права на запуск некоторых приложений, которые нужны для работы умного дома, а также для работы со скайпом. Перечень характерен именно для моего случая echo 'www-data ALL = NOPASSWD: /bin/mount, /bin/umount, /sbin/shutdown, /sbin/reboot, /sbin/modprobe, /sbin/rmmod, /usr/bin/skype, /usr/bin/Xvfb, /home/skype/skype, /bin/su, /bin/kill'>>/etc/sudoers Создадим каталоги для хранения настроек скайпа (в домашней директрии пользователя www-data) mkdir -p /var/www/multi/interface01 chown -R www-data:www-data /var/www/multi Для доступа к запущенному скайпу и выполнения первоначальных настроек (принять лицензионное соглащение, поотключать автоматические смены статусов и лишние оповещения) установим VNC-сервер apt-get install x11vnc Попробуем запустить скайп Запуск будем производить через утилиту Xvfb, используя возможность "сквозной" авторизации скайпа. /usr/bin/Xvfb :101 -ac & su www-data -c "/bin/echo '<skype_login> <skype_password>'| DISPLAY=:101 /usr/bin/skype --dbpath=/home/skype/multi/interface01 --pipelogin &" Разберемся поподробнее. На всех опциях останавливаться не буду, расскажу только про те, которые нам нужны. :101 - номер так называемого "дисплея", на котором делаем запуск. При помощи это йопции в принципе можно запускать несколько копий скайпа на разных "дисплеях" после знака & идет команда, которая выполняется на "дисплее". В нашем случае от имени пользователя www-data отправляем логин и пароль на вход команде ...DISPLAY=:101... - запуск производим в "дисплее" 101 ...-dbpath=... - указываем, где храним настройки для хапускаемого сеанса. Если хотим несколько сеансов - раскидываем настройки по разным каталогам ...-pipelogin... - говорим скайпу, что логин и пароль мы отправили ему ранее командой echo Ну вот и все :) скайп запущен. Осталось только его настроить. Для этого запусим VNC-сервер x11vnc -display :101 Подключаемся при помощи любого vnc-клиента (я использую RealVNC для Mac или TightVNC для Windows). Как видите, сервер мы тоже адресуем к нашему :101 "дисплею". При таком запуске сервер остановится, как только вы от него отключитесь. Если хотите, чтобы он работал постоянно, и отключать его вручную - добавьте опцию -forever x11vnc -display :101 -forever Подключившись, вы увидете лицензионное соглашение. Приняв его, должны получить залогиненый скайп. Я у себя в настройках отключил автоматическую смену статуса при неактивности, а также все уведомления (кроме входящего звонка - его просто не отключить), запретил автоматическую проверку обновлений и прочие непонятные и ненужные для текстового общения опции. Об установе и запуске Скайпа пока все. Интеграцию его в Умный дом опишу чуть позднее, когда оттестирую скрипты.

sergejey: Класс! Всё меньше и меньше поводов оставаться на Windows :)

anemcov: Отправил исходники с интеграцией Скайпа для Линукса. Ждем релиза :)

sergejey: Уже в общей ветке.

Gnork: Объясните пожалуйста, как запустить обработку сообщений скайпа, где можно посмотреть список команд, которые можно писать, где и каким образом добавить свои команды? Мажордом запущен под виндой, скайп в системе запущен. Вот тут http://smartliving.ru/Main/ScSkypeBot написано, что в системе есть класс скайпа, в котором два метода и один объект. Всё так и есть. А как этим пользоваться? Посылаю на этот скайп текстовое сообщение "ping" (единственное, что нашел на форуме), "тот" скайп его получает... И всё...

Goerg: Установил и настроил x11vnc + Xvfb (ubuntu 12.04) по подробной инструкции выше, все отлично работает, но одна загвоздка, сообщения в чат Majordomo отправляются только если вручную запустить cycle_X101_skype.php, хотя в настройках Majordomo активировал пункт "Run Skype script". Подскажите пожалуйста куда копать?

anemcov: Установил и настроил x11vnc + Xvfb (ubuntu 12.04) по подробной инструкции выше, все отлично работает, но одна загвоздка, сообщения в чат Majordomo отправляются только если вручную запустить cycle_X101_skype.php, хотя в настройках Majordomo активировал пункт "Run Skype script". Подскажите пожалуйста куда копать? Если мне мой склероз не изменяет - запуск скриптов происходит автоматически по их наличию в папке и по слову cycle в имени файла. Так что для начала - лог в студию.

Goerg: В общем разобрался, скрипт не отвечал и ничего не писалось в общий чат, пока в скрипте cycle_X101_skype.php не раскомментировал строчку "~(что там) выводить все в коммандную строку". Подскажите, возможно ли настроить Majordomo так, чтобы все что пишется системой в чате, транслировалось в Skype?

anemcov: Подскажите, возможно ли настроить Majordomo так, чтобы все что пишется системой в чате, транслировалось в Skype? Так там через обычный say() все работает. Устанавливается минимальный уровень оповещения, и если у say() приоритет выше - сообщение уходит и в скайп тоже

uhachov: Коллеги подскажите у кого есть опыт управления системой (ubuntu) через Skype , почему скрипты cycle_skype и cycle_101_skype при запуске системы стартуют и сразу же останавливаются , skype запущен.

ignat99: Коллеги подскажите у кого есть опыт управления системой (ubuntu) через Skype , почему скрипты cycle_skype и cycle_101_skype при запуске системы стартуют и сразу же останавливаются , skype запущен. Возможно дло в Скайпе. После обновления скайпа и основной библиотеки Си, он перестал работать. В офисе Скайп(Микрософт) сказали что с платформы Линукс они не получают денег, поэтому не поддерживают. IMHO

Vovix: Скажите, а что метод onNewMessage, как описано тут - http://smartliving.ru/Main/ScSkypeBot уже не работает! Я скайп настроил, у меня заработало, всё что с уровнем ThisComputer.minMsgLevel больше этого посылает в скайп! код метода onNewMessage:  global $voicemode;
 $voicemode='off';
 processCommand($params['message']);  Но этот код, похоже не работает, всё работает как-то "мимо него"! т.к. если даже его удалить, всё все равно функционирует так-же? Или я чёта не понимаю, или ... "лыжи не катят!"?

seredaneo: Подскажите, а скайпбот еще работает? А то у меня ничего не получается. Не реагирует никак.

anemcov: Подскажите, а скайпбот еще работает? А то у меня ничего не получается. Не реагирует никак. Прикрыли они халяву со скайпом. Надо новый механизм придумывать. По крайней мере под Линукс

shemnik69: Оптимально если перейти на что то связанное с ICQ. Довольно удачная версия была в бенуксе. там и сам модуль был отдельный. кто разбирается можно посмотреть как вариант. Т.е это отдельное приложение по сути модуль. И потом на всех мобильниках есть ее аналоги.

anemcov: В Jabber чем плох?

shemnik69: Да Ничем. Это по сути одно и тоже. Смысл то не в названии программы, а а том что и там и там один протокол передачи коротких сообщений (по сути SMS) но средствами IP. Удобство в том, что по сути система может быть постоянно "на виду" в плане получения и передачи результатов исполнения (каких либо, других информационных сообщений) команд. Но тут тоже нужно определенный порядок. А с другой стороны. а много людей постоянно используют эту функцию? У меня был Бенукс там такая опция работала, так за все время 1 раз и пользователь просто для проверки (типа самоуспокоения) и все.

Amarok: А что если прикрутить не скайп (который, кажется, в виде плагина закрылся на всегда) а ICQ/IRC/Jabber? Клиентов под эти протоколы уйма на всех платформах, IRC/Jabber можно вообще свои создать, да и протоколы открыты.

Ivan: Делал jabber. Выкинул не пользуюсь.

aurodionov: Делал jabber. Выкинул не пользуюсь. Как оповещения нормально .

Amarok: Делал jabber. Как?

Bluefox: Используйте для сообщений pushover или pushbullet. Отлично работает.

[ Обсудить на форуме ]

 

MajorDomo

Информация

Проекты

Партнёры

edit SideBar

 
 
 

 

Blix theme adapted by David Gilbert, powered by PmWiki