เทคนิคการติดตั้งและใช้งานการ์ด Digital E1 - TE110P

Elastix IP Pbx

Moderator: jubjang

เทคนิคการติดตั้งและใช้งานการ์ด Digital E1 - TE110P

โพสต์โดย nuiz » 20 มิ.ย. 2011 22:47

บทความต่อไปนี้นะครับจะแนะนำวิธีการติดตั้ง คอนฟิก ใช้งาน และแก้ปัญหาการ์ด Digital E1 รุ่น TE110P การ์ดรุ่นอื่นๆก็ใช้ได้เหมือนกันนะครับ เทสจนเวอร์คถึงเอามาโพสต์ ข้อมูลมันอาจจะดูเลอะๆไปหน่อย ดูแล้วไม่เข้าใจก็ดูหลายๆรอบครับ

หมายเหตุ.. ใน Elastix ถ้าเราเช็ค kernel (คำสั่ง rpm -qa | grep kernel) จะเห็นมี kernel-module-wanpipe อยู่ และเวลารีสตาร์ทเครื่องถ้าต่อจอมอนิเตอร์ก็จะเห็นว่ามีการโหลด wanpipe แต่ว่าจะ fail ไม่ต้องตกใจครับ เขาทำมาสำหรับการ์ด Sangoma เท่านั้น ในเครื่องเราถ้าไม่มีการ์ดนี้ก็จะเจอ Error อย่างที่ว่า รับรองไม่มีปัญหาการใช้งานครับ และถ้าดูที่เว็บอื่นที่เขามีบอกวิธีการติดตั้งการ์ด E1 แล้วมีการอ้างถึง wanpipe นั่นแสดงว่าเขาใช้การ์ดของ Sangoma ครับ

รูปร่างหน้าตาของการ์ด E1 TE110P
การ์ดนี้เป็นบัสแบบ PCI นะครับ ใส่ได้ทั้ง Slot PCI 5 Volt และ PCI 3.3 Volt

รูปภาพ

รูปภาพ

ติดตั้งใน PCI Slot

รูปภาพ

หัวลูป
รูปนี้เป็นหัวลูป (loop) ผมเอาไว้เทสพอร์ต E1 ว่ามันเจ้งหรือเปล่า ใช้สาย Lan ทำครับ เอาขา 1 (Rx-) ต่อกับขา 4 (Tx-) และขา 2 (Rx+) ต่อกับขา 5 (Tx+) ไขว้กันอย่างในรูป

รูปภาพ

คำสั่งบน Linux

โค้ด: เลือกทั้งหมด
# dmesg

TE110P: Setting up global serial parameters for E1 FALC V1.2
TE110P: Successfully initialized serial bus for card
Found a Wildcard: Digium Wildcard TE110P T1/E1


โค้ด: เลือกทั้งหมด
# dahdi_scan

[1]
active=yes
alarms=UNCONFIGURED
description=Digium Wildcard TE110P T1/E1 Card 0
name=WCT1/0
manufacturer=Digium
devicetype=Digium Wildcard TE110P T1/E1
location=PCI Bus 02 Slot 03
basechan=1
totchans=31
irq=209
type=digital-E1
syncsrc=0
lbo=0 db (CSU)/0-133 feet (DSX-1)
coding_opts=HDB3
framing_opts=CCS,CRC4
coding=
framing=


การ์ดยังไม่ได้คอนฟิกครับ ผลของคำสั่ง dahdi_scan เลยเป็นแบบข้างบน

1. ทำให้ Elastix รู้จักการ์ด

1.1 หน้าเว็บ "Hardware Detector" ของ Elastix
เข้าหน้าเว็บ Hardware Detector ครั้งแรก(อาจ)จะมองไม่เห็นการ์ดและพอร์ตนะครับ ต้องกดปุ่ม "Detect New Hardware" ครั้งนึงก่อน ถึงจะมองเห็นการ์ด ดังรูป

รูปภาพ

พอร์ตยังไม่เป็นสีเขียวเพราะว่า Physical Port ของการ์ดยังไม่ Sync ถ้ามาดูที่ตัวการ์ดจะเห็นไฟสีแดงติดกระพริบ ไฟนี้เป็นไฟ Alarm นะครับ และสีแดงที่เราเห็นเรียกว่า "Red Alarm"

รูปภาพ

ถ้าอยากให้มันหาย Alarm และยังไม่ได้เตรียมอุปกรณ์ E1 หรือสาย E1 จากตู้สาขาหรือชุมสายโทรศัพท์ ก็ให้เสียบสาย Loop เข้าไปที่พอร์ตก่อนนะครับ เพื่อให้มันหาย Alarm เราจะได้ทำอย่างอื่นไปก่อน ตามรูปนะครับ

รูปภาพ

รอสักพักไฟ Alarm จะเปลี่ยนเป็นสีเขียว กลับมากดปุ่ม Deatect New Hardware ในหน้าเว็บใหม่ครับ ก็จะเห็นพอร์ตเปลี่ยนเป็นสีเขียวแล้ว ดังรูป

รูปภาพ

1.2 เซ็ต Echo Canceller เป็นแบบ OSLEC
ที่หน้า Hardware Detector นะครับ คลิ๊กที่ "Configuration of Span" แล้วเลือก Echo Canceller เป็นแบบ OSLEC ตามรูป

รูปภาพ

2. คอนฟิกเพิ่มเติม

2.1 เพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/dahdi/genconf_parameters

context_lines from-zaptel

ใส่ไว้บรรทัดไหนก็ได้ในไฟล์ ถ้าขาดบรรทัดนี้ไปมีบรรทัดนี้แต่ไม่ใช่แบบนี้ จะทำให้เวลาเรากดปุ่ม "Detect New Hardware" ในหน้าเว็บ Hardware Detector ค่าคอนฟิกของการ์ด E1 มันจะเป็น context=from-pstn ซึ่งจะทำให้โทรเข้าไม่ได้ (แต่ยังโทรออกได้อยู่)

3. คำสั่งบน CentOS และ Asterisk เอาไว้ตรวจสอบการ์ด

โค้ด: เลือกทั้งหมด
# dahdi_cfg -v

DAHDI Tools Version - 2.3.0

DAHDI Version: 2.3.0.1
Echo Canceller(s): OSLEC
Configuration
======================

SPAN 1: CCS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1)

31 channels to configure.

Setting echocan for channel 1 to oslec
Setting echocan for channel 2 to oslec
Setting echocan for channel 3 to oslec
Setting echocan for channel 4 to oslec
Setting echocan for channel 5 to oslec
Setting echocan for channel 6 to oslec
Setting echocan for channel 7 to oslec
Setting echocan for channel 8 to oslec
Setting echocan for channel 9 to oslec
Setting echocan for channel 10 to oslec
Setting echocan for channel 11 to oslec
Setting echocan for channel 12 to oslec
Setting echocan for channel 13 to oslec
Setting echocan for channel 14 to oslec
Setting echocan for channel 15 to oslec
Setting echocan for channel 16 to none
Setting echocan for channel 17 to oslec
Setting echocan for channel 18 to oslec
Setting echocan for channel 19 to oslec
Setting echocan for channel 20 to oslec
Setting echocan for channel 21 to oslec
Setting echocan for channel 22 to oslec
Setting echocan for channel 23 to oslec
Setting echocan for channel 24 to oslec
Setting echocan for channel 25 to oslec
Setting echocan for channel 26 to oslec
Setting echocan for channel 27 to oslec
Setting echocan for channel 28 to oslec
Setting echocan for channel 29 to oslec
Setting echocan for channel 30 to oslec
Setting echocan for channel 31 to oslec


โค้ด: เลือกทั้งหมด
# dahdi_hardware

pci:0000:02:02.0     wcte11xp+    e159:0001 Digium Wildcard TE110P T1/E1 Board


โค้ด: เลือกทั้งหมด
# dahdi_scan

[1]
active=yes
alarms=OK
description=Digium Wildcard TE110P T1/E1 Card 0
name=WCT1/0
manufacturer=Digium
devicetype=Digium Wildcard TE110P T1/E1
location=PCI Bus 02 Slot 03
basechan=1
totchans=31
irq=209
type=digital-E1
syncsrc=0
lbo=0 db (CSU)/0-133 feet (DSX-1)
coding_opts=HDB3
framing_opts=CCS,CRC4
coding=HDB3
framing=CCS

สังเกตุบรรทัด Alarm นะครับ ปกติจะเป็น Alarm=OK แต่ถ้าสาย E1 หลุดหรืออุปกรณ์ที่ต่ออยู่มีปัญหา บรรทัดนี้จะกลายเป็น Alarm=RED

โค้ด: เลือกทั้งหมด
# dahdi_test

Opened pseudo dahdi interface, measuring accuracy...
99.996% 99.995% 99.987% 99.994% 99.994% 99.994% 99.993% 99.994%
99.994% 99.993% 99.994% 99.995% 99.995% 99.994% 99.994% 99.995%
99.994% 99.994% 99.994% 99.995% 99.994% 99.994% 99.994% 99.994%
99.994%
--- Results after 25 passes ---
Best: 99.996 -- Worst: 99.987 -- Average: 99.993901, Difference: 99.993901


# dahdi_tool

รูปภาพ

รูปภาพ

ถ้าพอร์ต E1 มีปัญหาการเชื่อมต่อก็จะมี Read Alarm โชว์แบบนี้ครับ

รูปภาพ

โค้ด: เลือกทั้งหมด
elastix-a*CLI> dahdi show status
Description                              Alarms  IRQ    bpviol CRC4   Fra Codi Options  LBO
Digium Wildcard TE110P T1/E1 Card 0      OK      61     0      0      CCS HDB3 CRC4     0 db (CSU)/0-133 feet (DSX-1)


โค้ด: เลือกทั้งหมด
elastix-a*CLI> dahdi show channels
   Chan Extension  Context         Language   MOH Interpret        Blocked    State     
pseudo            default                    default                         In Service
      1            from-zaptel                default                         In Service
      2            from-zaptel                default                         In Service
      3            from-zaptel                default                         In Service
      4            from-zaptel                default                         In Service
      5            from-zaptel                default                         In Service
      6            from-zaptel                default                         In Service
      7            from-zaptel                default                         In Service
      8            from-zaptel                default                         In Service
      9            from-zaptel                default                         In Service
     10            from-zaptel                default                         In Service
     11            from-zaptel                default                         In Service
     12            from-zaptel                default                         In Service
     13            from-zaptel                default                         In Service
     14            from-zaptel                default                         In Service
     15            from-zaptel                default                         In Service
     17            from-zaptel                default                         In Service
     18            from-zaptel                default                         In Service
     19            from-zaptel                default                         In Service
     20            from-zaptel                default                         In Service
     21            from-zaptel                default                         In Service
     22            from-zaptel                default                         In Service
     23            from-zaptel                default                         In Service
     24            from-zaptel                default                         In Service
     25            from-zaptel                default                         In Service
     26            from-zaptel                default                         In Service
     27            from-zaptel                default                         In Service
     28            from-zaptel                default                         In Service
     29            from-zaptel                default                         In Service
     30            from-zaptel                default                         In Service
     31            from-zaptel                default                         In Service


จะไม่โชว์ Channel 0 และ 16 นะครับ เพราะว่า Channel 0 เอาไว้ทำ Synchronization และ Channel 16 เป็น Signaling หรือที่เราเรียกว่า D-Channel ซึ่งทั้งสอง Channel นี้เราเอามาใช้งานไม่ได้ ที่เราเห็นจะเป็น Channel 1 - 31 รวม 30 Channels เราเอามาใช้งานได้ทั้งหมดครับ

โค้ด: เลือกทั้งหมด
elastix-a*CLI> dahdi show channel 1
Channel: 1
File Descriptor: 21
Span: 1
Extension:
Dialing: no
Context: from-zaptel
Caller ID:
Calling TON: 0
Caller ID name:
Mailbox: none
Destroy: 0
InAlarm: 1
Signalling Type: ISDN PRI
Radio: 0
Owner: <None>
Real: <None>
Callwait: <None>
Threeway: <None>
Confno: -1
Propagated Conference: -1
Real in conference: 0
DSP: no
Busy Detection: yes
    Busy Count: 3
    Busy Pattern: 500,500
TDD: no
Relax DTMF: no
Dialing/CallwaitCAS: 0/0
Default law: alaw
Fax Handled: no
Pulse phone: no
DND: no
Echo Cancellation:
        128 taps
        (unless TDM bridged) currently OFF
Wait for dialtone: 0ms
PRI Flags:
PRI Logical Span: Implicit
Hookstate (FXS only): Onhook


3. Alarm messages บน Asterisk Console
ถ้าเราเห็นข้อความดังต่อไปนี้ใน Asterisk Log File หรือไม่ก็ Asterisk Console

3.1 D-Channel Up/Down

== Primary D-Channel on span 1 down
== Primary D-Channel on span 1 up
== Primary D-Channel on span 1 down
== Primary D-Channel on span 1 up
== Primary D-Channel on span 1 down
== Primary D-Channel on span 1 up

มันบอกเราว่า ISDN Layer 2 ไม่อัพครับ สาเหตุจากคอนฟิก Clocking/Signaling ไม่แม๊ตซ์กับอุปกรณ์ที่เอามาต่อด้วย โทรแจ้งผู้เกี่ยวข้องได้เลย

4. ไฟล์คอนฟิกที่เกี่ยวข้อง
ต่อไปนี้เป็นไฟล์คอนฟิกที่เกี่ยวข้องกับการ์ดนะครับ บางไฟล์ก็แก้ไขได้ บางไฟล์ก็ห้ามแก้ไข (เพราะว่า Elastix จะเขียนข้อมูลทับ)

4.1 /etc/dahdi/system.conf
ไฟล์นี้เขาห้ามแก้ไขนะครับ แต่จริงๆเราจะแก้ไขก็ได้ แต่ก็จำไว้ว่าถ้ามีการรันคำสั่ง dahdi_genconf ภายหลัง ค่าคอนฟิกที่แก้ไขมันก็จะเปลี่ยนกลับเป็นค่าดีฟอลท์

# Span 1: WCT1/0 "Digium Wildcard TE110P T1/E1 Card 0" (MASTER)
span=1,1,0,ccs,hdb3,crc4
# termtype: te
bchan=1-15,17-31
dchan=16
echocanceller=oslec,1-15,17-31

# Global data

loadzone = us
defaultzone = us

4.2 /etc/dahdi/genconf_parameters
ไฟล์นี้แก้ไขได้ ใส่พารามิเตอร์ที่ต้องการให้เอาไปใช้งาน โดยเฉพาะเวลาที่เรากดปุ่ม "Detect New Hardware" ในหน้าเว็บ "Hardware Detector"
[/code]
context_lines from-zaptel
echo_can oslec
bri_sig_style bri
[/code]

4.3 /etc/asterisk/chan_dahdi.conf
ไฟล์นี้แก้ไขได้

โค้ด: เลือกทั้งหมด
[trunkgroups]

[channels]
context=from-zaptel
signalling=fxs_ks
rxwink=300              ; Atlas seems to use long (250ms) winks
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=no
faxdetect=incoming
echotraining=800
rxgain=0.0
txgain=0.0
callgroup=1
pickupgroup=1

;Uncomment these lines if you have problems with the disconection of your analog lines
busydetect=yes
busycount=3
busypattern=500,500

immediate=no

#include dahdi-channels.conf
#include chan_dahdi_additional.conf


5. ต่อสาย E1 เข้ากับอุปกรณ์ E1 อื่นๆที่จะทดสอบ
เช่นต่อกับ E1 ของตู้สาขาหรือชุมสายโทรศัพท์ ใช้สาย Lan ธรรมดาๆนี่แหล่ะครับ เข้าหัวแบบนี้

1 (Rx-) --- 1 (Rx-)
2 (Rx+) --- 2 (Rx+)
3 (Tx+) --- 3 (Tx+)
4 (Tx-) --- 4 (TX-)

แต่ถ้าเอาไปต่อกับพอร์ต E1 ของ VoIP Gateway เช่น Cisco, Quintum, E1 Card เครื่องอื่น หรือ E1 พอร์ตอื่นบนเครื่องเดียวกัน ต้องไขว้สายนะครับ แบบนี้

1 (Rx-) --- 4 (Tx-)
2 (Rx+) --- 5 (Tx+)
4 (Tx-) --- 1 (Rx-)
5 (Tx+) --- 2 (Rx+)

ถ้าเข้าสายได้แบบนี้ จะเอาด้านไหนต่อเข้าการ์ด TE110P ก็เวอร์คหมดครับ ถ้าสายถูกต้องและอุปกรณ์ปลายทางคอนฟิกแล้ว ไฟด้านหลังการ์ดจะเปลี่ยนจากสีแดง (Red Alarm) เป็นสีเขียว (Normal)

6. คอนฟิก Elastix ให้โทรออกทางพอร์ต E1

6.1 คอนฟิก Trunks
"PBX" -> "Trunks" -> "Add ZAP Trunk (DAHDI compatible mode)"

รูปภาพ

ช่อง Zap Identifer (trunk name) ใส่หมายเลข Channels (ดูหมายเลขจากหน้าเว็บ Hardware Detector ซึ่งมีตั้งแต่ 1 จนถึง 31 จะใส่ 0 หรือ 16 ไม่ได้นะครับ ห้าม) ถ้าต้องการโทรออกโดยไม่ระบุ Channel ซึ่งหมายความว่าให้ Asterisk เลือก Channel ที่ว่างอยู่ให้เอง ก็ระบุเป็นหมายเลข Group แทนครับ ดูหมายเลข Group ได้จากไฟล์ /etc/asterisk/dahdi-channels.conf ตามนี้

; Span 1: WCT1/0 "Digium Wildcard TE110P T1/E1 Card 0" (MASTER) HDB3/CCS/CRC4 RED
group=0,11
context=from-zaptel
switchtype = euroisdn
signalling = pri_cpe
channel => 1-15,17-31
context = default
group = 63

ดูอันที่เป็นการ์ด TE110P และดูหมายเลข Group ที่บรรทัด group บรรทัดแรกนะครับ ซึ่งในตัวอย่างที่ผมก๊อบมาให้ดูมีตัวเลข 0 และ 11 อยู่ ซึ่งหมายความว่าสำหรับการ์ดนี้จะระบุหมายเลข Group เป็น 0 หรือ 11 ก็ได้ แต่เวลาเอาไปใส่ในช่อง Zap Identifer จะใส่ตัวเลขอย่างเดียวไม่ได้นะครับ เพราะเดี๋ยว Asterisk จะเข้าใจว่าเป็นหมายเลข Channel แล้วก็จะโทรออกแต่ Channel นั้นอย่างเดียว

วิธีระบุหมายเลข Group เราต้องใส่ตัวอักษรนำหน้าหมายเลข Group เช่น G0, g0, R0 หรือไม่ก็ r0 ซึ่งจะใช้ G หรือ g หรือ R หรือ r นั้นก็อยู่ที่ว่าจะให้ Asterisk เลือก Channel ใน Group ยังไง ตามนี้ครับ

G เลือก channel มากที่สุดก่อน
g เลือก channel น้่อยที่สุดก่อน
R เลือกแบบ round-robin โดยเริ่มจาก channel ที่มากที่สุดก่อน
r เลือกแบบ round-robin โดยเริ่มจาก channel ที่น้อยที่สุดก่อน

ซึ่ง Channel ที่ใช้งานได้สำหรับการ์ด TE110P และในเครื่องใส่แค่การ์ดเดียวก็คือ 1-15 และ 17-31 ครับ รวม 30 channels หรือ 30 timeslots พอดี

6.2 คอนฟิก Outbound Routes
ผมกำหนดว่าจากเบอร์ Extension ใน Elastix ให้กด 0 โทรออกทางพอร์ต E1
"PBX" -> "Outbound Route" -> "Add Route"

รูปภาพ

ช่อง "Trunk sequence" เลือก "ZAP/G0" ที่สร้างไว้

5.3 ทดสอบโทรออก
จาก Softphone ผมกด 029009000 นี่เป็นข้อความใน Asterisk Console ครับ

โค้ด: เลือกทั้งหมด
    -- Executing [029009000@from-internal:1] Macro("SIP/200-00000042", "user-callerid,SKIPTTL,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("SIP/200-00000042", "AMPUSER=200") in new stack
    -- Executing [s@macro-user-callerid:2] GotoIf("SIP/200-00000042", "0?report") in new stack
    -- Executing [s@macro-user-callerid:3] ExecIf("SIP/200-00000042", "1?Set(REALCALLERIDNUM=200)") in new stack
    -- Executing [s@macro-user-callerid:4] Set("SIP/200-00000042", "AMPUSER=200") in new stack
    -- Executing [s@macro-user-callerid:5] Set("SIP/200-00000042", "AMPUSERCIDNAME=bkk") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("SIP/200-00000042", "0?report") in new stack
    -- Executing [s@macro-user-callerid:7] Set("SIP/200-00000042", "AMPUSERCID=200") in new stack
    -- Executing [s@macro-user-callerid:8] Set("SIP/200-00000042", "CALLERID(all)="bkk" <200>") in new stack
    -- Executing [s@macro-user-callerid:9] ExecIf("SIP/200-00000042", "0?Set(CHANNEL(language)=)") in new stack
    -- Executing [s@macro-user-callerid:10] GotoIf("SIP/200-00000042", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,19)
    -- Executing [s@macro-user-callerid:19] NoOp("SIP/200-00000042", "Using CallerID "bkk" <200>") in new stack
    -- Executing [029009000@from-internal:2] Set("SIP/200-00000042", "_NODEST=") in new stack
    -- Executing [029009000@from-internal:3] Macro("SIP/200-00000042", "record-enable,200,OUT,") in new stack
    -- Executing [s@macro-record-enable:1] GotoIf("SIP/200-00000042", "1?check") in new stack
    -- Goto (macro-record-enable,s,4)
    -- Executing [s@macro-record-enable:4] ExecIf("SIP/200-00000042", "0?MacroExit()") in new stack
    -- Executing [s@macro-record-enable:5] GotoIf("SIP/200-00000042", "0?Group:OUT") in new stack
    -- Goto (macro-record-enable,s,15)
    -- Executing [s@macro-record-enable:15] GotoIf("SIP/200-00000042", "0?IN") in new stack
    -- Executing [s@macro-record-enable:16] ExecIf("SIP/200-00000042", "1?MacroExit()") in new stack
    -- Executing [029009000@from-internal:4] Macro("SIP/200-00000042", "dialout-trunk,5,029009000,,") in new stack
    -- Executing [s@macro-dialout-trunk:1] Set("SIP/200-00000042", "DIAL_TRUNK=5") in new stack
    -- Executing [s@macro-dialout-trunk:2] GosubIf("SIP/200-00000042", "0?sub-pincheck,s,1") in new stack
    -- Executing [s@macro-dialout-trunk:3] GotoIf("SIP/200-00000042", "0?disabletrunk,1") in new stack
    -- Executing [s@macro-dialout-trunk:4] Set("SIP/200-00000042", "DIAL_NUMBER=029009000") in new stack
    -- Executing [s@macro-dialout-trunk:5] Set("SIP/200-00000042", "DIAL_TRUNK_OPTIONS=tr") in new stack
    -- Executing [s@macro-dialout-trunk:6] Set("SIP/200-00000042", "OUTBOUND_GROUP=OUT_5") in new stack
    -- Executing [s@macro-dialout-trunk:7] GotoIf("SIP/200-00000042", "0?nomax") in new stack
    -- Executing [s@macro-dialout-trunk:8] GotoIf("SIP/200-00000042", "0?chanfull") in new stack
    -- Executing [s@macro-dialout-trunk:9] GotoIf("SIP/200-00000042", "0?skipoutcid") in new stack
    -- Executing [s@macro-dialout-trunk:10] Set("SIP/200-00000042", "DIAL_TRUNK_OPTIONS=") in new stack
    -- Executing [s@macro-dialout-trunk:11] Macro("SIP/200-00000042", "outbound-callerid,5") in new stack
    -- Executing [s@macro-outbound-callerid:1] ExecIf("SIP/200-00000042", "0?Set(CALLERPRES()=)") in new stack
    -- Executing [s@macro-outbound-callerid:2] ExecIf("SIP/200-00000042", "0?Set(REALCALLERIDNUM=200)") in new stack
    -- Executing [s@macro-outbound-callerid:3] GotoIf("SIP/200-00000042", "1?normcid") in new stack
    -- Goto (macro-outbound-callerid,s,6)
    -- Executing [s@macro-outbound-callerid:6] Set("SIP/200-00000042", "USEROUTCID="bkk" <200>") in new stack
    -- Executing [s@macro-outbound-callerid:7] Set("SIP/200-00000042", "EMERGENCYCID=") in new stack
    -- Executing [s@macro-outbound-callerid:8] Set("SIP/200-00000042", "TRUNKOUTCID=") in new stack
    -- Executing [s@macro-outbound-callerid:9] GotoIf("SIP/200-00000042", "1?trunkcid") in new stack
    -- Goto (macro-outbound-callerid,s,12)
    -- Executing [s@macro-outbound-callerid:12] ExecIf("SIP/200-00000042", "0?Set(CALLERID(all)=)") in new stack
    -- Executing [s@macro-outbound-callerid:13] ExecIf("SIP/200-00000042", "1?Set(CALLERID(all)=bkk <200>)") in new stack
    -- Executing [s@macro-outbound-callerid:14] ExecIf("SIP/200-00000042", "0?Set(CALLERID(all)=)") in new stack
    -- Executing [s@macro-outbound-callerid:15] ExecIf("SIP/200-00000042", "0?Set(CALLERPRES()=prohib_passed_screen)") in new stack
    -- Executing [s@macro-dialout-trunk:12] ExecIf("SIP/200-00000042", "1?AGI(fixlocalprefix)") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/fixlocalprefix
  == fixlocalprefix: Dialpattern X. matched. 029009000 -> 029009000
    -- <SIP/200-00000042>AGI Script fixlocalprefix completed, returning 0
    -- Executing [s@macro-dialout-trunk:13] Set("SIP/200-00000042", "OUTNUM=029009000") in new stack
    -- Executing [s@macro-dialout-trunk:14] Set("SIP/200-00000042", "custom=DAHDI/G0") in new stack
    -- Executing [s@macro-dialout-trunk:15] ExecIf("SIP/200-00000042", "0?Set(DIAL_TRUNK_OPTIONS=M(setmusic^))") in new stack
    -- Executing [s@macro-dialout-trunk:16] Macro("SIP/200-00000042", "dialout-trunk-predial-hook,") in new stack
    -- Executing [s@macro-dialout-trunk-predial-hook:1] MacroExit("SIP/200-00000042", "") in new stack
    -- Executing [s@macro-dialout-trunk:17] GotoIf("SIP/200-00000042", "0?bypass,1") in new stack
    -- Executing [s@macro-dialout-trunk:18] GotoIf("SIP/200-00000042", "0?customtrunk") in new stack
    -- Executing [s@macro-dialout-trunk:19] Dial("SIP/200-00000042", "DAHDI/G0/029009000,300,") in new stack
    -- Requested transfer capability: 0x00 - SPEECH
    -- Called G0/029009000
    -- DAHDI/31-1 is proceeding passing it to SIP/200-00000042
    -- DAHDI/31-1 is making progress passing it to SIP/200-00000042
    -- DAHDI/31-1 is making progress passing it to SIP/200-00000042
    -- DAHDI/31-1 answered SIP/200-00000042

วางสาย

    -- Executing [h@macro-dialout-trunk:1] Macro("SIP/200-00000042", "hangupcall,") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("SIP/200-00000042", "1?noautomon") in new stack
    -- Goto (macro-hangupcall,s,3)
    -- Executing [s@macro-hangupcall:3] NoOp("SIP/200-00000042", "TOUCH_MONITOR_OUTPUT=") in new stack
    -- Executing [s@macro-hangupcall:4] GotoIf("SIP/200-00000042", "1?noautomon2") in new stack
    -- Goto (macro-hangupcall,s,6)
    -- Executing [s@macro-hangupcall:6] NoOp("SIP/200-00000042", "MONITOR_FILENAME=") in new stack
    -- Executing [s@macro-hangupcall:7] GotoIf("SIP/200-00000042", "1?skiprg") in new stack
    -- Goto (macro-hangupcall,s,10)
    -- Executing [s@macro-hangupcall:10] GotoIf("SIP/200-00000042", "1?skipblkvm") in new stack
    -- Goto (macro-hangupcall,s,13)
    -- Executing [s@macro-hangupcall:13] GotoIf("SIP/200-00000042", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,15)
    -- Executing [s@macro-hangupcall:15] Hangup("SIP/200-00000042", "") in new stack
  == Spawn extension (macro-hangupcall, s, 15) exited non-zero on 'SIP/200-00000042' in macro 'hangupcall'
    -- Hungup 'DAHDI/31-1'
  == Spawn extension (macro-dialout-trunk, s, 19) exited non-zero on 'SIP/200-00000042' in macro 'dialout-trunk'
  == Spawn extension (from-internal, 029009000, 4) exited non-zero on 'SIP/200-00000042'


ก็เป็นอันว่าโทรออกทางพอร์ต E1 ได้ครับ

7. คอนฟิก Elastix ให้รับสายเข้าทางพอร์ต E1
มาคอนฟิกพอร์ต E1 ให้รับสายโทรเข้า สมมติว่าผมต่อสาย E1 กับชุมสายโทรศัพท์ ได้เบอร์ DID มา 100 เบอร์ ตั้งแต่เบอร์ 023456700 - 99 ในจำนวน 100 เบอร์นี้ (แต่ E1 ใช้ได้แค่ 30 แชนแนล) ผมจะให้ 023456700 เป็นเบอร์โทรเข้า ให้โทรเข้าได้ 5 สายพร้อมกัน และให้ใช้ E1 แชนแนลเริ่มจากหลังสุด ก็คอนฟิกแบบนี้ครับ

7.1 เช็คไฟล์ /etc/asterisk/dahdi-channels.conf
ว่ามีบรรทัด context=from-zaptel หรือยัง อันนี้สำคัญนะครับสำหรับการคอนฟิกการ์ดใน Elastix ไม่อย่างนั้นจะโทรไม่เข้า

; Span 1: WCT1/0 "Digium Wildcard TE110P T1/E1 Card 0" (MASTER) HDB3/CCS/CRC4 RED
group=0,11
context=from-zaptel

7.2 คอนฟิก ZAP Channel DIDs
จะคอนฟิกให้ Asterisk Card ไม่ว่าจะเป็น Analog หรือ Digital ให้รับสายเข้าได้ ต้องมาคอนฟิกที่เมนูนี้ตลอดครับ
"PBX" -> "ZAP Channel DIDs"
ใส่ channel ที่ต้องการใช้งานและเบอร์โทรศัพท์ เนื่องจากใส่ได้ทีละ channel และใส่เป็น group ไม่ได้ เราก็ต้องทำทีละแชนแนลครับ จนครบ 5 แชนแนล

รูปภาพ

...

รูปภาพ

จะเริ่มจาก channel ไหนก็ไม่ผิดกติกาครับ แต่ขอให้มีจำนวนแชนแนลครบ

7.3 สร้าง Inbound Routes
สร้างไว้รับเบอร์ 023456700 ที่จะมีคนโทรเข้ามา เพราะเราต้องโอนสายคนที่โทรเข้ามาไปยังบริการที่เราจัดเตรียมไว้ให้ เช่น IVR, Groups เป็นต้น แต่กรณีของผมจะเอาไว้เป็นเบอร์ Hotline ครับคือโทรเข้ามาแล้วให้มาดังที่เบอร์ Extension 200 ของผมเลย

[http://www.voip4share.com/images/shared/e1-did-incoming.png[/img]

6.4 ทดสอบโทรเข้า
ผมโทรจากเบอร์ 0851619439 เข้ามาที่ E1 นี้ก็จะวิ่งเข้ามาที่เบอร์ Extension 200 เลยครับ อันนี้เป็นข้อความบน Asterisk Console
โค้ด: เลือกทั้งหมด
    -- Accepting call from '0851619439' to '023456700' on channel 0/1, span 1
    -- Executing [023456700@from-zaptel:1] Set("DAHDI/1-1", "DID=023456700") in new stack
    -- Executing [023456700@from-zaptel:2] Goto("DAHDI/1-1", "s,1") in new stack
    -- Goto (from-zaptel,s,1)
    -- Executing [s@from-zaptel:1] NoOp("DAHDI/1-1", "Entering from-zaptel with DID == 023456700") in new stack
    -- Executing [s@from-zaptel:2] Ringing("DAHDI/1-1", "") in new stack
    -- Executing [s@from-zaptel:3] Set("DAHDI/1-1", "DID=023456700") in new stack
    -- Executing [s@from-zaptel:4] NoOp("DAHDI/1-1", "DID is now 023456700") in new stack
    -- Executing [s@from-zaptel:5] GotoIf("DAHDI/1-1", "1?zapok:notzap") in new stack
    -- Goto (from-zaptel,s,8)
    -- Executing [s@from-zaptel:8] NoOp("DAHDI/1-1", "Is a Zaptel Channel") in new stack
    -- Executing [s@from-zaptel:9] Set("DAHDI/1-1", "CHAN=1-1") in new stack
    -- Executing [s@from-zaptel:10] Set("DAHDI/1-1", "CHAN=1") in new stack
    -- Executing [s@from-zaptel:11] Macro("DAHDI/1-1", "from-zaptel-1,023456700,1") in new stack
    -- Executing [s@macro-from-zaptel-1:1] NoOp("DAHDI/1-1", "Entering macro-from-zaptel-1 with DID = 023456700 and setting to: 023456789") in new stack
    -- Executing [s@macro-from-zaptel-1:2] Set("DAHDI/1-1", "__FROM_DID=023456789") in new stack
    -- Executing [s@macro-from-zaptel-1:3] Goto("DAHDI/1-1", "from-trunk,023456789,1") in new stack
    -- Goto (from-trunk,023456789,1)
  == Channel 'DAHDI/1-1' jumping out of macro 'from-zaptel-1'
    -- Executing [023456789@from-trunk:1] Set("DAHDI/1-1", "__FROM_DID=023456789") in new stack
    -- Executing [023456789@from-trunk:2] Gosub("DAHDI/1-1", "app-blacklist-check,s,1") in new stack
    -- Executing [s@app-blacklist-check:1] GotoIf("DAHDI/1-1", "0?blacklisted") in new stack
    -- Executing [s@app-blacklist-check:2] Set("DAHDI/1-1", "CALLED_BLACKLIST=1") in new stack
    -- Executing [s@app-blacklist-check:3] Return("DAHDI/1-1", "") in new stack
    -- Executing [023456789@from-trunk:3] ExecIf("DAHDI/1-1", "1 ?Set(CALLERID(name)=0851619439)") in new stack
    -- Executing [023456789@from-trunk:4] Set("DAHDI/1-1", "__CALLINGPRES_SV=allowed_not_screened") in new stack
    -- Executing [023456789@from-trunk:5] Set("DAHDI/1-1", "CALLERPRES()=allowed_not_screened") in new stack
    -- Executing [023456789@from-trunk:6] Goto("DAHDI/1-1", "from-did-direct,200,1") in new stack
    -- Goto (from-did-direct,200,1)
    -- Executing [200@from-did-direct:1] Macro("DAHDI/1-1", "exten-vm,novm,200") in new stack
    -- Executing [s@macro-exten-vm:1] Macro("DAHDI/1-1", "user-callerid,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("DAHDI/1-1", "AMPUSER=0851619439") in new stack
    -- Executing [s@macro-user-callerid:2] GotoIf("DAHDI/1-1", "0?report") in new stack
    -- Executing [s@macro-user-callerid:3] ExecIf("DAHDI/1-1", "1?Set(REALCALLERIDNUM=0851619439)") in new stack
    -- Executing [s@macro-user-callerid:4] Set("DAHDI/1-1", "AMPUSER=") in new stack
    -- Executing [s@macro-user-callerid:5] Set("DAHDI/1-1", "AMPUSERCIDNAME=") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("DAHDI/1-1", "1?report") in new stack
    -- Goto (macro-user-callerid,s,10)
    -- Executing [s@macro-user-callerid:10] GotoIf("DAHDI/1-1", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:11] Set("DAHDI/1-1", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:12] GotoIf("DAHDI/1-1", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,19)
    -- Executing [s@macro-user-callerid:19] NoOp("DAHDI/1-1", "Using CallerID "0851619439" <0851619439>") in new stack
    -- Executing [s@macro-exten-vm:2] Set("DAHDI/1-1", "RingGroupMethod=none") in new stack
    -- Executing [s@macro-exten-vm:3] Set("DAHDI/1-1", "VMBOX=novm") in new stack
    -- Executing [s@macro-exten-vm:4] Set("DAHDI/1-1", "EXTTOCALL=200") in new stack
    -- Executing [s@macro-exten-vm:5] Set("DAHDI/1-1", "CFUEXT=") in new stack
    -- Executing [s@macro-exten-vm:6] Set("DAHDI/1-1", "CFBEXT=") in new stack
    -- Executing [s@macro-exten-vm:7] Set("DAHDI/1-1", "RT=""") in new stack
    -- Executing [s@macro-exten-vm:8] Macro("DAHDI/1-1", "record-enable,200,IN") in new stack
    -- Executing [s@macro-record-enable:1] GotoIf("DAHDI/1-1", "1?check") in new stack
    -- Goto (macro-record-enable,s,4)
    -- Executing [s@macro-record-enable:4] ExecIf("DAHDI/1-1", "0?MacroExit()") in new stack
    -- Executing [s@macro-record-enable:5] GotoIf("DAHDI/1-1", "0?Group:OUT") in new stack
    -- Goto (macro-record-enable,s,15)
    -- Executing [s@macro-record-enable:15] GotoIf("DAHDI/1-1", "1?IN") in new stack
    -- Goto (macro-record-enable,s,20)
    -- Executing [s@macro-record-enable:20] ExecIf("DAHDI/1-1", "1?MacroExit()") in new stack
    -- Executing [s@macro-exten-vm:9] Macro("DAHDI/1-1", "dial,,tr,200") in new stack
    -- Executing [s@macro-dial:1] GotoIf("DAHDI/1-1", "1?dial") in new stack
    -- Goto (macro-dial,s,3)
    -- Executing [s@macro-dial:3] AGI("DAHDI/1-1", "dialparties.agi") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
dialparties.agi: Starting New Dialparties.agi
dialparties.agi: Caller ID name is '0851619439' number is '0851619439'
dialparties.agi: Methodology of ring is  'none'
    -- dialparties.agi: Added extension 200 to extension map
    -- dialparties.agi: Extension 200 cf is disabled
    -- dialparties.agi: Extension 200 do not disturb is disabled
dialparties.agi: EXTENSION_STATE: 0 (NOT_INUSE)
dialparties.agi: Extension 200 has ExtensionState: 0
    -- dialparties.agi: Checking CW and CFB status for extension 200
    -- dialparties.agi: dbset CALLTRACE/200 to 0851619439
    -- dialparties.agi: Filtered ARG3: 200
    -- <DAHDI/1-1>AGI Script dialparties.agi completed, returning 0
    -- Executing [s@macro-dial:7] Dial("DAHDI/1-1", "SIP/200,,tr") in new stack
  == Using SIP RTP TOS bits 184
  == Using SIP RTP CoS mark 5
    -- Called 200
    -- SIP/200-00000047 is ringing
    -- SIP/200-00000047 is ringing
    -- SIP/200-00000047 answered DAHDI/1-1
    -- Channel 0/1, span 1 got hangup request, cause 16
    -- Executing [h@macro-dial:1] Macro("DAHDI/1-1", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("DAHDI/1-1", "1?noautomon") in new stack
    -- Goto (macro-hangupcall,s,3)
    -- Executing [s@macro-hangupcall:3] NoOp("DAHDI/1-1", "TOUCH_MONITOR_OUTPUT=") in new stack
    -- Executing [s@macro-hangupcall:4] GotoIf("DAHDI/1-1", "1?noautomon2") in new stack
    -- Goto (macro-hangupcall,s,6)
    -- Executing [s@macro-hangupcall:6] NoOp("DAHDI/1-1", "MONITOR_FILENAME=") in new stack
    -- Executing [s@macro-hangupcall:7] GotoIf("DAHDI/1-1", "1?skiprg") in new stack
    -- Goto (macro-hangupcall,s,10)
    -- Executing [s@macro-hangupcall:10] GotoIf("DAHDI/1-1", "1?skipblkvm") in new stack
    -- Goto (macro-hangupcall,s,13)
    -- Executing [s@macro-hangupcall:13] GotoIf("DAHDI/1-1", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,15)
    -- Executing [s@macro-hangupcall:15] Hangup("DAHDI/1-1", "") in new stack
  == Spawn extension (macro-hangupcall, s, 15) exited non-zero on 'DAHDI/1-1' in macro 'hangupcall'
  == Spawn extension (macro-dial, s, 7) exited non-zero on 'DAHDI/1-1' in macro 'dial'
  == Spawn extension (macro-exten-vm, s, 9) exited non-zero on 'DAHDI/1-1' in macro 'exten-vm'
  == Spawn extension (from-did-direct, 200, 1) exited non-zero on 'DAHDI/1-1'
    -- Hungup 'DAHDI/1-1'


สังเกตุนะครับว่าตอนคอนฟิก Zap channel DIDs อุตส่าห์ตั้งไว้เป็นอย่างดีว่าใช้ Channel 27-31 แต่พอใช้จริงปรากฏว่าเป็น Channel 1 โดยสังเกตุจาก DAHDI/1-1 ที่เป็นแบบนี้ก็เพราะว่าในการใช้งานจริงนั้นเวลามีคนโทรเข้ามา ก่อนที่จะมาถึงพอร์ต E1 มันจะผ่านชุมสายโทรศัพท์มาก่อน ซึ่งที่ชุมสายเขาจะเลือก channel ของเขาที่ยังว่างอยู่ เราไปบังคับเขาไม่ได้ครับ ปกติเขาจะเลือก channel ลำดับล่างๆก่อน

จากคอนเซ็ปต์การเลือก channel ของชุมสาย เราเอามาใช้งานในการเลือก channel ในการโทรออกได้นะครับ (สมมติว่า E1 นี้ใช้ทั้งรับสายเข้าและโทรออก) เรารู้ว่าตอนโทรเข้าชุมสายจะเลือก channel แรกๆก่อน ดังนั้นตอนโทรออกเราก็เลือก channel บนๆก่อน มันก็จะไม่ชนกัน

ก็เป็นอันว่าบทความเกี่ยวกับการติดตั้งและใช้งานการ์ด E1 TE110P ก็มีเพียงเท่านี้ครับ

ขอบคุณ http://www.buyasteriskcard.com ที่เอื้อเฟื้อการ์ดมาให้ทดสอบครับ

บทความที่เกี่ยวข้อง
Elastix
วิธีการติดตั้ง Elastix 2.0
OSLEC - Line Echo Canceller สำหรับ Asterisk
ติดตั้งและใช้งานการ์ด X100P
เทคนิคการติดตั้งการ์ด 4 E1 TE405P บน Elastix
เทคนิคการแก้ปัญหา DTMF บนการ์ด Asterisk
เทคนิคการดีบัคพอร์ต E1 PRI ด้วยคำสั่ง pri
เทคนิคการติดตั้งและใช้งานการ์ด 2 E1 บน Elastix
ขอบคุณสำหรับทุกคำถามและทุกคำตอบครับ
nuiz
Diamond Member
 
โพสต์: 1675
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

Re: เทคนิคการติดตั้งและใช้งานการ์ด Digital E1 - TE110P

โพสต์โดย vacharaa » 28 มิ.ย. 2011 10:33

รบกวนสอบถามราคา card ครับ
vacharaa
Bronz Member
 
โพสต์: 18
ลงทะเบียนเมื่อ: 04 ก.พ. 2010 21:58

Re: เทคนิคการติดตั้งและใช้งานการ์ด Digital E1 - TE110P

โพสต์โดย nuiz » 06 ก.ค. 2011 11:27

vacharaa เขียน:รบกวนสอบถามราคา card ครับ


รบกวนดูที่เว็บ www.buyasteriskcard.com ครับ
ขอบคุณสำหรับทุกคำถามและทุกคำตอบครับ
nuiz
Diamond Member
 
โพสต์: 1675
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

Re: เทคนิคการติดตั้งและใช้งานการ์ด Digital E1 - TE110P

โพสต์โดย apc » 23 ก.ย. 2011 22:17

ทำไม elastix 2 ของผมมันไม่มี dropdown ให้เลือกอ่ะครับ??
apc
Silver Member
 
โพสต์: 30
ลงทะเบียนเมื่อ: 20 ก.ย. 2011 14:31

Re: เทคนิคการติดตั้งและใช้งานการ์ด Digital E1 - TE110P

โพสต์โดย nuiz » 23 ก.ย. 2011 23:12

apc เขียน:ทำไม elastix 2 ของผมมันไม่มี dropdown ให้เลือกอ่ะครับ??


เลือกอะไร ตรงไหน ครับ ?
ขอบคุณสำหรับทุกคำถามและทุกคำตอบครับ
nuiz
Diamond Member
 
โพสต์: 1675
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

Re: เทคนิคการติดตั้งและใช้งานการ์ด Digital E1 - TE110P

โพสต์โดย apc » 25 ก.ย. 2011 02:08

nuiz เขียน:
apc เขียน:ทำไม elastix 2 ของผมมันไม่มี dropdown ให้เลือกอ่ะครับ??


เลือกอะไร ตรงไหน ครับ ?

รูปข้างล่างนี้มี drop down ให้เลือก แต่เครื่องของผม ไม่มีแบบนี้ครับ
รูปภาพ
apc
Silver Member
 
โพสต์: 30
ลงทะเบียนเมื่อ: 20 ก.ย. 2011 14:31

Re: เทคนิคการติดตั้งและใช้งานการ์ด Digital E1 - TE110P

โพสต์โดย nuiz » 25 ก.ย. 2011 13:31

น่าจะเป็นที่ elastix คนละเวอร์ชั่น ผมใช้ 2.0 ครับ
แต่ถึงจะไม่มีให้เลือกเราก็ไปคอนฟิกในไฟล์ /etc/dahdi/system.conf ได้ครับ เพราะเวลาเราเลือก echo canceller ในเว็บ มันก็จะไปแก้ไขในไฟล์นี้ให้หน่ะครับ
ขอบคุณสำหรับทุกคำถามและทุกคำตอบครับ
nuiz
Diamond Member
 
โพสต์: 1675
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33


ย้อนกลับไปยัง Elastix - Unified Communications Software

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

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