Skip to content
May 9 17

Replace and Install New Speakers in BMW E46 3 Series Sedan 1999-2005

by Jon

After months of searching for a new project car I found a 2004 330i ZHP sedan with just a tad over 100k miles. I found the vehicle at a BMW dealer in Texas from a local trade-in for a 2-series coupe. After quickly making a deal with the selling dealer the car was on a hauler destined for my home address. Within a few weeks of ownership I had a long to-do list of projects with one of them being a speaker update. I reviewed a few different off the shelf options and finally decided on assembling my own parts.

To gather the parts required I relied on parts express who sells a variety of speaker parts. I am very pleased with the results as the hi’s have a new-found vividness where the worn out OEM Harmon Kardon equipment could no longer reproduce.

Here are the list of parts I put together for my speaker replacements.

Front Doors
Tweeter: Dayton Audio ND20FB-4 Rear-Mount 3/4″ Soft Dome Neodymium Tweeter
Brand: Dayton Audio
Model: ND20FB-4
Part#: 275-035

Mid-range: Peerless by Tymphany NE65W-04 2″ Full Range Woofer
Brand: Peerless
Model: NE65W-04
Part#: 264-1046

Mid-bass: Dayton Audio ND140-4 5-1/4″ Aluminum Cone Midbass Driver 4 Ohm
Brand: Dayton Audio
Model: ND140-4
Part#: 290-216

Rear Door
Mid-range: Peerless by Tymphany NE65W-04 2″ Full Range Woofer
Brand: Peerless
Model: NE65W-04
Part#: 264-1046

Rear Deck
Mid-bass: Dayton Audio RS150P-4A 6″ Reference Paper Woofer 4 Ohm
Brand: Dayton Audio
Model: RS150P-4A
Part#: 295-563

Adapters Required
(2) Pair’s of Scosche SABW525

1. Starting with the front door remove the door card. There are numerous instructions online to remove the door cars and even some speaker companies have a detailed PDF for removal.

2. Install the 5.25 speaker into the SABW525 adapter to install on the front door. To create the connection for the OEM wiring I removed the connector from the OEM speaker and soldered it to the new speaker as seen in the pictures. The OEM screws were not long enough so I replaced them with 1/2 inch – 8/32 Philips head screws.





3. To install the mid-range in the front door I modified the circular housing by removing the raised vertical bar. This allowed me to push the circular speaker into place. Be careful not to break the lip of the housing, these are fragile. I placed the lip over the side of the table as seen in the picture. I also used the OEM connector by removing it from the stock speaker and soldering it to the new 2″ speaker.







4. Finally installing the tweeter was a bit different since the OEM speaker is integrated into a bracket so I was creative. I used the styrofoam padding as the mounting point for the tweeter and glued points on the rear mount of the tweeter to keep it in place. Instead of using the OEM connection points I cut them off and crimped standard speaker push on terminals.






5. To replace the speakers in the rear door, remove the door card then remove the stock speaker. For this speaker I used the OEM housing by gluing the rim of the speaker to the inside door mount. Once it set for an hour I re-installed it into the door card.


6. Finally to install the speaker in the rear deck you will again need the Scosche SABW525. This time however they need to be modified to fit correctly. I used a saw to remove the extended screw terminals as seen in the pictures. Once done it is easy to install the speaker in the factory location. I cut the OEM connector off the car and crimped on push on terminal connectors.







I will say the install was not very hard once I had all the proper hardware. The problems I ran into were not having the right screw sizes, having to modify the brackets for the rear deck and a few other items I pointed out. I am very happy with the results and hope this will help other enthusiasts save a few dollars by doing a little work instead of forking out for a plug and play setup.

Jan 31 16

How To: Compile and Install Asterisk on Rackspace Cloud Ubuntu Server

by Jon

Here is an easy to follow video tutorial on how to install Asterisk on a Rackspace Ubuntu cloud server. I am using the following commands to complete the install below.

apt-get update
apt-get upgrade -y && reboot
apt-get install linux-headers-$(uname -r)
apt-get install build-essential wget libssl-dev libncurses5-dev libnewt-dev  libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev
cd /usr/src/
tar zxvf dahdi-linux-complete*
tar zxvf libpri*
tar zxvf asterisk*
cd /usr/src/dahdi-linux-complete*
make && make install && make config
cd /usr/src/libpri*
make && make install
cd /usr/src/asterisk*
./configure && make menuselect && make && make install && make config && make samples
/etc/init.d/dahdi start
/etc/init.d/asterisk start
asterisk -rvvv
Dec 29 15

How To: Asterisk Robo Call Screening with DTMF Digit Press

by Jon

If you are looking for a way of screening inbound robo calls I have a great script for you. Using a quick little app you can require inbound callers to press 1 or any digit in order for the call to ring through to your phone. Otherwise the caller gets hung up on. All the audio recordings I used are standard files included with Asterisk core or extra audio files.

See below for the context.

exten => 6175551212,1,Goto(call-screening,s,1)

exten => s,1,Answer(1000)
 same => n,Set(NUMINVALID=1)
 same => n,Set(TIMEOUT(digit)=3)
 same => n,Set(TIMEOUT(response)=3)
 same => n,Ringing
 same => n,Wait(3)

 same => n(catch-all),NoOp(catch-all-inbound-calls)
 same => n,Read(digit,privacy-unident&vm-onefor&vm-theperson,1,,2,4)
 same => n,GotoIf($["${digit}" != "1"]?i,1) ; change the 1 in quotes to the digit you want callers to press.
 same => n,Playback(one-moment-please)

 same => n,Dial(SIP/102,45,m)

 same => n(endcall),Playback(not-taking-your-call)
 same => n,Playback(vm-goodbye)
 same => n,Hangup

 same => n,Wait(1)
 same => n,Hangup()

exten => i,1,NoOp(invalid-option)
exten => i,n,Gotoif($["${NUMINVALID}" < "3"]?:call-screening,s,endcall) exten => i,n,Set(NUMINVALID=$[${NUMINVALID}+1]})
exten => i,n,Playback(option-is-invalid)
exten => i,n,Goto(call-screening,s,catch-all)
Nov 14 15

Using Gmail Email Accounts to Send Automated Emails or Voicemail to Email Asterisk

by Jon

Recently Google updated some of its security settings so the tutorial I created around doing Asterisk Voicemail to Email is broken when a new setting is enabled. Lucky for everyone looking to use a Gmail account I have created this new post to help you.

If you would like to read about this new setting here is a link:

The first thing you will want to do is login to the gmail account you plan on using for voicemail to email. Once you have done that follow the directions below.

Follow along below for your Asterisk voicemail to email with a Gmail account using the postfix application.

1. Visit the following URL to enable less secure apps:

You should see a screen with on or off, make sure to select on as seen in the screenshot.

2. We do need to install a couple of extra packages even if postfix is already installed. I also am installing postfix just in case you didn’t have it installed.

yum -y install postfix mailx cyrus-sasl-plain

3. You need to create a new file with your Gmail account smtp server and credentials in the following format.

nano /etc/postfix/sasl_passwd

Paste in the below text and change the email address to your gmail email and enter in your password.

4. Once done doing that we want to hash your password file so it is not human readable.

 postmap hash:/etc/postfix/sasl_passwd

5. The next step is to configure postfix to use this new password file. Open the /etc/postfix/ file using a text editor then scroll down to the bottom and paste in the following code.

nano /etc/postfix/
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
# Secure channel TLS with exact nexthop name match.
smtp_tls_security_level = secure
smtp_tls_mandatory_protocols = TLSv1
smtp_tls_mandatory_ciphers = high
smtp_tls_secure_cert_match = nexthop
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
relayhost =


6. Restart the postfix service.

service postfix restart

7. Now you can send a test email using the mail command in the following format.

Subject: Hello World
. (followed by enter key to send and exit)


8. Once you send that check your email to see if you received the email and as long as that is the case you can go ahead and remove the text password file.

rm /etc/postfix/sasl_passwd

9. Now you are all set, by default Asterisk will use the default mailing program so my voicemail.conf file looks like so.

[root@localhost ~]# cat /etc/asterisk/voicemail.conf
format = wav
serveremail = asterisk
attach = yes
skipms = 3000
maxsilence = 10
maxmessage = 300
review = yes
silencethreshold = 128
maxlogins = 3
emaildateformat = %A, %B %d, %Y at %r
sendvoicemail = yes
exitcontext = vm-operator
operator = yes
fromstring = PBX Voicemail

Hope you find this helpful and it works for you. Please let me know if there are any issues so I can correct my tutorial. I like my visitors to get their questions answered with a single visit, not having to bounce around from website to website trying to solve a problem.

Oct 10 15

Solution to Asterisk CLI Error: No such command ‘originate’

by Jon

Have you tried to use the originate command from the Asterisk CLI only to get the following error?

asterisk*CLI> originate
No such command 'originate' (type 'core show help originate' for other possible commands)

Well I just got this for the first time recently and it took me far too long to figure out the problem so I wanted to share with everyone.

Turns out the syntax of the command has changed recently and the CLI now requires users to put channel in front of originate.

Here is an example of how it works:

asterisk*CLI> channel originate SIP/102 extension *97@internal


Sep 30 15

How To: Install Asterisk on Centos Rackspace Cloud Server with Dahdi Video

by Jon

Learn how to install Asterisk on a Rackspace cloud server. This is an easy to follow step by step guide with all the commands you need to compile and install Asterisk with Dahdi.

Aug 20 15

How To: Install and Compile Asterisk Certified 11 on Rackspace Cloud Centos 5

by Jon

I use Rackspace for most of my cloud servers since their support is second to none. They are always very helpful in getting me answers or even going above and beyond what they technically support. So because of this I often build Asterisk servers up there to test with or even for production use. Here is an easy to follow guide on how to build an Asterisk 11 server using Centos 5 image. You can just copy and paste the commands one by one or add them to a text file and run as a script.

Note: This step by step guide is for 64bit operating systems, if you use a 32bit Centos 5 server it will fail.

yum -y update
sed -i s/SELINUX=permissive/SELINUX=disabled/g /etc/selinux/config

Then we need to install some packages:

yum -y install bind-utils curl-devel doxygen gcc gcc-c++ gtk+ gtk+-devel gnutls-devel httpd kernel-xen kernel-xen-devel kernel kernel-devel kernel-smp-devel kernel-smp libxml2-devel libtermcap-devel libtool-ltdl libtool-ltdl-devel make mysql mysql-server mysql-devel mysql-server-devel mysql-connector-odbc net-snmp-devel neon-devel newt-devel ncurses-devel ntp openssl-devel openssl perl-suidperl php-mysql system-config-securitylevel screen texinfo unixODBC unixODBC-devel wget

Now we can do the heavy lifting of installing Asterisk, Dahdi and LibPRI.

cd /usr/src
tar zxf certified-asterisk-11.6-current.tar.gz 
tar zxf dahdi-linux-complete-current.tar.gz 
tar zxf libpri-1.4-current.tar.gz
cd /usr/src/dahdi-linux-complete-*
make && make install && make config
cd /usr/src/libpri-1.4*
make && make install
cd /usr/src/certified-asterisk-11.6-*
./configure --libdir=/usr/lib64 && make menuselect && make && make install
make samples
make config
service dahdi start
service asterisk start

All done! It really is that easy 😉

Jul 2 15

Asterisk Click to Call from Webpage using the AMI Commands

by Jon

Are you trying to figure out how to set up click to call from a webpage using the Asterisk AMI? Well look no further, this is an easy to follow guide on exactly how to do it.

So before we start a couple of things you have to know about my environment. First I am hosting the webpage on the Asterisk server for the click to call so I have Apache installed and running, second I have port 80 open on the Asterisk server firewall so I can allow external requests.

So first thing you need to do is configure your Asterisk manager config file with a username who can originate the call.


displaysystemname = yes
enabled = yes
webenabled = yes
port = 5038

; Authorization for various classes
read = system,call,log,verbose,command,agent,user,config
write = system,call,log,verbose,command,agent,user,config

Once you create a user and password, in this case I have the username “clickadmin” then you can start writing the php code.


$extension = $_REQUEST['internalnum'];
$dialphonenumber = $_REQUEST['outboundnum'];

$timeout = 10;
$asterisk_ip = "";

$socket = fsockopen($asterisk_ip,"5038", $errno, $errstr, $timeout);
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: clickadmin\r\n");
fputs($socket, "Secret: asdf1234S3\r\n\r\n");


echo $wrets;

fputs($socket, "Action: Originate\r\n" );
fputs($socket, "Channel: SIP/$extension\r\n" );
fputs($socket, "Exten: $dialphonenumber\r\n" );
fputs($socket, "Context: dial-outbound\r\n" ); // very important to change to your outbound context
fputs($socket, "Priority: 1\r\n" );
fputs($socket, "Async: yes\r\n\r\n" );

echo $wrets;

So that webpage will respond to url post of http://[ip address]/clickcall/index.php?internalnum=101&outboundnum=4075551234

It will first place a phone call to the extension number, in the example case would be 101. Once extension 101 answers that call it will then place the outbound leg of the call to phone number 4075551234.

Jun 19 15

Udemy Asterisk Training Course Survey

by Jon

I love to hear from my students so today I am posting a survey for you to fill me in on what you want more of. Tell me what you like and what you don’t like, or what you want to see more of. Say whatever you want, I am here to listen to you.

Jun 15 15

How to Install and Compile Asterisk 13 on CentOS 7

by Jon

I just created a video of how to install Asterisk 13 on CentOS 7 64bit so anyone can follow along. I take this step by step to make it very easy to install the latest version of Asterisk. See the commands below the video.

Udemy Asterisk Training Course for 95% Off

yum install automake bluez-libs-devel bzip2  corosynclib-devel gcc  gcc-c++ git gsm-devel jansson-devel libcurl-devel libedit-devel libical-devel libogg-devel libsrtp-devel libtool-ltdl-devel libuuid-devel libvorbis-devel libxml2-devel libxslt-devel lua-devel mariadb-devel nano ncurses-devel neon-devel net-snmp-devel newt-devel openldap-devel openssl-devel perl popt-devel postgresql-devel speex-devel sqlite-devel subversion unixODBC-devel uuid-devel wget

cd /usr/src/



bzip2 -d pjproject-2.4.tar.bz2

tar xvf pjproject-2.4.tar

cd pjproject-2.4

./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --libdir=/usr/lib64 --enable-shared --disable-video --disable-sound --disable-opencore-amr

make dep


make install


cd /usr/src

tar zxfv certified-asterisk-13.1-current.tar.gz 

cd certified-asterisk-13.1-cert2/


./configure --libdir=/usr/lib64

make menuselect


make install

make samples

make config

service asterisk start

asterisk -rvvv