Class: OGNClient::Message
- Inherits:
-
Object
- Object
- OGNClient::Message
- Defined in:
- lib/ogn_client/message.rb
Overview
Generic OGN flavoured APRS parser
You can pass any raw OGN flavoured APRS message string to the parse
class method and receive an instance of the appropriate subclass (Comment
, Receiver
or Sender
) or nil
if the message string could not be parsed.
Comment example:
raw = "# aprsc 2.0.14-g28c5a6a 29 Jun 2014 07:46:15 GMT GLIDERN1 37.187.40.234:14580"
obj = OGNClient::Message.parse(raw) # => #<OGNClient::Comment:0x007feaf1012898>
obj.comment # => "aprsc 2.0.14-g28c5a6a 29 Jun 2014 07:46:15 GMT GLIDERN1 37.187.40.234:14580"
Sender example:
raw = "FLRDF0A52>APRS,qAS,LSTB:/220132h4658.70N/00707.72Ez090/054/A=001424 id06DF0A52 +020fpm +0.0rot 55.2dB 0e -6.2kHz"
obj = OGNClient::Message.parse(raw) # => #<OGNClient::Sender:0x007feaec1daba8>
obj.id # => "DF0A52"
Malformed example:
raw = "FOOBAR>not a valid message"
obj = OGNClient::Message.parse(raw) # => nil
Direct Known Subclasses
Constant Summary collapse
- POSITION_PATTERN =
%r(^ (?<callsign>.+?)>APRS,(?:.+?,){1,2} (?<receiver>.+?):[/>] (?<time>\d{6})h (?:(?<latitude>\d{4}\.\d{2}[NS]).(?<longitude>\d{5}\.\d{2}[EW]).)? (?:(?<heading>\d{3})/(?<ground_speed>\d{3}))? (?:/A=(?<altitude>\d{6}))?\s* (?:!W((?<latitude_enhancement>\d)(?<longitude_enhancement>\d))!)? (?:\s|$) )x
Instance Attribute Summary collapse
-
#altitude ⇒ Object
readonly
WGS84 meters above mean sea level QNH.
-
#callsign ⇒ Object
readonly
origin callsign.
-
#ground_speed ⇒ Object
readonly
kilometers per hour.
-
#heading ⇒ Object
readonly
degrees from 1 to 360.
-
#latitude ⇒ Object
readonly
WGS84 degrees from -90 (S) to 90 (N).
-
#longitude ⇒ Object
readonly
WGS84 degrees from -180 (W) to 180 (E).
-
#raw ⇒ Object
readonly
Returns the value of attribute raw.
-
#receiver ⇒ Object
readonly
receiver callsign.
-
#time ⇒ Object
readonly
zulu/UTC time with date.
Class Method Summary collapse
Instance Method Summary collapse
Instance Attribute Details
#altitude ⇒ Object
WGS84 meters above mean sea level QNH
41 42 43 |
# File 'lib/ogn_client/message.rb', line 41 def altitude @altitude end |
#callsign ⇒ Object
origin callsign
36 37 38 |
# File 'lib/ogn_client/message.rb', line 36 def callsign @callsign end |
#ground_speed ⇒ Object
kilometers per hour
43 44 45 |
# File 'lib/ogn_client/message.rb', line 43 def ground_speed @ground_speed end |
#heading ⇒ Object
degrees from 1 to 360
42 43 44 |
# File 'lib/ogn_client/message.rb', line 42 def heading @heading end |
#latitude ⇒ Object
WGS84 degrees from -90 (S) to 90 (N)
40 41 42 |
# File 'lib/ogn_client/message.rb', line 40 def latitude @latitude end |
#longitude ⇒ Object
WGS84 degrees from -180 (W) to 180 (E)
39 40 41 |
# File 'lib/ogn_client/message.rb', line 39 def longitude @longitude end |
#raw ⇒ Object (readonly)
Returns the value of attribute raw.
35 36 37 |
# File 'lib/ogn_client/message.rb', line 35 def raw @raw end |
#receiver ⇒ Object
receiver callsign
37 38 39 |
# File 'lib/ogn_client/message.rb', line 37 def receiver @receiver end |
#time ⇒ Object
zulu/UTC time with date
38 39 40 |
# File 'lib/ogn_client/message.rb', line 38 def time @time end |
Class Method Details
.parse(raw, date: nil) ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'lib/ogn_client/message.rb', line 45 def self.parse(raw, date: nil) fail(OGNClient::MessageError, "raw message must be String but is #{raw.class}") unless raw.is_a? String raw = raw.chomp.force_encoding('ASCII-8BIT').encode('UTF-8') OGNClient::SenderBeacon.new.send(:parse, raw, date: date) || OGNClient::ReceiverStatus.new.send(:parse, raw, date: date) || OGNClient::ReceiverBeacon.new.send(:parse, raw, date: date) || OGNClient::Comment.new.send(:parse, raw) || fail(OGNClient::MessageError, "message payload parsing failed: `#{raw}'") end |
Instance Method Details
#to_s ⇒ Object
55 56 57 |
# File 'lib/ogn_client/message.rb', line 55 def to_s @raw end |