[aprssig] APRS activity triggering a text or email notification via internet push

John Gorkos jgorkos at gmail.com
Wed Feb 16 17:54:50 EST 2011


I agree the initial code effort is trivially easy, and this does indeed work.  
The goal I was shooting for was a little beyond this.  Here's the requirements 
doc for what I'm aiming for:

*  work for multiple users, with multiple notification paths for each.  
Specifically, provide multiple email addresses and the option for an APRS 
message sent to a specific call sign.

* allow for both point and area zones of interest, i.e. "within 500 meters of 
point x,y", or "incusion into zone defined by "x,y (NE) - x,y (SW)"

* differentiate between "approaching" and "departing" (i.e. "AB0OO is 
approaching home" shouldn't trigger when I leave the house in the morning to 
go to work)

* set up time windows for various notifications, and reset-times that prevent 
rapid-fire messaging (unfortunately, your Perl script will page me at 0200, 
when I really don't want to be woken up).

The design of a set of business rules, a method for storing those rules, and 
the logic to execute those rules requires some framework and some support code 
to go with it.  On top of that, the user interface needs to be something more 
than "edit this script with your hardcoded information".  Something more along 
the lines of "go to this web page, register as a user, select call signs 
you're interested in, select the times and other business rules you want 
applied to those callsigns, send a test message, etc" is what I'm shooting 
for.  Finally, in the end, it needs to be documented (which your Perl is, 
kudos to you) and published in a source repository so people 5 years from now 
can find it, modify it, extend it, or whatever.  There's nothing more 
frustrating than having a new guy join the APRS sig 10 months from now and ask 
this same question, and someone shoot back "yeah, there was a Perl script 
posted a few months back that does that.  Search the archives."

On the other hand, quick and dirty gets the job done.  It's just unfortunate 
that so many good ideas die at the "quick and dirty, I scratched my itch 
you're on your own for anything else" stage.

Imagine the value of being part of a road race that is supported by APRS.  You 
can ask the race director for his cell phone number, and then set him up to 
recieve a text message whenever the LEAD, TRAIL, or SAG tracker passes any 
number of specific points on the course...

Thanks for proving it can be done in less than 60 lines of Perl, though.  I 
think all 3 of Larry Wall's "Three Virtues of a Programmer" are well 
represented here.

John Gorkos

On Wednesday, February 16, 2011 12:09:38 Rich Mulvey wrote:
> I hadn't followed this topic before, but if you have a machine you can run
> perl on, this is trivially easy.  I just whipped up this script and tested
> it.  Replace the callsign, recipient, and sender addresses, and run it
> periodically.
> 
> It will store the last position found for the callsign, then, then next
> time it runs, if the lat/long differ, it will send an email.  Most cell
> providers provide an email gateway to allow you to email SMS messages to
> someone.
> 
> Obviously you'd want to surpress position changes within some window (
> i.e., less than 100 feet ).  Plus probably some more error checking.  ;-)
> 
> ---
> #!/usr/bin/perl
> 
> use strict;
> use Ham::APRS::LastPacket;
> use Storable;
> use Email::Sender::Simple qw(sendmail);
> use Email::Simple;
> use Email::Simple::Creator;
> 
> 
> my $callsign = "MYCALLSIGN";
> my $recipient = "blah\@blah.com";
> my $sender = "myposition\@blah.com";
> my %lastPosition;
> 
> my $aprs = Ham::APRS::LastPacket->new;
> $aprs->set_callsign($callsign);
> 
> # Load the last position, if we've stored it
> if( -r $callsign ) {
>    %lastPosition = %{retrieve $callsign};
> }
> 
> 
> my $packet = $aprs->get_data;
> die $aprs->error_message if $aprs->is_error;
> 
> # get the position report
> print "$callsign is at
> $packet->{position}->{latitude}->{degrees},$packet->{position}->{longitude}
> ->{degrees}\n";
> 
> # If the position has changed, send out an email
> if( ( $lastPosition{latitude} != $packet->{position}->{latitude}->{degrees}
> ) ||
>     ( $lastPosition{'longitude'} !=
> $packet->{position}->{longitude}->{degrees} ) ) {
>    sendEmail();
> }
> 
> # Save the position
> $lastPosition{'latitude'} = $packet->{position}->{latitude}->{degrees};
> $lastPosition{'longitude'} = $packet->{position}->{longitude}->{degrees};
> store \%lastPosition, $callsign;
> 
> 
> sub sendEmail {
>    print "Sending a movement report\n";
> 
>    my $email = Email::Simple->create(
>     header => [
>     To      => $recipient,
>     From    => $sender,
>     Subject => "$callsign position report",
>     ],
>     body => "$callsign has moved",
>    );
> 
> sendmail($email);
> }
> 
> On Wed, Feb 16, 2011 at 12:19 AM, Steve Hanis <dmesteve at gmail.com> wrote:
> > On Tue, Feb 15, 2011 at 10:22 PM, John Gorkos <jgorkos at gmail.com> wrote:
> > > On Friday, February 11, 2011 09:51:24 AM Steve Hanis wrote:
> > > > Hi John,
> > > > 
> > > > I have no intention of irritating anyone one the list, and apologize
> > > > if I have done so. I haven't written any programs since college back
> > > > in the early 90's and don't consider myself programmer, I use Linux
> > > > occasionally. I was made aware of this list after I posed this same
> > > > question on the APRS Yahoo group.
> > > > 
> > > > What I am looking for is something like what is described on
> > > > http://www.aprs.org/aprs-messaging.html:
> > > > 
> > > > "APRS Messages to Your Cellphone: . N3FLR Frank Rossi reports that he
> > > > uses "YahooAlert" to send all of his APRS messages to his cell phone.
> > > > First, Find-U has RSS output capability so he has his computer RSS
> > > > Feed Reader watching his Feed From FindU, and YahooAlert also
> > > > watching. After setting up Yahoo Alert for a pager, he uses his
> > > > phone's text e-mail address such as xxxxxxxxxx at txt.att.net . Then you
> > > > just need to know what your phone's "e-mail address" to "text
> > > > address" is. You don't need mobile internet to do it this way, just
> > > > text ability. That will work with a text pager also. . When FINDU
> > > > sees a message to him on APRS it generates an RSS Feed that now
> > > > Yahoo-Alerts is watching. YahooAlerts then forwards the RSS Message
> > > > as Text to his cell phone. Although this is only one way
> > > > communications, it still lets him receive his APRS messages. He also
> > > > says that you can set up RSS feeds from FindU for weather alerts, or
> > > > APRS users X amount of miles from you. You can make the miles
> > > > anything you want. He has not tried that function yet."
> > > > 
> > > > I've tried this to no avail, but was wondering if anyone else had
> > > > come up with a different way to accomplish the same goal. I have no
> > > > commercial interest in this, I just want to be pinged on my cell
> > > > phone (SMS, Email, IM) when my friend goes mobile, or for special
> > > > cases like a high altitude balloon with a known call sign goes
> > > > active on APRS.
> > > > 
> > > > Kind Regards,
> > > > Steve
> > > > 
> > > > On Fri, Feb 11, 2011 at 7:35 AM, John Gorkos <jgorkos at gmail.com>
> > 
> > wrote:
> > > > > It "can" be done.  It hasn't yet.  What you're asking for is 4-6
> > 
> > hours of
> > 
> > > > > custom coding (mostly for the web interface).  Do you have a web
> > 
> > server
> > 
> > > > > that can host something like this?  I've got a few hours this
> > > > > weekend
> > 
> > I
> > 
> > > > > can use to code this.
> > > > > Let me make sure I've got the requirements right:
> > > > > You want a web interface that allows you to enter a "monitored"
> > > > > call sign, and an email address to send a message to when that
> > > > > position report from that monitored callsign indicates movement. 
> > > > > You want one message only.  Then, time passes and the monitored
> > > > > station stops
> > 
> > moving.
> > 
> > > > >  Once the station starts moving again, you want another text
> > > > >  message.
> > > > > 
> > > > > The SMS messages will have to be sent via email (i.e.
> > > > > 2125551212 at sms.verizon.com), since a direct SMS interface is spendy
> > 
> > and
> > 
> > > > > less standard.
> > > > > 
> > > > > Do you have any programming skills you could apply to this?  Web
> > 
> > design,
> > 
> > > > > maybe?  I hate web design, but the back-end portion isn't too
> > 
> > difficult.
> > 
> > > > >  This request will probably irritate some people on this list,
> > > > >  FWIW. Everyone has an imaginary line they draw between "ham
> > > > >  radio" and
> > > > > 
> > > > > "commercial radio and internet."  Using your cellphone/commercial
> > 
> > radio
> > 
> > > > > to get updates about APRS happenings on ham radio is probably on
> > > > > the
> > 
> > far
> > 
> > > > > side of some peoples' lines.
> > > > > 
> > > > > John Gorkos
> > > > > AB0OO
> > > > > 
> > > > > On Thursday, February 10, 2011 18:48:04 Steve Hanis wrote:
> > > > > > Thank you for your reply. I am looking for a way to trigger an
> > 
> > email,
> > 
> > > > > > IM or SMS using existing web interfaces. A way to "push" an alert
> > 
> > to
> > 
> > > > > > me when I am working or relaxing at home. Can this be done?
> > > > > > Kind Regards,
> > > > > > Steve
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > On Tue, Feb 8, 2011 at 10:41 AM, Guido Trentalancia
> > > > > > <iz6rdb at trentalancia.com
> > > > > > 
> > > > > > > wrote:
> > > > > > > 
> > > > > > > Hello Steve !
> > > > > > > 
> > > > > > > On Mon, 07/02/2011 at 22.19 -0600, Steve Hanis wrote:
> > > > > > > > A friend and I just starting using APRS.  Is there way to
> > 
> > trigger a
> > 
> > > > > > > > SMS
> > > > > > > 
> > > > > > > text
> > > > > > > 
> > > > > > > > message or email via Internet monitoring when his APRS goes
> > 
> > active
> > 
> > > > > > > > or
> > > > > > > 
> > > > > > > moving?
> > > > > > > 
> > > > > > > > This would let me know he is mobile and available to chat or
> > 
> > view
> > 
> > > > > > > > his
> > > > > > > 
> > > > > > > location
> > > > > > > 
> > > > > > > > on a map. My apologies if the question is too simplistic for
> > 
> > this
> > 
> > > > > > > > list, I am a newbie.
> > > > > > > > 
> > > > > > > > Thanks,
> > > > > > > > Steve
> > > > > > > > AB5ID
> > > > > > > 
> > > > > > > Suppose your friend has call AB4HB, then you could use
> > > > > > > something like:
> > > > > > > 
> > > > > > > FROMEMAILADDRESS=dmesteve at gmail.com
> > > > > > > MYEMAILADDRESS=dmesteve at gmail.com
> > > > > > > APRSCALLSIGN=AB4HB
> > > > > > > SMTP_SERVER=smtp.ab5id.org
> > > > > > > axlisten -a | grep -q " fm $APRSCALLSIGN to " && echo "An APRS
> > 
> > packet
> > 
> > > > > > > from $APRSCALLSIGN has been heard" > /tmp/aprs_message.txt &&
> > > > > > > env MAILRC=/dev/null from=$FROMEMAILADDRESS smtp=$SMTP_SERVER
> > > > > > > mailx
> > 
> > -v -n
> > 
> > > > > > > -s "Mail from APRS" $MYEMAILADDRESS < /tmp/aprs_message.txt &&
> > > > > > > rm
> > 
> > -f
> > 
> > > > > > > /tmp/aprs_message.txt
> > > > > > > 
> > > > > > > Note that APRSCALLSIGN is case sensitive (unless you pass the
> > > > > > > -i option to grep). Note that SMTP_SERVER needs to be defined
> > 
> > according
> > 
> > > > > > > to your actual smtp server.
> > > > > > > Most importantly note that the above will send out an email
> > 
> > message
> > 
> > > > > > > for every packet that is received from APRSCALLSIGN and this
> > 
> > might
> > 
> > > > > > > not be desirable as there might be a lot of packets coming
> > > > > > > continuously (so you might do things better with some extra
> > > > > > > code that checks whether a message has already been sent
> > > > > > > recently, for example by creating a temporary file each time a
> > > > > > > message is sent
> > 
> > and
> > 
> > > > > > > then checking that the timestamp of such file is not too recent
> > > > > > > before sending a new email message).
> > > > > > > 
> > > > > > > Or otherwise you can download a tiny program that I wrote
> > > > > > > (ax_emergency_listen) which is generally used to monitor APRS
> > > > > > > emergency packets and adapt it to your needs (by modifying the
> > > > > > > C source code):
> > > > > > > 
> > > > > > > http://iz6rdb.trentalancia.com/en/aprs_igate.html
> > > > > > > 
> > > > > > > 73,
> > > > > > > 
> > > > > > > Guido IZ6RDB
> > > 
> > > Believe it or not, I've not forgotten about this.  I've spent about 10
> > 
> > hours
> > 
> > > so far doing design and outline work on the code.  I've also had to
> > > hunt
> > 
> > down
> > 
> > > some extremely nasty off-by-one bugs in the Java AVRS position parsers.
> >  
> >  Now
> >  
> > > that I'm getting reliable, accurate positions from all 4 types of
> > 
> > position
> > 
> > > packets (compressed, uncompressed, MICe, and raw NMEA) I can move on to
> > > alarms.
> > > In the AVRS sourceforge repo, there is a new package called Wedjet
> > > (net.ab0oo.aprs.wedjet) that contains some rudimentary code for
> > 
> > monitoring
> > 
> > > positions.  The alerting portion will come later.  I'm using a
> > 
> > Spring-injected
> > 
> > > Jetty container as a base web-server, so the whole thing can be self-
> > > contained.
> > > Give me another few days and I'll have something you can play with. 
> > > Once
> > 
> > we
> > 
> > > reach a stable beta point, we'll look for hosting options.
> > > 
> > > John Gorkos
> > > AB0OO
> > 
> > John,
> > 
> > A sincere thank you. I had no idea how much work would be involved.
> > 
> > Kind Regards,
> > Steve
> > AB5ID
> > 
> > _______________________________________________
> > aprssig mailing list
> > aprssig at tapr.org
> > https://www.tapr.org/cgi-bin/mailman/listinfo/aprssig




More information about the aprssig mailing list