I found an interesting documeent about realisation of eCall (Emergency Call) in EU: http://www.heero-pilot.eu/ressource/static/files/heero_wp3_d3-3_final-operational-results_v2.3_final.pdf
Germany somehow did it on Asterisk. Whatever, I don't understand how they process MSD (minimal set of data) using Asterisk. In the call session for the first step caller sends DTMF signals to send MSD packet. As I understood, Asterisk must redirect this call to In-band modem on COM port or to another machine with such modem. After PSAP successfully received MSD for the second step caller switches to voice channel that must be redirected to some sip-client of PSAP operator. How they do it? Is there a way to receive DTMF signals w/o modem by using internal capabilities of Asterisk? How the same call to redirect to another SIP on the same time?
I suspect that you are referring to emergency services, rendered by emergency dialers - eg. for senior citizens. These are fairly common where I live, and I've created in the past a solution to handle the calls from these, based on Asterisk. The solution involved a way to intercept the various DTMF signals that the device generates, then making Asterisk do stuff with it. Back then, I used Asterisk 1.6 and it is pain staking, because I had to do everything from within a MeetMe bridge, and interact with Manager alot. Today, doing the same with Asterisk 12/13 and ARI is a breeze. Just remember one thing, most of these dialers will utilize the A,B,C,D DTMF signals, which are somewhat unknown to most people - they exist and Asterisk is very much capable of handling those.
The only snag is - make sure you are connected via a PRI, as most SIP carriers aren't aware of these signals, and their SIP trunks won't support this type of signalling.
Asterisk can send dtmf(natively,via command SendDTMF in dialplan or D option in Dial command) or any other sound(custom c/c++ app needed)
No, you not need special modem.
However there are no realisation acordinly to that document, you need do that yourself or hire someone
Related
I want to program an esp8266 doorbell to call me when someone presses the bell. I have a STARFACE telephone system (Asterisk) and would like to tell STARFACE to make a broadcast call. I have searched the Internet but I find only FritzBox examples.
I do not want to do this with a call file.
Sorry for my English. I am not a native Englishman.
Call file is simplest way do that.
Some other ways
asterisk AMI protocol Originate command
asterisk ARI
perl,sipp(testing tool) or other script which send sip invite with auth.
https://gist.github.com/maximevalette/802764
http://sipp.sourceforge.net/
click2call script on asterisk (using call file or other)+ curl request on your device.
I am using csipsimple as sip client and asterisk server to set up call. Calls are made between 2 sip clients but voice is not getting transferred.
Calls are made between 2 sip clients using AMI.
I can give my asterisk cli log.
Can anybody please give me some idea to solve this issue?
Thanks
More info would be useful. First, make sure both clients are registered, and can use at least one common codec. In most cases, these aren't the problem. It's usually a NAT/Firewall issue. Are the two clients on the same subnet? Is there any firewall rules blocking the communication?
SIP signaling usually goes on udp:5060. But that seems working. Media is tricky. In each call, the ports for RTP audio changes, in the range specified in rtp.conf. This RTP traffic goes over UDP as well. By default it't 10000-20000.
If there is only routing done between the two endpoints, it should still be fine. NAT (Network Address Translation) is your main concern. Take a look at iptables, sip_nat_conntrack. To debug, use asterisk's sip set debug on command and look for the SIP headers and verify the correct IP addresses.
I'm doing an application that uses the Modbus ASCII protocol (RS485).
A client will communicate with a PLC service that will talk to the PLC through the serial port.
I'm not sure whether there is any limitation about sending one command each time or if I need to wait for the response to come back from the PLC before sending the next command.
That will affect the architecture of the PLC service because if only one instruction can be processed at a time the design of my class will support one async method call and will expose IsBusy property. Otherwise I'll have to support concurrent method calls and pass in the stateId for each call (I'll be using EAP: Event-based Asynchronous pattern)
Thanks in advance.
The protocol is synchr. like comli so yes you can only send one command and must wait for a reply - I also doubled checked some old code just to be sure, been ages...
You can also read more about the protocol here
The Modbus protocol handles one command at a time, so wait until you have a response and then send the next command.
Im writing application that communicate (via serial port) with electronic device which i designed myself.
When my PC application starts - it opens available COM ports one by one and it sends some string ("What are you?" for example).
My device is programmed, to reply to that "magic question" with own ID (for example: "I am evil device for supervising employees").
When my PC software receive that "magic reply" it starts working normally and its not searching other ports anymore.
Of course im not using stupid questions in data transmission, its just example.
Question is - can i send strings like on all (not busy) ports, to discover my device?
If I can - how that "question" string should look? Are there any normalized standards?
This is not first project like this on my desk, but now im developing solution for little industry and i need to pay more attention what my application is doing, because there may be other devices connected to COM ports and I do not know how they can react.
Im sorry, if i made some language mistakes, english is my third language.
Thanks in advance for replies.
After Alvin Wong confirmed my concerns I thought about it again and redesigned my device discovery functionality, because I don't want to abandon that idea.
I will send unique-complicated-ID every 1-5 seconds from device.
When my PC starts - it will try to open sequentially all available ports and will listen for that ID for few seconds.
If application receive that ID - it will be confirmation, that port number/name is correct and I my connection is established.
No, you wouldn't want to do that.
When you are using COM serial port, you have no idea what is plugged into the port. It could be nothing, your device, a modem, a mouse (though I believe nobody uses this anymore...) or whatever you can't even imagine.
Imagine if it is connected to another computer (probably a Linux/router), sending things may lead to execution of "that command", thus creating unexpected effects (though your program may not notice). Or if it is some badly-programmed device, it may trigger a bug in the firmware, thus failing the device and making it malfunction.
In short, in the worst case, you can cause a catastrophic event.
Serial (RS232 or UART I assume) communications don't have a designated transfer protocol (in contrast to USB which has one) to identify a device, so it isn't fail-safe. The user must make sure he selected the correct port. This is probably one of the reasons why hardware manufacturers choose USB, and one of the reasons why USB is so popular, even to computer idiots.
I would like to use a GSM modem to make a voice call to a phone number, play a recorded message, wait for a digit to be pressed and then disconnect the call. The system needs to know if the line was busy, if the user answered and which digit was pressed by user (if any). It should drop the line if nothing is pressed in 30 seconds. If user presses the digit before the question is completed then the voice should stop (user doesn't have to wait). Also, it would be nice if system could handle invalid digits (play "invalid digit" message, play original message and wait for input). Multiple calls in parallel would be nice, but I guess this is not possible?
I have found this article which explains low-level interface quite nicely. However, this question is more pragmatic - which libraries and which GSM modem would you recommend? OS is Linux, modem can be either RS232 or USB. I would prefer Python, but C(++) is ok too.
BTW: this is not telemarketing, it is a notification system. Not that it matters... ;)
EDIT: I learned this system is known by keyword "IVR" (added for future searchers).
A modem is generally used for data transmission but it sounds like you are actually transmitting voice, albeit prerecorded voice, and tones.
Although you can achieve this with the extra voice capability of a voice modem as you have identified, it might actually be easier to use a GSM to VoIP gateway, unless you actually need the modems data capability for some reason.
You could connect the VoIP to GSM gateway to a low cost or free open source PABX (such as Asterisk) and use this to build your particular application.
Some gateways even support multiple SIMS so you can target the SIM which gives the lowest call rate for the number you are calling - for example if you know that the number you want to call is on a particular operator, then that operator may offer free 'on network' calls between it's SIMs. This might be an advantage if you are expecting to make a large number of calls.
If you do a web search for 'VoIP GSM gateways' you will find some examples.
The following link provides an overview also:
http://www.voip-info.org/wiki/view/VOIP+GSM+Gateways
I am no expert in this field but it is something of a personal project that I have wanted to dive into.
Here is what I think will be the best way to do this.
1 Get yourself a VOIP GSM Gateway like this: VOIP+GSM+Gateways
2 Link into an existing PABX system or download a free one like asterisk
Then you will need to follow the instructions of the PABX development to create your dial plans and routing. I don't know if there are any already out there but I'm sure you will find many examples of the bits and pieces you need.