หน้า 1 จากทั้งหมด 1

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

โพสต์โพสต์แล้ว: 20 มี.ค. 2012 13:13
โดย nuiz
เทคนิคการติดตั้ง Asterisk 17.x + DAHDI 3.1.0 บน CentOS 7

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

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

รูปภาพ

รูปภาพ

รูปภาพ

รูปภาพ

*** โซลูชั่นแบบนี้เวอร์คกับการ์ด 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 ดังรูป

รูปภาพ

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 ที่ใช้ทดสอบ โชว์เบอร์โทรเข้า

รูปภาพ

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