High-precision indoor positioning framework, version 3.

Version 3.0 Version 3.0 Version 3.0 Donate Say Thanks

The Framework for Internal Navigation and Discovery (FIND) is like indoor GPS for your house or business, using only a simple smartphone or laptop.

This version, 3.X, is a complete re-write of the previous versions 2.x.

About the project

This repository is a complete re-write of the previous version of FIND (github.com/schollz/find). There are notable improvements from the previous version:

  • Support for any data source - Bluetooth / WiFi / magnetic fields / etc. (previously just WiFi)
  • Passive scanning built-in (previously required a separate server)
  • Support for Bluetooth scanning in scanning utility (previously just WiFi)
  • Meta-learning with 10 different machine learning classifiers (previously just three)
  • Client uses Websockets+React which reduces bandwidth (and coding complexity)
  • Rolling compression of MAC addresses for much smaller on-disk databases (see stringsizer)
  • Data storage in SQLite-database (previously it was BoltDB)
  • Released under MIT license (more commercially compatible than AGPL)

The API for sending fingerprints (/track and /learn) and MQTT endpoints are backward compatible.

Status

FIND3 is stable and ready for use.

Contributing

FIND3 is a framework with multiple components. There are multiple repositories that have the components, including:

Reporting issues

Please report issues through this repo's issue tracker.

Community

Subscribe to the Slack channel to get latest information about the project and get help.

Use the FIND mailing list for discussion about use and development.

License

MIT

Comments
  • No Values received on MQTT

    No Values received on MQTT

    Using Docker when subscribing to the mqtt topics on the Find3 mosquitto server using mosquitto_sub on the same server no messages are received.

    I can can confirm that the mosquitto server is running I got a "Connected not authorized" when connecting without user and password.

  • Having Trouble in login

    Having Trouble in login

    When i log in with the family name, it starts a download of a file with extension .gz which i am not able to open and not the page with the dashboard.

  • MQTT endpoint for POST /passive

    MQTT endpoint for POST /passive

    Hi,

    First of all, thanks for a great piece of software!

    I'm hoping to combine FIND with some very low power BLE scanners, currently submitting their output to mqtt. Would be great if this continuous stream of mqtt data could land in FIND's passive scanner, s.t. I can follow BT only devices (e.g. xiaomi miband3 can be tracked almost live this way). I think that requires 2 changes:

    • MQTT listener for passive/reverse scanning (current form is active only right?)
    • Accept sensordata without wifi fingerprints (if BT or other data is available)

    Unless I misunderstood, the current MQTT listener posts data as if they were active scan results correct? I could make sure MQTT data is submitted conform your sensordata model, or in the current hexrssi format.

    What do you think? Cheers

  • Add embedded ESP8266 / ESP32 client

    Add embedded ESP8266 / ESP32 client

    I have created a very experimental, early stage client for the ESP32 / ESP8266 microcontroller, which is available from $1. This should allow people to create very cheap beacons.

    Update: see https://github.com/DatanoiseTV/esp-find3-client

    Please note this is a very early stage and experimental thing. Any input welcome!

  • Can I run this on a raspberry pi?

    Can I run this on a raspberry pi?

    Can I run this on a raspberry pi?

    I did try but I got this error:

    pi@officepi:~/find3/find3 $ sudo docker build -t find3 .
    Sending build context to Docker daemon   14.9MB
    Step 1/32 : FROM ubuntu:18.04
     ---> 7295fb90f21f
    Step 2/32 : RUN apt-get update
     ---> Running in 351b1a998416
    The command '/bin/sh -c apt-get update' returned a non-zero code: 139
    

    I'm wondering if this is related to the pi's armv6l architecture or possibly a memory limitation?

    Any ideas? Thanks!

  • Add flag to disable subsampling when data exceeds 1000 points

    Add flag to disable subsampling when data exceeds 1000 points

    The dashboard needs a little work. I have no idea how it is possible to have 0% accuracy on 56 readings. image

    Also, the number of data readings stored is always directly below the first character. This look great until you name a room something large. I.e. Beer pong room. Then the number of data readings directly overlap the accuracy readings. image image

  • Original Find App appears to be more vastly more accerate

    Original Find App appears to be more vastly more accerate

    The original Find app appears to be significantly more accurate currently during real world test. I am wondering if it takes the a.i. a few days to figure out what to prioritize?

    Is there any chance we can expect any neural networking code anytime soon? I am debating on if this is considered a.i. or just computer learning.

  • Allow user to select which machine learning to use

    Allow user to select which machine learning to use

    Would it be possible to program into equation if a few modems disappear it doesn't effect the outcome too much. I noticed if I train with 12 WiFi signals detected, and then take away the 6 farthest modems, the code can't figure out the location.

    Realistically, over two years many of the BLE and WiFi signals will change. Neighbors get new WiFi modems or add extenders, BLE devices are replaced or eliminated. WiFi hotspots never stay in the same place for long. etc.

    As long as 6 of 12 signals are detected with the same readings that they should have for that room, I don't see why it wouldn't be possible to code in some kind of solution that ensures this scenario doesn't result in unknown location.

  • All passive tracking learning devices randomly disappear

    All passive tracking learning devices randomly disappear

    Unfortunately I haven't found a way to reproduce it and this is the only time I was able to capture the log messages.

    ...
    2018-04-17 17:03:04 [INFO] [PID-5268] server.go func1:978 192.168.1.140:50470 POST /passive 19.691983ms
    2018-04-17 17:03:10 [WARN] [PID-5268] analysis.go AnalyzeSensorData:117 [qg] nb1 classify: problem preparing SQL: database is locked
    2018-04-17 17:03:12 [WARN] [PID-5268] analysis.go AnalyzeSensorData:117 [qg] nb1 classify: problem getting key: database is locked
    2018-04-17 17:03:12 [INFO] [PID-5268] fingerprints.go updateCounter:87 have 9 new fingerprints for 'qg', re-calibrating since last calibration was 2562047h47m16.854775807s
    2018-04-17 17:03:12 [INFO] [PID-5268] server.go func1:978 192.168.0.1:59900 POST /passive 7.742035674s
    2018-04-17 17:03:13 [INFO] [PID-5268] calibration.go dumpSensorsToCSV:399 [qg] dumping 317 fingerprints to /home/find/go/src/github.com/schollz/find3/server/main/data/m0gbo9ga.csv
    2018-04-17 17:03:14 [INFO] [PID-5268] server.go func1:978 192.168.0.107:53874 POST /passive 22.710843ms
    2018-04-17 17:03:20 [INFO] [PID-5268] server.go func1:978 192.168.1.140:59420 GET /ws?device=all&family=qg 95.342µs
    ...
    

    Server version: c787ee806f46016ee17b007d5cc690914496df6f Go version: go1.10.1 linux/amd64

  • Using passive scanning to detect a bluetooth beacon

    Using passive scanning to detect a bluetooth beacon

    I'm researching tools and technologies for a little home-automation project I'm working on. I have a bunch of Eddystone beacons that I'm looking to track around my site. The documentation talks mostly about passive scanning for wifi. Will find3-cli-scanner running on Rasberry Pi with the -passive flag also pick up bluetooth or is it wifi-only?

    Thanks much! Looking forward to working with and contributing to the project.

  • 10 Second A.I. timeout Question

    10 Second A.I. timeout Question

    Does the 10 second timeout happen only during the pull room request or does it also apply during the training phase? I'm ok with training taking longer if it results in more accurate results. I do not want the pull room request to take long though.

  • Bump github.com/gin-gonic/gin from 1.3.0 to 1.7.0

    Bump github.com/gin-gonic/gin from 1.3.0 to 1.7.0

    Bumps github.com/gin-gonic/gin from 1.3.0 to 1.7.0.

    Release notes

    Sourced from github.com/gin-gonic/gin's releases.

    Release v1.7.0

    BUGFIXES

    • fix compile error from #2572 (#2600)
    • fix: print headers without Authorization header on broken pipe (#2528)
    • fix(tree): reassign fullpath when register new node (#2366)

    ENHANCEMENTS

    • Support params and exact routes without creating conflicts (#2663)
    • chore: improve render string performance (#2365)
    • Sync route tree to httprouter latest code (#2368)
    • chore: rename getQueryCache/getFormCache to initQueryCache/initFormCa (#2375)
    • chore(performance): improve countParams (#2378)
    • Remove some functions that have the same effect as the bytes package (#2387)
    • update:SetMode function (#2321)
    • remove a unused type SecureJSONPrefix (#2391)
    • Add a redirect sample for POST method (#2389)
    • Add CustomRecovery builtin middleware (#2322)
    • binding: avoid 2038 problem on 32-bit architectures (#2450)
    • Prevent panic in Context.GetQuery() when there is no Request (#2412)
    • Add GetUint and GetUint64 method on gin.context (#2487)
    • update content-disposition header to MIME-style (#2512)
    • reduce allocs and improve the render WriteString (#2508)
    • implement ".Unwrap() error" on Error type (#2525) (#2526)
    • Allow bind with a map[string]string (#2484)
    • chore: update tree (#2371)
    • Support binding for slice/array obj [Rewrite] (#2302)
    • basic auth: fix timing oracle (#2609)
    • Add mixed param and non-param paths (port of httprouter#329) (#2663)
    • feat(engine): add trustedproxies and remoteIP (#2632)

    Improve performance

    ENHANCEMENTS

    • Improve performance: Change *sync.RWMutex to sync.RWMutex in context. #2351

    release v1.6.2

    Release Notes

    • BUGFIXES
      • fix missing initial sync.RWMutex (#2305)
    • ENHANCEMENTS
      • Add set samesite in cookie. (#2306)

    Contributors

    release v1.6.1

    ... (truncated)

    Changelog

    Sourced from github.com/gin-gonic/gin's changelog.

    Gin v1.7.0

    BUGFIXES

    • fix compile error from #2572 (#2600)
    • fix: print headers without Authorization header on broken pipe (#2528)
    • fix(tree): reassign fullpath when register new node (#2366)

    ENHANCEMENTS

    • Support params and exact routes without creating conflicts (#2663)
    • chore: improve render string performance (#2365)
    • Sync route tree to httprouter latest code (#2368)
    • chore: rename getQueryCache/getFormCache to initQueryCache/initFormCa (#2375)
    • chore(performance): improve countParams (#2378)
    • Remove some functions that have the same effect as the bytes package (#2387)
    • update:SetMode function (#2321)
    • remove an unused type SecureJSONPrefix (#2391)
    • Add a redirect sample for POST method (#2389)
    • Add CustomRecovery builtin middleware (#2322)
    • binding: avoid 2038 problem on 32-bit architectures (#2450)
    • Prevent panic in Context.GetQuery() when there is no Request (#2412)
    • Add GetUint and GetUint64 method on gin.context (#2487)
    • update content-disposition header to MIME-style (#2512)
    • reduce allocs and improve the render WriteString (#2508)
    • implement ".Unwrap() error" on Error type (#2525) (#2526)
    • Allow bind with a map[string]string (#2484)
    • chore: update tree (#2371)
    • Support binding for slice/array obj [Rewrite] (#2302)
    • basic auth: fix timing oracle (#2609)
    • Add mixed param and non-param paths (port of httprouter#329) (#2663)
    • feat(engine): add trustedproxies and remoteIP (#2632)

    Gin v1.6.3

    ENHANCEMENTS

    • Improve performance: Change *sync.RWMutex to sync.RWMutex in context. #2351

    Gin v1.6.2

    BUGFIXES

    • fix missing initial sync.RWMutex #2305

    ENHANCEMENTS

    • Add set samesite in cookie. #2306

    Gin v1.6.1

    BUGFIXES

    • Revert "fix accept incoming network connections" #2294

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump certifi from 2018.8.24 to 2022.12.7 in /server/ai

    Bump certifi from 2018.8.24 to 2022.12.7 in /server/ai

    Bumps certifi from 2018.8.24 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • find3 like a Wifi Heat Map

    find3 like a Wifi Heat Map

    Hello, congratulations is an excellent solution.

    I would like to know if I can do a Wi-Fi heat map as an example.

    The idea would be to know the most visited points of a store, with passive scanning and train the limits of the store, and according to those limits everything that is within those limits, the idea is to calculate the coordinates within the limits to paint a heat map.

    It would be very interesting to implement it, has anyone implemented it or do you know how it could be done?

    I thank you very much.

    Thanks.

    image

  • Need information

    Need information

    I want to know that in FIND3 application, if I entered family name, device and enabled the gps option and start the scanning process without the learning process then it should show me the device on maps and provide gps co-ordinates right? Does it works this way?

  • Location Error

    Location Error

    Following Tracking your Phone document

    In FIND3 application I entered the details family name, Device, location. I enabled the tracking mode which went in to learning mode and then start scan as per mentioned in the document. I also enabled the GPS option for precise location. After 15 min of scanning I found the device and the location it shown somewhere near Africa and actually it should show somewhere near my Pune's home address. I used the https://cloud.internalpositioning.com server.

  • FIND3 scanner app getting crashed

    FIND3 scanner app getting crashed

    I am following the document of Tracking your Phone.

    When I open the app I enter the details family name , device then I select the GPS option and press start scan but after 18 seconds it gets crashed. Having crashing issues with the app. If I am not providing any location and I want to track the device with GPS option enabled it should give me the co-ordinates of my device where it is lying right?

the pluto is a gateway new time, high performance, high stable, high availability, easy to use

pluto the pluto is a gateway new time, high performance, high stable, high availability, easy to use Acknowledgments thanks nbio for providing low lev

Sep 19, 2021
🚀 gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go./ gnet 是一个高性能、轻量级、非阻塞的事件驱动 Go 网络框架。
🚀 gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go./ gnet 是一个高性能、轻量级、非阻塞的事件驱动 Go 网络框架。

English | ???? 中文 ?? Introduction gnet is an event-driven networking framework that is fast and lightweight. It makes direct epoll and kqueue syscalls

Jan 2, 2023
Nov 9, 2022
Netpoll is a high-performance non-blocking I/O networking framework, which focused on RPC scenarios, developed by ByteDance.
Netpoll is a high-performance non-blocking I/O networking framework, which focused on RPC scenarios, developed by ByteDance.

Netpoll is a high-performance non-blocking I/O networking framework, which focused on RPC scenarios, developed by ByteDance. RPC is usually heavy on processing logic and therefore cannot handle I/O serially. But Go's standard library net designed blocking I/O API, so that the RPC framework can only follow the One Conn One Goroutine design.

Jan 2, 2023
High-performance, non-blocking, event-driven, easy-to-use networking framework written in Go, support tls/http1.x/websocket.

High-performance, non-blocking, event-driven, easy-to-use networking framework written in Go, support tls/http1.x/websocket.

Jan 8, 2023
SOCKS Protocol Version 5 Library in Go. Full TCP/UDP and IPv4/IPv6 support

socks5 中文 SOCKS Protocol Version 5 Library. Full TCP/UDP and IPv4/IPv6 support. Goals: KISS, less is more, small API, code is like the original protoc

Jan 8, 2023
lite version of gobuster. Only subdomain brute. 内网轻量化子域名爆破工具

gobusterdns lite version of gobuster. Only subdomain brute. 内网轻量化子域名爆破工具 适合指定dns跑内网子域名 与原版的修改 精简功能,仅支持子域名扫描 可导入domain list文件扫描

Nov 9, 2022
🎉 An awesome version control tool for protoc and its related plugins.
🎉 An awesome version control tool for protoc and its related plugins.

❤️ PowerProto is actively maintained! Any questions in use can be directly raised issue, I will respond to you as fast as possible. If you think the p

Dec 29, 2022
Easily increment 📶 a multi-language 🔱 project version
 Easily increment 📶 a multi-language 🔱 project version

version-bump Have you ever made a mistake incrementing a project version? Do you have multiple files to update the version at? I was always forgetting

Dec 14, 2022
Layer2 version of wireguard with Floyd Warshall implement in go.

Etherguard 中文版README A Full Mesh Layer2 VPN based on wireguard-go OSPF can find best route based on it's cost. But sometimes the lentancy are differen

Dec 29, 2022
A gRPC version of tag in blog-service

A gRPC version of tag in blog-service

Oct 30, 2021
This is a fork version from ngrok
This is a fork version from ngrok

Because the original version is no longer maintained, So I forked that project and made the following changes: split

Nov 14, 2022
parse-curl.js golang version. Parse curl commands, returning an object representing the request.

parse-curl.js golang version. Parse curl commands, returning an object representing the request.

Nov 1, 2022
Hello gRPC (Go version)

Hello gRPC (Go version) Home Docs Repository TL:DR; scarica i componenti necessari go install google.golang.org/protobuf/cmd/protoc-gen-go go install

Jan 14, 2022
Forked Version of Miekg's DNS library that recycles UDP sockets

Alternative (more granular) approach to a DNS library Less is more. Complete and usable DNS library. All Resource Records are supported, including the

Jan 20, 2022
A modified version of RoProxy made for self-hosting.

roproxy-lite A modified version of RoProxy made for self-hosting. Setup is easy, simply change the options at the top of main.go and run. Alternativel

Dec 24, 2022
Fetch-npm-package - A small utility that can be used to fetch a given version of a NPM package

Use fetch-npm-package <package> <version> <output-dir> E.g. fetch-npm-package is

May 21, 2022
a go mini version TCP top on UDP for game connections or others.

sanhua sanhua(三花猫) is kind of cat with black, red and white color. This is a mini version TCP top on UDP, but with out resend lost packet. As we know.

May 31, 2022
A (attempt to create a) multiversion gophertunnel proxy to join the latest MC version without renderdragon

draco a multiversion gophertunnel proxy to join the latest MC version without renderdragon Purpose mojang can't seem to actually make a good update to

Dec 15, 2022