The NMEA protocol handler parses the NMEA 0183 protocol (f.e. from GPS devices). For input both GenericPush and GenericPull can be used in combination with File or UDP transport handler. This protocol can also be used for output, to write NMEA sentences.
Supported Sentences
ID | Description | Fields |
---|
DPT | Depth of Water | depth, offset |
GGA | Global Positioning System Fix Data. Time, Position and fix related data | time, latitude, latitudeHem, longitude, longitudeHem, gpsQuality, numberOfSattelites, horizontalDilution, antennaAltitude, antennaAltUnits, geoidalSeparation, geoidalSepUnits, ageOfDgps, differentialRefId |
GLL | Geographic Position – Latitude/Longitude | latitude, latitudeHem, longitude, longitudeHem, time, status |
HDG | Heading - Deviation & Variation | heading, deviation, deviationDir, variation, variationDir |
MTW | Water Temperature | degrees, unit |
MWV | Wind Speed and Angle | angle, reference, speed, speedUnit, status |
RMC | Recomended Minimum Navigation Information | time, status, latitude, latitudeHem, longitude, longitudeHem, speedOverGround, trackMadeGood, date, magneticVariation, magneticHem, signalIntegrity |
RPM | Revolutions | source, number, speed, pitch, status |
RSA | Rudder Sensor Angle | starboard, sbStatus, portboard, pbStatus |
TTM | Tracked Target Message | targetNumber, targetDistance, bearing, bearingUnit, targetSpeed, targetCourse, courseUnit, closestPointOfApproach, timeUntilClosestPoint, distanceUnit, targetLabel, targetStatus, referenceTarget, time, typeAcquisition |
VDM | AIS (Automatic Identification System) Message | fragmentsCount, fragmentId, messageId, channel, message, fillBits |
VDO | Same as VDM for own ship | see VDM |
VTG | Track Made Good and Ground Speed | headingTrack, trackReference, headingMagnetic, magneticReference, speedKnots, speedKnotsUnits, speedKilometers, speedKilometersUnits |
Default Fields
All above mentioned sentences have default fields derieved from Sentence.
Field | Type | Description |
---|
beginChar | char | The first character, the nmea sentence starts with (e.g. $ or !) |
talkerId | String | The two digit talker ID (Single character 'P' for proprietary sentence types) |
sentenceId | String | Mostly three digit sentence ID for standard types mentioned in first column in table above. (Or proprietary sentences, starting with three digit manufacturer code) |
Options
- delay: Delay of reading in milliseconds (Only in GenericPull mode)
Example
PQL
Code Block |
---|
theme | Eclipse |
---|
title | NMEA Protocol Handler |
---|
linenumbers | true |
---|
|
/// Read from File
input = ACCESS({source='FileInput', wrapper='GenericPull',
transport='File', protocol='NMEA', dataHandler='KeyValueObject',
options=[['filename','...'], ['delay','100']]
})
/// Read from UDP on Port 4711
inputGps = ACCESS({source='GpsInput', wrapper='GenericPush',
transport='UDPServer', protocol='NMEA', dataHandler='KeyValueObject',
options=[['port', '4711']]
})
/// UDP Broadcast on Port 6003
output = SENDER({sink='SinkGps', wrapper='GenericPush',
transport='UDPClient', protocol='NMEA', dataHandler='KeyValueObject',
options=[['host', '255.255.255.255'],['port', '6003']]
}, inputGps) |
CQL
Code Block |
---|
theme | Eclipse |
---|
language | sql |
---|
title | NMEA Protocol Handler |
---|
linenumbers | true |
---|
|
TODO |
Selection/Projection
If only GPS Positions are needed, only latitude and longitude informations can be extracted from the sentences. In "Supported Sentences" table can be seen, that the sentences GGA, GLL and RMC do have the needed information. To extract this information a Selection can be done, to get only these sentence types and a Projection, to extract only the needed informations.
PQL
Code Block |
---|
theme | Eclipse |
---|
title | NMEA Selection/Projection |
---|
linenumbers | true |
---|
|
/// Listen on UDP prot 4711
input = ACCESS({source='input', wrapper='GenericPush',
transport='UDPServer', protocol='NMEA', dataHandler='KeyValueObject',
options=[['port', '4711']]
})
/// Select GGA, GLL, RMC
gps = SELECT({predicate=KeyValuePredicate('sentenceId="GGA" OR sentenceId="GLL" OR sentenceId="RMC"')}, input)
/// Project only the latitude and longitude
latLon = PROJECT({paths = [['latitude', 'String'], ['longitude', 'String']]}, gps) |