If your device doesn't report UTC time, you have to configure gt06.timezone
to the timezone that your device is reporting in.
As you can see in the log entries, the sent data from the devices are in UTC.
I also used the unit tests to debug the decoding of the messages and all the time, the data of the devices is proper UTC time.
Please highlight where you see it. Make sure you highlight original HEX.
Uhm, I just used a unit test to decode the data and debugged to the point where the datetime is decoded.
I used a unit test like this:
@Test
public void testDecode3() throws Exception {
Gt06ProtocolDecoder decoder = new Gt06ProtocolDecoder(null);
Object object = binary("78782222150401143726cf0531348f01ba644000148e00e80100bf004d760000000467a0490d0a");
decoder.decode(null, null, object);
}
This provided me the information in Gt06ProtocolDecoder -> decodeGps (line 224) with the Datebuilder the proper information.
If you want me to show you which bytes are the datetime in this hex, then i'd first have to analyze how the gt06 protocol is set up and/or the decoder is working for finding this exact position.
I would recommend doing that. Find bytes. It's not hard.
78782222150401143726cf0531348f01ba644000148e00e80100bf004d760000000467a0490d0a
The date + time is in the emphasized 6 bytes.
This is "2021-04-01 20:55:38" UTC which i received at 2021-04-01 22:55:41 server time (GMT+2)
So according to this observation the device should properly send UTC but Traccar is storing it as "2021-04-01 18:55:38" in device and fixtime.
Interesting. The only possible explanation I see is that device reports wrong timezone here:
You can try overriding it.
Could be, but this message has the type 34 (hex 22), thus it isn't of the type "MSG_LOGIN".
Thus the timezone is set here:
https://github.com/traccar/traccar/blob/master/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java#L435-L443
and the rest of the message is decoded here:
https://github.com/traccar/traccar/blob/master/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java#L540-L544
Login is always the first message, so you should have it too.
I have found now the login message:
78780d0103526721021661620329de320d0a
7878 = basic
0d = 13 byte length (13 - 5 = 8 byte data length)
01 = message id (MSG_LOGIN)
Because data length is < 10 no further data is being processed
So the login message doesn't provide any information for the timezone. So the device is still using the data default timezone with UTC.
I also sent the data of this tracker for a short time to the demo3 tracker and there the data was displayed properly.
I'm really confused where to look further regarding this error.
I would recommend debugging. Maybe the timezone is set somewhere. Possibly on a group or something.
Thanks a lot for the feedback and hint with the group.
In the end there was a timezone set in a group which caused the wrong timezone for decoding the datetime. (Found it by debugging)
By the way: is there some official GT06 specification available somewhere? Until now my understanding of the GT06 protocol comes from reverse engineering the Traccar GT06 code.
Godlike, thanks again :)
Hello,
I am running a server in Europe with daylight saving zones (CEST = GMT+2).
The server has the time set with this date-output:
Thu Apr 1 22:55:10 CEST 2021
Thu, 01 Apr 2021 22:55:10 +0200
A gt06 device sends this data (according to the logs):
The problem is the data which is saved in the database.
This data package is saved as a position with the following entries:
servertime: 2021-04-01 20:55:41
devicetime: 2021-04-01 18:55:38
fixtime: 2021-04-01 18:55:38
According to my understanding the time in the logs with "2021-04-01 20:55:38" is UTC but it is stored yet with 2 hours prior in the database which is obviously wrong.
Until now i wasn't able to set up a unit test for simulating and debugging the input of this data into traccar. Same for using a dummy client to manually send this data for debugging.
It gets even more interesting with data from this device. Every 10 pakets a new position is additionally inserted into the database where the devicetime is right. In every of those added entries the network is "null".
Example:
servertime: 2021-04-01 20:56:36
devicetime: 2021-04-01 20:56:36
fixtime: 2021-04-01 18:56:08
network: "null" (as literal, no real null value)
But in the logs there is no data for this entry:
The attributes for those entries are always like this (beside the totalDistance):
{"status":68,"ignition":false,"charge":true,"blocked":false,"batteryLevel":100,"rssi":4,"distance":0.0,"totalDistance":1.004037229E7,"motion":false,"hours":506355000}
There is no entry for "gt06.timezone" in the configuration.
There is no entry regarding timezone in the configuration of this server.
There is no entry regarding timezone in the configuration of this device.
Conclusion: Traccar seems to substract 2 more hourse from the sent time of UTC from the device without any reason I can find.
Can you give me a hint how to fix/analyze/debug this?
Regards
Peter