Exemple #1
0
    def output(self, msg):
        [data, ecc, reference, timestamp] = msg.split()
        data = air_modes.modes_reply(long(data, 16))
        ecc = long(ecc, 16)
        rssi = 10.*math.log10(float(reference))
        msgtype = data["df"]
        now = time.time()
        newrow = {"rssi": rssi, "seen": now}
        if msgtype in [0, 4, 20]:
            newrow["altitude"] = air_modes.altitude.decode_alt(data["ac"], True)
            newrow["icao"] = ecc
            self.model.addRecord(newrow)
        
        elif msgtype == 17:
            icao = data["aa"]
            newrow["icao"] = icao
            subtype = data["ftc"]
            if subtype == 4:
                (ident, actype) = self.parseBDS08(data)
                newrow["ident"] = ident
                newrow["type"] = actype
            elif 5 <= subtype <= 8:
                (ground_track, decoded_lat, decoded_lon, rnge, bearing) = self.parseBDS06(data)
                newrow["heading"] = ground_track
                newrow["latitude"] = decoded_lat
                newrow["longitude"] = decoded_lon
                newrow["altitude"] = 0
                if rnge is not None:
                    newrow["range"] = rnge
                    newrow["bearing"] = bearing
            elif 9 <= subtype <= 18:
                (altitude, decoded_lat, decoded_lon, rnge, bearing) = self.parseBDS05(data)
                newrow["altitude"] = altitude
                newrow["latitude"] = decoded_lat
                newrow["longitude"] = decoded_lon
                if rnge is not None:
                    newrow["range"] = rnge
                    newrow["bearing"] = bearing
            elif subtype == 19:
                subsubtype = data["sub"]
                velocity = None
                heading = None
                vert_spd = None
                if subsubtype == 0:
                    (velocity, heading, vert_spd) = self.parseBDS09_0(data)
                elif 1 <= subsubtype <= 2:
                    (velocity, heading, vert_spd) = self.parseBDS09_1(data)
                newrow["speed"] = velocity
                newrow["heading"] = heading
                newrow["vertical"] = vert_spd

            self.model.addRecord(newrow)
Exemple #2
0
    def make_insert_query(self, message):
        #assembles a SQL query tailored to our database
        #this version ignores anything that isn't Type 17 for now, because we just don't care
        [data, ecc, reference, timestamp] = message.split()

        data = air_modes.modes_reply(long(data, 16))
        ecc = long(ecc, 16)
        #   reference = float(reference)

        query = None
        msgtype = data["df"]
        if msgtype == 17:
            query = self.sql17(data)

        return query
Exemple #3
0
    def get_sql_dict(self, message):
        #assembles a SQL query tailored to our database
        #this version ignores anything that isn't Type 17 for now, because we just don't care
        [data, ecc, reference, timestamp] = message.split()

        data = air_modes.modes_reply(long(data, 16))
        ecc = long(ecc, 16)
        #   reference = float(reference)


        sql_dicts = None
        msgtype = data["df"]
        if msgtype == 17:
            sql_dicts = self.dict17(data)
    
        return sql_dicts
Exemple #4
0
    def output(self, message):
        [data, ecc, reference, timestamp] = message.split()
        data = air_modes.modes_reply(long(data, 16))

        try:
            msgtype = data["df"]
            if msgtype == 17:  #ADS-B report
                icao24 = data["aa"]
                bdsreg = data["me"].get_type()
                if bdsreg == 0x08:  #ident packet
                    (ident, actype) = self.parseBDS08(data)
                    #select model based on actype
                    self.callsigns[icao24] = [ident, actype]

                elif bdsreg == 0x06:  #BDS0,6 pos
                    [ground_track, decoded_lat, decoded_lon, rnge,
                     bearing] = self.parseBDS06(data)
                    self.positions[icao24] = [decoded_lat, decoded_lon, 0]
                    self.update(icao24)

                elif bdsreg == 0x05:  #BDS0,5 pos
                    [altitude, decoded_lat, decoded_lon, rnge,
                     bearing] = self.parseBDS05(data)
                    self.positions[icao24] = [
                        decoded_lat, decoded_lon, altitude
                    ]
                    self.update(icao24)

                elif bdsreg == 0x09:  #velocity
                    subtype = data["bds09"].get_type()
                    if subtype == 0:
                        [velocity, heading, vert_spd,
                         turnrate] = self.parseBDS09_0(data)
                    elif subtype == 1:
                        [velocity, heading, vert_spd] = self.parseBDS09_1(data)
                        turnrate = 0
                    else:
                        return

                    self.velocities[icao24] = [
                        velocity, heading, vert_spd, turnrate
                    ]

        except ADSBError:
            pass
Exemple #5
0
    def output(self, msg):
        [data, ecc, reference, timestamp] = msg.split()
        data = air_modes.modes_reply(long(data, 16))
        ecc = long(ecc, 16)
        rssi = 10.*math.log10(float(reference))
        msgtype = data["df"]
        now = time.time()
        
        if msgtype == 17:
            icao = data["aa"]
            subtype = data["ftc"]
            distance, altitude, bearing = [0,0,0]
            if 5 <= subtype <= 8:
                (ground_track, decoded_lat, decoded_lon, distance, bearing) = self.parseBDS06(data)
                altitude = 0
            elif 9 <= subtype <= 18:
                (altitude, decoded_lat, decoded_lon, distance, bearing) = self.parseBDS05(data)

            self.model.addRecord(bearing, altitude, distance)
  def parse(self, message):
    [data, ecc, reference, timestamp] = message.split()

    ecc = long(ecc, 16)
    reference = float(reference)
    timestamp = float(timestamp)

    if reference == 0.0:
      refdb = -150.0
    else:
      refdb = 20.0*math.log10(reference)
    output = "(%.0f %.10f) " % (refdb, timestamp);

    try:
      data = air_modes.modes_reply(long(data, 16))
      msgtype = data["df"]
      ts = time.time()
      output += datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
      output += " "
      if msgtype == 0:
        output += self.print0(data, ecc)
      elif msgtype == 4:
        output += self.print4(data, ecc)
      elif msgtype == 5:
        output += self.print5(data, ecc)
      elif msgtype == 11:
        output += self.print11(data, ecc)
      elif msgtype == 17:
        output += self.print17(data)
      elif msgtype == 20 or msgtype == 21 or msgtype == 16:
        output += self.printTCAS(data, ecc)
      else:
        output += "No handler for message type %i from %x (but it's in modes_parse)" % (msgtype, ecc)
      return output
    except NoHandlerError as e:
      output += "No handler for message type %s from %x" % (e.msgtype, ecc)
      return output
    except MetricAltError:
      pass
    except CPRNoPositionError:
      pass
Exemple #7
0
    def output(self, msg):
        [data, ecc, reference, timestamp] = msg.split()
        data = air_modes.modes_reply(long(data, 16))
        ecc = long(ecc, 16)
        rssi = 10. * math.log10(float(reference))
        msgtype = data["df"]
        now = time.time()

        if msgtype == 17:
            icao = data["aa"]
            subtype = data["ftc"]
            distance, altitude, bearing = [0, 0, 0]
            if 5 <= subtype <= 8:
                (ground_track, decoded_lat, decoded_lon, distance,
                 bearing) = self.parseBDS06(data)
                altitude = 0
            elif 9 <= subtype <= 18:
                (altitude, decoded_lat, decoded_lon, distance,
                 bearing) = self.parseBDS05(data)

            self.model.addRecord(bearing, altitude, distance)
Exemple #8
0
    def parse(self, message):
        [data, ecc, reference, timestamp] = message.split()

        ecc = long(ecc, 16)
        reference = float(reference)
        timestamp = float(timestamp)

        if reference == 0.0:
            refdb = -150.0
        else:
            refdb = 20.0 * math.log10(reference)
        output = "(%.0f %.10f) " % (refdb, timestamp)

        try:
            data = air_modes.modes_reply(long(data, 16))
            msgtype = data["df"]
            if msgtype == 0:
                output += self.print0(data, ecc)
            elif msgtype == 4:
                output += self.print4(data, ecc)
            elif msgtype == 5:
                output += self.print5(data, ecc)
            elif msgtype == 11:
                output += self.print11(data, ecc)
            elif msgtype == 17:
                output += self.print17(data)
            elif msgtype == 20 or msgtype == 21 or msgtype == 16:
                output += self.printTCAS(data, ecc)
            else:
                output += "No handler for message type %i from %x (but it's in modes_parse)" % (
                    msgtype, ecc)
            return output
        except NoHandlerError as e:
            output += "No handler for message type %s from %x" % (e.msgtype,
                                                                  ecc)
            return output
        except MetricAltError:
            pass
        except CPRNoPositionError:
            pass
Exemple #9
0
    def output(self, message):
        [data, ecc, reference, timestamp] = message.split()
        data = air_modes.modes_reply(long(data, 16))
        
        try:
            msgtype = data["df"]
            if msgtype == 17: #ADS-B report
                icao24 = data["aa"]
                bdsreg = data["me"].get_type()
                if bdsreg == 0x08: #ident packet
                    (ident, actype) = self.parseBDS08(data)
                    #select model based on actype
                    self.callsigns[icao24] = [ident, actype]
                    
                elif bdsreg == 0x06: #BDS0,6 pos
                    [ground_track, decoded_lat, decoded_lon, rnge, bearing] = self.parseBDS06(data)
                    self.positions[icao24] = [decoded_lat, decoded_lon, 0]
                    self.update(icao24)

                elif bdsreg == 0x05: #BDS0,5 pos
                    [altitude, decoded_lat, decoded_lon, rnge, bearing] = self.parseBDS05(data)
                    self.positions[icao24] = [decoded_lat, decoded_lon, altitude]
                    self.update(icao24)

                elif bdsreg == 0x09: #velocity
                    subtype = data["bds09"].get_type()
                    if subtype == 0:
                      [velocity, heading, vert_spd, turnrate] = self.parseBDS09_0(data)
                    elif subtype == 1:
                      [velocity, heading, vert_spd] = self.parseBDS09_1(data)
                      turnrate = 0
                    else:
                        return

                    self.velocities[icao24] = [velocity, heading, vert_spd, turnrate]
                    
        except ADSBError:
            pass
Exemple #10
0
  def parse(self, message):
    #assembles a SBS-1-style output string from the received message

    [data, ecc, reference, timestamp] = message.split()

    data = air_modes.modes_reply(long(data, 16))
    ecc = long(ecc, 16)
    msgtype = data["df"]
    outmsg = None

    if msgtype == 0:
      outmsg = self.pp0(data, ecc)
    elif msgtype == 4:
      outmsg = self.pp4(data, ecc)
    elif msgtype == 5:
      outmsg = self.pp5(data, ecc)
    elif msgtype == 11:
      outmsg = self.pp11(data, ecc)
    elif msgtype == 17:
      outmsg = self.pp17(data)
    else:
      raise NoHandlerError(msgtype)
    return outmsg
Exemple #11
0
    def parse(self, message):
        #assembles a SBS-1-style output string from the received message

        [data, ecc, reference, timestamp] = message.split()

        data = air_modes.modes_reply(long(data, 16))
        ecc = long(ecc, 16)
        msgtype = data["df"]
        outmsg = None

        if msgtype == 0:
            outmsg = self.pp0(data, ecc)
        elif msgtype == 4:
            outmsg = self.pp4(data, ecc)
        elif msgtype == 5:
            outmsg = self.pp5(data, ecc)
        elif msgtype == 11:
            outmsg = self.pp11(data, ecc)
        elif msgtype == 17:
            outmsg = self.pp17(data)
        else:
            raise NoHandlerError(msgtype)
        return outmsg