WiFiMon Hardware Probes (WHP) are used for performance measurements in a WiFi network from dedicated small form factor devices which are installed in fixed points. WiFiMon tested its operation and recommends the use of Raspberry Pi’s v3 Model B+ or v4.
WHP configuration
WiFiMon Hardware Probe will work in the following configuration:
- A Raspberry Pi 3 Model B+ or a newer model
- A micro SD card with at least 16GB
- WiFiMon Raspberry Pi operating system image. Size ~ 3.6 GB
WiFiMon Raspberry Pi image given above is a custom version of Raspbian Stretch with desktop, with the default Raspberry Pi credentials (user: pi, password: raspberry).
We advise the user to secure Raspberry Pi by changing the default password (more details are given below in Step 3).
Setting up the WHP
Step 1: Write the image to the micro SD card
Follow the instructions at the official Raspberry Pi site. Skip the "Download the image" step and use the WiFiMon Raspberry Pi operating system image instead.
Step 2: Start the Raspberry Pi
Follow the simple steps below:
- Insert the microSD in the Raspberry Pi
- Plug the USB keyboard into one of the USB ports (or USB wireless adapter for keyboard and mouse)
- Plug the USB mouse into one of the USB ports
- Connect the monitor cable to the Pi's HDMI port
- Plug the power supply into a socket and connect it to the micro USB power port
You should see a red light on the Raspberry Pi and raspberries on the monitor. The WiFiMon Hardware Probe will boot up into a graphical desktop.
Step 3: Configure the RPi
Secure your Raspberry Pi by changing the default password. Optionally, you may enable SSH to access the command line of a Raspberry Pi remotely or setup remote desktop. Next, you have to connect to the wireless network you want to measure.
The WiFiMon Hardware Probe (WHP) regularly performs performance tests against the WiFiMon Test Server (WTS) in an automated manner, thus simulating end users from a fixed location in the monitored WiFi network. To that end, WHPs leverage on a crontab script. Within the crontab script, the tests that will be executed (NetTest/boomerang/speedtest) should be defined. To do that, open the terminal (as user "pi") and enter the command: crontab -e. You will see the following code block. You are required to modify the parts of the crontab that are denote
19,39,59 * * * * export DISPLAY=:0 && firefox --new-window https://www.google.com >/dev/null 2>&1 00,05,10,15,20,25,30,35,40,45,50,55 * * * * export DISPLAY=:0 && firefox --new-tab URL_TO_nettest.html >/dev/null 2>&1 01,06,11,16,21,26,31,36,41,46,51,56 * * * * export DISPLAY=:0 && firefox --new-tab URL_TO_speedworker.html >/dev/null 2>&1 02,07,12,17,22,27,32,37,42,47,52,57 * * * * export DISPLAY=:0 && firefox --new-tab URL_TO_boomerang.html >/dev/null 2>&1 03,08,13,18,23,28,33,38,43,48,53,58 /home/pi/wireless.py >> ~/cron.log 2>&1 18,38,58 * * * * scripts/kill-firefox.sh >/dev/null 2>&1 10 0 * * 0 scripts/pi-reboot.sh >/dev/null 2>&1 |
Note:
Depending on the available tests (or WiFiMon-enabled pages), you can specify which tests will be executed and when. You may also see an example. It is advised to visit the test pages with Mozilla Firefox in case Adding Security Exceptions are necessary, e.g. when certificates are not trusted. This will ensure that SSL-related errors will not prevent the WiFiMon HW Probe from visiting these pages.
Step 4: Streaming Wireless Network Interface Metrics to the WiFiMon Analysis Server (WAS)
In /home/pi, you will find the Python script wireless.py. The contents of the script are the following:
#!/usr/bin/python import subprocess import datetime import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) def return_command_output(command): proc = subprocess.Popen(command, stdout = subprocess.PIPE, shell = True) (out, err) = proc.communicate() out_without_carriage_return = out.rstrip('\n') return out_without_carriage_return def parse_iwconfig(): command1 = "sudo iwconfig wlan0 | grep \"Link Quality\"" command1_output = return_command_output(command1) command1_output = ' '.join(command1_output.split()) command1_parsed = command1_output.split(" ") link_quality = command1_parsed[1].split("=")[1] link_quality = link_quality.split("/")[0] signal_level = command1_parsed[3].split("=")[1] command2 = "sudo iwconfig wlan0 | grep \"Tx-Power\"" command2_output = return_command_output(command2) command2_output = ' '.join(command2_output.split()) command2_parsed = command2_output.split(" ") bit_rate = command2_parsed[1].split("=")[1] tx_power = command2_parsed[3].split("=")[1] timestamp = int(datetime.datetime.now().strftime("%s")) * 1000 probeNo = "WHP_NUMBER" headers = {'content-type':"application/json"} data = "{\"timestamp\":" + str(timestamp) + ", \"bitRate\":" + bit_rate + ", \"txPower\":" + tx_power + ", \"linkQuality\":" + link_quality + ", \"signalLevel\":" + signal_level + ", \"probeNo\":\"" + probeNo + "\"}" try: session = requests.Session() session.verify = False session.post(url='https://WAS_FQDN:8443/wifimon/probes/', data=data, headers=headers, timeout=15) except: pass return None if __name__ == "__main__": parse_iwconfig()
User has to edit lines 31 and 38 according to their setup. In line 31, "WHP_NUMBER" should match the number assigned to the testtools of the particular WiFiMon Hardware Probe (WHP), e.g. for the WHP assigned the number 1, the value should be "1". Assigning numbers to WHPs is possible by appropriately setting the testtool attribute included in the websites monitored by them. More information related to assigning number to WHPs is available in the WiFiMon Test Server installation guide. In line 38, "WAS_FQDN" should match the FQDN of the WiFiMon Analysis Server (WAS) responsible for processing the wireless performance metrics of the WHP. The above code block assumes that the WAS uses the WiFiMon Secure Agent. In case of using the WiFiMon Non-Secure Agent, the URL of line 38 should be modified; instead of "https", the WiFiMon Non-Secure Agent requires "http" and the port on which the WAS listens is "9000" instead of "8443".
That's all! At this point you may (optionally) unplug the keyboard, the mouse and the monitor and let the WHP measure the performance of your wireless network!