การ์ด G400P เป็นการ์ด Asterisk อีกประเภทหนึ่ง บนการ์ดมีโมดูล GSM จำนวน 4 โมดูล แต่ละโมดูลจะมีถาดเล็กๆให้ใส่ SIM Card การ์ดนี้ใช้ไดร์เวอร์ wctdm นะครับ Asteirsk จะมองเห็นการ์ดนี้เป็นแบบ FXO ครับ
*** ขั้นตอนต่อไปนี้เป็นวิธีการเซ็ตให้ Elastix มองเห็นการ์ดโดยไม่ต้องไปเข้าหน้า Hardware Detector ครับ เพราะผมเคยเจอว่าบางทีเวลาเรากดปุ่ม Hardware Detect แล้ว เคอเซอร์เม๊าส์มันหมุนๆอยู่นั่นแหล่ะ หาการ์ดไม่เจอสักที หลังๆมานี่ผมเลยไม่ได้เข้าหน้านั้นอีกเลย ทำ manual เอาเร็วกว่า ***
ใส่การ์ดในเครื่อง บู๊ตเครื่อง แล้วล๊อกอินเข้าเครื่อง พิมพ์คำสั่งเช็คฮาร์ดแวร
- โค้ด: เลือกทั้งหมด
dahdi_hardware
pci:0000:02:02.0 wctdm- e159:0001 Wildcard S400P Prototype
จากข้อมูลที่มันโชว์ให้เห็น เราก็รู้ว่า GSM Card นี้ใช้โมดูลไดร์เวอร์คือ wctdm เราก็มาเช็คใน Kernel ว่ามีโมดูลชื่อนี้หรือยัง (เครื่องท่านอาจจะไม่ได้ใช้ kernel เวอร์ชั่นนี้เหมือนก็ได้นะครับ เปลี่ยนไดเร็คตอรี่ตามเวอร์ชั่นที่ใช้งาน)
- โค้ด: เลือกทั้งหมด
ls /lib/modules/2.6.18-194.3.1.el5/dahdi
wctdm.ko
ปรากฏว่ามี สบายเรา
ทีนี้ก็มาใส่ชื่อโมดูลไว้ในไฟล์ /etc/dahdi/modules เพื่อให้มันโหลดทุกครั้งที่เราสตาร์ทเครื่อง (หรือสตาร์ท dahdi) ไม่ต้องใส่นามสกุล .ko เข้าไปด้วยนะครับ บรรทัดอื่นๆสำหรับโหลดโมดูลของการ์ดอื่นครับ
wcfxo
wcte11xp
wctdm24xxp
wctdm
หลังจากนั้นก็รีสตาร์ท dahdi service
- โค้ด: เลือกทั้งหมด
service dahdi restart
- โค้ด: เลือกทั้งหมด
Unloading DAHDI hardware modules: ERROR: Module dahdi is in use
done
Loading DAHDI hardware modules:
wcfxo: [ OK ]
wcte11xp: [ OK ]
wctdm24xxp: [ OK ]
wctdm: [ OK ]
Running dahdi_cfg: DAHDI_SPANCONFIG failed on span 1: Invalid argument (22)
[FAILED]
ยังไม่ต้องสนใจข้อความหลังจากพิมพ์คำสั่ง dahdi restart นะครับ เอาแค่ว่ามันรีสตาร์ทได้เป็นพอ จากบรรทัด wctdm [OK] เราก็มั่นใจแล้วว่าตอนนี้ dahdi มันมองเห็นการ์ด GSM แล้ว
ต่อไปก็มาสร้างไฟล์คอนฟิกด้วคำสั่ง dahdi_genconf
- โค้ด: เลือกทั้งหมด
dahdi_genconf
มาเช็คที่ไฟล์ system.conf ในไดเร็คตอรี่ /etc/dahdi ก็จะได้ประมาณนี้
- โค้ด: เลือกทั้งหมด
# Span 1: WCTDM/4 "Wildcard S400P Prototype Board 5" (MASTER)
fxsks=1
echocanceller=oslec,1
fxsks=2
echocanceller=oslec,2
fxsks=3
echocanceller=oslec,3
fxsks=4
echocanceller=oslec,4
# Global data
loadzone = us
defaultzone = us
และที่ไฟล์ dahdi-channels.conf ในไดเร็คตอรี่ /etc/asterisk ก็จะได้ประมาณนี้
- โค้ด: เลือกทั้งหมด
; Span 1: WCTDM/4 "Wildcard S400P Prototype Board 5" (MASTER)
;;; line="1 WCTDM/4/0 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-zaptel
channel => 1
callerid=
group=
context=default
;;; line="2 WCTDM/4/1 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-zaptel
channel => 2
callerid=
group=
context=default
;;; line="3 WCTDM/4/2 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-zaptel
channel => 3
callerid=
group=
context=default
;;; line="4 WCTDM/4/3 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-zaptel
channel => 4
callerid=
group=
context=default
ลองใช้คำสั่ง dahdi_scan ดู (ไม่ต้องก็ได้) ก็จะได้ประมาณนี้
- โค้ด: เลือกทั้งหมด
[1]
active=yes
alarms=OK
description=Wildcard S400P Prototype Board 5
name=WCTDM/4
manufacturer=Digium
devicetype=Wildcard S400P Prototype
location=PCI Bus 02 Slot 03
basechan=1
totchans=4
irq=209
type=analog
port=1,FXO
port=2,FXO
port=3,FXO
port=4,FXO
อย่างที่บอกไว้ครับ ว่ามันมองเห็นเป็นพอร์ต FXO
ต่อไปเข้าหน้าเว็บ Hardware Detector ของ Elastix เช็คว่ามันเจอการ์ดมั๊ย ก็เจอครับ ตามรูป

ขั้นตอนต่อไปนี้ผมจะลองใช้งานการ์ดนี้โทรออกไปภายนอก (ผ่าน sim card) ผมต้องมีการเซ็ต group ใหม่ไม่ให้มันไปซ้ำกับ group เดิมที่ผมตั้งไว้ให้การ์ดใบอื่นๆที่ติดตั้งอยู่ในเครื่องตอนนี้
1. เปลี่ยน channel group ของพอร์ตบนการ์ด
ผมจะเปลี่ยนเป็น group หมายเลข 8 หล่ะกันครับ เพราะว่ามีคอนฟิกอื่นๆที่ใช้ group 0 เป็นของการ์ดอื่นอยู่แล้ว แต่การ์ดนั้นไม่ได้ติดตั้ง แต่ผมก็ไม่ได้ลบ trunk ออก เดี๋ยวมันจะมั่วๆกัน แล้วอาจจะทำให้ไม่เวอร์ค
** ถ้าเปลี่ยน group เป็นค่าอื่นที่ไม่ใช่ 0 ห้ามกดปุ่ม Hardware Detect บนหน้าเว็บ Elatix อีกนะครับ ไม่อย่างนั้นค่าจะกลับมาเป็นดีฟอลท์ แล้วจะใช้งานไม่ได้จนกว่าจะเปลี่ยนกลับ **
; Span 1: WCTDM/4 "Wildcard S400P Prototype Board 5" (MASTER)
;;; line="1 WCTDM/4/0 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=8
context=from-zaptel
channel => 1
callerid=
group=
context=default
;;; line="2 WCTDM/4/1 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=8
context=from-zaptel
channel => 2
callerid=
group=
context=default
;;; line="3 WCTDM/4/2 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=8
context=from-zaptel
channel => 3
callerid=
group=
context=default
;;; line="4 WCTDM/4/3 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=8
context=from-zaptel
channel => 4
callerid=
group=
context=default
2. รีสตาร์ท dahdi
- โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi restart"
3. โชว์ group
- โค้ด: เลือกทั้งหมด
asteriks -rx "dahdi show channels group 8"
Chan Extension Context Language MOH Interpret Blocked State
1 from-zaptel default In Service
2 from-zaptel default In Service
3 from-zaptel default In Service
4 from-zaptel default In Service
4. เข้าเว็บ Elastix สร้าง Trunk
เลือกเป็น Add Zap Trunk (DAHDI compatible mode)

5. สร้าง Outbound Routes

6. โทรออก
จากโปรแกรม softphone ที่รีจิสเตอร์อยู่ กด 0851619439 โทรออกได้ครับ โชว์เบอร์ซิมที่ใส่ไว้
การแก้ปัญหา
ตอนเทสผมเจอปัญหาเดียวคือ สนทนาแล้ว ปลายทางวางสาย แต่ sip client ไม่ยอมวางสาย
เป็นเพราะการ์ด GSM มันดีเท็คสัญญาณ Busy Tone ไม่ได้ หรือมีการคอนฟิก busypattern ไว้แต่ไม่ตรงกับของจริง ให้ลอง comment บรรทัด busypattern ไว้ก่อน แล้วรีสตาร์ท dahdi
ไฟล์ /etc/asterisk/chan_dahdi.conf
busydetect=yes
busycount=3
;busypattern=500,500
แล้วพิมพ์คำสั่งนี้
asterisk -rx "dahdi restart"
ปรากฏว่าแก้ปัญหาการไม่วางสายได้
บทความที่เกี่ยวข้อง
GSM VoIP Gateway 4 พอร์ต
GSM VoIP Gateway 8 พอร์ต
วิธีการคอนฟิกพอร์ต FXO ของการ์ด TDM410P บน Elastix
เทคนิคการติดตั้งการ์ด GSM บน Asterisk และ Elastix
