Пример #1
0
  @Override
  protected Object decode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {

    // Parse message
    Matcher parser = pattern.matcher((String) msg);
    if (!parser.matches()) {
      return null;
    }

    // Create new position
    Position position = new Position();
    ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("wondex");
    int index = 1;

    // Device identifier
    String id = parser.group(index++);
    try {
      position.setDeviceId(getDataManager().getDeviceByImei(id).getId());
    } catch (Exception error) {
      Log.warning("Unknown device - " + id);
      return null;
    }

    // Time
    Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    time.clear();
    time.set(Calendar.YEAR, Integer.valueOf(parser.group(index++)));
    time.set(Calendar.MONTH, Integer.valueOf(parser.group(index++)) - 1);
    time.set(Calendar.DAY_OF_MONTH, Integer.valueOf(parser.group(index++)));
    time.set(Calendar.HOUR_OF_DAY, Integer.valueOf(parser.group(index++)));
    time.set(Calendar.MINUTE, Integer.valueOf(parser.group(index++)));
    time.set(Calendar.SECOND, Integer.valueOf(parser.group(index++)));
    position.setTime(time.getTime());

    // Position data
    position.setLongitude(Double.valueOf(parser.group(index++)));
    position.setLatitude(Double.valueOf(parser.group(index++)));
    position.setSpeed(Double.valueOf(parser.group(index++)) * 0.539957);
    position.setCourse(Double.valueOf(parser.group(index++)));
    position.setAltitude(Double.valueOf(parser.group(index++)));

    // Satellites
    int satellites = Integer.valueOf(parser.group(index++));
    position.setValid(satellites >= 3);
    extendedInfo.set("satellites", satellites);

    // Event
    extendedInfo.set("event", parser.group(index++));

    // Battery
    extendedInfo.set("battery", parser.group(index++));

    // Milage
    extendedInfo.set("milage", parser.group(index++));

    // Input
    extendedInfo.set("input", parser.group(index++));

    // ADC
    extendedInfo.set("adc1", parser.group(index++));
    extendedInfo.set("adc2", parser.group(index++));

    // Output
    extendedInfo.set("output", parser.group(index++));

    position.setExtendedInfo(extendedInfo.toString());
    return position;
  }
Пример #2
0
  @Override
  protected Object decode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {

    // Parse message
    String sentence = (String) msg;
    Matcher parser = pattern.matcher(sentence);
    if (!parser.matches()) {
      return null;
    }

    // Create new position
    Position position = new Position();
    ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("xexun2");

    Integer index = 1;

    // Serial
    extendedInfo.set("serial", parser.group(index++));

    // Number
    extendedInfo.set("number", parser.group(index++));

    // Time
    Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    time.clear();
    time.set(Calendar.HOUR, Integer.valueOf(parser.group(index++)));
    time.set(Calendar.MINUTE, Integer.valueOf(parser.group(index++)));
    time.set(Calendar.SECOND, Integer.valueOf(parser.group(index++)));
    time.set(Calendar.MILLISECOND, Integer.valueOf(parser.group(index++)));

    // Validity
    position.setValid(parser.group(index++).compareTo("A") == 0 ? true : false);

    // Latitude
    Double latitude = Double.valueOf(parser.group(index++));
    latitude += Double.valueOf(parser.group(index++)) / 60;
    if (parser.group(index++).compareTo("S") == 0) latitude = -latitude;
    position.setLatitude(latitude);

    // Longitude
    Double lonlitude = Double.valueOf(parser.group(index++));
    lonlitude += Double.valueOf(parser.group(index++)) / 60;
    if (parser.group(index++).compareTo("W") == 0) lonlitude = -lonlitude;
    position.setLongitude(lonlitude);

    // Speed
    position.setSpeed(Double.valueOf(parser.group(index++)));

    // Course
    String course = parser.group(index++);
    if (course != null) {
      position.setCourse(Double.valueOf(course));
    } else {
      position.setCourse(0.0);
    }

    // Date
    time.set(Calendar.DAY_OF_MONTH, Integer.valueOf(parser.group(index++)));
    time.set(Calendar.MONTH, Integer.valueOf(parser.group(index++)) - 1);
    time.set(Calendar.YEAR, 2000 + Integer.valueOf(parser.group(index++)));
    position.setTime(time.getTime());

    // Signal
    extendedInfo.set("signal", parser.group(index++));

    // Alarm
    extendedInfo.set("alarm", parser.group(index++));

    // Get device by IMEI
    String imei = parser.group(index++);
    try {
      position.setDeviceId(getDataManager().getDeviceByImei(imei).getId());
    } catch (Exception error) {
      Log.warning("Unknown device - " + imei);
      return null;
    }

    // Satellites
    extendedInfo.set("satellites", parser.group(index++).replaceFirst("^0*(?![\\.$])", ""));

    // Altitude
    String altitude = parser.group(index++);
    if (altitude != null) {
      position.setAltitude(Double.valueOf(altitude));
    } else {
      position.setAltitude(0.0);
    }

    // Power
    position.setPower(Double.valueOf(parser.group(index++)));

    // Extended info
    position.setExtendedInfo(extendedInfo.toString());

    return position;
  }