From 9879e67c1f522fe6940b7a3ca5fde5c93875dcfb Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 29 Mar 2017 04:58:23 +1300 Subject: Handle no power value from Telic --- src/org/traccar/protocol/TelicProtocolDecoder.java | 9 +++++++-- test/org/traccar/protocol/TelicProtocolDecoderTest.java | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/org/traccar/protocol/TelicProtocolDecoder.java b/src/org/traccar/protocol/TelicProtocolDecoder.java index bbd4b0574..8207e5956 100644 --- a/src/org/traccar/protocol/TelicProtocolDecoder.java +++ b/src/org/traccar/protocol/TelicProtocolDecoder.java @@ -54,7 +54,7 @@ public class TelicProtocolDecoder extends BaseProtocolDecoder { .expression("(?:[^,]*,){7}") .number("(d+),") // battery .expression("[^,]*,") - .number("(d+)") // external + .number("(d+)?") // external .any() .compile(); @@ -83,6 +83,8 @@ public class TelicProtocolDecoder extends BaseProtocolDecoder { @Override protected Object decode( Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { + org.traccar.helper.PatternUtil.MatchResult matchResult = + org.traccar.helper.PatternUtil.checkPattern(PATTERN.pattern(), (String) msg); Parser parser = new Parser(PATTERN, (String) msg); if (!parser.matches()) { @@ -130,7 +132,10 @@ public class TelicProtocolDecoder extends BaseProtocolDecoder { } position.set(Position.KEY_BATTERY, parser.nextInt()); - position.set(Position.KEY_POWER, parser.nextInt()); + + if (parser.hasNext()) { + position.set(Position.KEY_POWER, parser.nextInt()); + } return position; } diff --git a/test/org/traccar/protocol/TelicProtocolDecoderTest.java b/test/org/traccar/protocol/TelicProtocolDecoderTest.java index 6c3c30fea..66ad3db79 100644 --- a/test/org/traccar/protocol/TelicProtocolDecoderTest.java +++ b/test/org/traccar/protocol/TelicProtocolDecoderTest.java @@ -10,6 +10,12 @@ public class TelicProtocolDecoderTest extends ProtocolTest { TelicProtocolDecoder decoder = new TelicProtocolDecoder(new TelicProtocol()); + verifyPosition(decoder, text( + "092020621198,280317084155,0,280317084156,259762,444356,3,42,278,9,,,89,56793311,,0110,00,67,0,,0400")); + + verifyPosition(decoder, text( + "502091227598,280317084149,0,280317084149,261756,444358,3,33,286,9,,,77,3143031,,0010,00,171,240,0,0406")); + verifyPosition(decoder, text( "232027997498,230317083900,0,230317083900,260105,444112,3,22,259,,,,111,61110817,226,01,00,255,218,00000000000000")); -- cgit v1.2.3