mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@272684 65c4cc65-6c06-0410-ace0-fbb531ad65f3
		
			
				
	
	
		
			263 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \subsection{Introduction}
 | |
| 
 | |
| Asterisk Channel Driver to allow Bluetooth Cell/Mobile Phones to be used as FXO devices, and Headsets as FXS devices.
 | |
| 
 | |
| 
 | |
| \subsection{Features}
 | |
| 
 | |
| \begin{itemize}
 | |
| \item Multiple Bluetooth Adapters supported.
 | |
| \item Multiple phones can be connected.
 | |
| \item Multiple headsets can be connected.
 | |
| \item Asterisk automatically connects to each configured mobile phone / headset when it comes in range.
 | |
| \item CLI command to discover bluetooth devices.
 | |
| \item Inbound calls on the mobile network to the mobile phones are handled by Asterisk, just like inbound calls on a Zap channel.
 | |
| \item CLI passed through on inbound calls.
 | |
| \item Dial outbound on a mobile phone using Dial(Mobile/device/nnnnnnn) in the dialplan.
 | |
| \item Dial a headset using Dial(Mobile/device) in the dialplan.
 | |
| \item Application MobileStatus can be used in the dialplan to see if a mobile phone / headset is connected.
 | |
| \item Supports devicestate for dialplan hinting.
 | |
| \item Supports Inbound and Outbound SMS.
 | |
| \item Supports 'channel' groups for implementing 'GSM Gateways'
 | |
| \end{itemize}
 | |
| 
 | |
| 
 | |
| \subsection{Requirements}
 | |
| 
 | |
| In order to use chan\_mobile, you must have a working bluetooth subsystem on your Asterisk box.
 | |
| This means one or more working bluetooth adapters, and the BlueZ packages.
 | |
| 
 | |
| Any bluetooth adapter supported by the Linux kernel will do, including usb bluetooth dongles.
 | |
| 
 | |
| The BlueZ package you need is bluez-utils. If you are using a GUI then you might want to install bluez-pin also.
 | |
| You also need libbluetooth, and libbluetooth-dev if you are compiling Asterisk from source.
 | |
| 
 | |
| You need to get bluetooth working with your phone before attempting to use chan\_mobile.
 | |
| This means 'pairing' your phone or headset with your Asterisk box. I dont describe how to do this here as the process
 | |
| differs from distro to distro. You only need to pair once per adapter.
 | |
| 
 | |
| See www.bluez.org for details about setting up Bluetooth under Linux.
 | |
| 
 | |
| 
 | |
| \subsection{Concepts}
 | |
| 
 | |
| chan\_mobile deals with both bluetooth adapters and bluetooth devices. This means you need to tell chan\_mobile about the
 | |
| bluetooth adapters installed in your server as well as the devices (phones / headsets) you wish to use.
 | |
| 
 | |
| chan\_mobile currently only allows one device (phone or headset) to be connected to an adapter at a time. This means you need
 | |
| one adapter for each device you wish to use simultaneously. Much effort has gone into trying to make multiple devices per adapter
 | |
| work, but in short it doesnt.
 | |
| 
 | |
| Periodically chan\_mobile looks at each configured adapter, and if it is not in use (i.e. no device connected) will initiate a
 | |
| search for devices configured to use this adapater that may be in range. If it finds one it will connect the device and it
 | |
| will be available for Asterisk to use. When the device goes out of range, chan\_mobile will disconnect the device and the adapter
 | |
| will become available for other devices.
 | |
| 
 | |
| 
 | |
| \subsection{Configuring chan\_mobile}
 | |
| 
 | |
| The configuration file for chan\_mobile is /etc/asterisk/mobile.conf. It is a normal Asterisk config file consisting of sections and key=value pairs.
 | |
| 
 | |
| See configs/mobile.conf.sample for an example and an explanation of the configuration.
 | |
| 
 | |
| 
 | |
| \subsection{Using chan\_mobile}
 | |
| 
 | |
| chan\_mobile.so must be loaded either by loading it using the Asterisk CLI, or by adding it to /etc/asterisk/modules.conf
 | |
| 
 | |
| Search for your bluetooth devices using the CLI command 'mobile search'. Be patient with this command as
 | |
| it will take 8 - 10 seconds to do the discovery. This requires a free adapter.
 | |
| 
 | |
| Headsets will generally have to be put into 'pairing' mode before they will show up here.
 | |
| 
 | |
| This will return something like the following :-
 | |
| 
 | |
| \begin{verbatim}
 | |
| *CLI> mobile search
 | |
| Address           Name                           Usable Type    Port
 | |
| 00:12:56:90:6E:00 LG TU500                       Yes    Phone   4
 | |
| 00:80:C8:35:52:78 Toaster                        No     Headset 0
 | |
| 00:0B:9E:11:74:A5 Hello II Plus                  Yes    Headset 1
 | |
| 00:0F:86:0E:AE:42 Daves Blackberry               Yes    Phone   7
 | |
| \end{verbatim}
 | |
| 
 | |
| This is a list of all bluetooth devices seen and whether or not they are usable with chan\_mobile.
 | |
| The Address field contains the 'bd address' of the device. This is like an ethernet mac address.
 | |
| The Name field is whatever is configured into the device as its name.
 | |
| The Usable field tells you whether or not the device supports the Bluetooth Handsfree Profile or Headset profile.
 | |
| The Type field tells you whether the device is usable as a Phone line (FXO) or a headset (FXS)
 | |
| The Port field is the number to put in the configuration file.
 | |
| 
 | |
| Choose which device(s) you want to use and edit /etc/asterisk/mobile.conf. There is a sample included
 | |
| with the Asterisk-addons source under configs/mobile.conf.sample.
 | |
| 
 | |
| Be sure to configure the right bd address and port number from the search. If you want inbound
 | |
| calls on a device to go to a specific context, add a context= line, otherwise the default will
 | |
| be used. The 'id' of the device [bitinbrackets] can be anything you like, just make it unique.
 | |
| 
 | |
| If you are configuring a Headset be sure to include the type=headset line, if left out it defaults
 | |
| to phone.
 | |
| 
 | |
| The CLI command 'mobile show devices' can be used at any time to show the status of configured devices,
 | |
| and whether or not the device is capable of sending / receiving SMS via bluetooth.
 | |
| 
 | |
| \begin{verbatim}
 | |
| *CLI> mobile show devices 
 | |
| ID              Address           Group Adapter         Connected State SMS
 | |
| headset         00:0B:9E:11:AE:C6 0     blue            No        Init  No 
 | |
| LGTU550         00:E0:91:7F:46:44 1     dlink           No        Init  No 
 | |
| \end{verbatim}
 | |
| 
 | |
| As each phone is connected you will see a message on the Asterisk console :-
 | |
| 
 | |
| \begin{verbatim}
 | |
|  Loaded chan_mobile.so => (Bluetooth Mobile Device Channel Driver)
 | |
|     -- Bluetooth Device blackberry has connected.
 | |
|     -- Bluetooth Device dave has connected.
 | |
| \end{verbatim}
 | |
| 
 | |
| To make outbound calls, add something to you Dialplan like the following :- (modify to suit)
 | |
| 
 | |
| ; Calls via LGTU5500
 | |
| \begin{verbatim}
 | |
| exten => _9X.,1,Dial(Mobile/LGTU550/${EXTEN:1},45)
 | |
| exten => _9X.,n,Hangup
 | |
| \end{verbatim}
 | |
| 
 | |
| To use channel groups, add an entry to each phones definition in mobile.conf like group=n
 | |
| where n is a number.
 | |
| 
 | |
| Then if you do something like Dial(Mobile/g1/123456) Asterisk will dial 123456 on the first
 | |
| connected free phone in group 1.
 | |
| 
 | |
| Phones which do not have a specific 'group=n' will be in group 0.
 | |
| 
 | |
| 
 | |
| To dial out on a headset, you need to use some other mechanism, because the headset is not likely
 | |
| to have all the needed buttons on it. res\_clioriginate is good for this :-
 | |
| 
 | |
| \begin{verbatim}
 | |
| *CLI> originate Mobile/headset extension NNNNN@context
 | |
| \end{verbatim}
 | |
| 
 | |
| This will call your headset, once you answer, Asterisk will call NNNNN at context context
 | |
| 
 | |
| \subsection{Dialplan hints}
 | |
| 
 | |
| chan\_mobile supports 'device status' so you can do somthing like
 | |
| 
 | |
| \begin{verbatim}
 | |
| exten => 1234,hint,SIP/30&Mobile/dave&Mobile/blackberry
 | |
| \end{verbatim}
 | |
| 
 | |
| 
 | |
| \subsection{MobileStatus Application}
 | |
| 
 | |
| chan\_mobile also registers an application named MobileStatus. You can use this in your Dialplan
 | |
| to determine the 'state' of a device.
 | |
| 
 | |
| For example, suppose you wanted to call dave's extension, but only if he was in the office. You could
 | |
| test to see if his mobile phone was attached to Asterisk, if it is dial his extension, otherwise dial his
 | |
| mobile phone.
 | |
| 
 | |
| \begin{verbatim}
 | |
| exten => 40,1,MobileStatus(dave,DAVECELL)
 | |
| exten => 40,2,GotoIf($["${DAVECELL}" = "1"]?3:5)
 | |
| exten => 40,3,Dial(ZAP/g1/0427466412,45,tT)
 | |
| exten => 40,4,Hangup
 | |
| exten => 40,5,Dial(SIP/40,45,tT)
 | |
| exten => 40,6,Hangup
 | |
| \end{verbatim}
 | |
| 
 | |
| MobileStatus sets the value of the given variable to :-
 | |
| 
 | |
| \begin{verbatim}
 | |
| 1 = Disconnected. i.e. Device not in range of Asterisk, or turned off etc etc
 | |
| 2 = Connected and Not on a call. i.e. Free
 | |
| 3 = Connected and on a call. i.e. Busy
 | |
| \end{verbatim}
 | |
| 
 | |
| 
 | |
| \subsection{SMS Sending / Receiving}
 | |
| 
 | |
| If Asterisk has detected your mobile phone is capable of SMS via bluetooth, you will be able to send and
 | |
| receive SMS.
 | |
| 
 | |
| Incoming SMS's cause Asterisk to create an inbound call to the context you defined in mobile.conf or the default
 | |
| context if you did not define one. The call will start at extension 'sms'. Two channel variables will be available,
 | |
| SMSSRC = the number of the originator of the SMS and SMSTXT which is the text of the SMS.
 | |
| This is not a voice call, so grab the values of the variables and hang the call up.
 | |
| 
 | |
| So, to handle incoming SMS's, do something like the following in your dialplan
 | |
| 
 | |
| \begin{astlisting}
 | |
| \begin{verbatim}
 | |
| [incoming-mobile]
 | |
| exten => sms,1,Verbose(Incoming SMS from ${SMSSRC} ${SMSTXT})
 | |
| exten => sms,n,Hangup()
 | |
| \end{verbatim}
 | |
| \end{astlisting}
 | |
| 
 | |
| The above will just print the message on the console.
 | |
| 
 | |
| If you use res\_jabber, you could do something like this :-
 | |
| 
 | |
| \begin{astlisting}
 | |
| \begin{verbatim}
 | |
| [incoming-mobile]
 | |
| exten => sms,1,JabberSend(transport,user@jabber.somewhere.com,SMS from ${SMSRC} ${SMSTXT})
 | |
| exten => sms,2,Hangup()
 | |
| \end{verbatim}
 | |
| \end{astlisting}
 | |
| 
 | |
| To send an SMS, use the application MobileSendSMS like the following :-
 | |
| 
 | |
| \begin{verbatim}
 | |
| exten => 99,1,MobileSendSMS(dave,0427123456,Hello World)
 | |
| \end{verbatim}
 | |
| 
 | |
| This will send 'Hello World' via device 'dave' to '0427123456'
 | |
| 
 | |
| 
 | |
| \subsection{DTMF Debouncing}
 | |
| 
 | |
| DTMF detection varies from phone to phone. There is a configuration variable that allows you to tune
 | |
| this to your needs. e.g. in mobile.conf
 | |
| 
 | |
| \begin{verbatim}
 | |
| [LGTU550]
 | |
| address=00:12:56:90:6E:00
 | |
| port=4
 | |
| context=incoming-mobile
 | |
| dtmfskip=50
 | |
| \end{verbatim}
 | |
| 
 | |
| change dtmfskip to suit your phone. The default is 200. The larger the number, the more chance of missed DTMF.
 | |
| The smaller the number the more chance of multiple digits being detected.
 | |
| 
 | |
| 
 | |
| \subsection{Debugging}
 | |
| 
 | |
| Different phone manufacturers have different interpretations of the Bluetooth Handsfree Profile Spec.
 | |
| This means that not all phones work the same way, particularly in the connection setup / initialisation
 | |
| sequence. I've tried to make chan\_mobile as general as possible, but it may need modification to
 | |
| support some phone i've never tested.
 | |
| 
 | |
| Some phones, most notably Sony Ericsson 'T' series, dont quite conform to the Bluetooth HFP spec.
 | |
| chan\_mobile will detect these and adapt accordingly. The T-610 and T-630 have been tested and
 | |
| work fine.
 | |
| 
 | |
| If your phone doesnt behave has expected, turn on Asterisk debugging with 'core set debug 1'.
 | |
| 
 | |
| This will log a bunch of debug messages indicating what the phone is doing, importantly the rfcomm
 | |
| conversation between Asterisk and the phone. This can be used to sort out what your phone is doing
 | |
| and make chan\_mobile support it.
 | |
| 
 | |
| Be aware also, that just about all mobile phones behave differently. For example my LG TU500 wont dial unless
 | |
| the phone is a the 'idle' screen. i.e. if the phone is showing a 'menu' on the display, when you dial via
 | |
| Asterisk, the call will not work. chan\_mobile handles this, but there may be other phones that do
 | |
| other things too...
 | |
| 
 | |
| Important: Watch what your mobile phone is doing the first few times. Asterisk wont make random calls but
 | |
| if chan\_mobile fails to hangup for some reason and you get a huge bill from your telco, dont blame me ;)
 |