diff options
Diffstat (limited to 'src/main/java')
9 files changed, 74 insertions, 23 deletions
diff --git a/src/main/java/org/traccar/MainModule.java b/src/main/java/org/traccar/MainModule.java index 2b7fa5c61..350af6bd7 100644 --- a/src/main/java/org/traccar/MainModule.java +++ b/src/main/java/org/traccar/MainModule.java @@ -286,10 +286,9 @@ public class MainModule extends AbstractModule { @Singleton @Provides public static GeocoderHandler provideGeocoderHandler( - Config config, @Nullable Geocoder geocoder, IdentityManager identityManager, - StatisticsManager statisticsManager) { + Config config, @Nullable Geocoder geocoder, IdentityManager identityManager) { if (geocoder != null) { - return new GeocoderHandler(config, geocoder, identityManager, statisticsManager); + return new GeocoderHandler(config, geocoder, identityManager); } return null; } diff --git a/src/main/java/org/traccar/geocoder/JsonGeocoder.java b/src/main/java/org/traccar/geocoder/JsonGeocoder.java index 8c442def3..4f34fb973 100644 --- a/src/main/java/org/traccar/geocoder/JsonGeocoder.java +++ b/src/main/java/org/traccar/geocoder/JsonGeocoder.java @@ -18,6 +18,8 @@ package org.traccar.geocoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.traccar.Context; +import org.traccar.Main; +import org.traccar.database.StatisticsManager; import javax.json.JsonObject; import javax.ws.rs.ClientErrorException; @@ -95,6 +97,8 @@ public abstract class JsonGeocoder implements Geocoder { } } + Main.getInjector().getInstance(StatisticsManager.class).registerGeocoderRequest(); + Invocation.Builder request = Context.getClient().target(String.format(url, latitude, longitude)).request(); if (callback != null) { diff --git a/src/main/java/org/traccar/handler/CopyAttributesHandler.java b/src/main/java/org/traccar/handler/CopyAttributesHandler.java index 3cd7d144d..f386116b0 100644 --- a/src/main/java/org/traccar/handler/CopyAttributesHandler.java +++ b/src/main/java/org/traccar/handler/CopyAttributesHandler.java @@ -34,11 +34,6 @@ public class CopyAttributesHandler extends BaseDataHandler { protected Position handlePosition(Position position) { String attributesString = identityManager.lookupAttributeString( position.getDeviceId(), "processing.copyAttributes", "", false, true); - if (attributesString.isEmpty()) { - attributesString = Position.KEY_DRIVER_UNIQUE_ID; - } else { - attributesString += "," + Position.KEY_DRIVER_UNIQUE_ID; - } Position last = identityManager.getLastPosition(position.getDeviceId()); if (last != null) { for (String attribute : attributesString.split("[ ,]")) { diff --git a/src/main/java/org/traccar/handler/GeocoderHandler.java b/src/main/java/org/traccar/handler/GeocoderHandler.java index b96f01b3a..614cf97d6 100644 --- a/src/main/java/org/traccar/handler/GeocoderHandler.java +++ b/src/main/java/org/traccar/handler/GeocoderHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2019 Anton Tananaev (anton@traccar.org) + * Copyright 2012 - 2021 Anton Tananaev (anton@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,6 @@ import org.traccar.Context; import org.traccar.config.Config; import org.traccar.config.Keys; import org.traccar.database.IdentityManager; -import org.traccar.database.StatisticsManager; import org.traccar.geocoder.Geocoder; import org.traccar.model.Position; @@ -35,16 +34,14 @@ public class GeocoderHandler extends ChannelInboundHandlerAdapter { private final Geocoder geocoder; private final IdentityManager identityManager; - private final StatisticsManager statisticsManager; private final boolean ignorePositions; private final boolean processInvalidPositions; private final int geocoderReuseDistance; public GeocoderHandler( - Config config, Geocoder geocoder, IdentityManager identityManager, StatisticsManager statisticsManager) { + Config config, Geocoder geocoder, IdentityManager identityManager) { this.geocoder = geocoder; this.identityManager = identityManager; - this.statisticsManager = statisticsManager; ignorePositions = Context.getConfig().getBoolean(Keys.GEOCODER_IGNORE_POSITIONS); processInvalidPositions = config.getBoolean(Keys.GEOCODER_PROCESS_INVALID_POSITIONS); geocoderReuseDistance = config.getInteger(Keys.GEOCODER_REUSE_DISTANCE, 0); @@ -65,10 +62,6 @@ public class GeocoderHandler extends ChannelInboundHandlerAdapter { } } - if (statisticsManager != null) { - statisticsManager.registerGeocoderRequest(); - } - geocoder.getAddress(position.getLatitude(), position.getLongitude(), new Geocoder.ReverseGeocoderCallback() { @Override diff --git a/src/main/java/org/traccar/protocol/Gs100ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Gs100ProtocolDecoder.java index 28a42476c..69232dd55 100644 --- a/src/main/java/org/traccar/protocol/Gs100ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Gs100ProtocolDecoder.java @@ -99,15 +99,15 @@ public class Gs100ProtocolDecoder extends BaseProtocolDecoder { position.setLatitude(Integer.parseInt(coordinates.substring(10, 12)) + Integer.parseInt(coordinates.substring(12, 18)) * 0.0001 / 60); int flags = Integer.parseInt(coordinates.substring(9, 10), 16); - if (!BitUtil.check(flags, 4)) { + if (!BitUtil.check(flags, 3)) { position.setLongitude(-position.getLongitude()); } - if (!BitUtil.check(flags, 3)) { + if (!BitUtil.check(flags, 2)) { position.setLatitude(-position.getLatitude()); } String other = ByteBufUtil.hexDump(buf.readSlice(4)); - position.setSpeed(Integer.parseInt(other.substring(0, 5))); + position.setSpeed(Integer.parseInt(other.substring(0, 5)) * 0.01); position.setCourse(Integer.parseInt(other.substring(5, 8))); } else { diff --git a/src/main/java/org/traccar/protocol/ItsProtocolDecoder.java b/src/main/java/org/traccar/protocol/ItsProtocolDecoder.java index a7e9200f1..9eed58347 100644 --- a/src/main/java/org/traccar/protocol/ItsProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/ItsProtocolDecoder.java @@ -79,7 +79,7 @@ public class ItsProtocolDecoder extends BaseProtocolDecoder { .number("(d+.?d*),") // power .number("(d+.?d*),") // battery .number("([01]),") // emergency - .expression("[CO]?,") // tamper + .expression("[COYN]?,") // tamper .expression("(.*),") // cells .number("([012]{4}),") // inputs .number("([01]{2}),") // outputs @@ -100,6 +100,12 @@ public class ItsProtocolDecoder extends BaseProtocolDecoder { .number("d+,") // index .number("(d+.?d*),") // adc1 .number("(d+.?d*),") // adc2 + .or() + .number("(d+.d+),") // adc1 + .number("(d+),") // odometer + .number("(d{6}),") // index + .expression("([^,]+),") // response format + .expression("([^,]+),") // response .groupEnd("?") .groupEnd("?") .or() @@ -270,6 +276,14 @@ public class ItsProtocolDecoder extends BaseProtocolDecoder { position.set(Position.PREFIX_ADC + 2, parser.nextDouble()); } + if (parser.hasNext(5)) { + position.set(Position.PREFIX_ADC + 1, parser.nextDouble()); + position.set(Position.KEY_ODOMETER, parser.nextInt()); + position.set(Position.KEY_INDEX, parser.nextInt()); + position.set("responseFormat", parser.next()); + position.set("response", parser.next()); + } + if (parser.hasNext(2)) { position.setAltitude(parser.nextDouble()); position.setSpeed(UnitsConverter.knotsFromKph(parser.nextDouble())); diff --git a/src/main/java/org/traccar/protocol/StartekProtocolEncoder.java b/src/main/java/org/traccar/protocol/StartekProtocolEncoder.java index a96502f11..300004c5e 100644 --- a/src/main/java/org/traccar/protocol/StartekProtocolEncoder.java +++ b/src/main/java/org/traccar/protocol/StartekProtocolEncoder.java @@ -31,7 +31,7 @@ public class StartekProtocolEncoder extends StringProtocolEncoder { protected String formatCommand(Command command, String format, String... keys) { String uniqueId = getUniqueId(command.getDeviceId()); String payload = super.formatCommand(command, format, keys); - int length = uniqueId.length() + 1 + payload.length(); + int length = 1 + uniqueId.length() + 1 + payload.length(); String sentence = "$$:" + length + "," + uniqueId + "," + payload; return sentence + Checksum.sum(sentence) + "\r\n"; } diff --git a/src/main/java/org/traccar/protocol/UlbotechProtocol.java b/src/main/java/org/traccar/protocol/UlbotechProtocol.java index b99ec1cc6..dfe5235f0 100644 --- a/src/main/java/org/traccar/protocol/UlbotechProtocol.java +++ b/src/main/java/org/traccar/protocol/UlbotechProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2018 Anton Tananaev (anton@traccar.org) + * Copyright 2015 - 2021 Anton Tananaev (anton@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,14 +18,18 @@ package org.traccar.protocol; import org.traccar.BaseProtocol; import org.traccar.PipelineBuilder; import org.traccar.TrackerServer; +import org.traccar.model.Command; public class UlbotechProtocol extends BaseProtocol { public UlbotechProtocol() { + setSupportedDataCommands( + Command.TYPE_CUSTOM); addServer(new TrackerServer(false, getName()) { @Override protected void addProtocolHandlers(PipelineBuilder pipeline) { pipeline.addLast(new UlbotechFrameDecoder()); + pipeline.addLast(new UlbotechProtocolEncoder(UlbotechProtocol.this)); pipeline.addLast(new UlbotechProtocolDecoder(UlbotechProtocol.this)); } }); diff --git a/src/main/java/org/traccar/protocol/UlbotechProtocolEncoder.java b/src/main/java/org/traccar/protocol/UlbotechProtocolEncoder.java new file mode 100644 index 000000000..5528c7242 --- /dev/null +++ b/src/main/java/org/traccar/protocol/UlbotechProtocolEncoder.java @@ -0,0 +1,42 @@ +/* + * Copyright 2021 Anton Tananaev (anton@traccar.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.protocol; + +import io.netty.buffer.Unpooled; +import org.traccar.BaseProtocolEncoder; +import org.traccar.Protocol; +import org.traccar.model.Command; + +import java.nio.charset.StandardCharsets; + +public class UlbotechProtocolEncoder extends BaseProtocolEncoder { + + public UlbotechProtocolEncoder(Protocol protocol) { + super(protocol); + } + + @Override + protected Object encodeCommand(Command command) { + switch (command.getType()) { + case Command.TYPE_CUSTOM: + return Unpooled.copiedBuffer( + "*TS01," + command.getString(Command.KEY_DATA) + "#", StandardCharsets.US_ASCII); + default: + return null; + } + } + +} |