diff options
Diffstat (limited to 'src/org/traccar')
-rw-r--r-- | src/org/traccar/model/Position.java | 19 | ||||
-rw-r--r-- | src/org/traccar/protocol/MeiligaoProtocolDecoder.java | 62 |
2 files changed, 67 insertions, 14 deletions
diff --git a/src/org/traccar/model/Position.java b/src/org/traccar/model/Position.java index 8ca2588e2..3e8cb27bc 100644 --- a/src/org/traccar/model/Position.java +++ b/src/org/traccar/model/Position.java @@ -60,11 +60,26 @@ public class Position extends Message { public static final String KEY_ARMED = "armed"; public static final String KEY_ACCURACY = "accuracy"; public static final String KEY_GEOFENCE = "geofence"; - public static final String KEY_DTCS = "dtcs"; public static final String KEY_OBD_SPEED = "obdSpeed"; public static final String KEY_OBD_ODOMETER = "obdOdometer"; - + public static final String KEY_OBD_ENGINE_LOAD = "engineLoad"; + public static final String KEY_OBD_AVERAGE_FUEL = "averageFuelConsumition"; + public static final String KEY_OBD_DRIVING_RANGE = "drivingRange"; + public static final String KEY_OBD_SINGLE_FUEL_CONSUMPTION = "singleFuelConsumption"; + public static final String KEY_OBD_TOTAL_FUEL_CONSUMPTION = "totalFuelConsumption"; + public static final String KEY_OBD_CURRENT_ERROR = "currentError"; + public static final String KEY_OBD_HARSH_ACCELERATION = "harshAcelerationNo"; + public static final String KEY_OBD_HARSH_BREAK = "harshBreakerNo"; + public static final String KEY_OBD_TOTAL_IGNITION = "totalIgnitionNo"; + public static final String KEY_OBD_TOTAL_DRIVING_TIME = "totalDrivingTime"; + public static final String KEY_OBD_TOTAL_IDLING_TIME = "totalIdlingTime"; + public static final String KEY_OBD_AVERAGE_HOT_START = "averageHotStartTime"; + public static final String KEY_OBD_AVERAGE_SPEED = "averageSpeed"; + public static final String KEY_OBD_HISTORY_HIGHT_SPEED = "historyHightestSpeed"; + public static final String KEY_OBD_HISTORY_HIGHT_RPM = "historyHightestRPM"; + public static final String KEY_OBD_TOTAL_HARSH_ACCELERATION = "totalHarshAccerleration"; + public static final String KEY_OBD_TOTAL_HARSH_BRAKE = "totalHarshBrake"; public static final String KEY_RESULT = "result"; // Starts with 1 not 0 diff --git a/src/org/traccar/protocol/MeiligaoProtocolDecoder.java b/src/org/traccar/protocol/MeiligaoProtocolDecoder.java index 9915eab8c..d3a3a2b3a 100644 --- a/src/org/traccar/protocol/MeiligaoProtocolDecoder.java +++ b/src/org/traccar/protocol/MeiligaoProtocolDecoder.java @@ -87,15 +87,27 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { .number("(d+.d+),") // throttle .number("(d+.d+),") // engine load .number("(-?d+),") // coolant temp - .number("d+.d+,") // instantaneous fuel + .number("(d+.d+),") // instantaneous fuel .number("(d+.d+),") // average fuel .number("(d+.d+),") // driving range .number("(d+.?d*),") // odometer - .number("(d+.d+),") - .number("(d+.d+),") + .number("(d+.d+),") // Single Fuel Consumption + .number("(d+.d+),") // Total Fuel Consumption .number("(d+),") // error code count - .number("d+,") // harsh acceleration count - .number("d+") // harsh break count + .number("(d+),") // harsh acceleration count + .number("(d+)") // harsh break count + .compile(); + + private static final Pattern PATTERN_OBDA = new PatternBuilder() + .number("(d+),") // Total ignition + .number("(d+.d+),") // Total driving time + .number("(d+.d+),") // Total idling time + .number("(d+),") // Average hot start time + .number("(d+),") // Average speed + .number("(d+),") // history hightest speed + .number("(d+),") // history hightest rpm + .number("(d+),") // total harsh acceleration + .number("(d+)") // total harsh break n0 .compile(); public static final int MSG_HEARTBEAT = 0x0001; @@ -110,6 +122,7 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { public static final int MSG_RFID = 0x9966; public static final int MSG_OBD_RT = 0x9901; + public static final int MSG_OBD_RTA = 0x9902; private DeviceSession identify(ChannelBuffer buf, Channel channel, SocketAddress remoteAddress) { StringBuilder builder = new StringBuilder(); @@ -281,14 +294,37 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_RPM, parser.nextInt()); position.set(Position.KEY_OBD_SPEED, parser.nextInt()); position.set(Position.KEY_THROTTLE, parser.nextDouble()); - position.set("engineLoad", parser.nextDouble()); + position.set(Position.KEY_OBD_ENGINE_LOAD, parser.nextDouble()); position.set(Position.PREFIX_TEMP + 1, parser.nextInt()); position.set(Position.KEY_FUEL_CONSUMPTION, parser.nextDouble()); - position.set("drivingRange", parser.nextDouble() * 1000); - position.set(Position.KEY_ODOMETER, parser.nextDouble() * 1000); - position.set("singleFuelConsumption", parser.nextDouble()); - position.set("totalFuelConsumption", parser.nextDouble()); + position.set(Position.KEY_OBD_AVERAGE_FUEL, parser.nextDouble()); + position.set(Position.KEY_OBD_DRIVING_RANGE, parser.nextDouble()); + position.set(Position.KEY_ODOMETER, parser.nextDouble()); + position.set(Position.KEY_OBD_SINGLE_FUEL_CONSUMPTION, parser.nextDouble()); + position.set(Position.KEY_OBD_TOTAL_FUEL_CONSUMPTION, parser.nextDouble()); + position.set(Position.KEY_OBD_CURRENT_ERROR, parser.nextInt()); + position.set(Position.KEY_OBD_HARSH_ACCELERATION, parser.nextInt()); + position.set(Position.KEY_OBD_HARSH_BREAK, parser.nextInt()); + return position; + } + + private Position decodeObdA(Position position, String sentence) { + Parser parser = new Parser(PATTERN_OBDA, sentence); + if (!parser.matches()) { + return null; + } + + getLastLocation(position, null); + position.set(Position.KEY_OBD_TOTAL_IGNITION, parser.nextInt()); + position.set(Position.KEY_OBD_TOTAL_DRIVING_TIME, parser.nextDouble()); + position.set(Position.KEY_OBD_TOTAL_IDLING_TIME, parser.nextDouble()); + position.set(Position.KEY_OBD_AVERAGE_HOT_START, parser.nextInt()); + position.set(Position.KEY_OBD_AVERAGE_SPEED, parser.nextInt()); + position.set(Position.KEY_OBD_HISTORY_HIGHT_SPEED, parser.nextInt()); + position.set(Position.KEY_OBD_HISTORY_HIGHT_RPM, parser.nextInt()); + position.set(Position.KEY_OBD_TOTAL_HARSH_ACCELERATION, parser.nextInt()); + position.set(Position.KEY_OBD_TOTAL_HARSH_BRAKE, parser.nextInt()); return position; } @@ -305,11 +341,11 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { if (channel != null) { if (command == MSG_LOGIN) { - response = ChannelBuffers.wrappedBuffer(new byte[] {0x01}); + response = ChannelBuffers.wrappedBuffer(new byte[]{0x01}); sendResponse(channel, remoteAddress, id, MSG_LOGIN_RESPONSE, response); return null; } else if (command == MSG_HEARTBEAT) { - response = ChannelBuffers.wrappedBuffer(new byte[] {0x01}); + response = ChannelBuffers.wrappedBuffer(new byte[]{0x01}); sendResponse(channel, remoteAddress, id, MSG_HEARTBEAT, response); return null; } else if (command == MSG_SERVER) { @@ -353,6 +389,8 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { return decodeRfid(position, sentence); } else if (command == MSG_OBD_RT) { return decodeObd(position, sentence); + } else if (command == MSG_OBD_RTA) { + return decodeObdA(position, sentence); } return null; |