This is a full-featured indoor positioning system that was developed during my master thesis. Its server component uses servlets and an Angular JS front end, whereas the Router/AP service is written in Lua.
The underlying architecture can be observed in the diagram below.
Overall procedure to map the target area:
Node Setup & RSS Measurement Active Nodes, which can be regular access points, are distributed among the target area. Next a measurement phase is initialized which takes about one to three hours.
Site Evaluation From the resulting data, the underlying radio propagation model can be adjusted to meet the actual properties of the current site.
Map Generation & Positioning With the adapted model, radio wave propagation can be simulated over a representation of the target area. Positioning works similar to the scene analysis approach using a modified nearest neighbor algorithm.
Start Tomcat & CouchDB with standard ports. Compile project with
mvn clean package
and deploy the *.war on your Tomcat. The DB will be set up automatically, the name of the db will be derived from the
As prerequisites you must have at least 4 APs ready (with installed webserives) in your network (knowing the IPs of each).
Open the browser and enter the url you deployed the war (usallay something like http://localhost:8080/MyProject). Create a new network by pressing the box with the "+". Enter the details and set "Surveys Per Node to 100" and "Survey Schedule" to "Every Minute" to accelerate measurement. Then next to "Active Nodes", add new nodes with "Add Node". Enter name and IP address, then press "discover" to see if the node is reachable. After adding all nodes wait a couple of hours to let it measure.
Next press "Schedule Job" -> "Start Single Run Analysis" and wait a couple of seconds. The analysis should appear under "Analysis", reload page if not. The click "Radio Path Loss Config" and click "Normalize Node Multipliers". In the bottom table click on drop-down under "SSID" and choose "Targentdistance". Add the physical distances between nodes in meters in the distance matrix or skip the entire step. After entering the distances you can press "Calculate Path Loss Model" to optimize the used model -> "Update config".
Next, again, press "Schedule Job" -> "Start Single Run Analysis" and wait a couple of seconds. Select the current analysis (with the adapted model). Choose "Signal Strength Map" and correct the positions of the active nodes. You may want to upload a floorplan blueprint first in the network details (the pen icon next to the main header). After that, go to map full screen mode (four arrows icon). Scale the floorplan with the slider until the meter sizes are correct (you may have to correct the positions of the Active Nodes again). Then press "Calculate" next to the "Extended Nodes" headers. This will calculate the positions of all APs/Routers in the vicinity. You may want to correct the positions you know of. Press "save". You now are ready to position.
You need a AP with the custom webservices installed, same as Active Nodes. This AP must be in your network.
Go to "Positioning". Input the IP of the client (AP) and press "Find". If multiple networks match for this position you have to select one, otherwise you will be shown a UI with the estimated position. You may press on a square in the grid to select the actual position to let the system calculate the offset.
Properties of the Proposed System
The results indicate that the position accuracy offers a performance comparable to a state-of-the-art solution. The following diagram shows the accumulated offsets in all test locations.
Based on extrapolated data, the proposed system delivers superior performance in terms of maintainability and scalability. In the diagram below the required effort for various target areas is depicted.
Overview How to Centralize your Checkstyle Configuration with Maven A Better Way to Protect Your IDs Security Best Practices: Symmetric Encryption with AES in Java and Android: Part 2: AES-CBC + HMAC The Bcrypt Protocol… is kind of a mess The Concise Interface Implementation Pattern Improving ProGuard Name Obfuscation Handling Proguard as Library Developer Managing Logging in a Multi-Module Android App Security Best Practices: Symmetric Encryption with AES in Java and Android
Patrick Favre-Bulle 2020