Устанавливаем Freeswitch 1.8 на Debian 9 (Raspbian Stretch, базовый образ системы «Умного дома» MajorDomo).
Частичная интеграция IP телефонии с системой Умного Дома MajorDoMo
В августе разработчик открытой VoIP платформы IP телефонии FreeSWITCH, компания Signalwire опубликовал публичный релиз новой версии ПО – 1.8. (на данный момент уже выпущена 1.8.2).
В связи с выходом этой версии платформы IP телефонии Freesfitch 1.8, появилось решение установить его у себя на Raspberry 3 с установленным базовым образом системы умного дома MajorDoMo, под операционной системой Raspbian (Debian 9 Stretch) с некоторыми элементами автоматизации дома.
Спустя три месяца после выпуска и анонса публичного релиза 1.8 версии в руководстве по установке для Debian 9 на официальном сайте, FreeSWITCH на данный момент опубликована инструкция по установке.
[ Установка FreeSWITCH 1.8]//https://freeswitch.org/confluence/display/FREESWIT...)
Однако мне не удалось установить на свой Rasberry ни один из вариантов, приведенных в инструкции. Не так давно было предупреждение о несовместимости и приходилось устанавливать из исходных кодов. Также в официальной документации можно найти установку на Raspberry Pi, но она уже устарела. Поэтому опишу свой вариант установки на Raspberry P, сделав небольшую пошаговую инструкцию.
Установка FreeSWITCH 1.8.2 из исходных кодов
Подключаемся к Raspberry через Putty.
Чтоб перед каждой командой не набирать sudo, выполняем команду sudo –i. После этого, работаем с правами администратора системы, автоматически перешли в директорию root. Чтоб узнать в какой директории находишься можно выполнить команду Pwd.
Обновляем систему:
apt-get update
apt-get upgrade
Переходим в домашнюю директорию, затем скачиваем версию freeswitch 1.8.2:
cd /home/pi
git clone https://freeswitch.org/stash/scm/fs/freeswitch.git -bv1.8.2 freeswitch
После завершения скачивания в домашней директории появляется папка с исходниками Freswitch. Переходим в неё (полный путь: /home/pi/freeswitch) и устанавливаем необходимые программы для сборки из исходников и переходим в директорию freeswitch:
cd freeswitch
apt-get install autoconf libtool libtool-bin
Прежде, чем собирать программу из исходников, необходимо сначала собрать конфигуратор, запускаем:
./bootstrap.sh –j
Платформа Freeswitch имеет модульную структуру, поэтому перед установкой отредактируем список необходимых модулей:
nano /freeswitch/modules.conf
По большей части список остался как по умолчанию, у меня отключены видео кодеки (включены только G723 и G729), подключен русский языковой модуль, mod curl endpoints, mod_portaudio.
Устанавливаем зависимости для конфигурации и сборки сервера. Используем флаг –y, чтобы команда автоматически ответила Yes на все вопросы системы:
apt-get install -y g++ zlib1g-dev libjpeg9 pkg-config sqlite3 libsqlite3-dev libcurl4-openssl-dev libpcre3 libpcre3-dev libspeexdsp-dev libldns-dev libedit-dev libtiff-dev
apt-get install -y yasm lua5.2 lua5.2-dev libsndfile-dev portaudio19-dev
Устанавливаемые пакеты зависят от подключаемых модулей. Если не хватает какого-либо пакета, то на следующих двух шагах может появиться ошибка.
Конфигурация и установка сервера FreeSWITCH
После этого необходимо запустить конфигуратор для проверки наличия всех зависимостей, а также установки дополнительных опций сборки. Конфигуратор построит Makefile, основываясь на полученных знаниях и файле makefile.am.
Выполняем команду:
./configure --enable-system-lua
Если всё прошло нормально, то получаем следующее сообщение:
Приступим к самой установке:
Make
Make install
При положительном результате Freeswitch устанавливается по умолчанию в директорию /usr/local/freeswitch, на этапе окончания конфигурации можем просмотреть список и размещение директорий FS.
В случае, если при установке или конфигурации выдало ошибку, наподобие mod_lua.cpp:37:17: fatal error: lua.h: No such file or directory #include «lua.h», то необходимо с помощью команды поиска установить необходимые библиотеки. Мне не удалось установить freeswitch c пакетами liblua5.3-0 liblua5.3-dev, пришлось устанавливать версию 5.2.
Apt search lua
Установим звуковые файлы с поддержкой русского языка:
make cd-sounds-install
make cd-sounds-ru-install cd-moh-install
На этом процесс установки можно сказать завершён.
Для предотвращения записи мелких файлов БД на флэш память и увеличение её срока жизни, в файле /etc/fstab добавляем строчку:
tmpfs /usr/local/freeswitch/db tmpfs defaults 0 0
После перезапуска временные файлы, создаваемые FS будут писаться в ОЗУ.
Настройка системы после установки FreeSWITCH.
В документации на FreeSWITCH есть предупреждение, поэтому не рекомендую пробовать запускать FS сразу же после установки.
Внимание! Если вы устанавливали FreeSWITCH из исходного кода, вам необходимо установить права доступа на каталоги и файлы. Если вы запустите FreeSWITCH после установки — он по умолчанию запустится от 'root'. Менять права на каталоги необходимо до первоначального запуска.
Создаем нового пользователя и установим права и изменим владельцев на файлы FreeSwitch
cd /usr/local
groupadd freeswitch
adduser --quiet --system --home /usr/local/freeswitch --gecos "FreeSWITCH open source softswitch" --ingroup freeswitch freeswitch --disabled-password
chown -R freeswitch:freeswitch /usr/local/freeswitch/
chmod -R ug=rwX,o= /usr/local/freeswitch/
chmod -R u=rwx,g=rx /usr/local/freeswitch/bin/*
Далее копируем файл авто запуска в systemd, переименовывая его, меняем права доступа.
FreeSWITCH поставляется с файлом systemd, который при правильной настройке во время загрузки контролирует FreeSWITCH и запускает его в качестве демона, перезапускает его, если FS не работает.
cp /home/pi/freeswitch/debian/freeswitch-systemd.freeswitch.service /etc/systemd/system/freeswitch.service
chmod +x /etc/systemd/system/freeswitch.service
Делаем ссылку на файл запуска и создаем ссылку на файл запуска консоли FS:
ln -s /usr/local/freeswitch/bin/freeswitch /usr/bin/freeswitch
ln -s /usr/local/freeswitch/bin/fs_cli /usr/bin/fs_cli
Добавляем сервис freeswitch в автозагрузку:
systemctl enable freeswitch
systemctl daemon-reload
systemctl start freeswitch
После этого у меня FS всё равно не запустился, выдавал ошибку с *.pid файлом, я просто отредактировал файл автозапуска nano /etc/systemd/system/freeswitch.service
закомментировав следующую строку в файле: # PIDFile=/run/freeswitch/freeswitch.pid.
На всякий случай перегружаем Raspberry: reboot
После перезапуска даем команду опять входим через sudo -i, запускаем htop и видим запущенные процессы FreeSWITCH.
Немного о первоначальных настройках:
После установки FreeSWITCH готов к работе, в нём по умолчанию есть 20 абонентов с номерами 1000-1019. пароль по умолчанию для абонентов VoIP указан в файле /usr/local/freeswitch/conf/vars.xml и равен 1234. В директории /usr/local/freeswitch/conf/derectory/default находятся 20 xml файлов, каждый из которых отвечает за абонента с соответствующим номером. Можем поставить пароль на каждого абонента, меняя имя файла и данные в его содержимом можем изменить абонентскую нумерацию и ёмкость.
Если потребуется это делать, то после редактирования файлов нужно запустить консоль FreeSwitch: fs_cli и в консольном окне даем команду reloadxml. По этой команде FS перечитывает XML файлы и принимает изменения.
Выход из консоли: ctrl+D или же набрав команды /exit или /quit
Сейчас попробуем подключить IP абонентов. Для проверки связи я использовал на ПК под Windows: софтфоны MicroSIP и PhonerLite и на мобильном телефоне под ОС Android CSipSimle, настройки следующие (имя аккаунта – номер телефона, SIP сервер – адрес нашего Raspberry,:
Зеленый значок в нижней строке состояния этих программ означает, что абонент авторизован на нашем сервере VoIP и готов к связи.
Набрав номер, мы можем проверить вызов абонента и некоторые другие функции IP мини АТС.
Но особого применения в домашних условиях типовой офисной АТС я не вижу.Разве что связь с удаленно расположенными помещениями.
Попробуем использовать более расширенные возможности FreeSWITCH.
Freeswitch имеет модульную структуру, подключаемые модули можно посмотреть в файле modules.conf.xml
Отредактируем его, я отключил видео кодеки и подключил русский языковой модуль а также mod_xml_rpc.
nano /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml</>
Включить модуль можно удалив символы <!-- -->
в строке перед и после наименования модуля. Отключить — наоборот поставив эти символы, небольшой пример, первый модуль включен, второй отключен:
<load module="mod_xml_rpc"/>
<!-- <load module="mod_xml_curl"/> -->
После этого редактируем, если хочется изменить, несложные настройки (порт, пользователь, пароль) самого модуля в файле xml_rpc.conf.xml, который находится в этой же директории.
nano /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
По умолчанию: пользователь — freeswitch, пароль works, порт 8080.
Перегружаем или фрисвитч или же сам сервер. Можно сделать несколькими способами: перезагрузив всю систему (reboot), используя команды управления службами:
systemctl stop freeswitch затем systemctl start freeswitch или же systemctl restart freeswitch.
После этого набрав в браузере
http://IP_RASPBERRY:8080/portal/index.html#
и зайдя под пользователем freeswitch с паролем works попадаем в небольшую административную панель FreesWITCH. Можем посмотреть статус, зарегистрированных пользователей и т.д.
Попробуем немного дальше пойти:
Набрав в браузере запрос получаем отображение статуса FS:
http://freeswitch:works@IP_RASPBERRY:8080/webapi/sofia?status%20profile%20internal
Синтаксис довольно простой, если команда содержит больше чем одно слово, то первое и второе слово разделяются знаком вопроса, а остальные пробелами.
Попробуем выполнить эту команду из MajorDoMo: из главной страницы «Умного Дома» переходим в Панель Управления — Консоль
В ней набираем команду:
GetURL("http://freeswitch:works@IP_RASPBERRY:8080/webapi/sofia?status%20profile%20internal")
В ответ получаем состояние нашего сервера VoIP.
Теперь попробуем провести следующий эксперимент:
Идея в том, чтобы инициировать звонок (с помощью функции originate) со стороны «Умного Дома» абоненту с номером 1001 (MicroSip), а потом состоявшийся вызов переводить в план набора для исходящих вызовов на абонента 1002 (PhonerLite). Команда API выглядит так: originate user/1001 1002 XML default инициирование вызов в консоли номер 1001, после поднятия (автоподнятия) трубки вызывается номер и 1002 из плана набора default.
Переводим её в понятный вид для MajorDoMo и браузера:
GetURL("http://freeswitch:works@192.168.43.60:8080/webapi/originate?user/1001%201002%20XML%20default")
Вначале звонит один софтфон, спустя несколько секунд идёт звонок на второй.
В качестве заключения, или небольшая практическая реализация
Не так давно у меня была потребность в организации связи с человеком, который физически не мог позвонить (набрать номер) по сотовому телефону. На данный момент необходимость в этом отпала, но всё таки решил проверить возможность реализации. Используя VoIP шлюз (более бюджетное решение на FXS окончаниях или же подороже GSM шлюз), беспроводную кнопку «умного дома» можно при желании это реализовать.
Второй вариант: Система умного дома MajorDoMo имеет голосового помощника Алису. Сейчас можно попытаться связать «Умный Дом» с владельцем и его мобильным телефоном через сети общего пользования.
Так же можно попытаться, чтоб после некоего важного события (аварии) Алиса звонила пользователю и информировала его о текущем состоянии, и возможно ждала указаний владельца.
Есть ещё вариант с управлением по телефонному каналу путем набора DTMF (USSD) запросов. Но, для меня, это очень в далекой перспективе.
Пока если есть восстребованность, то немного дополню описание информации о FreeSwitch.
Минск, Беларусь
На форуме: udvnl