udvnl

 
<<< Back

Установка Freeswitch 1.8.2 на Debian 9 (Raspbian Stretch) на базовый образ системы «Умного дома» MajorDomo

Устанавливаем 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.

Discuss (0) (3)

See also:
2023-11-03 Пару мыслей о совместном применении SIP телефонии и систем «Умного Дома», а также немного об организации независимого от Internet канала связи с УД.
2023-10-14 Контроль SystemD и инструмент работы с системными логами через веб браузер
2023-10-10 Установка SIP сервера FreeSWITCH 1.10.10 на Raspberry Pi OS Lite (Debian11)
2023-01-03 Установка MajorDoMo с помощью скрипта от SergeJey на Raspberry Pi
2022-12-09 Где Телефон?
2022-05-30 Вариант установки Majordomo на Windows 10 с использованием пакета XAMPP. Немного о переносе и создании тестовой копии системы с Raspberry PI на Windows
2022-03-09 Небольшие заметки по подключению и использованию сервиса CONNECT
2022-02-27 Zigbee2mqtt, немного о стиках CC2531 и Sonoff USB Zigbee 3.0 Dongle Plus (сравнение, подключение, тестирование).
2021-09-23 Второй раз в первый класс. Часть 1: начало работы c базовым образом для RPi.
2020-12-31 Возможность создания канала управления через телефонные сети для системы домашней автоматизации.
2020-07-06 Чтение файлов из образа img Операционной системы. Возможность записи образа на меньшую по размеру SD карту памяти
2020-06-19 Raspberry Pi: немного о резервном копировании и актуальной копии системы
2020-05-07 Установка VoIP сервера FreeSWITCH с частичной интеграцией в систему MajorDoMo
2020-04-28 Установка базового образа MajorDoMo на Raspberry Pi. Начало первые шаги.
2019-10-07 Возможность создания видео звонков у MajorDoMo (RPI +WebCam)
2019-09-11 Создание голосового оповещения MajorDoMo
2019-08-21 Установка USB аудиокарты и настройка звука в Raspberry Pi
2019-04-04 Сертификация в Z-Wave
2019-03-11 RPI Monitor полезное ПО для Raspberry PI и Orange Pi
2019-02-04 Тестирование пропускной способности канала Ethernet (Wi-Fi) с помощью утилиты IPerf
2018-12-23 Пошаговая инструкция с картинками по установки MajorDoMo на Raspberry Pi 3 с помощью скрипта от Immortal
2018-08-14 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение первого устройства Z-Wave и первые шаги по автоматизации
2018-07-08 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение контроллера RaZberry и первые шаги по Z-Wave
2018-06-29 Пошаговая инструкция по установке образа Majordomo на Raspberry Pi
2018-06-21 Удаленное наблюдение за близкими, но к сожалению, больными людьми.

Минск, Беларусь

На форуме: udvnl