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 |