Установка программной мини-АТС Asterisk

Установка программной мини-АТС Asterisk24/04/2011 01:33:23

Что, опять поврежденье на трассе?

Что, реле там с ячейкой шалят?

Мне плевать, буду ждать, я согласен

Начинать каждый вечер с нуля!

(В. Высоцкий, «Ноль семь»)

Нужна ли мини-АТС в частном доме? Мне — нужна. Я попытаюсь объяснить какие задачи могут стоять перед современными системами связи в частном доме.

В данный момент цифровые технологии развиваются очень стремительно. Но развитие получают не только какие-то конкретные решения или продукты, развиваются средства коммуникации, интерфейсы, протоколы взаимодействия между системами. Цифровые решения интегрируется друг в друга, а все вместе интегрируется вокруг сети Интернет, мобильных решений, цифровых средств связи. Немаловажную роль в этом процессе играют проекты с открытым исходным кодом.

В частном доме, особенно в несколько этажей, с большим количеством комнат хочется иметь телефон в спальне, кабинете или в ванной, а также набор стандартных функций обычной мини-АТС: звонки внутри дома, перенаправление звонков, перехват входящего вызова, музыка на удержании и прочее. Но современные программные продукты, такие как Asterisk вместе с типовым набором функций предоставляют куда больше возможностей.

IP-телефония в доме

Например, я бы хотел иметь возможность с любого телефона в доме звонить не только на городские номера, но в Интернет (Skype), ровно как и принимать звонки из Skype на домашние телефоны. Я бы хотел подключить GSM-шлюз с тем, чтобы когда никого нет дома, звонки из дома перенаправлялись или на телефон на работе или на мобильный телефон. А, выбрав правильно мобильный тариф, можно было бы до минимума сократить затраты на звонки с домашних телефонов на сотовые. Я бы хотел настроить несколько IP-шлюзов так, чтобы междугородние и международные звонки с любых телефонов в доме автоматически маршрутизировались на нужные IP-сервисы для обеспечения минимальной стоимости звонка. Я бы хотел организовать голосовую почту, которую я бы мог прослушать не только через телефон, но и через Интернет или с любого ПК в доме. Я бы хотел организовать автоматическую маршрутизацию всех звонков по CallerID или другим параметрам так, чтобы звонки с работы шли на телефон в кабинете, а звонки из школы — жене. Неплохо было бы организовать голосовое меню с паролем, чтобы иметь возможность управлять любыми устройствами в доме посредством голоса или DTFM. Наконец, даже дверной звонок или звонок на входе можно завести в мини-АТС, чтобы он автоматически отправлялся на мобильный телефон и я мог с чистой совестью сказать, что никого нет дома. Это только малая доля того, что можно реализовать посредством современных программных решений. Существуют много других интересных идей. Например, часто в отелях за рубежом Wi-Fi Интернет бесплатен. Но не у всех есть Skype. Можно посредством Skype соединится с домашним Asterisk и позвонить на нужный городской номер совершенно бесплатно. Полагаю, даже этого небольшого описания достаточно, чтобы согласится с тем, что в своем доме, особенно если он в некотором смысле Умный, бесплатный Asterisk вряд ли будет лишним.

В данной статье я не ставлю задачу сделать подробное описание процесса установки Asterisk в Linux. Ограничусь только некоторыми основными моментами, а более подробно опишу свой опыт и некоторые нюансы, которые могут быть полезны читателям.

Asterisk — это бесплатный программный продукт. Он не включает в себя какое-либо оборудование. Но если к дому подведена телефонная линия, одной только программы будет мало. Необходим шлюз, который бы позволил компьютер (выполняющий роль мини-АТС) подключить к аналоговой телефонной сети. Традиционно такие аппаратные средства называют VoIP-шлюзами. Шлюзы бывают внешними — из самых известных это D-Link, ZyXEL, Linksys, Grandstream, Skypemate и другие и в виде плат, встраиваемых в компьютер: Digium, Yeastar, Sangoma. В шлюзе должен присутствовать хотя бы один FXO-порт. Собственно, к этому порту и подключается телефонная линия. В доме могут использоваться обычные аналоговые телефоны — привычные нам Panasoinc, Siemens или IP-телефоны: LInksys, D-Link, Yearlink, Cisco, Polycom, Fanvil и другие. Для подключения одного аналогового телефона нужно, чтобы в VoIP шлюзе или плате присутствовал FXS-порт. Во внешних шлюзах количество таких портов обычно 1-2, на платы можно установить 4-8 и более FXS портов. Если у нас в доме, скажем, 3 аналоговых телефона, нужно 3 FXS-порта. Совсем другая ситуация с IP-телефонами. Они подключаются в существующую Ethernet-сеть и их может быть сколько угодно. Какие-либо дополнительные порты им не нужны. На текущий момент FXS-порт + хорошие аналоговый телефон стоит примерно столько же сколько IP-телефон (около 2500 руб).

Плата Digium TDM410 c двумя мезонинами установлена в медиа-сервер

Таким образом, я купил аналоговую 4-х канальную плату Digium TDM410P и два мезонина (X100M/FXO, S110M/FXS). Сама плата имеет 4 канала, но необходимый функционал каналов создается установкой так называемых мезонинов. На эту плату, например, можно установить 4 мезонина X100M, тогда получится 4 FXO-порта для внешних линий или 3 FXS и 1 FXO. Также я приобрел IP-телефон Cisco SPA504G.

Для установки Asterisk в Debian можно воспользоваться репозиторием.

Update статьи от 10.11.2013. Установка Asterisk в Debian 7 (Wheezy).

Установить Asterisk в ОС Debian достаточно просто. Но есть один нюанс, связанный с модулями DAHDI.

Пакет dahdi-source необходимо загрузить обязательно, иначе модуля wctdm24xxp у вас не будет. Для успешной загрузки dahdi-firmware-nonfree потребуется добавить non-free в конфигурационный файл source. list менеджера apt.

После установки всего этого хозяйства запускаем команду dahdi_genconf modules

Но модули еще требуется скомпилировать. Для этого запустим следующую магическую команду (компилирование модуля с помощью module-assistant)

А уже после этого можно запускать скрипт

Настройка Asterisk, установленного из репозитория в точности такая же, как и при установке из исходников.

Кому-то может показаться, что в репозитории Debian содержится достаточно древняя версия этого ПО, поэтому можно скомпилировать Asterisk самостоятельно. Необходимо с официального сайта Asterisk скачать последнюю версию Asterisk и драйверов DAHDI (если у нас будут использоватья аналоговые платы).

Процедура установки Asterisk из исходных кодов была описана 24.04.2011 и в текущий момент может содержать неактуальную информацию.

Поскольку мы собираемся компилировать Asterisk сами, то нужно, чтобы в системе присутствовал весь необходимый для этого инструментарий: gcc, g++, build-essential, make, libncurses5-dev и прочее (ставится с помощью apt-get install). Далее все просто:

Скачиваем дистрибутив драйвера DAHDI

Распаковываем его с помощью команды tar — xvzf имя_архива

Переходим в распакованную папку

Скачиваем дистрибутив Asterisk.

Распаковываем его с помощью команды tar — xvzf имя_архива

Переходим в распакованную папку

Теперь настроим все плагины, которые, начиная с версии 1.8, устанавливаются с помощью menuconfig

Собственно, все. Запускается Asterisk автоматически или с помощью команды

/etc/init. d/asterisk start (в Debian)

А вот дальше намного сложнее. Драйвер DAHDI можно настроить с помощью команды

Скрипт сам пропишет конфигурационные файлы согласно установленного оборудования (речь именно о платах TDM).

Настройка Asterisk

С конфигурированием Asterisk все не так просто. Достаточно зайти в папку /etc/asterisk чтобы оценить масштаб настроек.

Но, несмотря на все разнообразие, основные параметры содержатся файлах users. conf, sip. conf и extensions. conf

Описать внешнюю линию, а также FXS-порт (аналоговый телефон) и IP-телефоны можно в users. conf. Многие пользователи вносят эти настройки в sip. conf. Asterisk обрабатывает оба файла. Я же отталкиваюсь от того, что Asterisk GUI делает изменения именно в users. conf.

Теперь нужно прописать правила набора, маршруты в файле extensions. conf

Собственно, на этом базовая настройка Asterisk, которая позволяет осуществлять звонки внутри дома и на внешние телефоны, закончена.

После любых изменений в конфигурационных файлах, необходимо дать команду Asterisk для перезагрузки настроек. Это можно сделать так

или с помощью программы asterisk

Вообще говоря, для Asterisk есть несколько Web-интерфейсов для визуальной настройки. Это прежде всего FreePBX и Asterisk-GUI. FreePBX можно скачать с официального сайта проекта, а Asterisk GUI через subversion командой

Настройка через Web-интерфейс сильно упрощает процедуру, но как любой автомат, делает это не всегда правильно. Автоконфигурирование поможет сформировать основу, а тонкую настройку придется все же осуществить в ручном режиме.

Asterisk GUI

Первое тестирование показало, что все работает достаточно хорошо. Звонки внутри домашней сети между аналоговым и цифровым телефоном проходили. Каждый из них мог звонить на городские номера. Качество связи хотя и не было идеальным, все же было достаточно неплохим. В процессе экспериментов было замечено, что при звонках с IP-телефона Cisco ощущалась какая-то «урезанность» звука. Чего-то не хватало.

Здесь нужно сказать несколько слов о кодеках. Asterisk позволяет работать с массой разных кодеков. Самый распространенный во всем мире кодек G.711 (который был создан аж в 1972 году). Этот кодек является, пожалуй, одним из самых качественных кодеков, так как практически не использует компрессию. Если позволяют каналы связи, а для работы кодека нужна полоса в 64Кбит/с, лучше использовать именно его. К тому же при использовании G.711 нагрузка на аппаратную часть минимальна, так как объем вычислений ничтожно мал. G.711 всегда присутствует в двух вариантах: ulaw (использующийся в США, Канаде и Японии) и alaw (во всем остальном мире). Все цифровое оборудование в России использует alaw. Преобразование из ulaw в alaw всегда происходит с ухудшением качества звука. По умолчанию в Asterisk и IP-телефонах часто стоит G.711u. После того, как я везде установил приоритет alaw, качество звука улучшилось, но осталась какая-то приглушенность.

Cisco SPA504G

Поиск в сети подтвердил, что это общая проблема телефонов серии SPA500. Некоторые пользователи подключали к этому телефону трубки от аналоговых телефонов и наблюдали при этом улучшение качества и громкости звука. Компания Cisco, видимо, проблему признала и выпустила прошивку, в которой была сделана попытка исправить ситуацию. После установки прошивки и изменения параметра Input Gain в закладке Phone Web-интерфейса телефона ситуация в значительной степени улучшилась.

Примечания к прошивке 7.4.6

A deep bass audio setting for handsets was added in the web-based configuration utility and the phone user interface

There are three choices:

— Default—Enables deep bass on the phone.

— HiDef—Enables a redesigned equalizer that has improved high frequency.

— Standard—Enables an equalizer that emulates a narrow-band handset.

Качество звука и субъективные ощущения при разговоре вполне меня устроили, хотя я бы и не дал наивысшую оценку. Единственное, что еще в некоторой степени мешало — появляющееся эпизодически эхо.

SPA500 Web-интерфейс

Настройка громкости звука (Input Gain)

Эхо в VoIP технологии в случае звонков на аналоговые телефоны является достаточно распространенным, можно даже сказать обычным явлением. Эхо появляется всегда, когда происходит утечка голоса из тракта передачи в тракт приема. Причин такой утечки много. Наиболее распространенная причина возникновения эха — сама природа аналоговой передачи данных, связанная с нарушением баланса, разными характеристиками жил двухпроводных линий. Эхо также возникает в случае, если на принимающей стороне происходит передача голоса из динамика в микрофон. В привычной (аналоговой) телефонии эхо присутствует ничуть не в меньших масштабах, но за счет малой транспортной задержки (менее 50 мс) для человеческого мозга оно не создает какого-либо дискомфорта. В цифровых VoIP сетях, где транспортная задержка существенно выше за счет кодирования звука и передачи по различным цифровым каналам эхо с задержкой в 50-300 мс создает существенные проблемы.

В Asterisk встроено несколько алгоритмов подавления эха. Наиболее популярный в данный момент MG2. Этот алгоритм является бесплатным и устанавливается по умолчанию в последних драйверах DAHDI. Существует еще один хорошо зарекомендовавший себя алгоритм — OSLEC, который разрабатывался специально для TDM400P, но у меня нет данных, работает ли он с платой TDM410P. В целом в моем случае MG2 снижал эхо до приемлемого уровня, но все-таки в некоторых случаях оно было ощутимо.

Поскольку я являюсь обладателем карты TDM410P, производитель, компания DIGIUM, предоставляет всем своим клиентам бесплатную лицензию на фирменный алгоритм эхоподавления HPEC. Для того, чтобы воспользоваться этим алгоритмом необходимо создать аккаунт на сайте Digium и зарегистрировать серийный номер платы. Затем нужно скачать с сайта и установить бинарники HPEC. Подробную инструкцию можно найти на сайте Digium.

Все, что необходимо — это внести изменения в настройки DAHDI. Файл system. conf

Со стороны Asterisk следует отредактировать файл chan_dahdi. conf

В моем случае значение 256 (32 мс) явилось оптимальным.

Тестирование показало, что программный эхоподавитель HPEC работает в значительной степени лучше, чем MG2. В некоторых случаях небольшое эхо было слышно, но его громкость в несколько раз была ниже, чем при использовании MG2.

Эхоподавитель при звонках на аналоговые телефоны и линии — вещь очень полезная, но есть одна неприятная деталь. В случае, если оба человека будут говорить одновременно. эходав будет пытаться отловить и заглушить эхо, но вместе с этим пострадает и голос, идущий с другой стороны провода. Выражается это в дрожании голоса, искажении и даже эпизодически в полном отсутствии. Вместе с помехой эходав режет и полезную часть разговора. Но и в этом компоненте HPEC показал себя с лучшей по сравнению с MG2 стороны. В реальном разговоре этот эффект хотя и временами заметен, но не создает каких-то больших проблем.

Я продолжил свои эксперименты по улучшению качества голоса и попробовал использовать разные кодеки G711 (alaw, ulaw), G726, G729a, G722. В исходном коде Asterisk отсутствует один из современных кодеков G729, который позволяет сохранить качество голоса на уровне G711 ограничившись при этом полосой всего в 8Кбит/с, но его можно установить из Интернета, скачав предварительно файл codec_g729-ast18-gcc4-glibc-x86_64-core2.so (название файла зависит от разрядности ОС, компилятора и т. д.) и подключить его к Asterisk с помощью команды

Посмотреть какой кодек используется в момент разговора можно с помощью команды:

Дальнейшие эксперименты показали, что разные кодеки по-разному обеспечивают качество связи. Неплохой результат показал широкополосный кодек G722, который, к слову поддерживается телефоном Cisco SPA504G. Качество связи с G722 кодеком оказалось сравнимым с G711. Таким образом, мой выбор в связке Asterisk 1.8 — DAHDI/TDM410P — Cisco SPA504G — это HPEC и G722 или G711a. Однако нужно учитывать, что с другим провайдером телефонных услуг, с другими линиями связи и телефонами результат может быть иным.

Еще несколько слов о настройке и использовании Cisco SPA504G.

Первое — телефон поставляется без блока питания. Так как данная модель поддерживает технологию PoE (Power On Ethernet), производитель, видимо, посчитал, что блок питания не нужен. Но PoE в моей сети нет. В качестве альтернативного питания в телефоне предусмотрен разъем — 5В DC. Где-то в подвале нашел старый дешевый китайский блок питания 6В/0.8A DC. Телефон заработал, но иногда самопроизвольно перезагружался. Мои подозрения первым делом упали на блок питания. И правда, после замены китайского чуда на качественный блок питания от старого FastEthernet коммутатора Intel InBusiness (5В/3A DC) глюки телефона пропали. Проблема даже не в том, что китайский БП давал 8,2В вместо 6В, а в том, что не отдавал требуемый телефоном ток. «Родной» БП расчитан на ток в 2 ампера. Используйте качественные стабилизированные блоки питания, способные отдавать не менее 2А.

Второе. В самом телефоне на каждую Extension/линию, а их в SPA504G четыре, прописывается свой Dial Plan. По умолчанию он такой.

Ничего общего с реальной российской жизьню этот Dial Plan не имеет. В принципе можно заменить его на следующий

Тогда все звонки будет маршрутизировать Asterisk. Но тут есть один нюанс. После набора произвольного номера, прежде чем передать его в Asterisk, телефон определенное время ждет — не наберет ли пользователь еще какую-нибудь цифру. Ничего страшного в этом нет, но создает некоторые неудобства при наборе локальных номеров. Например, набираем номер 102, а телефон звонит только через 1,5-2 секунды. Кроме того, если мы будем набирать длинный номер медленно, телефон может передать его в Asterisk не дождавшись окончания набора. Для решения этой проблемы можно воспользоваться следующим диалпланом.

Все трехзначные номера, которые начинаются на 1 отправлять без задержки (опция S0). Также поступать со всеми 6-значными городскими номерами, кроме тех, которые начинаются с 8-и.

В следующих статьях я расскажу об опыте дальнейшего внедрения Asterisk в общую информационную систему Умного Дома.

Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.

как программировать мини атс panasonic

сколько стоит настройка мини атс

как программировать мини атс panasonic

Метки: , , , . Закладка Постоянная ссылка.

Комментарии запрещены.