diff options
Diffstat (limited to 'src/main/java/org/traccar')
5 files changed, 43 insertions, 40 deletions
diff --git a/src/main/java/org/traccar/model/Network.java b/src/main/java/org/traccar/model/Network.java index 2d56950f1..4d67fc5d8 100644 --- a/src/main/java/org/traccar/model/Network.java +++ b/src/main/java/org/traccar/model/Network.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 - 2019 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. @@ -30,6 +30,10 @@ public class Network { addCellTower(cellTower); } + public Network(WifiAccessPoint wifiAccessPoint) { + addWifiAccessPoint(wifiAccessPoint); + } + private Integer homeMobileCountryCode; public Integer getHomeMobileCountryCode() { diff --git a/src/main/java/org/traccar/protocol/GoSafeProtocolDecoder.java b/src/main/java/org/traccar/protocol/GoSafeProtocolDecoder.java index 95ef18f20..8164a016d 100644 --- a/src/main/java/org/traccar/protocol/GoSafeProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/GoSafeProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2018 Anton Tananaev (anton@traccar.org) + * Copyright 2015 - 2019 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. @@ -30,7 +30,8 @@ import org.traccar.model.Network; import org.traccar.model.Position; import java.net.SocketAddress; -import java.util.Date; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.LinkedList; import java.util.List; import java.util.regex.Pattern; @@ -45,8 +46,6 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { .text("*GS") // header .number("d+,") // protocol version .number("(d+),") // imei - .number("(dd)(dd)(dd)") // time (hhmmss) - .number("(dd)(dd)(dd),") // date (ddmmyy) .expression("([^#]*)#?") // data .compile(); @@ -68,6 +67,7 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { .compile(); private void decodeFragment(Position position, String fragment) { + int dataIndex = fragment.indexOf(':'); int index = 0; String[] values; @@ -76,6 +76,7 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { } else { values = fragment.substring(dataIndex + 1).split(";"); } + switch (fragment.substring(0, dataIndex)) { case "GPS": position.setValid(values[index++].equals("A")); @@ -171,42 +172,27 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { } } - private Object decodeData(DeviceSession deviceSession, Date time, String data) { - - List<Position> positions = new LinkedList<>(); - Position position = null; - int index = 0; - String[] fragments = data.split(","); + private Position decodePosition(DeviceSession deviceSession, String sentence) throws ParseException { - while (index < fragments.length) { + Position position = new Position(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); - if (fragments[index].isEmpty() || Character.isDigit(fragments[index].charAt(0))) { - - if (position != null) { - positions.add(position); - } + int index = 0; + String[] fragments = sentence.split(","); - position = new Position(getProtocolName()); - position.setDeviceId(deviceSession.getDeviceId()); - position.setTime(time); + position.setTime(new SimpleDateFormat("HHmmssddMMyy").parse(fragments[index++])); - if (!fragments[index++].isEmpty()) { - position.set(Position.KEY_EVENT, Integer.parseInt(fragments[index - 1])); + for (; index < fragments.length; index += 1) { + if (!fragments[index].isEmpty()) { + if (Character.isDigit(fragments[index].charAt(0))) { + position.set(Position.KEY_EVENT, Integer.parseInt(fragments[index])); + } else { + decodeFragment(position, fragments[index]); } - - } else { - - decodeFragment(position, fragments[index++]); - } - } - if (position != null) { - positions.add(position); - } - - return positions; + return position; } @Override @@ -256,12 +242,11 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { } else { - Date time = new Date(); - if (parser.hasNext(6)) { - time = parser.nextDateTime(Parser.DateTimeFormat.HMS_DMY); + List<Position> positions = new LinkedList<>(); + for (String item : parser.next().split("$")) { + positions.add(decodePosition(deviceSession, item)); } - - return decodeData(deviceSession, time, parser.next()); + return positions; } } diff --git a/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java index d942edbfe..ee28a5062 100644 --- a/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Gt06ProtocolDecoder.java @@ -814,7 +814,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { getLastLocation(position, null); if (subType == 0x00) { - position.set(Position.KEY_POWER, buf.readUnsignedShort() * 0.01); + position.set(Position.PREFIX_ADC + 1, buf.readUnsignedShort() * 0.01); return position; } else if (subType == 0x05) { int flags = buf.readUnsignedByte(); diff --git a/src/main/java/org/traccar/protocol/Minifinder2ProtocolDecoder.java b/src/main/java/org/traccar/protocol/Minifinder2ProtocolDecoder.java index 989aa32b9..75c8b11d3 100644 --- a/src/main/java/org/traccar/protocol/Minifinder2ProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/Minifinder2ProtocolDecoder.java @@ -33,6 +33,7 @@ import org.traccar.model.WifiAccessPoint; import java.net.SocketAddress; import java.nio.charset.StandardCharsets; +import java.util.Date; public class Minifinder2ProtocolDecoder extends BaseProtocolDecoder { @@ -149,6 +150,10 @@ public class Minifinder2ProtocolDecoder extends BaseProtocolDecoder { mac.substring(0, mac.length() - 1), rssi)); } break; + case 0x24: + position.setTime(new Date(buf.readUnsignedIntLE() * 1000)); + position.set(Position.KEY_STATUS, buf.readUnsignedIntLE()); + break; case 0x40: buf.readUnsignedIntLE(); // timestamp int heartRate = buf.readUnsignedByte(); diff --git a/src/main/java/org/traccar/protocol/SigfoxProtocolDecoder.java b/src/main/java/org/traccar/protocol/SigfoxProtocolDecoder.java index e9a943e0e..0e0d8d608 100644 --- a/src/main/java/org/traccar/protocol/SigfoxProtocolDecoder.java +++ b/src/main/java/org/traccar/protocol/SigfoxProtocolDecoder.java @@ -16,6 +16,7 @@ package org.traccar.protocol; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.handler.codec.http.FullHttpRequest; @@ -25,7 +26,9 @@ import org.traccar.DeviceSession; import org.traccar.Protocol; import org.traccar.helper.DataConverter; import org.traccar.helper.UnitsConverter; +import org.traccar.model.Network; import org.traccar.model.Position; +import org.traccar.model.WifiAccessPoint; import javax.json.Json; import javax.json.JsonObject; @@ -104,7 +107,9 @@ public class SigfoxProtocolDecoder extends BaseHttpProtocolDecoder { position.set(Position.KEY_BATTERY_LEVEL, buf.readUnsignedByte()); break; case 0x06: - buf.skipBytes(7); // wifi + String mac = ByteBufUtil.hexDump(buf.readSlice(6)).replaceAll("(..)", "$1:"); + position.setNetwork(new Network(WifiAccessPoint.from( + mac.substring(0, mac.length() - 1), buf.readUnsignedByte()))); break; case 0x07: buf.skipBytes(10); // wifi extended @@ -126,6 +131,10 @@ public class SigfoxProtocolDecoder extends BaseHttpProtocolDecoder { buf.release(); } + if (position.getLatitude() == 0 && position.getLongitude() == 0) { + getLastLocation(position, position.getDeviceTime()); + } + if (json.containsKey("rssi")) { position.set(Position.KEY_RSSI, json.getJsonNumber("rssi").doubleValue()); } |