# NMEA , request for real live sample

**URL:** <https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685>\
**Category:** Ruby\
**Created:** [May 9, 2007, 9:10am UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685 "2007-05-09T09:10:06Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![bino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/b19c9b/32.png) [@bino](https://www.ruby-forum.com/u/bino)\
**Post date:** [May 9, 2007, 9:10am UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685/1 "2007-05-09T09:10:06Z")

</div>

Dear All …  
Is there any easier to understand sample of ruby nmea parser (  
[http://rubyforge.org/projects/nmea/](http://rubyforge.org/projects/nmea/) ) ??

I need to parse NMEA , and re format it to YAML.  
I tried to :

—START—  
require ‘serialport’  
require ‘nmea’  
@sp = SerialPort.open(“/dev/ttyS1”, 4800, 8, 1,  
SerialPort::NONE)  
@handler = NMEAHandler.new  
while(@sentence = @sp.gets) do  
puts NMEA.scan(@sentence, @handler)  
end  
—STOP—

but it only print “nil”

I thought that my system is not well wired, so I make a test using  
miniterm.rb from the serialport library, and here is the result  
—start—  
[root@kannel test]# ruby ./miniterm.rb 1 4800 8 1  
$GPRMC,135444,A,3815.4477,N,02349.5804,E,10412.9,243.3,090507,5,E,A_B  
$GPRMC,135446,A,3810.5221,N,02344.4003,E,11501.1,219.6,090507,5,E,A_B  
$GPRMC,135448,A,3803.9503,N,02341.4152,E,12561.9,199.7,090507,5,E,A\*B  
—stop----

Note : My test system is

1. GPS Feed : Using a PC running GPSFeed+
2. Ruby on the other Linux PC
3. The two PC is connected via a null-modem cable.

Sincerely  
-bino-

---

<div class="post-metadata">

**Author:** ![bino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/b19c9b/32.png) [@bino](https://www.ruby-forum.com/u/bino)\
**Post date:** [May 9, 2007, 11:27am UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685/2 "2007-05-09T11:27:32Z")

</div>

Look at release 0.2

---

<div class="post-metadata">

**Author:** ![bino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/b19c9b/32.png) [@bino](https://www.ruby-forum.com/u/bino)\
**Post date:** [May 9, 2007, 11:37am UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685/3 "2007-05-09T11:37:07Z")

</div>

Dear Max and all  
----- Original Message -----  
From: “Max L.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Newsgroups: comp.lang.ruby  
To: “ruby-talk ML” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Wednesday, May 09, 2007 3:48 PM  
Subject: Re: NMEA , request for real live sample

> accept such unnatural sentences, but it is very, very strange for me.  
> What GPS device do You use? I wish to look at it documentation, perhaps  
> I’ve missed something in standart.

It’s not “real GPS” …  
It’s a windows pc running gpsfeed software from →

> **[gpsfeed+](https://sourceforge.net/projects/gpsfeed/)**
>
> Download gpsfeed+ for free. A software gps simulator. A software gps simulator, providing TCP/IP, UDP, http and serial port connectivity in NMEA 0183, XML or user defined output format. Usable for testing all kinds of GPS applications.

From my table, I can not get GPS signal … thats why i use such  
“emulator”

Regards  
-bino-

---

<div class="post-metadata">

**Author:** ![bino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/b19c9b/32.png) [@bino](https://www.ruby-forum.com/u/bino)\
**Post date:** [May 9, 2007, 10:48am UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685/4 "2007-05-09T10:48:56Z")

</div>

Bino Oetomo wrote:

> [root@kannel test]# ruby ./miniterm.rb 1 4800 8 1  
> $GPRMC,135444,A,3815.4477,N,02349.5804,E,10412.9,243.3,090507,5,E,A_B  
> $GPRMC,135446,A,3810.5221,N,02344.4003,E,11501.1,219.6,090507,5,E,A_B  
> $GPRMC,135448,A,3803.9503,N,02341.4152,E,12561.9,199.7,090507,5,E,A\*B

You see, this NMEA sentence differ from what I assumed to be standard.  
There is unknown checksum in the end. I can modify parser so, that it  
would  
accept such unnatural sentences, but it is very, very strange for me.  
What GPS device do You use? I wish to look at it documentation, perhaps  
I’ve missed something in standart.

Regarding NMEA.scan, it will never return anything. It can only call  
method  
rmc on NMEAHandler.

---

<div class="post-metadata">

**Author:** ![bino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/b19c9b/32.png) [@bino](https://www.ruby-forum.com/u/bino)\
**Post date:** [May 9, 2007, 12:18pm UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685/5 "2007-05-09T12:18:29Z")

</div>

Bino Oetomo wrote:

> It’s not “real GPS” …  
> It’s a windows pc running gpsfeed software from →   
> [gpsfeed+ download | SourceForge.net](http://sourceforge.net/projects/gpsfeed)  
> From my table, I can not get GPS signal … thats why i use such  
> “emulator”

Understand. According to  
[http://www.werple.net.au/~gnb/gps/nmea.html#gprmc](http://www.werple.net.au/~gnb/gps/nmea.html#gprmc), this software  
violates standard, that is why it was not parsed.

Now it is parseable, but checksum correction is disabled.

---

<div class="post-metadata">

**Author:** ![bino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/b19c9b/32.png) [@bino](https://www.ruby-forum.com/u/bino)\
**Post date:** [May 10, 2007, 6:43am UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685/6 "2007-05-10T06:43:23Z")

</div>

require ‘test/mocks’

class NMEAHandler  
def rmc(\*args)  
puts args.inspect  
end  
end

You will not receive anything, unless NMEA handler locate Latitude  
class, so You should include mocks.rb, unless You have anything better.

---

<div class="post-metadata">

**Author:** ![bino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/b19c9b/32.png) [@bino](https://www.ruby-forum.com/u/bino)\
**Post date:** [May 10, 2007, 2:48am UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685/7 "2007-05-10T02:48:37Z")

</div>

Max L. wrote:

> Understand. According to  
> [http://www.werple.net.au/~gnb/gps/nmea.html#gprmc](http://www.werple.net.au/~gnb/gps/nmea.html#gprmc), this software  
> violates standard, that is why it was not parsed.
> 
> Now it is parseable, but checksum correction is disabled.

Thanks Max.  
So … I need to find my GPS … lying somewhere in my workshop

BTW … Can you give me another sample script ?  
Maybe a script that print out each variables ?

Thanks in advance

-bino-

---

<div class="post-metadata">

**Author:** ![bino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/b19c9b/32.png) [@bino](https://www.ruby-forum.com/u/bino)\
**Post date:** [May 10, 2007, 9:49am UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685/8 "2007-05-10T09:49:10Z")

</div>

Look at the test/mocks.rb

class NMEAHandler  
def rmc(time, latitude, longitude, speed, course, magnetic\_variation)  
…

thus You can get latitude

---

<div class="post-metadata">

**Author:** ![bino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/b19c9b/32.png) [@bino](https://www.ruby-forum.com/u/bino)\
**Post date:** [May 10, 2007, 8:47am UTC](https://www.ruby-forum.com/t/nmea-request-for-real-live-sample/103685/9 "2007-05-10T08:47:08Z")

</div>

Dear Max.  
Thanks for the response  
First I make a subdirs inside ruby lib , with the name “nmea”  
And make a copy of your mocks.rb into it

I try this :  
—Start—  
require ‘serialport’  
require ‘nmea’  
require ‘nmea/mocks’  
class NMEAHandler  
def rmc(\*args)  
puts args.inspect  
end  
end  
@sp = SerialPort.open("/dev/ttyS1", 4800, 8, 1, SerialPort::NONE)  
@handler = NMEAHandler.new  
while(@sentence = @sp.gets) do  
@handler.rmc(@sentence)  
end  
—Stop----

And it produced :  
["$GPRMC,134632,A,0004.3300,N,00004.3300,W,005.0,315.0,100507,000.0,W\*76\r\n"]

Kindly please show me how to … i.e “puts” just a single “latitude”.

Sincerely  
-bino-
