Parsing a new NMEA device.

Matt Blecha3 years ago

I have the following HEX from an Inseego Skyus 160 reporting NMEA. Can anyone help me get it to parse so traccar will recognize it? I've run it through the HEX Decoder and there is a valid $IDENT, but traccar doesn't seem to recognize the device ID.

244944454e542c313234352a37632447504747412c3030353630362e302c333934312e3832383838382c4e2c31303434382e3834313732342c572c312c30392c302e392c313638332e392c4d2c2d32312e302c4d2c2c2a35302447504753412c412c322c30322c30362c31332c31342c31372c31392c32342c32382c33302c2c2c2c312e322c302e392c302e382a33332447504753562c342c312c31352c30312c30392c3033362c32312c30322c31362c3139392c32352c30332c31302c3037332c32332c30362c34372c3137322c33302a37302447504753562c342c322c31352c31332c30362c3232342c32392c31342c34302c3039392c32362c31352c30312c3235382c32312c31372c36332c3032392c33342a37332447504753562c342c332c31352c31392c37342c3330392c33372c32322c30362c3034392c32342c32342c33352c3239392c33312c32382c34392c3039312c32342a37422447504753562c342c342c31352c33302c31302c3136302c32392c34362c2c2c33322c31322c30372c3239382c2a3737244750524d432c3030353630362e302c412c333934312e3832383838382c4e2c31303434382e3834313732342c572c302e302c302e302c3130303232312c372e352c452c412a31302447505654472c302e302c542c3335322e352c4d2c302e302c4e2c302e302c4b2c412a32322447505a44412c3030353630362e30302c31302c30322c323032312c30302c35362a3632
Anton Tananaev3 years ago

Traccar logs?

Matt Blecha3 years ago

Here's the line I pulled it from:

2021-02-10 00:56:09  INFO: [b6906481: t55 < xxx.xxx.xxx.xxx] HEX: 244944454e542c313234352a37632447504747412c3030353630362e302c333934312e3832383838382c4e2c31303434382e3834313732342c572c312c30392c302e392c313638332e392c4d2c2d32312e302c4d2c2c2a35302447504753412c412c322c30322c30362c31332c31342c31372c31392c32342c32382c33302c2c2c2c312e322c302e392c302e382a33332447504753562c342c312c31352c30312c30392c3033362c32312c30322c31362c3139392c32352c30332c31302c3037332c32332c30362c34372c3137322c33302a37302447504753562c342c322c31352c31332c30362c3232342c32392c31342c34302c3039392c32362c31352c30312c3235382c32312c31372c36332c3032392c33342a37332447504753562c342c332c31352c31392c37342c3330392c33372c32322c30362c3034392c32342c32342c33352c3239392c33312c32382c34392c3039312c32342a37422447504753562c342c342c31352c33302c31302c3136302c32392c34362c2c2c33322c31322c30372c3239382c2a3737244750524d432c3030353630362e302c412c333934312e3832383838382c4e2c31303434382e3834313732342c572c302e302c302e302c3130303232312c372e352c452c412a31302447505654472c302e302c542c3335322e352c4d2c302e302c4e2c302e302c4b2c412a32322447505a44412c3030353630362e30302c31302c30322c323032312c30302c35362a3632

And here's what the decoder outputs:

$IDENT,1245*7c$GPGGA,005606.0,3941.828888,N,10448.841724,W,1,09,0.9,1683.9,M,-21.0,M,,*50$GPGSA,A,2,02,06,13,14,17,19,24,28,30,,,,1.2,0.9,0.8*33$GPGSV,4,1,15,01,09,036,21,02,16,199,25,03,10,073,23,06,47,172,30*70$GPGSV,4,2,15,13,06,224,29,14,40,099,26,15,01,258,21,17,63,029,34*73$GPGSV,4,3,15,19,74,309,37,22,06,049,24,24,35,299,31,28,49,091,24*7B$GPGSV,4,4,15,30,10,160,29,46,,,32,12,07,298,*77$GPRMC,005606.0,A,3941.828888,N,10448.841724,W,0.0,0.0,100221,7.5,E,A*10$GPVTG,0.0,T,352.5,M,0.0,N,0.0,K,A*22$GPZDA,005606.00,10,02,2021,00,56*62
Anton Tananaev3 years ago

I think the biggest issue here is that the messages are not divided by line breaks.

Matt Blecha3 years ago

Oh, joy!

I'm not great with NMEA, I'm more used to dealing with the freematics devices and mucking about with their output. I assume that line breaks are going to be important, then?

Anton Tananaev3 years ago

Yes, line breaks are needed to know where one message ends and the other begins.

Matt Blecha3 years ago

Right, separating out the sentences.

I'm reading specs now. I'm guessing that the *<hex number> at the end of each sentence is supposed to be the checksum that's mentioned?

Anton Tananaev3 years ago

Yes, that's a checksum.

Matt Blecha3 years ago

ROIGHT THEN! Time to go chew some manufacturer behind!

Leif Neland3 years ago

"Yes, line breaks are needed to know where one message ends and the other begins."

Would it be possible to be forgiving, and accept $ or ! as the start of a message, and thereby the end of the previous message?

Anton Tananaev3 years ago

It's not as easy as that. It will break some other formats that we already support.

Leif Neland3 years ago

As far as I can see, all messages start with $GP.

I think that should be possible to, if processing fail, then replace $GP with \n$GP and try again.
Also, if number of \n = 1 then do the insert of \n,

But I haven't examined the code, so I could be wrong ;-)

Matt Blecha3 years ago

That would put traccar out of spec with the standard. NMEA standard requires that each line start with the starting marker of $ or !, yes, but they must also end with an <LF> signifying the termination of the NMEA Sentence. As $ or ! can be used in other parts of the sentence, you could end up with corrupted sentences and cause unforeseeable problems within traccar or another application.

In addition, it's often a developer "being forgiving" that leads to software having security holes. See for reference: https://xkcd.com/327/

arronlorenza year ago

Matt and anyone else sho are seeing this as the only search result for Skyus and Traccar. NMEA isn't working for me but I put the SKYUS 160 into taip mode and got data flowing to port 5031.

Doesn't quite answer your question but for what I need this worked fine. I have a handful of these devices in vehicles and just wanted basic location reporting.