Have you checked the official documentation first?
yes!
I am receiving events on port 6822 but it still says unknown device. I look at the database and it is registered correctly, but it does not record events and remains offline. logs:
2025-03-27 11:48:10 INFO: [Td90bbb0f: daycom < 177.69.143.153] VRL,2.608,000000,P,L,010104,000043,862749050347078,89550532010059595623|724|05|01|1a37|4e9a|10,0,4.103|87,n,5,001,00000002|0|0,29,999,0,00000000000000,724,05,1,1a37,4e9a,010,1a37,5e19,006,0000,0000,000,0000,0000,000,8\r\n
2025-03-27 11:51:20 INFO: [Tc8024723: daycom < 177.69.143.153] VRL,2.608,000000,P,L,010104,000108,862749050347078,89550532010059595623|724|05|01|1a37|5e19|30,0,4.087|85,n,15,001,80000002|0|0,30,999,0,00000000000000,724,05,1,1a37,5e19,030,1a37,5e17,010,1a37,5f30,008,1a37,57c4,005,8\r\n
2025-03-27 11:52:35 INFO: [Tea3610af: daycom < 177.69.143.154] VRL,2.608,000000,P,L,010104,000029,862749050347078,89550532010059595623|724|05|01|1a37|5e19|17,0,4.087|85,n,9,001,00000002|0|0,30,999,0,00000000000000,724,05,1,1a37,5e19,017,1a37,57c4,012,1a37,4e4c,009,0000,ffff,016,8\r\n
Most likely something is wrong with your implementation of the protocol.
public class DaycomProtocol extends BaseProtocol {
public DaycomProtocol() {
setSupportedDataCommands(
Command.TYPE_CUSTOM,
Command.TYPE_POSITION_SINGLE,
Command.TYPE_POSITION_PERIODIC
);
addServer(new TrackerServer(false, getName()) {
@Override
protected void addProtocolHandlers(PipelineBuilder pipeline, Protocol protocol) {
pipeline.addLast(new StringEncoder());
pipeline.addLast(new StringDecoder());
pipeline.addLast(new DaycomProtocolDecoder(protocol));
}
});
}
}
///--------------------------///
GNU nano 4.8 /home/tarkan/traccar/src/main/java/org/traccar/protocol/DaycomProtocolDecoder.java
package org.traccar.protocol;
import java.net.SocketAddress;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Arrays;
import io.netty.channel.Channel;
import org.traccar.BaseProtocolDecoder;
import org.traccar.helper.UnitsConverter;
import org.traccar.model.Position;
import org.traccar.session.DeviceSession;
public class DaycomProtocolDecoder extends BaseProtocolDecoder {
public DaycomProtocolDecoder(DaycomProtocol protocol) {
super(protocol);
}
@Override
protected Object decode(Channel channel, SocketAddress remoteAddress, Object msg) throws Exception {
String message = (String) msg;
System.out.println("[Daycom] Pacote recebido: " + message);
String[] parts = message.split(",");
System.out.println("[Daycom DEBUG] Mensagem recebida: " + message);
System.out.println("[Daycom DEBUG] Partes separadas: " + Arrays.toString(parts));
if (parts.length < 25 || !parts[0].equals("VRL")) {
return null;
}
String imei = parts[8].trim();
System.out.println("[Daycom] IMEI: " + imei);
DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, imei);
if (deviceSession == null) {
System.out.println("[Daycom] Dispositivo desconhecido: " + imei);
return null;
}
Position position = new Position(getProtocolName());
position.setDeviceId(deviceSession.getDeviceId());
Date currentDate = new Date();
position.setTime(currentDate);
position.setFixTime(currentDate);
String positionType = parts[4];
switch (positionType) {
case "G":
position.setLatitude(Double.parseDouble(parts[20]));
position.setLongitude(Double.parseDouble(parts[21]));
position.setSpeed(UnitsConverter.knotsFromKph(Double.parseDouble(parts[22])));
position.setValid(true);
break;
case "L":
case "Q":
Map<String, Object> attributes = new HashMap<>();
attributes.put("mcc", parts[20]);
attributes.put("mnc", parts[21]);
attributes.put("lac", parts[23]);
attributes.put("cid", parts[24]);
position.setAttributes(attributes);
position.setValid(false);
break;
}
try {
String batteryInfo = parts[11];
if (batteryInfo.contains("|")) {
String[] batteryParts = batteryInfo.split("\\|");
position.set("batteryVoltage", Double.parseDouble(batteryParts[0]));
if (batteryParts.length > 1) {
position.set("batteryPercentage", Integer.parseInt(batteryParts[1]));
}
} else {
position.set("batteryVoltage", Double.parseDouble(batteryInfo));
}
} catch (Exception ignored) {}
position.set("firmware", parts[1]);
position.set("moduleId", parts[2]);
position.set("signalQuality", parts[13]);
return position;
}
}
good morning, nem protocol xml custom correct ?
