เทคนิคการติดตั้งการ์ด BX1600 (16 FXO) บน Asterisk
โพสต์แล้ว: 16 มี.ค. 2012 15:33
** ยกเลิกบทความนี้ครับ ให้ใช้บทความนี้แทน เทคนิคการติดตั้งการ์ด Analog/Digital สีเขียว **
** บทความนี้ไม่จำเพาะเจาะจงว่าจะใช้กับการติดตั้งการ์ดในตัวอย่างเท่านั้น สามารถใช้ได้กับการ์ดทุกๆแบบทุกๆยี่ห้อครับ แตกต่างกันตรงการคอมไพล์ไดร์เวอร์ บางยี่ห้อก็ต้องคอมไพล์ บางยี่ห้อก็ไม่ต้องคอมไพล์ แค่ลง DAHDI ก็ใช้งานได้แล้ว **
** ตอนท้ายของบทความจะมีเทคนิคการเพิ่มโมดูลด้วยนะครับ **
บทความต่อไปนี้ผมจะแนะนำเทคนิคการติดตั้งการ์ด BX1600 (การ์ดแบบ PCI 5.0v รองรับ FXS/FXO สูงสุด 16 พอร์ต มี 8 โมดูลๆละ 2 พอร์ต แต่ผมใส่เพียง FXO 3 โมดูล รวมเป็น 6 พอร์ต) รายละเอียดของการ์ดและราคา ตามลิ้งค์นี้ครับ BX1600 16-Port PCI Card for Asterisk
เครื่องที่ใช้ทดสอบมีเสป็คตามนี้ครับ Celeron Dual Core (รันแบบ 64 บิตได้), Ram 2 GB, HDD SATA 120 GB ติดตั้งโปรแกรมหลักๆดังต่อไปนี้
- CentOS 5.8 x86_64
- Asterisk 1.6.2.23
- Dahdi 2.6.0
และมีโปรแกรมอื่นๆอีกซึ่งอาจจะยังไม่ได้ใช้งานในขณะนี้
** บทความต่อไปนี้จะบอกวิธีการติดตั้ง Asterisk 1.6.2.23 ด้วยนะครับ ซึ่งก็ใช้ได้สำหรับมือใหม่ **
1. ติดตั้งโปรแกรมอื่นที่จำเป็น
เครื่องผมลง CentOS x86_64 นะครับ เวลาติดตั้งโปรแกรมก็เลยต้องเอาให้ชัวร์ว่าเป็นแบบ x86_64 ไม่ติดตั้ง i386 ด้วย (บางโปรแกรมถ้าเราไม่ได้ระบุ มันก็จะติดตั้งทั้ง i386 และ x86_64)
** สำหรับเครื่อง 32 บิต **
ติดตั้ง PHP (ถ้ายังไม่ได้ติดตั้ง)
แก้ไขไฟล์ /etc/php.ini
เช็คกว่าเครื่องมองเห็นการ์ดหรือไม่
รันคำสั่งนี้เช็คดูครับ
ก็จะเห็นประมาณนี้ นี่คือการ์ด BX1600 ครับ
ติดตั้ง Radiusclient-ng
ติดตั้ง Spandsp
สร้างไฟล์ /usr/include/linux/compiler.h
ใส่ข้อมูลตามนี้
ติดตั้ง Pwlib
พิมพ์บรรทัดต่อไปนี้
ติดตั้ง OpenH323
2. ติดตั้ง DAHDI 2.6.0 และ OSLEC
พิมพ์คำสั่งต่อไปนี้
ติดตั้ง Libpri
3. ติดตั้งไดร์เวอร์การ์ด BX1600
4. ติดตั้ง Asterisk 1.6.2.23
เลือกออปชั่นที่จะติดตั้ง ปกติผมก็จะเลือกเพิ่ม Core Sound Packages ให้มีไฟล์เสียง G.729 ด้วยและติดตั้งไฟล์เสียง G.729 ใน Extras Sound Packages
4. ติดตั้ง Asterisk Add-Ons
** เอา Channel Drivers -> chan_ooh323 ออก **
6. คอนฟิก DAHDI เพิ่มเติม
6.1 ไฟล์ /etc/dahdi/modules
เช็คในไฟล์ /etc/dahdi/modules จะเห็นมี 2 บรรทัดนี้เพิ่่มขึ้นมา
โดยที่ t4xxp เป็นไดร์เวอร์การ์ด E1 ส่วน bl1600a เป็นไดร์เวอร์การ์ด 8 และ 16 Ports ครับ ถ้าไม่ได้ใส่การ์ด E1 ด้วยก็ให้แก้ไขไฟล์ /etc/dahdi/modules โดยใส่ # ไว้ข้างหน้าบรรทัด t4xxp ซะ แบบนี้
ขอแนะนำอีกอย่างครับว่าไดร์เวอร์ไหนที่เราไม่ได้ใส่การ์ดเข้าไปก็ควรจะใส่ # ไม่โหลดมันซะ จะได้ไม่เปลืองเมมครับ ในเครื่องผมผมใส่การ์ด BL1600 อย่างเดียวเลย (ใส่มากกว่า 1 การ์ดได้) ผมมี # หน้าทุกบรรทัดเลยยกเว้นบรรทัด bl1600a
6.2 ไฟล์ /etc/dahdi/genconf_parameters
บรรทัด context_lines ไม่ต้องใส่ก็ได้นะครับ เพราะมันมี from-pstn เป็นค่าดีฟอลท์อยู่แล้ว แต่ใส่ไว้ก็ดีเผื่อต้องการเปลี่ยน
6.3 สตาร์ท DAHDI
รันคำสั่ง
6.4 คำสั่ง dahdi_hardware
รันแล้วไม่เจออะไรนะครับ
6.5 รีสตาร์ท DAHDI
เพื่อให้ DAHDI มองเห็นการ์ด BX1600
ผลลัพธ์
Unloading DAHDI hardware modules: done
Loading DAHDI hardware modules:
bl1600a: [ OK ]
Running dahdi_cfg: [ OK ]
6.6 สร้างไฟล์ /etc/dahdi/system.conf
รันคำสั่งนี้
ไม่มีข้อความอะไรโชว์ให้เห็น แสดงว่าสร้างไฟล์คอนฟิกการ์ดได้สำเร็จ (ไฟล์ /etc/dahdi/system.conf)
6.7 ข้อมูลในไฟล์ /etc/dahdi/system.conf
ไฟล์นี้ผมไม่ได้สร้างเองนะครับ มันถูกสร้างขึ้นมาตอนผมรันคำสั่ง dahdi_genconf
จากข้อมูลจะเห็นว่าเห็นอยู่ 6 พอร์ต (เพราะผมใส่โมดูลแบบ 2 พอร์ต จำนวน 3 โมดูล)
6.8 ไฟล์ /etc/asterisk/dahdi-channels.conf
ไฟล์นี้ผมก็ไม่ได้สร้างเอง มันสร้างตอนรันคำสั่ง dahdi_genconf
ข้อมูลข้างบนมีบรรทัดที่น่าสนใจมากๆอยู่ 3 บรรทัด
group = 0 เป็นหมายเลข Group ครับ ดีฟอลท์ทุกพอร์ตจะอยู่ใน Group 0 เหมือนกันหมด จะมองว่า Group เป็น Hunting ก็ได้ มีประโยชน์ตอนโทรออก (โทรจาก Asterisk ออกไปภายนอก) หมายเลข Group มีได้ตั้งแต่ 0 จนถึง 63
context = from-pstn เป็นชื่อ Context สำคัญตอนรับสายเข้า
channel => 1 เป็นหมายเลขพอร์ต มีประโยชน์ทั้งตอนโทรออก (โทรออกแบบระบุพอร์ต) และโทรเข้า (โทรเข้าแบบระบุพอร์ต)
ถ้ายังไม่เข้าใจไว้ตอนคอนฟิกเทสโทรเข้า โทรออก จะเข้าใจเองครับ
6.9 ไฟล์ /etc/asterisk/chan_dahdi.conf
ไฟล์นี้ผมไม่ได้สร้างเอง และไม่ได้สร้างจากการรันคำสั่ง dahdi_genconf ด้วย เป็นไฟล์ดีฟอลท์ตอนติดตั้ง Asterisk ครับ เป็นพารามิเตอร์ทั่วไปที่จะทำให้เราปรับแต่งการ์ดให้มันทำงานเหมาะสมกับแอ๊ปของเราได้ดียิ่งขึ้น ไฟล์นี้มีข้อมูลอยู่เยอะมากครับ มีทั้งของการ์ด Analog (FXS/FXO) และการ์ด Digital (E1)
ในเครื่องเรามีแต่การ์ด BX1600 (การ์ด Analog FXO) ก็น่าจะตัดข้อมูลที่ไม่เกี่ยวข้องออก ให้มันดูง่ายขึ้น
แล้วให้มีข้อมูลต่อไปนี้
อย่าลืมบรรทัดสุดท้ายนะครับเป็นการเรียกไฟล์ dahdi-channels.conf ถ้าเราไม่เพิ่มไฟล์นี้เข้าไปก็จะมีปัญหาเวลารัน Asterisk มันจะมองไม่เห็นการ์ด
6.10 เช็คสถานะของ DAHDI
ผลลัพธ์
7. สตาร์ท Asterisk
ให้ Asterisk สตาร์ทตอนเปิดเครื่อง
เช็ค Process
ผลลัพธ์
root 6234 1 0 06:06 pts/0 00:00:00 /bin/sh /usr/sbin/safe_asterisk
root 6239 6234 1 06:06 pts/0 00:00:00 /usr/sbin/asterisk -f -vvvg -c
ติดตั้ง Codec G.723 และ G.729
รายละเอียดจริงๆของวิธีการติดตั้ง Free codecs G.723.1 และ G.729 อ่านได้จากบทความนี้ครับ ติดตั้ง G.723.1 และ G.729 ให้ Asterisk
ได้ว่าเครื่องผมต้องใช้ไฟล์ 2 ไฟล์นี้
เช็คว่า Asterisk มองเห็นการ์ด (พอร์ต) หรือไม่
รันคำสั่งนี้
ผลลัพธ์
รันคำสั่งนี้
ผลลัพธ์
ดูพอร์ตที่ 1 ซึ่งผมต่อสายโทรศัพท์ไว้
Channel: 1
File Descriptor: 18
Span: 1
Extension:
Dialing: no
Context: from-pstn
Caller ID:
Calling TON: 0
Caller ID name:
Mailbox: none
Destroy: 0
InAlarm: 0
Signalling Type: FXS Kewlstart
Radio: 0
Owner: <None>
Real: <None>
Callwait: <None>
Threeway: <None>
Confno: -1
Propagated Conference: -1
Real in conference: 0
DSP: no
Busy Detection: no
TDD: no
Relax DTMF: no
Dialing/CallwaitCAS: 0/0
Default law: ulaw
Fax Handled: no
Pulse phone: no
DND: no
Echo Cancellation:
128 taps
currently OFF
Wait for dialtone: 0ms
Actual Confinfo: Num/0, Mode/0x0000
Actual Confmute: No
Hookstate (FXS only): Onhook
[/code]
เอาหล่ะครับ ก็เป็นอันว่าการติดตั้งและคอนฟิกการ์ด BX1600 สำเร็จลุล่วงไปด้วยดี ไม่มีปัญหาอะไร แต่ก็ไม่ใช่ว่าเราไม่ต้องปรับแต่งคอนฟิกอะไรแล้วนะครับ บางทีเราก็อาจจะต้องมาปรับค่าในไฟล์ /etc/asterisk/chan_dahdi.conf อย่างเช่นกรณีโทรเข้าออกผ่านการ์ด BL1600 แล้วสายค้าง ประมาณนี้ครับ
7. สร้าง SIP Extensions ไว้เพื่อทดสอบ
ไฟล์ /etc/asterisk/sip.conf
รันคำสั่งต่อไปนี้
ปิด iptables ก่อนชั่วคราว
ไว้ให้เทสผ่านก่อนแล้วค่อยเปิดและคอนฟิกให้ VoIP ผ่านได้
รันคำสั่งต่อไปนี้
รีจิสเตอร์ SIP Account
คอนฟิก Softphone (เพราะง่ายสุด) ให้รีจิสเตอร์ ผมใช้โปรแกรม Zoiper เวอร์ชั่นที่มี G.729 (หาได้จากในเว็บแชร์ไฟล์ทั่วไป)
เช็คว่าบน Asterisk เห็นยูสเซอร์รีจิสเตอร์
รันคำสั่งนี้
ผลลัพธ์
คอนฟิก Dialplan อย่างง่ายๆ
ให้ SIP Account โทรเข้ามาทดสอบได้
ไฟล์ /etc/asterisk/extensions.conf
เปลี่ยนชื่อไฟล์ /etc/asterisk/extensions.conf ไฟล์เดิมให้เป็นชื่อใหม่ก่อน
แล้วสร้างไฟล์ขึ้นมาใหม่
ให้มีข้อมูลตามนี้
รีโหลด Dialplan
รันคำสั่งนี้
เทสโทรจาก Softphone กด 1234 ถ้าได้ยินเสียงก็แสดงว่าเวอร์คแล้ว เราก็พร้อมจะทำการทดสอบโทรเข้าและออกผ่านทางการ์ด BX1600 แล้ว
8. คอนฟิกแบ่ง Group
ปกติถ้าในเครื่องมีการ์ดเดียว (หรือหลายๆการ์ด) เราควรจะแบ่งพอร์ตให้ชัดเจนเลยว่าจะใช้พอร์ตไหนโทรเข้า พอร์ตไหนไว้โทรออก หรือพอร์ตไหนไว้เป็นเบอร์แฟกซ์ ยกตัวอย่าง โทรเข้าพอร์ต 1,2 โทรออกพอร์ต 3,4,5 เบอร์ fax พอร์ต 6
เพราะฉะนั้นเราก็แบ่งออกเป็น 3 Groups เอาเป็น Group 0, 1 และ 2 หล่ะกันครับ โดยที่พอร์ต 1-2 อยู่ Group 0 พอร์ต 3-5 อยู่ Group 1 ส่วนพอร์ต 6 อยู่ Group 3
เราแบ่ง Group ในไฟล์ /etc/asterisk/dahdi-channels.conf โดยแก้เลข 0 ในบรรทัด group=0 เป็นค่าที่เราต้องการ
*** ถ้ายังมองประโยชน์ของการแบ่ง Group ไม่เคลียร์นะครับ ให้นึกเอาว่า ตอนเราโทรออก (โทรจาก Softphone ผ่านการ์ดออกไปภายนอก) ถ้ามันออกทางพอร์ตที่เราไม่ต้องการให้ออก เป็นต้นว่าพอร์ตนั้นเอาไว้รับสายเข้า พอร์ตนั้นเอาไว้ให้คนส่งแฟกซ์เข้ามา พอร์ตนั้นต่อกับเบอร์ที่มีค่าโทรแพงๆ มันก็ไม่ค่อยจะดีใช่ป่ะครับ ***
รันคำสั่งต่อไปนี้
เช็ค Group ด้วยคำสั่งต่อไปนี้
ผลลัพธ์
ก็เป็นอันว่าเราแบ่งทั้ง 6 พอร์ตออกเป็น 3 Groups เรียบร้อยแล้ว เวลาเรียกใช้งานพอร์ตเราสามารถอ้างค่าหมายเลข Group ของมันแทนได้ ซึ่ง Asterisk จะเช็คว่ามีพอร์ตไหนว่างอยู่ก็จะใช้พอร์ตนั้น ถ้าไม่มีพอร์ตว่างและเราไม่ได้ให้มันส่งออกไปทางอื่นก็จะส่ง busy ให้ได้ยิน
การอ้างอิงหมายเลข Group ทำได้ 4 แบบครับ โดยใช้ตัวอักษร G, g, R, r ตามด้วยหมายเลข group ยกตัวอย่าง
G0 หมายถึงใช้พอร์ตในกรุ๊ปโดยใช้พอร์ตที่มีหมายเลขน้อยสุดก่อน ถ้าไม่ว่างค่อยใช้พอร์ตหมายเลขสูงกว่า (พอร์ตแรกในกรุ๊ปจะถูกใช้งานเยอะที่สุด)
g0 หมายถึงใช้พอร์ตในกรุ๊ปโดยใช้พอร์ตที่มีหมายเลขมากที่สุดก่อน ถ้าไม่ว่างค่อยใช้พอร์ตหมายเลขต่ำกว่า (พอร์ตสุดท้ายในกรุ๊ปจะถูกใช้งานเยอะสุด)
R0 หมายถึงใช้พอร์ตในกรุ๊ปแบบวนไปเรื่อยๆ หรือที่เราเรียกว่า Round Robbin โดยเริ่มจากพอร์ตที่มีหมายเลขต่ำสุดก่อน แล้ววนไปเรื่อยๆ (ทุกพอร์ตถูกใช้งานเท่าๆกัน)
r0 หมายถึงใช้พอร์ตในกรุ๊ปแบบวนไปเรื่อยๆ (แบบเดียวกับ R0) แต่เริ่มจากพอร์ตหมายเลขสูงที่สุดก่อน
*** เปลี่ยนหมายเลข Group แล้ว ห้ามมมมมมมม รันคำสั่ง dahdi_genconf อีกนะครับ ไม่อย่างนั้นก็ต้องมาทำใหม่อีก ยกเว้นต้องการเลิกแบ่ง Group แล้ว ***
9. คอนฟิก Dialplan โทรออกผ่านการ์ด
ตั้งเงื่อนไขการโทรออกพอร์ต FXO ว่า กด 0 นำหน้าตามด้วยเลขอะไรก็ได้
ไฟล์ /etc/asterisk/extensions.conf
เซฟไฟล์แล้วรีโหลด Dialplan
ทดสอบโทรออก
เข้า Asterisk Console เพื่อดู Events ที่เกิดขึ้นขณะเราทดสอบ จาก Softphone โทรออกสายนอกกด 0x ได้เลย เช่น 0851619439
ข้อความขณะโทรออก
-- Executing [0851619439@from-internal:1] Dial("SIP/88000-00000001", "DAHDI/G0/0851619439,60") in new stack
-- Called G0/0851619439
-- DAHDI/1-1 answered SIP/88000-00000001
ก็คุยได้ครับ เป็นอันว่าคอนฟิกโทรออกผ่านการ์ดได้แล้ว
9. คอนฟิก Dialplan รับสายเข้า
ตอนคอนฟิกการ์ดให้รับสายเข้า จะยุ่งยากนิดนึงก็ตรงเรื่องของ Context ครับ ซึ่งถ้าสังเกตุในไฟล์ /etc/asterisk/dahdi-channels.conf จะเห็นมีบรรทัด context=from-pstn อยู่ในทุกๆพอร์ต
;;; line="1 WCTDM/0/0 FXSKS (EC: MG2 - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
context ชื่อ from-pstn เป็นค่าดีฟอลท์ของพอร์ต FXO แต่เราจะแก้ไขเป็นค่าอื่นก็ได้เช่น from-zaptel (แต่ถ้ารันคำสั่ง dahdi_genconf ก็จะกลับมาเป็นค่าเดิมอีก ยกเว้นเราไปใส่บรรทัด context_lines from-zaptel ไว้ในไฟล์ /etc/dahdi/genconf_parameters ไม่ว่าจะรัน dahdi_genconf อีกกี่รอบมันก็จะไม่เปลี่ยน)
context เอาไว้คอนโทรลตอนรับสายเข้าครับ แต่ละพอร์ต (ที่ใช้รับสายเข้า) ก็ไม่จำเป็นว่าต้องมี context ชื่อเดียวกัน เราคอนฟิกได้ว่าถ้าโทรมาเข้าพอร์ตๆนี้จะให้ไปรันหรือเรียกอะไรขึ้นมาทำงาน ตอนโทรเข้าจะไม่เกี่ยวกับ Group แล้วนะครับ (Group มันเอาไว้ตอนโทรออกอย่างเดียว) ถึงเราจะคอนฟิกให้พอร์ตที่รับสายเข้ามีหลายๆพอร์ต เราก็แยกได้ว่าแต่ละพอร์ตเอาไว้ทำอะไร เป็นอิสระจากกันเลย
มาดูตัวอย่างกันครับจะเข้าใจง่ายขึ้น ผมตั้งเงื่อนไขการโทรเข้าไว้อย่างง่ายๆว่า โทรเข้าแล้วให้ดังที่เบอร์ Extensions 88000 เลย
ไฟล์ /etc/asterisk/extensions.conf
รีโหลด Dialplan
โทรเข้าเบอร์ที่ต่ออยู่ บนหน้าจอ Asterisk Console จะปรากฏข้อความคล้ายๆแบบนี้
เบอร์ Extensions 88000 ที่ผมรีจิสเตอร์อยู่ด้วย Softphone จะ Ring รับสายแล้วคุยกันได้เลย
ก็เป็นอันว่าติดตั้งการ์ด 16 FXO การ์ดนี้บน Asterisk เสร็จเรียบร้อยแล้วครับ
10. ติดตั้งโมดูลเพิ่มเติม
ผมได้ทำการติดตั้ง Dual FXO เพิ่มอีก 2 โมดูล ซึ่งตอนนี้เท่ากับว่าบนการ์ดมี Dual FXO จำนวน 5 โมดูล รวมเป็น 10 พอร์ตแล้ว
*** ตอนถอดการ์ดให้ถอดสายไฟ สายแลน เม๊าส์ คีบอร์ด สายต่อจอ ออกให้หมดเลยนะครับ ไม่จำเพาะการ์ดนี้เท่านั้นนะครับ ทุกๆการ์ด ทุกๆยี่ห้อก็ควรจะทำแบบนี้ เพื่อยืดอายุการใช้งาน ***
รันคำสั่งนี้
ผลลัพธ์
** ถ้าคอนฟิกเดิมก่อนเพิ่มโมดูล เราได้มีการแก้ไขไฟล์ /etc/asterisk/dahdi-channels.conf แบ่ง Group แก้ไข Context แล้ว หากเรารันคำสั่ง dahdi_genconf อีก ที่เราคอนฟิกไว้มันก็จะกลายเป็นค่าดีฟอลท์ ผมมีวิธีแก้ไขไฟล์แบบ manual มาฝากครับ ดังนี้ **
แก้ไขไฟล์ /etc/dahdi/system.conf
ของเดิม
# Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
fxsks=1
echocanceller=oslec,1
fxsks=2
echocanceller=oslec,2
fxsks=3
echocanceller=oslec,3
fxsks=4
echocanceller=oslec,4
fxsks=5
echocanceller=oslec,5
fxsks=6
echocanceller=oslec,6
# channel 7, WCTDM/0/6, no module.
# channel 8, WCTDM/0/7, no module.
# channel 9, WCTDM/0/8, no module.
# channel 10, WCTDM/0/9, no module.
# channel 11, WCTDM/0/10, no module.
# channel 12, WCTDM/0/11, no module.
# channel 13, WCTDM/0/12, no module.
# channel 14, WCTDM/0/13, no module.
# channel 15, WCTDM/0/14, no module.
# channel 16, WCTDM/0/15, no module.
# Global data
loadzone = us
defaultzone = us
ใหม่ (เพิ่มคอนฟิกของพอร์ต 7 - 10 ตามตัวอย่างได้เลยครับ)
# Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
fxsks=1
echocanceller=oslec,1
fxsks=2
echocanceller=oslec,2
fxsks=3
echocanceller=oslec,3
fxsks=4
echocanceller=oslec,4
fxsks=5
echocanceller=oslec,5
fxsks=6
echocanceller=oslec,6
fxsks=7
echocanceller=oslec,7
fxsks=8
echocanceller=oslec,8
fxsks=9
echocanceller=oslec,9
fxsks=10
echocanceller=oslec,10
# channel 11, WCTDM/0/10, no module.
# channel 12, WCTDM/0/11, no module.
# channel 13, WCTDM/0/12, no module.
# channel 14, WCTDM/0/13, no module.
# channel 15, WCTDM/0/14, no module.
# channel 16, WCTDM/0/15, no module.
# Global data
loadzone = us
defaultzone = us
ไฟล์ /etc/asterisk/dahdi-channels.conf เพิ่มบรรทัดต่อไปนี้ต่อท้าย จะเปลี่ยนหมายเลข Group หรือ Context ก็ได้ครับ ตามสะดวก ผมใช้ค่าดีฟอลท์เลย
รีโหลด Dahdi และ Asterisk ใหม่ให้มันรับรู้ว่ามีพอร์ตเพิ่มขึ้นมาแล้ว รันคำสั่งต่อไปนี้
ตรวจสอบ รันคำสั่งนี้
ก็จะเห็นว่า Group 0 มีพอร์ตหมายเลข 7, 8, 9 และ 10 โชว์ขึ้นมาแล้ว ก็คอนฟิกใช้งานได้เลยครับ
ขอขอบคุณเว็บไซต์ http://www.buyasteriskcard.com ที่เอื้อเฟื้ออุปกรณ์ให้ทดสอบ
บทความที่เกี่ยวข้อง
OSLEC - สุดยอด Software Echo Canceller
เทคนิคการติดตั้งการ์ด 16 FXO บน Asterisk
เทคนิคการติดตั้งการ์ด 16 FXO บน Elastix 2.0.3
เทคนิคการติดตั้งการ์ด 16 FXO บน Elastix 2.3.0
การเชื่อมต่อ GSM FWT กับพอร์ต FXO
เทคนิคการติดตั้งการ์ด TDM400P (4 FXO/FXS) บน Asterisk
เทคนิคการติดตั้งการ์ด TDM410P (4 FXO/FXS) บน Asterisk
วิธีเช็คว่า Echo Canceller ทำงานหรือไม่
** บทความนี้ไม่จำเพาะเจาะจงว่าจะใช้กับการติดตั้งการ์ดในตัวอย่างเท่านั้น สามารถใช้ได้กับการ์ดทุกๆแบบทุกๆยี่ห้อครับ แตกต่างกันตรงการคอมไพล์ไดร์เวอร์ บางยี่ห้อก็ต้องคอมไพล์ บางยี่ห้อก็ไม่ต้องคอมไพล์ แค่ลง DAHDI ก็ใช้งานได้แล้ว **
** ตอนท้ายของบทความจะมีเทคนิคการเพิ่มโมดูลด้วยนะครับ **
บทความต่อไปนี้ผมจะแนะนำเทคนิคการติดตั้งการ์ด BX1600 (การ์ดแบบ PCI 5.0v รองรับ FXS/FXO สูงสุด 16 พอร์ต มี 8 โมดูลๆละ 2 พอร์ต แต่ผมใส่เพียง FXO 3 โมดูล รวมเป็น 6 พอร์ต) รายละเอียดของการ์ดและราคา ตามลิ้งค์นี้ครับ BX1600 16-Port PCI Card for Asterisk
เครื่องที่ใช้ทดสอบมีเสป็คตามนี้ครับ Celeron Dual Core (รันแบบ 64 บิตได้), Ram 2 GB, HDD SATA 120 GB ติดตั้งโปรแกรมหลักๆดังต่อไปนี้
- CentOS 5.8 x86_64
- Asterisk 1.6.2.23
- Dahdi 2.6.0
และมีโปรแกรมอื่นๆอีกซึ่งอาจจะยังไม่ได้ใช้งานในขณะนี้
** บทความต่อไปนี้จะบอกวิธีการติดตั้ง Asterisk 1.6.2.23 ด้วยนะครับ ซึ่งก็ใช้ได้สำหรับมือใหม่ **
1. ติดตั้งโปรแกรมอื่นที่จำเป็น
เครื่องผมลง CentOS x86_64 นะครับ เวลาติดตั้งโปรแกรมก็เลยต้องเอาให้ชัวร์ว่าเป็นแบบ x86_64 ไม่ติดตั้ง i386 ด้วย (บางโปรแกรมถ้าเราไม่ได้ระบุ มันก็จะติดตั้งทั้ง i386 และ x86_64)
- โค้ด: เลือกทั้งหมด
yum -y install kernel-devel.x86_64 kernel-headers.x86_64 gcc.x86_64 gcc-c++.x86_64 bison.x86_64 flex.x86_64 patch.x86_64 make.x86_64 ncurses.x86_64 ncurses-devel.x86_64 newt.x86_64 newt-devel.x86_64 autoconf automake libxml2-devel.x86_64 mysql.x86_64 mysql-devel.x86_64 mysql-server.x86_64 libtiff.x86_64 libtiff-devel.x86_64 net-snmp.x86_64 net-snmp-libs.x86_64 net-snmp-devel.x86_64 net-snmp-utils.x86_64 net-snmp-perl.x86_64 wireshark.x86_64 httpd.x86_64 httpd-devel.x86_64 libc-client.x86_64 libmcrypt.x86_64 mod_ssl.x86_64 ntp.x86_64 gmp.x86_64 libxslt.x86_64 libxslt-devel.x86_64
- โค้ด: เลือกทั้งหมด
yum -y update openssl.x86_64 openssl-devel.x86_64 mod_ssl.x86_64
** สำหรับเครื่อง 32 บิต **
- โค้ด: เลือกทั้งหมด
yum -y install kernel-devel kernel-headers gcc gcc-c++ bison flex patch make ncurses ncurses-devel newt newt-devel autoconf automake libxml2-devel mysql mysql-devel mysql-server libtiff libtiff-devel net-snmp net-snmp-libs net-snmp-devel net-snmp-utils net-snmp-perl wireshark httpd httpd-devel libc-client libmcrypt mod_ssl ntp gmp libxslt libxslt-devel
ติดตั้ง PHP (ถ้ายังไม่ได้ติดตั้ง)
- โค้ด: เลือกทั้งหมด
rpm -ihv 'http://www.voip4share.com/sources/php-5.2.17-1.x86_64.rpm' --nodeps
rpm -ivh 'http://www.voip4share.com/sources/php-common-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-cli-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-bcmath-5.2.17-1.x86_64.rpm'
rpm -ihv 'http://www.voip4share.com/sources/php-devel-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-gd-5.2.17-1.x86_64.rpm'
rpm -ihv 'http://www.voip4share.com/sources/php-imap-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-ldap-5.2.17-1.x86_64.rpm'
rpm -ihv 'http://www.voip4share.com/sources/php-mbstring-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-mcrypt-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-pdo-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-mysql-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-ncurses-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-readline-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-snmp-5.2.17-1.x86_64.rpm'
rpm -ihv 'http://www.voip4share.com/sources/php-soap-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-xml-5.2.17-1.x86_64.rpm'
rpm -ivh 'http://www.voip4share.com/sources/php-xmlrpc-5.2.17-1.x86_64.rpm'
แก้ไขไฟล์ /etc/php.ini
- โค้ด: เลือกทั้งหมด
upload_max_filesize = 20M
max_execution_time = 60
memory_limit = 64M
เช็คกว่าเครื่องมองเห็นการ์ดหรือไม่
รันคำสั่งนี้เช็คดูครับ
- โค้ด: เลือกทั้งหมด
lspci
ก็จะเห็นประมาณนี้ นี่คือการ์ด BX1600 ครับ
- โค้ด: เลือกทั้งหมด
02:02.0 Communication controller: Tiger Jet Network Inc. Tiger3XX Modem/ISDN interface
ติดตั้ง Radiusclient-ng
- โค้ด: เลือกทั้งหมด
cd /tmp
wget 'http://www.voip4share.com/sources/radiusclient-ng-0.5.6.tar.gz'
tar xzvf radiusclient-ng-0.5.6.tar.gz -C /usr/src/
cd /usr/src/radiusclient-ng-0.5.6
./configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var
make && make install
ติดตั้ง Spandsp
- โค้ด: เลือกทั้งหมด
cd /tmp
wget 'http://www.voip4share.com/sources/spandsp-0.0.6pre18.tgz'
tar xzvf spandsp-0.0.6pre18.tgz -C /usr/src
cd /usr/src/spandsp-0.0.6
./configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var
make clean
make
make install
สร้างไฟล์ /usr/include/linux/compiler.h
- โค้ด: เลือกทั้งหมด
vi /usr/include/linux/compiler.h
ใส่ข้อมูลตามนี้
- โค้ด: เลือกทั้งหมด
#ifndef __LINUX_COMPILER_H
#define __LINUX_COMPILER_H
#define likely(x) __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
#endif /* __LINUX_COMPILER_H */
ติดตั้ง Pwlib
- โค้ด: เลือกทั้งหมด
cd /tmp
wget 'http://www.voip4share.com/sources/pwlib-v1_10_3-src-tar.gz'
tar xzvf pwlib-v1_10_3-src-tar.gz -C /usr/src
cd /usr/src/pwlib_v1_10_3
./configure --prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc
make clean
make optshared
make install
พิมพ์บรรทัดต่อไปนี้
- โค้ด: เลือกทั้งหมด
export PWLIBDIR=/usr/src/pwlib_v1_10_3
export OPENH323DIR=/usr/src/openh323_v1_18_0
export LD_LIBRARY_PATH=$PWLIBDIR/lib:$OPENH323DIR/lib
ติดตั้ง OpenH323
- โค้ด: เลือกทั้งหมด
cd /tmp
wget 'http://www.voip4share.com/sources/openh323-v1_18_0-src-tar.gz'
tar xzvf openh323-v1_18_0-src-tar.gz -C /usr/src
cd /usr/src/openh323_v1_18_0
./configure --prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc
make clean
make optshared
make install
2. ติดตั้ง DAHDI 2.6.0 และ OSLEC
- โค้ด: เลือกทั้งหมด
cd /tmp
wget 'http://www.voip4share.com/sources/dahdi-linux-complete-2.6.0+2.6.0.tar.gz'
wget 'http://www.voip4share.com/sources/oslec-dahdi.tar.gz'
tar xzvf dahdi-linux-complete-2.6.0+2.6.0.tar.gz -C /usr/src
tar xzvf oslec-dahdi.tar.gz -C /usr/src/dahdi-linux-complete-2.6.0+2.6.0/linux/drivers
พิมพ์คำสั่งต่อไปนี้
- โค้ด: เลือกทั้งหมด
sed -i "s|#obj-m += dahdi_echocan_oslec.o|obj-m += dahdi_echocan_oslec.o|" /usr/src/dahdi-linux-complete-2.6.0+2.6.0/linux/drivers/dahdi/Kbuild
sed -i "s|#obj-m += ../staging/echo/|obj-m += ../staging/echo/|" /usr/src/dahdi-linux-complete-2.6.0+2.6.0/linux/drivers/dahdi/Kbuild
echo 'obj-m += echo.o' > /usr/src/dahdi-linux-complete-2.6.0+2.6.0/linux/drivers/staging/echo/Kbuild
- โค้ด: เลือกทั้งหมด
cd /usr/src/dahdi-linux-complete-2.6.0+2.6.0
make all
make install
make config
chkconfig dahdi on
ติดตั้ง Libpri
- โค้ด: เลือกทั้งหมด
cd /tmp
wget 'http://www.voip4share.com/sources/libpri-1.4.12.tar.gz'
tar xzvf libpri-1.4.12.tar.gz -C /usr/src
cd /usr/src/libpri-1.4.12
make
make install
3. ติดตั้งไดร์เวอร์การ์ด BX1600
- โค้ด: เลือกทั้งหมด
cd /tmp
wget http://www.voip4share.com/sources/bluenet-linux-1.2.3.tar.bz2
tar xvf bluenet-linux-1.2.3.tar.bz2 -C /usr/src
cd /usr/src/bluenet-linux-1.2.3
./configure --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --localstatedir=/var --with-dahdi=/usr/src/dahdi-linux-complete-2.6.0+2.6.0
make && make install
4. ติดตั้ง Asterisk 1.6.2.23
- โค้ด: เลือกทั้งหมด
cd /tmp
wget 'http://www.voip4share.com/sources/asterisk-1.6.2.23.tar.gz'
tar xzvf asterisk-1.6.2.23.tar.gz -C /usr/src
cd /usr/src/asterisk-1.6.2.23
./configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var
make menuselect
เลือกออปชั่นที่จะติดตั้ง ปกติผมก็จะเลือกเพิ่ม Core Sound Packages ให้มีไฟล์เสียง G.729 ด้วยและติดตั้งไฟล์เสียง G.729 ใน Extras Sound Packages
- โค้ด: เลือกทั้งหมด
make
make install
make samples
make config
4. ติดตั้ง Asterisk Add-Ons
- โค้ด: เลือกทั้งหมด
cd /tmp
wget 'http://www.voip4share.com/sources/asterisk-addons-1.6.2.4.tar.gz'
tar xzvf asterisk-addons-1.6.2.4.tar.gz -C /usr/src
cd /usr/src/asterisk-addons-1.6.2.4
./configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var
make menuselect
** เอา Channel Drivers -> chan_ooh323 ออก **
- โค้ด: เลือกทั้งหมด
make
make install
make samples
6. คอนฟิก DAHDI เพิ่มเติม
6.1 ไฟล์ /etc/dahdi/modules
เช็คในไฟล์ /etc/dahdi/modules จะเห็นมี 2 บรรทัดนี้เพิ่่มขึ้นมา
- โค้ด: เลือกทั้งหมด
t4xxp
bl1600a
โดยที่ t4xxp เป็นไดร์เวอร์การ์ด E1 ส่วน bl1600a เป็นไดร์เวอร์การ์ด 8 และ 16 Ports ครับ ถ้าไม่ได้ใส่การ์ด E1 ด้วยก็ให้แก้ไขไฟล์ /etc/dahdi/modules โดยใส่ # ไว้ข้างหน้าบรรทัด t4xxp ซะ แบบนี้
- โค้ด: เลือกทั้งหมด
#t4xxp
ขอแนะนำอีกอย่างครับว่าไดร์เวอร์ไหนที่เราไม่ได้ใส่การ์ดเข้าไปก็ควรจะใส่ # ไม่โหลดมันซะ จะได้ไม่เปลืองเมมครับ ในเครื่องผมผมใส่การ์ด BL1600 อย่างเดียวเลย (ใส่มากกว่า 1 การ์ดได้) ผมมี # หน้าทุกบรรทัดเลยยกเว้นบรรทัด bl1600a
6.2 ไฟล์ /etc/dahdi/genconf_parameters
- โค้ด: เลือกทั้งหมด
context_lines from-pstn
echo_can oslec
บรรทัด context_lines ไม่ต้องใส่ก็ได้นะครับ เพราะมันมี from-pstn เป็นค่าดีฟอลท์อยู่แล้ว แต่ใส่ไว้ก็ดีเผื่อต้องการเปลี่ยน
6.3 สตาร์ท DAHDI
รันคำสั่ง
- โค้ด: เลือกทั้งหมด
service dahdi start
6.4 คำสั่ง dahdi_hardware
รันแล้วไม่เจออะไรนะครับ
6.5 รีสตาร์ท DAHDI
เพื่อให้ DAHDI มองเห็นการ์ด BX1600
- โค้ด: เลือกทั้งหมด
service dahdi restart
ผลลัพธ์
Unloading DAHDI hardware modules: done
Loading DAHDI hardware modules:
bl1600a: [ OK ]
Running dahdi_cfg: [ OK ]
6.6 สร้างไฟล์ /etc/dahdi/system.conf
รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
dahdi_genconf
ไม่มีข้อความอะไรโชว์ให้เห็น แสดงว่าสร้างไฟล์คอนฟิกการ์ดได้สำเร็จ (ไฟล์ /etc/dahdi/system.conf)
6.7 ข้อมูลในไฟล์ /etc/dahdi/system.conf
ไฟล์นี้ผมไม่ได้สร้างเองนะครับ มันถูกสร้างขึ้นมาตอนผมรันคำสั่ง dahdi_genconf
- โค้ด: เลือกทั้งหมด
# Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
fxsks=1
echocanceller=oslec,1
fxsks=2
echocanceller=oslec,2
fxsks=3
echocanceller=oslec,3
fxsks=4
echocanceller=oslec,4
fxsks=5
echocanceller=oslec,5
fxsks=6
echocanceller=oslec,6
# channel 7, WCTDM/0/6, no module.
# channel 8, WCTDM/0/7, no module.
# channel 9, WCTDM/0/8, no module.
# channel 10, WCTDM/0/9, no module.
# channel 11, WCTDM/0/10, no module.
# channel 12, WCTDM/0/11, no module.
# channel 13, WCTDM/0/12, no module.
# channel 14, WCTDM/0/13, no module.
# channel 15, WCTDM/0/14, no module.
# channel 16, WCTDM/0/15, no module.
# Global data
loadzone = us
defaultzone = us
จากข้อมูลจะเห็นว่าเห็นอยู่ 6 พอร์ต (เพราะผมใส่โมดูลแบบ 2 พอร์ต จำนวน 3 โมดูล)
6.8 ไฟล์ /etc/asterisk/dahdi-channels.conf
ไฟล์นี้ผมก็ไม่ได้สร้างเอง มันสร้างตอนรันคำสั่ง dahdi_genconf
- โค้ด: เลือกทั้งหมด
; Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
;;; line="1 WCTDM/0/0 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 1
callerid=
group=
context=default
;;; line="2 WCTDM/0/1 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 2
callerid=
group=
context=default
;;; line="3 WCTDM/0/2 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 3
callerid=
group=
context=default
;;; line="4 WCTDM/0/3 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 4
callerid=
group=
context=default
;;; line="5 WCTDM/0/4 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 5
callerid=
group=
context=default
;;; line="6 WCTDM/0/5 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 6
callerid=
group=
context=default
ข้อมูลข้างบนมีบรรทัดที่น่าสนใจมากๆอยู่ 3 บรรทัด
group = 0 เป็นหมายเลข Group ครับ ดีฟอลท์ทุกพอร์ตจะอยู่ใน Group 0 เหมือนกันหมด จะมองว่า Group เป็น Hunting ก็ได้ มีประโยชน์ตอนโทรออก (โทรจาก Asterisk ออกไปภายนอก) หมายเลข Group มีได้ตั้งแต่ 0 จนถึง 63
context = from-pstn เป็นชื่อ Context สำคัญตอนรับสายเข้า
channel => 1 เป็นหมายเลขพอร์ต มีประโยชน์ทั้งตอนโทรออก (โทรออกแบบระบุพอร์ต) และโทรเข้า (โทรเข้าแบบระบุพอร์ต)
ถ้ายังไม่เข้าใจไว้ตอนคอนฟิกเทสโทรเข้า โทรออก จะเข้าใจเองครับ
6.9 ไฟล์ /etc/asterisk/chan_dahdi.conf
ไฟล์นี้ผมไม่ได้สร้างเอง และไม่ได้สร้างจากการรันคำสั่ง dahdi_genconf ด้วย เป็นไฟล์ดีฟอลท์ตอนติดตั้ง Asterisk ครับ เป็นพารามิเตอร์ทั่วไปที่จะทำให้เราปรับแต่งการ์ดให้มันทำงานเหมาะสมกับแอ๊ปของเราได้ดียิ่งขึ้น ไฟล์นี้มีข้อมูลอยู่เยอะมากครับ มีทั้งของการ์ด Analog (FXS/FXO) และการ์ด Digital (E1)
ในเครื่องเรามีแต่การ์ด BX1600 (การ์ด Analog FXO) ก็น่าจะตัดข้อมูลที่ไม่เกี่ยวข้องออก ให้มันดูง่ายขึ้น
- โค้ด: เลือกทั้งหมด
mv /etc/asterisk/chan_dahdi.conf /etc/asterisk/chan_dahdi.conf.backup
แล้วให้มีข้อมูลต่อไปนี้
- โค้ด: เลือกทั้งหมด
[trunkgroups]
[channels]
usercallerid=yes
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
;relaxdtmf=yes
;rxgain=2.0
;txgain=3.0
group=1
callgroup=1
pickupgroup=1
;immediate=yes
callerid=asreceived
busydetect=yes
busycount=3
;busypattern=500,500
;answeronpolarityswitch=yes
;hanguponpolarityswitch=yes
; -- FXO --
;ringtimeout=8000
;pulsedial=yes
;faxdetect=both
;faxbuffer=6,full
;jitter=4
#include dahdi-channels.conf
อย่าลืมบรรทัดสุดท้ายนะครับเป็นการเรียกไฟล์ dahdi-channels.conf ถ้าเราไม่เพิ่มไฟล์นี้เข้าไปก็จะมีปัญหาเวลารัน Asterisk มันจะมองไม่เห็นการ์ด
6.10 เช็คสถานะของ DAHDI
- โค้ด: เลือกทั้งหมด
service dahdi status
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
### Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
1 FXO FXSKS (EC: OSLEC - INACTIVE)
2 FXO FXSKS (EC: OSLEC - INACTIVE) RED
3 FXO FXSKS (EC: OSLEC - INACTIVE) RED
4 FXO FXSKS (EC: OSLEC - INACTIVE) RED
5 FXO FXSKS (EC: OSLEC - INACTIVE) RED
6 FXO FXSKS (EC: OSLEC - INACTIVE) RED
7 unknown Reserved
8 unknown Reserved
9 unknown Reserved
10 unknown Reserved
11 unknown Reserved
12 unknown Reserved
13 unknown Reserved
14 unknown Reserved
15 unknown Reserved
16 unknown Reserved
7. สตาร์ท Asterisk
- โค้ด: เลือกทั้งหมด
service asterisk start
ให้ Asterisk สตาร์ทตอนเปิดเครื่อง
- โค้ด: เลือกทั้งหมด
chkconfig asterisk on
เช็ค Process
- โค้ด: เลือกทั้งหมด
ps -ef | grep asterisk
ผลลัพธ์
root 6234 1 0 06:06 pts/0 00:00:00 /bin/sh /usr/sbin/safe_asterisk
root 6239 6234 1 06:06 pts/0 00:00:00 /usr/sbin/asterisk -f -vvvg -c
ติดตั้ง Codec G.723 และ G.729
รายละเอียดจริงๆของวิธีการติดตั้ง Free codecs G.723.1 และ G.729 อ่านได้จากบทความนี้ครับ ติดตั้ง G.723.1 และ G.729 ให้ Asterisk
ได้ว่าเครื่องผมต้องใช้ไฟล์ 2 ไฟล์นี้
- โค้ด: เลือกทั้งหมด
cd /tmp
wget http://asterisk.hosting.lv/bin162/codec_g723-ast16-gcc4-glibc-x86_64-pentium4.so
wget http://asterisk.hosting.lv/bin162/codec_g729-ast16-gcc4-glibc-x86_64-pentium4.so
- โค้ด: เลือกทั้งหมด
cp codec_g729-ast16-gcc4-glibc-x86_64-pentium4.so /usr/lib/asterisk/modules/codec_g729.so
cp codec_g723-ast16-gcc4-glibc-x86_64-pentium4.so /usr/lib/asterisk/modules/codec_g723.so
asterisk -rx "module load codec_g723.so"
asterisk -rx "module load codec_g729.so"
เช็คว่า Asterisk มองเห็นการ์ด (พอร์ต) หรือไม่
รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi show status"
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
Description Alarms IRQ bpviol CRC4 Fra Codi Options LBO
Bluenet BL1600A Rev 1.00 Board 1 OK 0 0 0 CAS Unk 0 db (CSU)/0-133 feet (DSX-1)
รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi show channels"
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
Chan Extension Context Language MOH Interpret Blocked State
pseudo default default In Service
1 from-pstn default In Service
2 from-pstn default In Service
3 from-pstn default In Service
4 from-pstn default In Service
5 from-pstn default In Service
6 from-pstn default In Service
ดูพอร์ตที่ 1 ซึ่งผมต่อสายโทรศัพท์ไว้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi show channel 1"
Channel: 1
File Descriptor: 18
Span: 1
Extension:
Dialing: no
Context: from-pstn
Caller ID:
Calling TON: 0
Caller ID name:
Mailbox: none
Destroy: 0
InAlarm: 0
Signalling Type: FXS Kewlstart
Radio: 0
Owner: <None>
Real: <None>
Callwait: <None>
Threeway: <None>
Confno: -1
Propagated Conference: -1
Real in conference: 0
DSP: no
Busy Detection: no
TDD: no
Relax DTMF: no
Dialing/CallwaitCAS: 0/0
Default law: ulaw
Fax Handled: no
Pulse phone: no
DND: no
Echo Cancellation:
128 taps
currently OFF
Wait for dialtone: 0ms
Actual Confinfo: Num/0, Mode/0x0000
Actual Confmute: No
Hookstate (FXS only): Onhook
[/code]
เอาหล่ะครับ ก็เป็นอันว่าการติดตั้งและคอนฟิกการ์ด BX1600 สำเร็จลุล่วงไปด้วยดี ไม่มีปัญหาอะไร แต่ก็ไม่ใช่ว่าเราไม่ต้องปรับแต่งคอนฟิกอะไรแล้วนะครับ บางทีเราก็อาจจะต้องมาปรับค่าในไฟล์ /etc/asterisk/chan_dahdi.conf อย่างเช่นกรณีโทรเข้าออกผ่านการ์ด BL1600 แล้วสายค้าง ประมาณนี้ครับ
7. สร้าง SIP Extensions ไว้เพื่อทดสอบ
ไฟล์ /etc/asterisk/sip.conf
- โค้ด: เลือกทั้งหมด
[test-basic-options](!)
dtmfmode=rfc2833
context=from-internal
type=friend
port=5060
host=dynamic
nat=yes
rtptimeout=30
rtpholdtimeout=60
qualify=yes
canreinvite=no
[test-my-codecs](!)
disallow=all
allow=g729
allow=ulaw
[88000](test-basic-options,test-my-codecs)
defaultuser=88000
secret=bkk88000
[88001](test-basic-options,test-my-codecs)
defaultuser=88001
secret=bkk88001
รันคำสั่งต่อไปนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "sip reload"
asterisk -rx "sip show peers"
ปิด iptables ก่อนชั่วคราว
ไว้ให้เทสผ่านก่อนแล้วค่อยเปิดและคอนฟิกให้ VoIP ผ่านได้
รันคำสั่งต่อไปนี้
- โค้ด: เลือกทั้งหมด
service iptables stop
รีจิสเตอร์ SIP Account
คอนฟิก Softphone (เพราะง่ายสุด) ให้รีจิสเตอร์ ผมใช้โปรแกรม Zoiper เวอร์ชั่นที่มี G.729 (หาได้จากในเว็บแชร์ไฟล์ทั่วไป)
เช็คว่าบน Asterisk เห็นยูสเซอร์รีจิสเตอร์
รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "sip show peers"
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
# asterisk -rx "sip show peers"
Name/username Host Dyn Nat ACL Port Status
88000/88000 192.168.100.88 D N 5060 OK (72 ms)
88001/88001 (Unspecified) D N 5060 UNKNOWN
คอนฟิก Dialplan อย่างง่ายๆ
ให้ SIP Account โทรเข้ามาทดสอบได้
ไฟล์ /etc/asterisk/extensions.conf
เปลี่ยนชื่อไฟล์ /etc/asterisk/extensions.conf ไฟล์เดิมให้เป็นชื่อใหม่ก่อน
- โค้ด: เลือกทั้งหมด
mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.backup
แล้วสร้างไฟล์ขึ้นมาใหม่
- โค้ด: เลือกทั้งหมด
vi /etc/asterisk/extensions.conf
ให้มีข้อมูลตามนี้
- โค้ด: เลือกทั้งหมด
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2
[from-internal]
exten => 1234,1,Playback(demo-congrats)
exten => 1234,n,Hangup
รีโหลด Dialplan
รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dialplan reload'
เทสโทรจาก Softphone กด 1234 ถ้าได้ยินเสียงก็แสดงว่าเวอร์คแล้ว เราก็พร้อมจะทำการทดสอบโทรเข้าและออกผ่านทางการ์ด BX1600 แล้ว
8. คอนฟิกแบ่ง Group
ปกติถ้าในเครื่องมีการ์ดเดียว (หรือหลายๆการ์ด) เราควรจะแบ่งพอร์ตให้ชัดเจนเลยว่าจะใช้พอร์ตไหนโทรเข้า พอร์ตไหนไว้โทรออก หรือพอร์ตไหนไว้เป็นเบอร์แฟกซ์ ยกตัวอย่าง โทรเข้าพอร์ต 1,2 โทรออกพอร์ต 3,4,5 เบอร์ fax พอร์ต 6
เพราะฉะนั้นเราก็แบ่งออกเป็น 3 Groups เอาเป็น Group 0, 1 และ 2 หล่ะกันครับ โดยที่พอร์ต 1-2 อยู่ Group 0 พอร์ต 3-5 อยู่ Group 1 ส่วนพอร์ต 6 อยู่ Group 3
เราแบ่ง Group ในไฟล์ /etc/asterisk/dahdi-channels.conf โดยแก้เลข 0 ในบรรทัด group=0 เป็นค่าที่เราต้องการ
- โค้ด: เลือกทั้งหมด
; Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
;;; line="1 WCTDM/0/0 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 1
callerid=
group=
context=default
;;; line="2 WCTDM/0/1 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 2
callerid=
group=
context=default
;;; line="3 WCTDM/0/2 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=1
context=from-pstn
channel => 3
callerid=
group=
context=default
;;; line="4 WCTDM/0/3 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=1
context=from-pstn
channel => 4
callerid=
group=
context=default
;;; line="5 WCTDM/0/4 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=1
context=from-pstn
channel => 5
callerid=
group=
context=default
;;; line="6 WCTDM/0/5 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=2
context=from-pstn
channel => 6
callerid=
group=
context=default
*** ถ้ายังมองประโยชน์ของการแบ่ง Group ไม่เคลียร์นะครับ ให้นึกเอาว่า ตอนเราโทรออก (โทรจาก Softphone ผ่านการ์ดออกไปภายนอก) ถ้ามันออกทางพอร์ตที่เราไม่ต้องการให้ออก เป็นต้นว่าพอร์ตนั้นเอาไว้รับสายเข้า พอร์ตนั้นเอาไว้ให้คนส่งแฟกซ์เข้ามา พอร์ตนั้นต่อกับเบอร์ที่มีค่าโทรแพงๆ มันก็ไม่ค่อยจะดีใช่ป่ะครับ ***
รันคำสั่งต่อไปนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi restart"
เช็ค Group ด้วยคำสั่งต่อไปนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi show channels group 0"
asterisk -rx "dahdi show channels group 1"
asterisk -rx "dahdi show channels group 2"
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
Chan Extension Context Language MOH Interpret Blocked State
1 from-pstn default In Service
2 from-pstn default In Service
- โค้ด: เลือกทั้งหมด
Chan Extension Context Language MOH Interpret Blocked State
3 from-pstn default In Service
4 from-pstn default In Service
5 from-pstn default In Service
- โค้ด: เลือกทั้งหมด
Chan Extension Context Language MOH Interpret Blocked State
6 from-pstn default In Service
ก็เป็นอันว่าเราแบ่งทั้ง 6 พอร์ตออกเป็น 3 Groups เรียบร้อยแล้ว เวลาเรียกใช้งานพอร์ตเราสามารถอ้างค่าหมายเลข Group ของมันแทนได้ ซึ่ง Asterisk จะเช็คว่ามีพอร์ตไหนว่างอยู่ก็จะใช้พอร์ตนั้น ถ้าไม่มีพอร์ตว่างและเราไม่ได้ให้มันส่งออกไปทางอื่นก็จะส่ง busy ให้ได้ยิน
การอ้างอิงหมายเลข Group ทำได้ 4 แบบครับ โดยใช้ตัวอักษร G, g, R, r ตามด้วยหมายเลข group ยกตัวอย่าง
G0 หมายถึงใช้พอร์ตในกรุ๊ปโดยใช้พอร์ตที่มีหมายเลขน้อยสุดก่อน ถ้าไม่ว่างค่อยใช้พอร์ตหมายเลขสูงกว่า (พอร์ตแรกในกรุ๊ปจะถูกใช้งานเยอะที่สุด)
g0 หมายถึงใช้พอร์ตในกรุ๊ปโดยใช้พอร์ตที่มีหมายเลขมากที่สุดก่อน ถ้าไม่ว่างค่อยใช้พอร์ตหมายเลขต่ำกว่า (พอร์ตสุดท้ายในกรุ๊ปจะถูกใช้งานเยอะสุด)
R0 หมายถึงใช้พอร์ตในกรุ๊ปแบบวนไปเรื่อยๆ หรือที่เราเรียกว่า Round Robbin โดยเริ่มจากพอร์ตที่มีหมายเลขต่ำสุดก่อน แล้ววนไปเรื่อยๆ (ทุกพอร์ตถูกใช้งานเท่าๆกัน)
r0 หมายถึงใช้พอร์ตในกรุ๊ปแบบวนไปเรื่อยๆ (แบบเดียวกับ R0) แต่เริ่มจากพอร์ตหมายเลขสูงที่สุดก่อน
*** เปลี่ยนหมายเลข Group แล้ว ห้ามมมมมมมม รันคำสั่ง dahdi_genconf อีกนะครับ ไม่อย่างนั้นก็ต้องมาทำใหม่อีก ยกเว้นต้องการเลิกแบ่ง Group แล้ว ***
9. คอนฟิก Dialplan โทรออกผ่านการ์ด
ตั้งเงื่อนไขการโทรออกพอร์ต FXO ว่า กด 0 นำหน้าตามด้วยเลขอะไรก็ได้
ไฟล์ /etc/asterisk/extensions.conf
- โค้ด: เลือกทั้งหมด
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2
[from-internal]
exten => 1234,1,Playback(demo-congrats)
exten => 1234,n,Hangup
exten => _0X.,1,Dial(DAHDI/G0/${EXTEN},60)
exten => _0X.,n,Hangup
เซฟไฟล์แล้วรีโหลด Dialplan
- โค้ด: เลือกทั้งหมด
asterisk -rx "dialplan reload"
ทดสอบโทรออก
เข้า Asterisk Console เพื่อดู Events ที่เกิดขึ้นขณะเราทดสอบ จาก Softphone โทรออกสายนอกกด 0x ได้เลย เช่น 0851619439
- โค้ด: เลือกทั้งหมด
asterisk -rvvvv
ข้อความขณะโทรออก
-- Executing [0851619439@from-internal:1] Dial("SIP/88000-00000001", "DAHDI/G0/0851619439,60") in new stack
-- Called G0/0851619439
-- DAHDI/1-1 answered SIP/88000-00000001
ก็คุยได้ครับ เป็นอันว่าคอนฟิกโทรออกผ่านการ์ดได้แล้ว
9. คอนฟิก Dialplan รับสายเข้า
ตอนคอนฟิกการ์ดให้รับสายเข้า จะยุ่งยากนิดนึงก็ตรงเรื่องของ Context ครับ ซึ่งถ้าสังเกตุในไฟล์ /etc/asterisk/dahdi-channels.conf จะเห็นมีบรรทัด context=from-pstn อยู่ในทุกๆพอร์ต
;;; line="1 WCTDM/0/0 FXSKS (EC: MG2 - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
context ชื่อ from-pstn เป็นค่าดีฟอลท์ของพอร์ต FXO แต่เราจะแก้ไขเป็นค่าอื่นก็ได้เช่น from-zaptel (แต่ถ้ารันคำสั่ง dahdi_genconf ก็จะกลับมาเป็นค่าเดิมอีก ยกเว้นเราไปใส่บรรทัด context_lines from-zaptel ไว้ในไฟล์ /etc/dahdi/genconf_parameters ไม่ว่าจะรัน dahdi_genconf อีกกี่รอบมันก็จะไม่เปลี่ยน)
context เอาไว้คอนโทรลตอนรับสายเข้าครับ แต่ละพอร์ต (ที่ใช้รับสายเข้า) ก็ไม่จำเป็นว่าต้องมี context ชื่อเดียวกัน เราคอนฟิกได้ว่าถ้าโทรมาเข้าพอร์ตๆนี้จะให้ไปรันหรือเรียกอะไรขึ้นมาทำงาน ตอนโทรเข้าจะไม่เกี่ยวกับ Group แล้วนะครับ (Group มันเอาไว้ตอนโทรออกอย่างเดียว) ถึงเราจะคอนฟิกให้พอร์ตที่รับสายเข้ามีหลายๆพอร์ต เราก็แยกได้ว่าแต่ละพอร์ตเอาไว้ทำอะไร เป็นอิสระจากกันเลย
มาดูตัวอย่างกันครับจะเข้าใจง่ายขึ้น ผมตั้งเงื่อนไขการโทรเข้าไว้อย่างง่ายๆว่า โทรเข้าแล้วให้ดังที่เบอร์ Extensions 88000 เลย
ไฟล์ /etc/asterisk/extensions.conf
- โค้ด: เลือกทั้งหมด
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2
[from-internal]
exten => 1234,1,Playback(demo-congrats)
exten => 1234,n,Hangup
exten => _0X.,1,Dial(DAHDI/G0/${EXTEN},60)
exten => _0X.,n,Hangup
[from-pstn]
exten => s,1,Dial(SIP/88000)
exten => s,n,Hangup
รีโหลด Dialplan
- โค้ด: เลือกทั้งหมด
asterisk -rx "dialplan reload"
โทรเข้าเบอร์ที่ต่ออยู่ บนหน้าจอ Asterisk Console จะปรากฏข้อความคล้ายๆแบบนี้
- โค้ด: เลือกทั้งหมด
-- Starting simple switch on 'DAHDI/1-1'
-- Executing [s@from-pstn:1] Dial("DAHDI/1-1", "SIP/88000") in new stack
== Using SIP RTP CoS mark 5
-- Called 88000
-- SIP/88000-00000002 is ringing
-- SIP/88000-00000002 is ringing
-- SIP/88000-00000002 answered DAHDI/1-1
[Mar 18 15:32:55] WARNING[2198]: chan_dahdi.c:6497 dahdi_handle_event: Ring/Off-hook in strange state 6 on channel 1
== Spawn extension (from-pstn, s, 1) exited non-zero on 'DAHDI/1-1'
-- Hungup 'DAHDI/1-1'
เบอร์ Extensions 88000 ที่ผมรีจิสเตอร์อยู่ด้วย Softphone จะ Ring รับสายแล้วคุยกันได้เลย
ก็เป็นอันว่าติดตั้งการ์ด 16 FXO การ์ดนี้บน Asterisk เสร็จเรียบร้อยแล้วครับ
10. ติดตั้งโมดูลเพิ่มเติม
ผมได้ทำการติดตั้ง Dual FXO เพิ่มอีก 2 โมดูล ซึ่งตอนนี้เท่ากับว่าบนการ์ดมี Dual FXO จำนวน 5 โมดูล รวมเป็น 10 พอร์ตแล้ว
*** ตอนถอดการ์ดให้ถอดสายไฟ สายแลน เม๊าส์ คีบอร์ด สายต่อจอ ออกให้หมดเลยนะครับ ไม่จำเพาะการ์ดนี้เท่านั้นนะครับ ทุกๆการ์ด ทุกๆยี่ห้อก็ควรจะทำแบบนี้ เพื่อยืดอายุการใช้งาน ***
รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
service dahdi status
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
### Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
1 FXO FXSKS (In use) (EC: OSLEC - INACTIVE)
2 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
3 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
4 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
5 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
6 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
7 FXO FXSKS RED
8 FXO FXSKS RED
9 FXO FXSKS RED
10 FXO FXSKS RED
11 unknown Reserved
12 unknown Reserved
13 unknown Reserved
14 unknown Reserved
15 unknown Reserved
16 unknown Reserved
** ถ้าคอนฟิกเดิมก่อนเพิ่มโมดูล เราได้มีการแก้ไขไฟล์ /etc/asterisk/dahdi-channels.conf แบ่ง Group แก้ไข Context แล้ว หากเรารันคำสั่ง dahdi_genconf อีก ที่เราคอนฟิกไว้มันก็จะกลายเป็นค่าดีฟอลท์ ผมมีวิธีแก้ไขไฟล์แบบ manual มาฝากครับ ดังนี้ **
แก้ไขไฟล์ /etc/dahdi/system.conf
ของเดิม
# Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
fxsks=1
echocanceller=oslec,1
fxsks=2
echocanceller=oslec,2
fxsks=3
echocanceller=oslec,3
fxsks=4
echocanceller=oslec,4
fxsks=5
echocanceller=oslec,5
fxsks=6
echocanceller=oslec,6
# channel 7, WCTDM/0/6, no module.
# channel 8, WCTDM/0/7, no module.
# channel 9, WCTDM/0/8, no module.
# channel 10, WCTDM/0/9, no module.
# channel 11, WCTDM/0/10, no module.
# channel 12, WCTDM/0/11, no module.
# channel 13, WCTDM/0/12, no module.
# channel 14, WCTDM/0/13, no module.
# channel 15, WCTDM/0/14, no module.
# channel 16, WCTDM/0/15, no module.
# Global data
loadzone = us
defaultzone = us
ใหม่ (เพิ่มคอนฟิกของพอร์ต 7 - 10 ตามตัวอย่างได้เลยครับ)
# Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
fxsks=1
echocanceller=oslec,1
fxsks=2
echocanceller=oslec,2
fxsks=3
echocanceller=oslec,3
fxsks=4
echocanceller=oslec,4
fxsks=5
echocanceller=oslec,5
fxsks=6
echocanceller=oslec,6
fxsks=7
echocanceller=oslec,7
fxsks=8
echocanceller=oslec,8
fxsks=9
echocanceller=oslec,9
fxsks=10
echocanceller=oslec,10
# channel 11, WCTDM/0/10, no module.
# channel 12, WCTDM/0/11, no module.
# channel 13, WCTDM/0/12, no module.
# channel 14, WCTDM/0/13, no module.
# channel 15, WCTDM/0/14, no module.
# channel 16, WCTDM/0/15, no module.
# Global data
loadzone = us
defaultzone = us
ไฟล์ /etc/asterisk/dahdi-channels.conf เพิ่มบรรทัดต่อไปนี้ต่อท้าย จะเปลี่ยนหมายเลข Group หรือ Context ก็ได้ครับ ตามสะดวก ผมใช้ค่าดีฟอลท์เลย
- โค้ด: เลือกทั้งหมด
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 7
callerid=
group=
context=default
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 8
callerid=
group=
context=default
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 9
callerid=
group=
context=default
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 10
callerid=
group=
context=default
รีโหลด Dahdi และ Asterisk ใหม่ให้มันรับรู้ว่ามีพอร์ตเพิ่มขึ้นมาแล้ว รันคำสั่งต่อไปนี้
- โค้ด: เลือกทั้งหมด
service asterisk stop
service dahdi restart
service asterisk start
ตรวจสอบ รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
service dahdi status
[code]
ผลลัพธ์
[code]
### Span 1: WCTDM/0 "Bluenet BL1600A Rev 1.00 Board 1" (MASTER)
1 FXO FXSKS (In use) (EC: OSLEC - INACTIVE)
2 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
3 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
4 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
5 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
6 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
7 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
8 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
9 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
10 FXO FXSKS (In use) (EC: OSLEC - INACTIVE) RED
11 unknown Reserved
12 unknown Reserved
13 unknown Reserved
14 unknown Reserved
15 unknown Reserved
16 unknown Reserved
[/code]
รันอีกคำสั่ง
[code]
asterisk -rx "dahdi show channels group 0"
[/code]
ผลลัพธ์
[code]
Chan Extension Context Language MOH Interpret Blocked State
1 from-pstn default In Service
2 from-pstn default In Service
7 from-pstn default In Service
8 from-pstn default In Service
9 from-pstn default In Service
10 from-pstn default In Service
ก็จะเห็นว่า Group 0 มีพอร์ตหมายเลข 7, 8, 9 และ 10 โชว์ขึ้นมาแล้ว ก็คอนฟิกใช้งานได้เลยครับ
ขอขอบคุณเว็บไซต์ http://www.buyasteriskcard.com ที่เอื้อเฟื้ออุปกรณ์ให้ทดสอบ
บทความที่เกี่ยวข้อง
OSLEC - สุดยอด Software Echo Canceller
เทคนิคการติดตั้งการ์ด 16 FXO บน Asterisk
เทคนิคการติดตั้งการ์ด 16 FXO บน Elastix 2.0.3
เทคนิคการติดตั้งการ์ด 16 FXO บน Elastix 2.3.0
การเชื่อมต่อ GSM FWT กับพอร์ต FXO
เทคนิคการติดตั้งการ์ด TDM400P (4 FXO/FXS) บน Asterisk
เทคนิคการติดตั้งการ์ด TDM410P (4 FXO/FXS) บน Asterisk
วิธีเช็คว่า Echo Canceller ทำงานหรือไม่