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)
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
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
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
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
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"] 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
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
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