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 |
EXT | X, Y and Z acceleration data (Proprietary sentence) | Acceleration X, Acceleration Y, Acceleration Z |
ASHR | Aiding Ship Heading Rotation (Proprietary sentence) | time, heading, roll angle, pitch angle, heave, roll angle accuracy, pitch angle accuracy, heading angle accuracy, aiding status, IMU status |
OSD | Own Ship Data | heading, status, course, course reference, vessel speed, speed reference, vessel set, vessel drift, speed units |
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
/// 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
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
/// 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)