The idea for our hack came to us as we decided where we were going to set up for the weekend during the hackathon. As we searched crowded rooms across north campus, we knew there had to be a way to get real time updates about how many people are on campus and where they are studying. From this, FireNode was born.
What it does
FireNode is a real time interior localization platform designed to provide high resolution population density maps of large network infrastructures. FireNode is a learning algorithm utilizing big data concepts - as more wifi hotspot data is collected, FireNode's knowledge of the network and hotspot locations expands to reflect more accurate user densities. Our service has three main components; data acquisition, analytics, and presentation. The data acquisition is carried out by a mobile app that reads GPS and wireless network information. This information is sent to a server where data analytics are performed using custom algorithms. Our algorithms determine the location of wifi hotspots through trilateration (similar to triangulation) and determine the number of people connected to a given hotspot. From there, the analytics data is sent to be presented to the user as a map overlaid with relative population density with a resolution down to individual rooms.
How we built it
We built a mobile Android app to continuously monitor network and GPS information in the background of the Android operating system. The app scans all available wireless hotspots every 5 seconds to retrieve access point IP addresses, MAC addresses and RSSI/frequency. The RSSI (signal strength) and frequency allows us to calculate distance from the phone to a wireless hotspot. In addition, we monitor GPS location changes to pair network hotspots with a Latitude/Longitude coordinate.
We use Firebase as our data management service, sending the real time data outlined above to the Linode Server. This Linode server hosts our java server, which analyzes and processes over a hundred wifi/gps combinations a second to identify the exact location of scanned wifi hotspots. We accomplish this by using a process called trilateration. Each non-linear trilateration calculation use all of the previous data points for a given hotspot, and custom calculations to compensate for the spherical coordinates of the earth.
Finally, we have a node server running on our Linode host to gather IP connection information from the network. This node server contains an ARP table which allows us to look at all connected devices on the University campus and aggregate IP addresses. Once we have all available IP addresses, we can figure out how many connections each wireless hotspot has and link it to the location data collected before.
Challenges we ran into
There were a couple difficult algorithms that we had to write, involving some difficult mathematics to figure out. Trilateration functionality on the java server was a difficult algorithm to implement. To get an accurate location out of the trilateration algorithm, we had to figure out how to convert latitude and longitude GPS coordinates to useable distances in a pseudo-cartesian coordinate system. For the mobile app, getting the distance between the user and the wifi router proved to be a challenge. We had to manually calculate the distance using the strength and frequency of the connected wifi signal. In terms of networking, matching BSSIDs to IP addresses in order to find unique connections over the entire network was a big task, given the massive size of the network. It required a lot parsing ARP information and finding suitable _ insights _ from that data.
Accomplishments that we're proud of
We are proud of our ability to overcome all of the challenges that we ran into while developing FireNode, ranging from the difficult mathematics of trilateration to parsing the massive amount of data about the network. We are also proud of the low latency time between collecting our data and displaying it to the user, i.e. making our application truly real-time.
What we learned
Dominik learned Python. Sean learned about the Android framework. Michael learned about networking via the Android OS. Dominik taught Antonio that Python has a continue keyword... We still haven't learned what the TBD prize was...?
What's next for FireNode
FireNode can now be expanded in countless ways. As our database grows, we can incorporate machine learning for predictive technologies. FireNode aggregates a lot of data about population density and traffic on a room by room resolution, which could be useful to both students and the school. Students who are looking for a place to study or an uncrowded room to work in would easily be able to see in real time which rooms would be the best to work at any given time. Schools on the other hand could use the data over a period of time to gauge and better understand what areas of buildings are used the most, have the highest traffic, and what areas of the building may need more Wifi access points. What is really exciting is that FireNode can be applied anywhere with a large network infrastructure, like corporate campuses, malls, or high traffic areas.