aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java')
-rw-r--r--src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java59
1 files changed, 25 insertions, 34 deletions
diff --git a/src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java b/src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java
index 40b769869..0ea02b157 100644
--- a/src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java
+++ b/src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java
@@ -43,9 +43,9 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder {
private static final int IMAGE_PACKET_MAX = 2048;
- private boolean connectionless;
+ private final boolean connectionless;
private boolean extended;
- private Map<Long, ByteBuf> photos = new HashMap<>();
+ private final Map<Long, ByteBuf> photos = new HashMap<>();
public void setExtended(boolean extended) {
this.extended = extended;
@@ -208,7 +208,6 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder {
position.set(Position.PREFIX_ADC + 2, readValue(buf, length, false));
break;
case 16:
- case 87:
position.set(Position.KEY_ODOMETER, readValue(buf, length, false));
break;
case 17:
@@ -223,9 +222,6 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder {
case 21:
position.set(Position.KEY_RSSI, readValue(buf, length, false));
break;
- case 24:
- readValue(buf, length, false); // speed
- break;
case 25:
case 26:
case 27:
@@ -255,34 +251,9 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder {
case 80:
position.set("workMode", readValue(buf, length, false));
break;
- case 81:
- position.set(Position.KEY_OBD_SPEED, readValue(buf, length, false));
- break;
- case 82:
- position.set(Position.KEY_THROTTLE, readValue(buf, length, false));
- break;
- case 83:
- position.set(Position.KEY_FUEL_USED, readValue(buf, length, false) * 0.1);
- break;
- case 84:
- position.set(Position.KEY_FUEL_LEVEL, readValue(buf, length, false) * 0.1);
- break;
- case 85:
- position.set(Position.KEY_RPM, readValue(buf, length, false));
- break;
case 90:
position.set(Position.KEY_DOOR, readValue(buf, length, false));
break;
- case 110:
- position.set(Position.KEY_FUEL_CONSUMPTION, readValue(buf, length, true) * 0.1);
- break;
- case 113:
- if (length == 1) {
- position.set(Position.KEY_BATTERY_LEVEL, readValue(buf, length, true));
- } else {
- position.set(Position.PREFIX_IO + id, readValue(buf, length, false));
- }
- break;
case 115:
position.set(Position.KEY_COOLANT_TEMP, readValue(buf, length, true) * 0.1);
break;
@@ -311,9 +282,6 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder {
case 199:
position.set(Position.KEY_ODOMETER_TRIP, readValue(buf, length, false));
break;
- case 235:
- position.set("oilLevel", readValue(buf, length, false));
- break;
case 236:
if (readValue(buf, length, false) == 1) {
position.set(Position.KEY_ALARM, Position.ALARM_OVERSPEED);
@@ -569,6 +537,29 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder {
int length = buf.readUnsignedShort();
if (id == 256) {
position.set(Position.KEY_VIN, buf.readSlice(length).toString(StandardCharsets.US_ASCII));
+ } else if (id == 385) {
+ ByteBuf data = buf.readSlice(length);
+ data.readUnsignedByte(); // data part
+ int index = 1;
+ while (data.isReadable()) {
+ int flags = data.readUnsignedByte();
+ if (BitUtil.from(flags, 4) > 0) {
+ position.set("beacon" + index + "Uuid", ByteBufUtil.hexDump(data.readSlice(16)));
+ position.set("beacon" + index + "Major", data.readUnsignedShort());
+ position.set("beacon" + index + "Minor", data.readUnsignedShort());
+ } else {
+ position.set("beacon" + index + "Namespace", ByteBufUtil.hexDump(data.readSlice(10)));
+ position.set("beacon" + index + "Instance", ByteBufUtil.hexDump(data.readSlice(6)));
+ }
+ position.set("beacon" + index + "Rssi", (int) data.readByte());
+ if (BitUtil.check(flags, 1)) {
+ position.set("beacon" + index + "Battery", data.readUnsignedShort() * 0.01);
+ }
+ if (BitUtil.check(flags, 2)) {
+ position.set("beacon" + index + "Temp", data.readUnsignedShort());
+ }
+ index += 1;
+ }
} else {
position.set(Position.PREFIX_IO + id, ByteBufUtil.hexDump(buf.readSlice(length)));
}