diff options
Diffstat (limited to 'src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java')
-rw-r--r-- | src/main/java/org/traccar/protocol/TeltonikaProtocolDecoder.java | 59 |
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))); } |