Search in sources :

Example 41 with Parser

use of org.traccar.helper.Parser in project traccar by tananaev.

the class Gl100ProtocolDecoder method decode.

@Override
protected Object decode(Channel channel, SocketAddress remoteAddress, Object msg) throws Exception {
    String sentence = (String) msg;
    if (sentence.contains("AT+GTHBD=") && channel != null) {
        String response = "+RESP:GTHBD,GPRS ACTIVE,";
        response += sentence.substring(9, sentence.lastIndexOf(','));
        response += '\0';
        // heartbeat response
        channel.write(response);
    }
    Parser parser = new Parser(PATTERN, sentence);
    if (!parser.matches()) {
        return null;
    }
    Position position = new Position(getProtocolName());
    DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, parser.next());
    if (deviceSession == null) {
        return null;
    }
    position.setDeviceId(deviceSession.getDeviceId());
    position.setValid(parser.nextInt(0) == 0);
    position.setSpeed(parser.nextDouble(0));
    position.setCourse(parser.nextDouble(0));
    position.setAltitude(parser.nextDouble(0));
    position.setLongitude(parser.nextDouble(0));
    position.setLatitude(parser.nextDouble(0));
    position.setTime(parser.nextDateTime());
    return position;
}
Also used : DeviceSession(org.traccar.DeviceSession) Position(org.traccar.model.Position) Parser(org.traccar.helper.Parser)

Example 42 with Parser

use of org.traccar.helper.Parser in project traccar by tananaev.

the class Gl200TextProtocolDecoder method decodeWif.

private Object decodeWif(Channel channel, SocketAddress remoteAddress, String sentence) {
    Parser parser = new Parser(PATTERN_WIF, sentence);
    Position position = initPosition(parser, channel, remoteAddress);
    if (position == null) {
        return null;
    }
    getLastLocation(position, null);
    Network network = new Network();
    // count
    parser.nextInt();
    Matcher matcher = Pattern.compile("([0-9a-fA-F]{12}),(-?\\d+),,,,").matcher(parser.next());
    while (matcher.find()) {
        String mac = matcher.group(1).replaceAll("(..)", "$1:");
        network.addWifiAccessPoint(WifiAccessPoint.from(mac.substring(0, mac.length() - 1), Integer.parseInt(matcher.group(2))));
    }
    position.setNetwork(network);
    position.set(Position.KEY_BATTERY_LEVEL, parser.nextInt());
    return position;
}
Also used : Position(org.traccar.model.Position) Matcher(java.util.regex.Matcher) Network(org.traccar.model.Network) Parser(org.traccar.helper.Parser)

Example 43 with Parser

use of org.traccar.helper.Parser in project traccar by tananaev.

the class Gl200TextProtocolDecoder method decodeInf.

private Object decodeInf(Channel channel, SocketAddress remoteAddress, String sentence) {
    Parser parser = new Parser(PATTERN_INF, sentence);
    Position position = initPosition(parser, channel, remoteAddress);
    if (position == null) {
        return null;
    }
    switch(parser.nextHexInt()) {
        case 0x16:
        case 0x1A:
        case 0x12:
            position.set(Position.KEY_IGNITION, false);
            position.set(Position.KEY_MOTION, true);
            break;
        case 0x11:
            position.set(Position.KEY_IGNITION, false);
            position.set(Position.KEY_MOTION, false);
            break;
        case 0x21:
            position.set(Position.KEY_IGNITION, true);
            position.set(Position.KEY_MOTION, false);
            break;
        case 0x22:
            position.set(Position.KEY_IGNITION, true);
            position.set(Position.KEY_MOTION, true);
            break;
        case 0x41:
            position.set(Position.KEY_MOTION, false);
            break;
        case 0x42:
            position.set(Position.KEY_MOTION, true);
            break;
        default:
            break;
    }
    position.set(Position.KEY_RSSI, parser.nextInt());
    // odometer or external power
    parser.next();
    position.set(Position.KEY_BATTERY, parser.nextDouble());
    position.set(Position.KEY_CHARGE, parser.nextInt() == 1);
    position.set(Position.KEY_BATTERY_LEVEL, parser.nextInt());
    position.set(Position.PREFIX_TEMP + 1, parser.next());
    position.set(Position.PREFIX_ADC + 1, parser.next());
    position.set(Position.PREFIX_ADC + 2, parser.next());
    position.set(Position.KEY_INPUT, parser.next());
    position.set(Position.KEY_OUTPUT, parser.next());
    getLastLocation(position, parser.nextDateTime());
    position.set(Position.KEY_INDEX, parser.nextHexInt());
    return position;
}
Also used : Position(org.traccar.model.Position) Parser(org.traccar.helper.Parser)

Example 44 with Parser

use of org.traccar.helper.Parser in project traccar by tananaev.

the class Gl200TextProtocolDecoder method decodeBasic.

private Object decodeBasic(Channel channel, SocketAddress remoteAddress, String sentence, String type) {
    Parser parser = new Parser(PATTERN_BASIC, sentence);
    Position position = initPosition(parser, channel, remoteAddress);
    if (position == null) {
        return null;
    }
    int hdop = parser.nextInt();
    position.setValid(hdop > 0);
    position.set(Position.KEY_HDOP, hdop);
    position.setSpeed(UnitsConverter.knotsFromKph(parser.nextDouble(0)));
    position.setCourse(parser.nextDouble(0));
    position.setAltitude(parser.nextDouble(0));
    if (parser.hasNext(2)) {
        position.setLongitude(parser.nextDouble());
        position.setLatitude(parser.nextDouble());
    } else {
        getLastLocation(position, null);
    }
    if (parser.hasNext(6)) {
        position.setTime(parser.nextDateTime());
    }
    if (parser.hasNext(4)) {
        position.setNetwork(new Network(CellTower.from(parser.nextInt(), parser.nextInt(), parser.nextHexInt(), parser.nextHexInt())));
    }
    decodeDeviceTime(position, parser);
    switch(type) {
        case "PNA":
            position.set(Position.KEY_ALARM, Position.ALARM_POWER_ON);
            break;
        case "PFA":
            position.set(Position.KEY_ALARM, Position.ALARM_POWER_OFF);
            break;
        case "EPN":
            position.set(Position.KEY_ALARM, Position.ALARM_POWER_RESTORED);
            break;
        case "EPF":
            position.set(Position.KEY_ALARM, Position.ALARM_POWER_CUT);
            break;
        case "BPL":
            position.set(Position.KEY_ALARM, Position.ALARM_LOW_BATTERY);
            break;
        case "STT":
            position.set(Position.KEY_ALARM, Position.ALARM_MOVEMENT);
            break;
        case "SWG":
            position.set(Position.KEY_ALARM, Position.ALARM_GEOFENCE);
            break;
        case "TMP":
        case "TEM":
            position.set(Position.KEY_ALARM, Position.ALARM_TEMPERATURE);
            break;
        case "JDR":
        case "JDS":
            position.set(Position.KEY_ALARM, Position.ALARM_JAMMING);
            break;
        default:
            break;
    }
    return position;
}
Also used : Position(org.traccar.model.Position) Network(org.traccar.model.Network) WifiAccessPoint(org.traccar.model.WifiAccessPoint) Parser(org.traccar.helper.Parser)

Example 45 with Parser

use of org.traccar.helper.Parser in project traccar by tananaev.

the class Gl200TextProtocolDecoder method decodeFri.

private Object decodeFri(Channel channel, SocketAddress remoteAddress, String sentence) {
    Parser parser = new Parser(PATTERN_FRI, sentence);
    if (!parser.matches()) {
        return null;
    }
    DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, parser.next());
    if (deviceSession == null) {
        return null;
    }
    LinkedList<Position> positions = new LinkedList<>();
    String vin = parser.next();
    Integer power = parser.nextInt();
    Parser itemParser = new Parser(PATTERN_LOCATION, parser.next());
    while (itemParser.find()) {
        Position position = new Position(getProtocolName());
        position.setDeviceId(deviceSession.getDeviceId());
        position.set(Position.KEY_VIN, vin);
        decodeLocation(position, itemParser);
        positions.add(position);
    }
    Position position = positions.getLast();
    decodeLocation(position, parser);
    if (power != null && power > 10) {
        // only on some devices
        position.set(Position.KEY_POWER, power * 0.001);
    }
    if (parser.hasNext()) {
        position.set(Position.KEY_ODOMETER, parser.nextDouble() * 1000);
    }
    position.set(Position.KEY_BATTERY_LEVEL, parser.nextInt());
    if (parser.hasNext()) {
        position.set(Position.KEY_ODOMETER, parser.nextDouble() * 1000);
    }
    position.set(Position.KEY_HOURS, parser.next());
    position.set(Position.PREFIX_ADC + 1, parser.next());
    position.set(Position.PREFIX_ADC + 2, parser.next());
    position.set(Position.KEY_BATTERY_LEVEL, parser.nextInt());
    decodeStatus(position, parser);
    position.set(Position.KEY_RPM, parser.nextInt());
    position.set(Position.KEY_FUEL_LEVEL, parser.nextInt());
    decodeDeviceTime(position, parser);
    if (ignoreFixTime) {
        positions.clear();
        positions.add(position);
    }
    return positions;
}
Also used : DeviceSession(org.traccar.DeviceSession) Position(org.traccar.model.Position) LinkedList(java.util.LinkedList) Parser(org.traccar.helper.Parser)

Aggregations

Parser (org.traccar.helper.Parser)137 Position (org.traccar.model.Position)129 DeviceSession (org.traccar.DeviceSession)110 DateBuilder (org.traccar.helper.DateBuilder)41 Network (org.traccar.model.Network)25 WifiAccessPoint (org.traccar.model.WifiAccessPoint)8 Date (java.util.Date)7 ChannelBuffer (org.jboss.netty.buffer.ChannelBuffer)7 LinkedList (java.util.LinkedList)4 Pattern (java.util.regex.Pattern)4 Matcher (java.util.regex.Matcher)2 HttpRequest (org.jboss.netty.handler.codec.http.HttpRequest)2 QueryStringDecoder (org.jboss.netty.handler.codec.http.QueryStringDecoder)2 ParseException (java.text.ParseException)1 SimpleDateFormat (java.text.SimpleDateFormat)1 ArrayList (java.util.ArrayList)1 Calendar (java.util.Calendar)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1