Работа с аналоговой платой TDM410 от компании Digium

В данной статье я хочу поделиться своим опытом работы с аналоговой платой TDM410 от компании Digium. В начале статьи рассмотрим саму плату, компоненты, из которых она может состоять и цели, для которых она предназначена. После чего, на примере, увидим как можно определить данную интерфейсную плату в системе и сконфигурировать ее на работу с Asterisk IP-PBX.
image

Описание платы

Digium Wildcard TDM410 — это полуразмерная PCI 2.2-совместимая плата для аналоговой телефонии, представляющая собой платформу для одного, двух, трех или четырех модулей S110M (FXS) и X100M (FXO), которые можно сочетать в любом соотношении. При помощи модулей X100M (FXO) плату можно подключить к телефонной сети общего пользования (далее ТфОП), а при помощи модулей S110M (FXS) к аналоговым телефонам. Плата TDM410
пришла на смену плате TDM400P. В отличии от предыдущей платы Digium TDM400P, новая плата допускает установку модуля аппаратной эхокомпенсации VPMADT032, что снижает нагрузку на сервер телефонии и повышает качество звука по сравнению с программными алгоритмами. Для работы модулей FXS требуется свободный 12 В (molex) разъём от блока питания сервера, потому как FXS-порт должен обеспечивать тональный сигнал, и напряжение сигнала звонка, предупреждающего о входящем вызове. FXO-порт не генерирует тонального сигнала, он его принимает, поэтому для работы FXO модулей дополнительное напряжение не требуется.

На рисунке ниже представлена плата TDM410 с двумя S110M (FXS) и двумя X100M (FXO) модулями. Под номерами 1 и 2 модули X100M красного цвета, под номерами 3 и 4 модули S110M зеленого цвета и соответствующие им на плате порты. Также на рисунке можно увидеть разъем molex для подключения к блоку питания сервера и модуль аппаратной эхокомпенсации VPMADT032, который позволяет на аппаратном уровне подавлять эхо на всех каналах платы.
image

Внимание! Подключение FXS-порта (зеленый модуль) к линии телефонной сети общего пользования (далее ТфОП) может привести к выходу из строя модуля и платы из-за подачи напряжения в систему, которая предназначена для его производства, а не потребления!

Расшифровка обозначений моделей плат на базе TDM410: TDM4XYZ, где X определяет количество модулей S110M (FXS), Y определяет количество модулей X100M (FXO). Суффикс 'B' обозначает что продукт является набором плат и модулей, а 'E' — что в этот набор включен еще и модуль эхоподавления VPMADT032.

Для работы нам потребуется следующее:

  • Установленный сервер Asterisk версии 1.4.21 или выше + драйверы телефонии DAHDI + DAHDI Tools
  • Плата Digium Wildcard TDM410 или аналог хотя бы с одним X100M (FXO) модулем
  • Базовые знания о конфигурировании каналов и диалплана в Asterisk IP-PBX
Прежде чем приступить к работе, немного остановимся на модуле канала DAHDI. DAHDI является сокращением от «Digium Asterisk Hardware Device Interface», этот модуль пришел на смену каналу Zap и перенял все его основные возможности. Модуль канала DAHDI обеспечивает интерфейсный уровень между сервером Asterisk с одной стороны, и драйвером интерфейса DAHDI + программные эхоподавителели с другой. Драйвера интерфейсов позволяют использовать аппаратные средства (платы) для соединения Asterisk с традиционными аналоговыми или цифровыми телефонными сетями. Для конфигурации модуля DAHDI мы будем использовать системный файл /etc/dahdi/system.conf.

Конфигурирование DAHDI и Asterisk

Допустим все из списка требований выше у нас есть, запущено и готово к работе. Для начала посмотрим, видит ли система нашу плату:

root@asterisk:~# lspci -v
03:00.0 Ethernet controller: Digium, Inc. Wildcard TDM410 4-port analog card (rev 11)
 Subsystem: Digium, Inc. Wildcard TDM410 4-port analog card
 Flags: bus master, medium devsel, latency 64, IRQ 23
 I/O ports at e800 [size=256]
 Memory at febffc00 (32-bit, non-prefetchable) [size=1K]
 Expansion ROM at febc0000 [disabled] [size=128K]
 Capabilities: [c0] Power Management version 2
 Kernel driver in use: wctdm24xxp
 Kernel modules: wctdm24xxp


Если в выводе плата присутствует — отлично, можно двигаться дальше. Первое, что нужно сделать — сконфигурировать DAHDI для связи с платой, для этого открываем конфигурационный файл /etc/dahdi/system.conf. Файл должен содержать, в нашем случае, нечто следующее:

fxsks = 3,4
echocanceller = mg2,1-4
loadzone = ru
defaultzone = ru


Данная конфигурация определяет два FXO порта под номерами 3 и 4, использующими протокол обмена сигналами FXS. Также в первой строке, кроме указания используемого протокола обмена сигналами (FXO или FXS), для каналов 3 и 4 задается один из следующих типов сигнализации: Loop start (ls), Ground start (gs) или Kewlstart (ks). Если вы не знаете, сигнализация какого типа используется в вашей телефонной линии — выбирайте ks, скорее всего вам не придется иметь дело с сигнализациями другого типа. Параметр loadzone задает набор сигналов используемых для канала (всевозможные звуки, воспроизводимые телефонной системой в определенной стране: тональный сигнал, сигналы дозвона, сигнал «занято» и т. д.). Если для канала зона не задана, используется параметр зоны по умолчанию defaultzone. Параметр echocanceller отвечает за эхоподавление на заданных каналах. Сохранив изменения — смотрим, как dahdi определил плату:

root@asterisk:~# dahdi_cfg -vvvvv
DAHDI Tools Version - 2.2.1

DAHDI Version: 2.2.1
Echo Canceller(s): MG2
Configuration
======================

Channel map:

Channel 03: FXS Kewlstart (Default) (Echo Canceler: mg2) (Slaves: 03)
Channel 04: FXS Kewlstart (Default) (Echo Canceler: mg2) (Slaves: 04)

2 channels to configure.

Setting echocan for channel 3 to mg2
Setting echocan for channel 4 to mg2


Видим, что на данной плате (плате, которая оказалась у меня на руках) установлено 2 FXO модуля на 3 и 4 портах. Теперь сконфигурируем Asterisk для связи с DAHDI, для этого необходимо отредактировать файл /etc/asterisk/chan_dahdi.conf. Приводим его к следующему виду:

[trunkgroups]
; Описание магистральных групп
[channels]
; Аппаратные каналы
usecallerid=yes
hidecallerid=no ;определяет, что идентификатор вызывающего абонента не будет скрыт для исходящих вызовов
callwaiting=yes ;отложенный вызов деактивирован для FXO-линии
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes ;активация вызова с подключением третьего абонента
transfer=yes ;разрешение переадресации вызова
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes ;активация эхокомпенсатора Asterisk
echotraining=yes ;обучение эхоподавления (для ускорения процесса изучения эха)
rxgain=0.0 
txgain=0.0 
signalling=fxs_ks ;Для канала FXO используется протокол обмена сигналами FXS
group=0
context=from-pstn ;Входящие вызовы направляются в контекст [from-pstn], описанный в extensions.conf
channel => 4 ; ТфОП подключается к 4-му fxo порту


В данном файле нас интересует раздел [channels], в нем определяется метод обмена сигналами для аппаратных каналов и их параметры. Если параметр задан, он наследуется далее по всему файлу. Для определения канала используется синтаксис channel =>. Каждое описание канала наследует все параметры, которые определены в файле выше. Если для разных каналов требуется задать различные параметры, они должны задаваться перед описанием channel =>. После того, как канал сконфигурирован, можно попробовать подключить плату к телефонной линии и посмотреть на вывод команды lsdahdi, при наличии сигнала на FXO порту, вывод будет походить на следующий:

root@asterisk:~# lsdahdi
### Span 1: WCTDM/0 "Wildcard TDM410P Board 1" (MASTER) 
 1 FXO FXSKS 
 2 FXO FXSKS 
 3 FXO FXSKS (SWEC: MG2) RED
 4 FXO FXSKS (In use) (SWEC: MG2) 
### Span 2: DAHDI_DUMMY/1 "DAHDI_DUMMY/1 (source: HRtimer) 1"


Определим в файле /etc/asterisk/sip.conf хотя бы одного sip-абонента, для тестирования связи:

[101] 
username=101
secret=101
callerid="User 1" <101>
type=friend
context=local_calls
host=dynamic
nat=yes

А так же добавим в файл /etc/asterisk/extensions.conf контексты для входящих и исходящих вызовов через сконфигурированный нами канал:

[local_calls]
include => default

include => to-pstn
exten => 101,1,Dial(SIP/102) ;для звонков на внутренние номера
exten => 102,1,Dial(SIP/101)

[from-pstn] ; контекст, указаный в /etc/asterisk/chan_dahdi.conf 
exten => s,1,Answer()
exten => s,n,Playback(demo-abouttotry)
exten => s,n,Hangup

[to-pstn]
exten => _X.,1,Dial(DAHDI/4/${EXTEN})


Теперь, если мы позвоним на городской номер, Asterisk «поднимет трубку», проиграет файл «demo-abouttotry», затем «повесит трубку». В контексте «to=pstn» шаблоном _X. определены все исходящие вызовы через 4-ый канал нашей платы.

Думаю, что решения на базе Asterisk и аналоговой платы TDM410 — вполне пригодны для дома или небольшого офиса. Это поможет превратить обычный телефонный аппарат, подключенный к местной телефонной сети, в устройство, функционал которого ограничен только вашей фантазией!

Спасибо за внимание!


1 комментарий

avatar
У Вас написано:
fxsks = 3,4
echocanceller = mg2,1-4
loadzone = ru
defaultzone = ru
Данная конфигурация определяет два FXO порта под номерами 3 и 4, использующими протокол обмена сигналами FXS. Также в первой строке, кроме указания используемого протокола обмена сигналами (FXO или FXS), для каналов 3 и 4 задается один из следующих типов сигнализации: Loop start (ls), Ground start (gs) или Kewlstart (ks). Если вы не знаете, сигнализация какого типа используется в вашей телефонной линии — выбирайте ks, скорее всего вам не придется иметь дело с сигнализациями другого типа. Параметр loadzone задает набор сигналов используемых для канала (всевозможные звуки, воспроизводимые телефонной системой в определенной стране: тональный сигнал, сигналы дозвона, сигнал «занято» и т. д.). Если для канала зона не задана, используется параметр зоны по умолчанию defaultzone. Параметр echocanceller отвечает за эхоподавление на заданных каналах. Сохранив изменения — смотрим, как dahdi определил плату:
Разве FXO не под номерами 1 и 2?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.