19 comments

[ 4.5 ms ] story [ 58.0 ms ] thread
Is there any reason this couldn't be ported to Android or iOS, after hacking together an interface using something like Toga?
You would have to add Android and iOS ways to collect the WiFi AP info (SSID, signal strength, etc). This package uses this https://github.com/kootenpv/access_points which can do it for OSX, Linux, and Windows.

Kivy would probably be an easier path than Toga. It incorporates pyjnius which you would need to solve the wifi scan on android, and already has the UI part figured out.

This Python package is a nice port of a system I wrote [1] which I call FIND (the Framework for Internal Navigation and Discovery) [2]. I believe whereami mostly supports laptops, but with FIND you can do internal positioning on a lot devices - Android phones, Electric Imps, Raspberry Pis, Particles, and soon ESP8266s [3] and even iPhones if you are willing to go through some extra setup. [4]

[1]: https://news.ycombinator.com/item?id=11517667

[2]: https://github.com/schollz/find

[3]: https://www.internalpositioning.com/client/

[4]: https://github.com/schollz/find-lf

It's awesome seeing open source implementations of this. We were doing this in an R&D lab of a major tech company in 2009.
I wonder if there's enough signal to detect if someone enters the room, which could be another cool trigger (e.g., turn on lights).
I think you'd have trouble getting accuracy <10 feet. GPS is usually about the same. Still, almost every device has WiFi so this is basically a free feature.
If it kept the lights ON in a 10ft radius, it could still be pretty good.
Yes but that could mean turning the lights on when you are in the room next door.
Can I do this with a single wifi router in my house or is it saying I need 7 "routers" or access points for this to work?
I just tried it at home and it works great with a distance of just 10 feet or so between two locations.

My laptop can see 26 unique wifi hotspots (other people in the building, cafe across the street, etc), which is the number the author was referring to.

I have a really dumb version of this without any ML at work, it uses the API on our Ubiquiti Unifi's controller to get a list of devices connected to each of our 4 AP's.

Its good enough to see if somebody is in a meeting room and unavailable or if they are probably free.

If you have more than one device on the network that belongs to one person, it uses the device that has been connected to an AP for the least time (theoretically that's the last one that moved)

I wonder if it would be possible to create a coordinate system from this. This is, without any associations, map where each router is based on closeness to other routers and do a sort of "triangulation" to get coordinates.
I tries doing this kind of thing at a hackathon once and we discovered that actual coordinate systems are hard to do. The "signal strength" data wireless cards produce are very dependent on the model of the devices involved. They're pretty unreliable for generating coordinates.
I feel like there has to be some sort of algorithm that lets you generate something like this though. You would definitely have to calibrate the RSSI based on your current card and time of day. Maybe not perfect but you could get a spatial sense of your routers.
Well we were able to write an algorithm that kind of worked. But it relied more on just which MAC addresses are visible at a certain point.