No description, website, or topics provided.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
README.md
wifiDistribution.py
wifiDistribution_helper.py

README.md

WiFi Wasteland Wizard

WiFi Wasteland Wizard is a Python script using Gurobi linear optimization libraries to calculate an optimal access point distribution for large scale, multi level buildings. It supports extending an existing WiFi installation by suggesting new locations for access points. By defining a list of blacklisted apartments and maximum possible installments per building you can tweak an existing WiFi installation. It will also show the optimal wireless channel per access point, such that channels do not (or less) overlapp.

We deployed around 110 access points following the optimization suggestions and we can say it is gorgeous. You can find our status page with a WiFi map at https://ram.rwth-aachen.de/links/netzstatus#wifimap

N

Knowledge & Licenses

Features!

  • Limit the maximum suggested access points per building

    • This will allow you to express less ports in your switching location. For example when every room is connected directly to a switch which is not PoE enabled and you inject power via single PoE injectors or a Midspan unit with less ports than the switch. We are having 24x Port PoE Midspans but 2x48x Port Switches per building.
  • Use a value function which defines what you suggest to be a good coverage

    • We use a value function which will prefere rooms getting 2 or 3 access points in range more than having 1 or 4 (or even more) access points in range
  • Specify which rooms should in no case get an access point

    • This can help when the tenant does not want to have an access point installed
  • Specify how far you estimate your WiFi will range (default 701 cm)

    • To ensure less 2.4 Ghz crosstalk you might change the radios's power, or you want to calculate a 5Ghz wireless coverage map. You can then change how far you expect that a signal will propagate
  • Get a per access point channel suggestion such that the access points' channel will not (or less) overlapp

  • Ensure that rooms which are "too" close to each other do not both get an access point to decrease channel interference

  • Precise notice about how far the suggested access point distribution is away from the optimal solution (due to the added constraints)

  • See how many rooms are having how many access points in range:

Amount range 0: 0
Amount range 1: 31
Amount range 2: 137
Amount range 3: 164
Amount range 4: 20
Amount range 5: 3

Input

  • List of existing access points (room list)
  • Map for mapping rooms to buildings
  • List for maximum number of access points per building possible
  • Blacklist for rooms you do not want to get an access point
  • N*N dimensional matrix containing distance from one room to another (in cm)
  • Contraint Set adapted to your setup

Output

  • List of rooms to be equipped with an access point, sorted by building
  • Per room flag (if the room should get an access point)
  • Per room/access point wireless channel suggestion
  • How close you are to the optimal solution (in %) due to additional constraints (like max access points in one building)
    • By this you can see if you need more ports in a building to get the best coverage

You will get an output file with this format:

 ...
[1034]
router=1
existing=1
channel=1

[1035]
router=0
existing=0
channel=-1

[1036]
router=1
existing=0
channel=6
....

How many rooms are seeing how many access points:
Amount range 0: 0
Amount range 1: 31
Amount range 2: 137 <- having 137 rooms are seeing 2 access points in defined range
Amount range 3: 164
Amount range 4: 20
Amount range 5: 3

New access points to setup sorted by building:
buildingA:1034,2228,2111,2122,2115,2240,2056,2022,2255,2243,2336,2008,
buildingB:
buildingC:
buildingD:1255,1035,1036,
buildingE:
buildingF:1254,

Adjusting Contraints and providing ressource files

maximalAPNumberInRange = 99 #if you specify a linear impossible contraint, there will be no solution
minimalAPNumberInRange = 1 #same here. Use the value function to specify how many APs you wish to have in range
accessPointRange = 701 #7.01m how far an access point can send its signal
channelRange = 1000 #10m how far an access points' channel can interfere with a different AP on the same channel
neighboursRange = 500 #5m # How far are rooms away from each other to be considered neighbours

Edit these files to fit your buildings:

  • app_distance.txt
-1001:0.0;300.0;1671.0961........323;
-1002:300.0;0.0;1386.5650........123;
-1005:1671.096191;1386.565063;0.0;300.000488;600.00......;
  • app_to_house.txt
#house,app
buildingA:2333
buildingA:2153
buildingB:1221
buildingB:1337
buildingC:1234
...
  • existing_ap.txt
#app,ap-prio <- prio not implemented
2511:
2514:
2311:
...
  • max_ports.txt
buildingA:20
buildingB:20
buildingC:22
buildingD:10
buildingE:20
buildingF:20
  • blacklist.txt
2113,comment
2511,
2111,somecomment
1221,
1377,
...

Run it

WiFi Wasteland Wizard uses Python and Gurobi libraries to make the magic happen. You will have to have Python and Gurobi setup before continuing.

In our example we are running the optimization on a Windows machine. MacOS and Linux work as well of course.

$ python ./wifiDistribution.py

Todo

  • Add more precise room specific calculations
  • Add wall support
  • Add 5 Ghz channel suggestion

License

N

Apache License 1.0