เชื่อมต่อ TDM410P กับ GSM Fixed Wireless Terminal

Asterisk Opensource IP Pbx

เชื่อมต่อ TDM410P กับ GSM Fixed Wireless Terminal

โพสต์โดย nuiz » 20 มี.ค. 2012 13:13

เทคนิคการติดตั้ง Asterisk 17.x + DAHDI 3.1.0 บน CentOS 7

ผมมีบทความนึงซึ่งเทสแล้วเวอร์คดีครับ เป็นโซลูชั่นโทรเบอร์มือถือราคาประหยัด ก็โทรด้วยซิมการ์ดนั่นแหล่ะครับ โดยผมเอาตัว GSM FWT (Fixed Wireless Terminal) มาต่อกับพอร์ต FXO ของการ์ด TDM410P โดยที่บนการ์ด TDM410P ผมใส่ FXO modules ทั้ง 4 โมดูล รวมเป็น 4 พอร์ต

หน้าตา GSM FWT ที่ผมนำมาทดสอบ เป็นแบบนี้

เชื่อมต่อ TDM410P กับ GSM Fixed Wireless Terminal

เชื่อมต่อ TDM410P กับ GSM Fixed Wireless Terminal

เชื่อมต่อ TDM410P กับ GSM Fixed Wireless Terminal

เชื่อมต่อ TDM410P กับ GSM Fixed Wireless Terminal

*** โซลูชั่นแบบนี้เวอร์คกับการ์ด FXO ทุกรุ่น ทุกยี่ห้อนะครับ ไม่จำเป็นต้องเป็นการ์ด TDM410P ตามในตัวอย่างนี้ก็ได้ ***

พอร์ต 1 ต่อเบอร์ PSTN ใช้โทรออกเบอร์ 02
พอร์ต 2 ว่าง
พอร์ต 3 ต่อกับ GSM FWT ใส่ซิม AIS โปรแบบบุฟเฟต์โทรได้ทุกเครือข่าย ผมจะใช้สำหรับโทรออกเบอร์มือถือและเบอร์ต่างจังหวัด
พอร์ต 4 ว่าง

1. ติดตั้ง Asterisk + DAHDI
ตามบทความนี้เลยครับ เทคนิคการติดตั้งการ์ด TDM410P บน Asterisk เทสให้ชัวร์ๆว่าสามารถโทรเข้าและออกทางการ์ด TDM410P ได้ ไม่งั้นเดี๋ยวจะงงเวลาเจอปัญหาโทรไม่เข้า โทรไม่ออก

2. เชื่อมต่อ GSM FWT กับพอร์ต FXO
ใช้สายโทรศัพท์ธรรมดา เชื่อมจาก FXO พอร์ต 3 ไปยัง Phone 1 หรือ Phone 2 ดังรูป

เชื่อมต่อ TDM410P กับ GSM Fixed Wireless Terminal

3. คอนฟิก DAHDI แยก Group ไม่ให้ออกพอร์ตมั่ว
จริงๆเราไม่ต้องคอนฟิกแยก Group ของแต่ละพอร์ตก็ได้นะครับ เพราะเราสามารถระบุหมายเลขพอร์ตที่จะโทรออกได้เลย เช่นอยากให้โทรออกทางพอร์ตที่ 1 ก็คอนฟิก Dialplan แบบนี้
exten => _02X.,1,Dial(DAHDI/1/${EXTEN},60)
exten => _02X.,n,Hangup

สังเกตุตรง DAHDI/1 นะครับว่าไม่มีตัว G, g, r หรือ R

ทำนองเดียวกันอยากให้โทรเบอร์ DTAC ออกทางพอร์ต 3 ก็คอนฟิกแบบนี้

exten => _0851X.,1,Dial(DAHDI/3/${EXTEN},60)
exten => _0851X.,n,Hangup

แต่ถ้าเรามีหลายๆพอร์ตที่จะโทรออก ก็คอนฟิกแบบนี้ทีละบรรทัด บรรทัดละพอร์ต ก็ใช้งานได้เหมือนกัน แต่จะดูไม่โปรเท่าไหร่ เราต้องใช้ Group ครับ เราต้องคอนฟิกแยก Group ของพอร์ต 1 และ 3 ให้มันอยู่คนละ Group กันครับ ไม่งั้นมันจะมั่วเวลาโทรออก ผมจะให้พอร์ต 1 อยู่ Group 1 และพอร์ต 3 อยู่ Group 3 ส่วนพอร์ตอื่นๆที่เหลือก็ปล่อยไว้ตามเดิมครับ

ไฟล์ /etc/asterisk/dahdi-channels.conf

;;; line="1 WCTDM/0/0 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=1
context=from-pstn
channel => 1
callerid=
group=
context=default

;;; line="3 WCTDM/0/2 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=3
context=from-pstn
channel => 3
callerid=
group=
context=default

รีโหลด Dahdi รันคำสั่งนี้
โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi restart"


เช็ค Group
รันคำสั่งนี้
โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi show channels group 1"

ผลลัพธ์
โค้ด: เลือกทั้งหมด
   Chan Extension  Context         Language   MOH Interpret        Blocked    State     
      1            from-pstn                  default                         In Service


รันคำสั่งนี้
โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi show channels group 3"

ผลลัพธ์
โค้ด: เลือกทั้งหมด
   Chan Extension  Context         Language   MOH Interpret        Blocked    State     
      3            from-pstn                  default                         In Service


เราก็ได้พอร์ตที่อยู่ใน Group 1 และ 3 ตามที่ต้องการแล้ว

4. คอนฟิก Dialplan โทรออก
โทรเบอร์ 02 ให้ออกทางพอร์ต 1 (Group 1)
โทรเบอร์ DTAC ให้ออกทางพอร์ต 3 (Group 3)

ไฟล์ /etc/asterisk/extensions.conf
โค้ด: เลือกทั้งหมด
[general]
static=yes
writeprotect=no
clearglobalvars=no

[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2

[from-internal]
exten => _02.,1,Dial(DAHDI/G1/${EXTEN},60)
exten => _02.,n,Hangup

exten => _0851X.,1,Dial(DAHDI/G3/${EXTEN},60)
exten => _0851X.,n,Hangup


รีโหลด Dialplan รันคำสั่งนี้
โค้ด: เลือกทั้งหมด
asterisk -rx "dialplan reload"


เทสโทรจาก Softphone กดโทร 0851619439 บนหน้าจอ Asterisk Console (รันคำสั่ง asterisk -r) จะเห็นข้อความคล้ายๆแบบนี้
โค้ด: เลือกทั้งหมด
    -- Executing [0851619439@from-internal:1] Dial("SIP/88000-00000004", "DAHDI/G3/0851619439,60") in new stack
    -- Called G3/0851619439
    -- DAHDI/3-1 answered SIP/88000-00000004
    -- Hungup 'DAHDI/3-1'
  == Spawn extension (from-internal, 0851619439, 1) exited non-zero on 'SIP/88000-00000004'

โทรออกทาง G3 ครับ และถ้าลองโทรเบอร์ 029009000 บ้าง ก็จะเห็นข้อความคล้ายๆแบบนี้
โค้ด: เลือกทั้งหมด
    -- Executing [09009000@from-internal:1] Dial("SIP/88000-00000005", "DAHDI/G1/09009000,60") in new stack
    -- Called G1/09009000
    -- DAHDI/1-1 answered SIP/88000-00000005
    -- Hungup 'DAHDI/1-1'
  == Spawn extension (from-internal, 09009000, 1) exited non-zero on 'SIP/88000-00000005'


5. คอนฟิก Dialplan รับสายเข้า
ผมทำแบบง่ายๆนะครับ โทรเข้ามาไม่ว่าจะเข้ามาทางพอร์ต 1 (ต่อกับเบอร์โทรศัพท์) หรือพอร์ต 3 (ต่อกับ GSM FWT) ก็ให้มันมาดังที่เบอร์ SIP Extensions 88000

5.1 เช็คก่อนว่าพอร์ต 1 และ 3 อยู่ใน context ชื่ออะไร
ดูที่ไฟล์ /etc/asterisk/dahdi-channels.conf เฉพาะพอร์ต 1 และ 3

;;; line="1 WCTDM/0/0 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=1
context=from-pstn
channel => 1
callerid=
group=
context=default

;;; line="3 WCTDM/0/2 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=3
context=from-pstn
channel => 3
callerid=
group=
context=default

เป็น context from-pstn ทั้งคู่

5.2 สร้าง Dialplan เพิ่ม
โดยเพิ่ม [from-pstn] เข้าไป

โค้ด: เลือกทั้งหมด
[general]
static=yes
writeprotect=no
clearglobalvars=no

[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2

[from-internal]
exten => _02.,1,Dial(DAHDI/G1/${EXTEN},60)
exten => _02.,n,Hangup

exten => _0851X.,1,Dial(DAHDI/G3/${EXTEN},60)
exten => _0851X.,n,Hangup

[from-pstn]
exten => s,1,NoOp(Incoming Call From ${CALLERID(num)})
exten => s,1,Dial(SIP/88000)
exten => s,n,Hangup


5.3 รีโหลด Dialplan แล้วเทสโทรเข้าเบอร์ซิมที่ใส่ใน GSM FWT
โค้ด: เลือกทั้งหมด
asterisk -rx "diaplan reload"


ข้อความใน Asterisk Console เวลาโทรเข้า
โค้ด: เลือกทั้งหมด
  == Starting post polarity CID detection on channel 3
    -- Starting simple switch on 'DAHDI/3-1'
    -- Executing [s@from-pstn:1] NoOp("DAHDI/3-1", "Incoming Call From 0851619439") in new stack
    -- Executing [s@from-pstn:2] Dial("DAHDI/3-1", "SIP/88000") in new stack
  == Using SIP RTP CoS mark 5
    -- Called 88000
    -- SIP/88000-00000006 is ringing
    -- SIP/88000-00000006 answered DAHDI/3-1
  == Spawn extension (from-pstn, s, 2) exited non-zero on 'DAHDI/3-1'
    -- Hungup 'DAHDI/3-1'


บน Softphone ที่ใช้ทดสอบ โชว์เบอร์โทรเข้า

เชื่อมต่อ TDM410P กับ GSM Fixed Wireless Terminal

5.4 เล็กๆน้อยๆกับการโชว์เบอร์ (CallerID)
เวลาโทรออกทาง GSM FWT ไปเบอร์มือถือ ก็จะโชว์เป็นเบอร์ซิมการ์ดที่เอามาใส่ แต่เวลาโทรเข้ามา อย่างเช่นในตัวอย่างที่ผมทำให้ดูผมส่งคอลไปยังเบอร์ Extension ซึ่งมันก็โชว์เบอร์โทรเข้าอยู่แล้ว แต่ก็ไม่ใช่ว่ามันจะโชว์เป็นเบอร์โทรเข้าได้ทุกกรณีนะครับ ขึ้นอยู่กับเงื่อนไขสองสามข้อต่อไปนี้
- GSM FWT รองรับ Caller ID หรือไม่
- GSM FWT รองรับ CallerID แบบใด ซึ่งมีอยู่ 2 แบบที่นิยมใช้กันคือ Bell และ DTMF
- คอนฟิกพารามิเตอร์เกี่ยวกับ CallerID ในไฟล์ /etc/asterisk/chan_dahdi.conf ถูกต้องหรือไม่

ถ้าคอนฟิกไม่ถูกต้อง นอกจากเบอร์จะไม่โชว์แล้วบางทีไม่มีสายเรียกเข้ามาอีกต่างหาก ได้ยินแต่สัญญาณสายว่าง

เครื่อง GSM FWT ที่ผมเอามาทดสอบ มันรองรับ CallerID แบบ DTMF ดังนั้นในไฟล์ /etc/asterisk/chan_dahdi.conf ผมเพิ่มบรรทัดต่อไปนี้
โค้ด: เลือกทั้งหมด
cidsignalling=dtmf
cidstart=polarity

แต่ถ้า GSM FWT ที่ใช้อยู่รองรับ CallerID แบบ Bell ก็น่าจะเปลี่ยนเป็นแบบนี้ (เป็นค่าดีฟอลท์ครับ ไม่ต้องทำก็ได้)
โค้ด: เลือกทั้งหมด
cidsignalling=bell
cidstart=ring

เซฟไฟล์แล้วรันคำสั่ง asterisk -rx "dahdi restart" เพื่อให้มีผล

บทความที่เกี่ยวข้อง
เทคนิคการติดตั้งการ์ด TDM410P บน Asterisk + DAHDI 2.5.0.2
เทคนิคการติดตั้งการ์ด TDM410P บน Asterisk + DAHDI 2.6.0
** งานเร่งด่วนติดต่อที่เบอร์ 085-161-9439 อีเมล์ iamaladin@gmail.com ไลน์ไอดี nuizvoip ครับ ผมหนุ่ยครับ**
nuiz
Diamond Member
 
โพสต์: 7327
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

ย้อนกลับไปยัง Asterisk SIP Server

ผู้ใช้งานขณะนี้

่กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 1 ท่าน

cron