High-precision indoor positioning framework for most wifi-enabled devices.
Clone or download
Latest commit 49a33c7 May 5, 2018
Failed to load latest commit information.
data Added db for testing Jul 16, 2016
static Added logo images Nov 10, 2016
templates Need to filter user parameter in dashboard Dec 29, 2016
testing Tests Feb 8, 2017
vendor Vendoring Oct 3, 2017
.gitattributes Updated attributes Apr 16, 2016
.gitignore added `data` dir and `findserver` compiled file to gitignore (#120) Nov 14, 2016
.travis.yml Create .travis.yml Sep 11, 2016
BENCHMARKS.md Updated to allow port number to be chosen Dec 3, 2016
Dockerfile Support external MQTT servers Dec 21, 2017
FAQ.md Typo Apr 22, 2016
Gopkg.lock Vendoring Oct 3, 2017
Gopkg.toml Vendoring Oct 3, 2017
LICENSE New version, v2.3 Dec 7, 2016
Makefile Vendoring Oct 3, 2017
NOTICE Updated licenses etc. Apr 16, 2016
README.md Update README.md May 5, 2018
RF.py Successfully implemented Random Forrest for learning locations (#123) Nov 22, 2016
api.go Added OPTIONS to CORS Feb 21, 2017
api_test.go Fix newline in tests Feb 25, 2017
backup.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
backup_test.go Updated tests May 1, 2016
cache.go Increased cache length Dec 12, 2016
cache_test.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
db.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
fingerprint.go Added CORS header to routes Feb 16, 2017
fingerprint_ffjson.go Timestamp introduction with dump (#88) May 1, 2016
fingerprint_test.go Fix newline in tests Feb 25, 2017
macs.json Added macs example Dec 2, 2016
mqtt.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
mqtt_test.go Coverage bumped to 34% May 1, 2016
network.go First pass at improving documentation. Issue #75 May 1, 2016
network_test.go Goroutines for all cache, added more tests Aug 16, 2016
parameters.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
parameters_ffjson.go Replaced python3 version with golang version on master Apr 16, 2016
parameters_test.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
posterior.go First pass at improving documentation. Issue #75 May 1, 2016
posterior_test.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
priors.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
priorsThreaded.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
priors_test.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
rf.go Revert "Using forked Bolt v1.2.0" Jan 31, 2017
rf.py Added more classifiers, still RF is the best (then my Naive Bayes) Dec 13, 2016
routes.go data -> source path Aug 10, 2017
server.go mqtt changes Jan 8, 2017
supervisord.conf Support external MQTT servers Dec 21, 2017
svm.go data -> source path Aug 10, 2017
svm_test.go Docs relegated to docs, Readme simplified (#107) Jul 23, 2016
test_rf.py rf uses tcp now Dec 2, 2016
utils.go Migrate database added PUT /database?from=X&to=Y Aug 10, 2016



Version 2.4 Github All Releases FIND documentation Coverage Donate Say Thanks

Keywords: indoor GPS, WiFi positioning, indoor mapping, indoor navigation, indoor positioning

There is a new version, FIND3. It has numerous improvements over this version.


The Framework for Internal Navigation and Discovery (FIND) allows you to use your (Android) smartphone or WiFi-enabled computer (laptop or Raspberry Pi or etc.) to determine your position within your home or office. You can easily use this system in place of motion sensors as its resolution will allow your phone to distinguish whether you are in the living room, the kitchen or the bedroom, etc. The position information can then be used in a variety of ways including home automation, way-finding, or tracking!

Simply put, FIND will allow you to replace tons of motion sensors with a single smartphone!

The system is built on two main components - a server and a fingerprinting device. The fingerprinting device (computer program or android app) sends the specified data to the machine learning server which stores the fingerprints and analyzes them. It then returns the result to the device and stores the result on the server for accessing via a web browser or triggering via hooks.

FAQ (abbreviated):

More questions? See the unabbreviated FAQ.


If you'd like to install things yourself, see the documentation. You don't need to do this to try it though. Follow the 3 steps below to get started quickly.

1. Download the software

Android users: download the current version of the app. Sorry iPhone users but the Apple store prevents apps that access WiFi information, so I will be unable to release a iPhone version.


Computer users: you can download the current version of the fingerprinting program, available for Rasbperry Pi, OSX, Linux, and Windows.

2. Gather fingerprint data

First, to get started using FIND you will need to gather fingerprint data in your locations.

Android users: When you start up the app you will be asked for a username (enter whatever you want) and you'll be assigned a unique group name. Simply click "Learn" and you'll be prompted for a location name. After you enter a location, the app will connect to the server and then submit fingerprints.

Computer users: To start learning locations simply use ./fingerprint -e.

3. Track yourself

Once you've collected data in a few locations, you can track yourself.

Android users: Just press the "Track" button when you're ready to track.

Computer users: Type in ./fingerprint to start tracking yourself.

More information

See the documentation at https://www.internalpositioning.com.


Funding from Duke University Colab

Thanks to tscholl2, sjsafranek, and jschools for their help in guiding the development of FIND and creating the early versions of FIND with me! Thanks to Rishabh Rajgarhia and CanvasJS for help implementing a nice graph. Thanks arafsheikh for adding interface selection, Pugio and ScottSWu for adding OS X/Windows support for the fingerprint program, including a better Windows scanning utility! Thanks Thom-x for the Dockerfile. Thanks certifiedloud for implementing the change to DELETE requests and implementing sockets for unix. Thanks bebus77 for making a awesome generic struct for OS support on the fingerprinting program! Thanks christoph-wagner for help with polling interval on app. Thanks to patorjk and asciiworld for the ASCII art. Thanks to Imgur for hosting images.


Like this? Help me keep it alive by donating $5 to pay for server costs.