FIND is now 100% open-source.
Note for past users, the codebase has been completely rewritten in Golang so things are ~100x faster, smarter, and more secure. The Python3 version will stay available, but it is no longer supported. Development will now be focused on 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 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.
More questions? See the FAQ.
- SSL support
- Compression to keep DBs small
- Fast (20-200x faster than the previous Python version)
- Mixes two machine learning algorithms for best classifications
- Bug free (yeah, um...probably not. Please submit an issue when you find one).
To use this system you need to have the following:
- (Optional) Server: A computer (OS X/Windows/Linux) to run the server. If you don't have this, use ours.
- Client(s): device (laptop/Raspberry Pi/Android smartphone) that has access to WiFi
Note: You are welcome to skip this step and use our server, just make sure to point the server address to https://ml.internalpositioning.com. You can also download the server to run by yourself. Or you can build the server using:
First install Go if you haven't already. FIND is tested on Go version 1.5+.
$ git clone https://github.com/schollz/find.git
$ cd find
$ go get ./...
$ go build
Then to run,
$ ./find
-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----
_________ _____
/ __/ _/ |/ / _ \ ______ _____ _____ ____
/ _/_/ // / // / (_-< -_) __/ |/ / -_) __/
/_/ /___/_/|_/____/ /___|__/_/ |___/\__/_/
(version 2.X) is up and running on http://192.168.1.2:8003
-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----
The client gathers WiFi fingerprints and sends them to the server.
If you want to use an Android device, download our app, or build the app yourself.
If you want to use a computer (laptop/Raspberry Pi/etc.), download our client, or build it yourself.
First download the latest app or build it yourself.
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. Then you'll see the following:
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. After you've learned some locations, just hit "Track" and you'll see your calculated location.
To see more detailed information, go to the server and login with your group name
Download the CLI program here or build it yourself. To start learning locations simply use
./fingerprint -e
and then to track your location use
./fingerprint
There are other options, you can learn more by looking at the README. To see more detailed information, go to the server and login with your group name
You can see statistics about your fingerprints by logging on to the server and signing in with your group name.
You can see fingerprints of individual places by clicking on them, and then you can click on mac addresses to see there statistics across rooms.
Please, do! Checkout the latest issues to see what needs being done, or add your own cool thing.
Thanks to patorjk and asciiworld for the ASCII art.
Like this? Help me keep it alive by donating $5 to pay for server costs.
Copyright 2015-2016 Zack Scholl
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License https://github.com/schollz/find/blob/master/LICENSE.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.