Will airlines recover from COVID crisis?

I have been tracking planes in Hong Kong for few years now with my Raspberry Pi based ADSB tracker. There are few airports in range (Hong Kong, Macau, Guangzhou, Shenzhen, Zhuhai, Huizhou), which was giving me quite some traffic (about 2000-2200 different aircraft per day).

Then came COVID 19. Many international airlines stopped to come to China. Many domestic flights were cancelled too. And then the crisis went worldwide. Daily traffic dropped to 600 aircrafts per day at the peak of the crisis.

Since then, it has been slowly recovering. As China domestic traffic went back almost to normal, I am now at 1300-1400 aircraft per day, still far away from where it was.

Bad news are coming from everywhere… Cathay Pacific just announced they will suppress 6000 positions and stop Cathay Dragon. Many smaller airlines have been bankrupt. Most of the others have retired their old or not efficient aircraft earlier than initially planned (B747 and A380 are the most iconic ones).

And restrictions to international travels are still in place in many countries, while the epidemic is restarting in Europe, and never really slow down in US. Can the industry recover from such an unprecedented crisis? I wish it will! My bet is that it will take time and that it will have deeply modified the industry. 2020 will be a turning point in any case and resilience now has to be in every airline strategy.

Sharing my database of Aircraft, Airports and Routes

I have been gathering data for few years now, from multiple sources (databases found online, some special aircraft found manually online, …). I now have more than 32,500 entries in my Aircraft database, including 6,000 that I flagged as “special”, meaning military or any other interesting features (helicopters, rare aircrafts …).

I also have more than 16,000 airports and 160,000 routes.

They are all accessible through dedicated API.

Search aircraft by Mode S code or tail number

You can access my database of aircraft through the following API:
where XXXXXX is the ModeS code of the aircraft, on 6 digits in hexadecimal.
where XXXXXX is the tail number (or registration) of the aircraft (in some countries, tail numbers have a – like in China B-8638, it should be put here).
The output is in json format (RFC4627).
Working samples of the API:

Returned data:

          "ModeS":            "78102f",
          "ModeSCountry":     "China",
          "Registration":     "B-8638",
          "ICAOTypeCode":     "A321",
          "Type":             "Airbus A321-211",
          "SerialNo":         "---",
          "RegisteredOwners": "China Southern Airlines",
          "OperatorFlagCode": "CSN",
          "FirstSeen":        "2017-03-25 23:58:09",
          "LastSeen":         "2019-09-06 07:25:41"
ModeSModeS code in HEX format of the Aircraft6 characters
ModeSCountryCountry of registration of the Aircraftstring
RegistrationTail Number of the Aircraftstring
ICAOTypeCodeICAO Type Code of the Typestring
TypeType of Aircraftstring
SerialNoSerial Number of the Aircraftstring
RegisteredOwnersRegistered Owners of the Aircraftstring
OperatorFlagCodeCode of the Airline if anystring
FirstSeenTime stamp when my trackers first detected the AircraftTimestamp
LastSeenTime stamp when my trackers last detected the AircraftTimestamp
Json structure description for Aircraft API

Search airports by ICAO code

You can also access my database of airports through the following API:
where XXXX is the ICAO code of the airport on 4 characters.
The output is in json format (RFC4627).
Working samples of the API:

Returned data:

          "ICAO":       "VHHH",
          "IATA":       "HKG",
          "Name":       "Hong Kong International Airport",
          "Location":   "Hong Kong",
          "Region":     "Hong Kong",
          "Latitude":   22.3089,
          "Longitude":  113.915
ICAOICAO code of the Airport4 characters
IATAIATA code of the Airport3 characters
NameName of the Airportstring
LocationLocation of the Airport in clearstring
RegionRegion or Country of the Airportstring
LatitudeLatitude of the Airportfloat
LongitudeLongitude of the Airportfloat
Json structure description for Airport API

Search routes by Flight Number (ICAO format)

You can also access my database of routes through the following API:
where XXXXXX is the flight number in ICAO format.
The output is in json format (RFC4627).
Working samples of the API:

Returned data:

          "FNB":            "AFR188",
          "Airline":        "AFR",
          "FlightNumber":   "188",
          "Origin":         "LFPG",
          "Destination":    "VHHH",
          "Via":            ""
FNBFlight number in ICAO formatstring
AirlineICAO code of the airline4 characters
FlightNumberFlight numberstring
OriginOrigin airport (ICAO format)string
DestinationDestination airport (ICAO format)string
ViaVia airport – if any (ICAO format)string
Json structure description for Airports API


All the information provided by these API are provided as is and for information only. They are coming from different sources and may contain mistakes or be out of date. Please use with caution and at your own risk.

You are welcome to comment if you see mistakes. Mode S codes can be re-allocated to new aircraft, and keeping the database up to date is not an easy task.

G-IRTY Spitfire flying over Hong Kong in 2019

One of the most surprising catch of 2019 was for sure seeing a Spitfire in my new aircraft list! I had to check if that was correct or a mistake somewhere in the database of Mode S codes I collected.

It turned out it was the real thing! The Silver Spitfire was doing The Longest Flight, for the 75th anniversary of the D-Day invasion. A 30 legs, 22,138 miles trip around the world.

These guys rock!

A Guide to Tracking Aircraft Around the World

I highly recommend the article from Global Investigative Journalism Network (or GIJN) “Planespotting: A Guide to Tracking Aircraft Around the World“. This is one of the most comprehensive article I have seen on the subject, addressing it from multiple angles (#avgeek, journalist, activist, …). They even propose a short version if you just want to start tracking.

Great work!

Buzzfeed trains an AI to find spy planes

An interesting article about how Buzzfeed is training an AI to detect planes circling over San Francisco (mainly law enforcement and other contractors).

That’s an interesting direction… I will have a look at how to do that and detect anomalies in trajectories on my trackers. I expect to see more planes circling due to delay in the local airports (Hong Kong, Shenzhen, Guangzhou) than spy planes!

More details here on how they use a Random Forests algorithm to classify potential candidates. I found Random Forests libraries in Python, so that definitely going in my to do list.

Another F16 from Belgian Air Force for my tracker in Briancon

My tracker in Briancon has detected another F16 from the Belgian Air Component recently (that’s how their Air Force is called).

The aircraft detected so far have the tail numbers FA-87, FA-57, FA-133, FA-130, FA-101 and FA-72.

Belgian F16 are regularly flying over France.

ADSB tracking off grid with Raspberry Pi

I have been looking for a solution to do ADSB tracking off grid for quite a while. I have several Piaware trackers in different setup (fixed one at home, mobile one with GPS in the car, mobile one that I take with me when I travel abroad), and I wanted to add some in places where I don’t have power or wifi. After some research I decided to use a solar panel for power and a SigFox hat for connection. The SigFox hat has limited data throughput (6 messages per hour in uplink), but it is enough to report new or interesting aircraft to my server. There is a lot of literature on solar power for the Pi, but I still ended up underestimating the size of the panel. 20W just gives me 8h per day in average. I will need to upgrade to 100W to make sure I run 24/24 7/7 365/365. The BIG power consumption comes from the RTL-SDR dongle, and you can not toggle it on and off to save power as it needs to be on for an extended period of time to do its job. Having my tracker going on and off created an unexpected issue that I didn’t see during my debug session with wifi: as the Pi does not have a RTC, the Pi time is losing 16h per day in average. Rapidly, my timestamp for the planes detected were off. Hopefully, as SigFox allows also 4 downlink messages per day, I am able to request a time update through this channel. With some adjustment to make sure I don’t use my downlink messages budget when the Pi powers up just for few minutes when battery is low but sun is high, I was able to make that work. Next step is to work on improvements for the battery management and I will have a fully independent solution. I now have a Piaware tracker running fully off grid!

You can find more details on my setup and the data reported by my trackers on https://www.foxtrotcharlie.ovh

When I started this project I didn’t know how far it would bring me! My long term goal is still to share all my software on Github, but that will need some cleaning!

Also published on www.raspberrypi.org