====== Radio scanning ====== ===== Boot Noise Measurement ===== The ''BNM'', which stand for Boot Noise Measurement, initiates a spectral scan at startup. ==== Configure BNM ==== These parameters can be changed by the user in the global configuration file ''/etc/bnm/bnm.conf''. The BNM feature takes some time when the gateway is booting. To avoid Boot Noise Measurement, disable it in this file (Set ''disable'' in the field ''BNM_ENABLE''). \\ The default configuration on iBTS (release 4.2) is the following: # BNM is executed at boot. BNM_ENABLE="enable" # Radio configuration. STEP_FREQ_MHZ=1 BANDWIDTH_HZ=62500 BITRATE_BPS=600 RADIO_NB="1" # Number of samples by frequency. SAMPLES_NB=20 # Additional arguments for klk_spectral_scan. ADDITIONAL_ARGS="--strip-zero" # Number of seconds before scans timeout. TIMEOUT_SEC=90 # Backup size in bytes. BACKUP_SIZE=102400 //''RADIO_NB'' parameter is only available for Wirnet iBTS as this gateway owns 2 LoRa modems per LoRa module (up to 4 LoRaLOC modules). On Wirnet iFemtoCell, there is only one LoRa modem and no LoRa module.//\\ //''SAMPLES_NB'' parameter is not taken into account for iFemtoCell-evolution and iStation product. Optimized kerlink spectral scan uses RSSI smoothing so SAMPLES_NB configuration parameter is ignored and RSSI smoothing is used instead of looping over frequencies (to have a quicker BNM).//\\ \\ The start frequency and the stop frequency are defined in the board-specific configuration file, in the directory ''/etc/bnm/''. The board-specific configuration file name changes according to the region. # Radio configuration. START_FREQ_MHZ=853 STOP_FREQ_MHZ=883 ==== Example ==== === The BNM is launched at startup === Starting BNM... done Starting ifplugd: done Starting Status manager Starting System manager Starting Time manager Starting SMS manager Starting Lighttpd Web Server: lighttpd. Starting MonitStarting Monit 5.20.0 daemon with http interface at [localhost]:2812 . Starting network management services: snmpd. Executing network monitoring daemon... Keros (Kerlink OS Distribution) 4.0.2 klk-lpbs-050789 /dev/console klk-lpbs-050789 login: root === Get the result === The result of the measurement is available in the ''/var/log/bnm/'' folder. * __Wirnet iBTS example:__ root@klk-lpbs-XXXXXX:/ # ll /var/log/bnm/ drwxr-xr-x 2 root root 4.0K Aug 23 09:20 . drwxr-xr-x 3 root root 4.0K Aug 23 09:19 .. -rw-r--r-- 1 root root 1.0K Aug 23 09:20 bnm_slot2_radio1_180823091951.csv -rw-r--r-- 1 root root 1.0K Aug 23 09:20 bnm_slot2_radio2_180823091951.csv In this example, one LoRa module is connected. For each LoRa module, the spectral scan is done for the channel 1 and for the channel 2. \\ To configure the BNM to scan only one channel modify the field ''RADIO_NB="1 2"''. \\ ''RADIO_NB="1"'': Only channel 1 will be scan.\\ ''RADIO_NB="2"'': Only channel 2 will be scan. * __Wirnet iFemtoCell example:__ root@klk-wifc-XXXXXX:~ # ll /var/log/bnm/ drwxr-xr-x 2 root root 4.0K Jan 8 10:38 . drwxr-xr-x 3 root root 4.0K Jan 8 10:38 .. -rw-r--r-- 1 root root 1.6K Jan 8 10:39 bnm_190108103858.csv === Interpret the result === The following is the result of the spectral scan analysis on a Wirnet iBTS on the LoRa module located in slot 2 and for the radio channel 2. \\ The default configuration uses frequency steps of 1MHz on a 62500Hz bandwidth. \\ For each frequency, 20 samples are taken. For 868 MHz gateway, the start frequency is 853 MHz and the stop frequency 883 MHz. Thus 620 samples are measured. Former measurements are backuped in the directory ''/var/backups/bnm''. root@klk-lpbs-XXXXXXcat :~ # cat /var/log/bnm/bnm_slot2_radio2_180823093716.csv 853000000,-129.0,1,-128.0,6,-127.0,13 854000000,-128.0,3,-127.0,14,-126.0,3 855000000,-128.0,1,-127.0,13,-126.0,6 856000000,-127.0,2,-126.0,16,-125.0,2 857000000,-127.0,9,-126.0,11 858000000,-127.0,2,-126.0,18 859000000,-126.0,14,-125.0,6 860000000,-125.0,9,-124.0,11 861000000,-125.0,4,-124.0,16 862000000,-125.0,1,-124.0,16,-123.0,3 863000000,-125.0,1,-124.0,16,-123.0,3 864000000,-116.0,3,-115.0,10,-114.0,7 865000000,-124.0,1,-123.0,15,-122.0,4 866000000,-123.0,8,-122.0,11,-121.0,1 867000000,-124.0,13,-123.0,7 868000000,-125.0,2,-124.0,10,-123.0,8 869000000,-126.0,1,-125.0,8,-124.0,11 870000000,-126.0,1,-125.0,5,-124.0,14 871000000,-126.0,2,-125.0,13,-124.0,5 872000000,-126.0,2,-125.0,5,-124.0,12,-123.0,1 873000000,-126.0,19,-125.0,1 874000000,-127.0,1,-126.0,18,-125.0,1 875000000,-127.0,19,-126.0,1 876000000,-128.0,8,-127.0,12 877000000,-129.0,2,-128.0,10,-127.0,8 878000000,-128.0,11,-127.0,9 879000000,-128.0,13,-127.0,7 880000000,-124.0,11,-123.0,9 881000000,-128.0,12,-127.0,8 882000000,-128.0,7,-127.0,13 883000000,-128.0,11,-127.0,9 In the above result, 20 measures have been done for 863 MHz frequency. 1 time the result was -125 dBm, 16 times -124 dBm and 3 times -123 dBm. ==== Known issues ==== * On iBTS, the number of frequency steps is limited to 255. Mind that the step number must be below that limit. Adjustments are possible by configuring ''START_FREQ_MHZ'', ''STOP_FREQ_MHZ'' and ''STEP_FREQ_MHZ''. * BNM frequency configuration files depending on the board (''bnm-868.conf'', ''bnm-923.conf'', ''bnm-915.conf'') are not kept by default when upgrading the gateway. These files are not written in ''sysupgrade.conf'' and must be added if necessary. ===== Manual Spectral Scan ===== ==== Operating principle ==== The lorascan script can be used to interact with lorad and request scans (only if LBT is not activated). Only available with keros FW 5 and for iStation, iFemto, iFemto-evolution and iBTS (no spectralscan on iZeptoCells). The script is packaged to include everything you need for simple installation via IPK: * /user/spectral/lorascan * lorascan script * /user/spectral/scan * Script to scan at regular intervals (this can be over several consecutive days) * Script to scan a duration (one time) * /user/spectral/spectralscan.conf * configuration file for the script scan * /user/spectral/spectralscan * script used for activation/deactivation and run * /etc/logrotate.d/spectralscan * configuration for the logrotate ==== Prerequisite ==== - Keros firmware must be 5.11.0 - lorad must be started for the script to work - Gateway compatiblity: * iStation * iFemto * iFemto-evolution * iBTS === Limitation === Not available for iZeptoCells (no sniffer). ==== Installation ==== Installation is performed via a magic link: ''curl --compressed -s https://upgrade.wanesy.com/spectralscan_fw5 | sh'' \\ or by installing the ipk package (in the /user/.updates directory, then kerosd -u && reboot). ==== Configuration ==== The script is configured in the /user/spectral/spectralscan.conf file: INTERVAL=10 STEP=20 TIMEZONE=0 CONFIGURATION_FILE=/etc/lorad/lorad.json FREQ_MIN= FREQ_MAX= ''INTERVAL'': Minutes between two scans ''STEP'': Number of measurements to complete the scan ''TIMEZONE'': Number of hours to add to timestamp (default 0) ''CONFIGURATION_FILE'': File to be used for scanning frequencies ''FREQ_MIN/FREQ_MAX'': If not, the values will be those of lorad.json ==== How it works ==== === Scan at regular intervals === == Activation == To start it up: ''/user/spectral/spectralscan --activate'' To stop it: ''/user/spectral/spectralscan --deactivate'' To uninstall it: ''/user/spectral/spectralscan --remove'' After activation, a line is added to the crontab */10 * * * * /user/spectral/spectralscan --run >> /tmp/spectral.log 2>&1 In this example, scanning will take place every 10 minutes. For manual triggering: ''/user/spectral/spectralscan --run'' ''/user/spectral/scan -periodicscan'' == Results == Each time the script is run, the results are stored in /var/log/spectralscan.log: Date;863000000;863200000;863400000;863600000;863800000;864000000;864200000;864400000;864600000;864800000;865000000;865200000;865400000;865600000;865800000;866000000;866200000;866400000;866600000;866800000;867000000;867200000;867400000;867600000;867800000;868000000;868200000;868400000;868600000;868800000;869000000;869200000;869400000;869600000;869800000;870000000 2025-05-26T11:24:04+0000;-108.5;-108.5;-108.5;-108.5;-108.5;-106.0;-108.5;-109.0;-109.5;-109.5;-109.5;-109.0;-110.0;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.5;-110.5;-111.0;-111.0;-110.5;-110.0;-110.0;-109.5;-109.0;-108.5;-108.0;-108.0;-108.5;-108.0;-108.5 2025-05-26T11:36:04+0000;-109.0;-108.0;-108.0;-108.0;-108.5;-105.0;-109.0;-109.0;-110.0;-110.0;-109.5;-110.0;-110.0;-110.0;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.5;-110.0;-111.0;-111.0;-110.5;-110.0;-109.5;-109.5;-108.5;-108.5;-108.0;-108.0;-108.5;-108.5 2025-05-26T11:39:07+0000;-109.0;-108.5;-108.5;-108.0;-108.5;-106.0;-108.0;-108.0;-109.5;-109.5;-109.5;-110.5;-110.5;-110.5;-110.0;-110.5;-110.5;-111.0;-111.0;-111.0;-111.5;-111.0;-111.0;-111.0;-111.0;-110.5;-109.5;-109.0;-109.5;-109.5;-109.5;-109.0;-109.0;-108.5;-108.5;-108.0 2025-05-26T11:42:07+0000;-108.5;-108.5;-108.0;-108.0;-108.0;-105.5;-109.0;-108.5;-109.0;-109.5;-109.5;-109.5;-110.0;-109.5;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.5;-110.0;-110.5;-110.5;-110.0;-110.0;-109.5;-109.5;-108.5;-108.5;-108.0;-108.0;-108.5;-108.0 2025-05-26T11:45:07+0000;-108.0;-108.0;-108.0;-108.5;-108.5;-106.5;-108.5;-109.5;-109.5;-109.5;-109.5;-109.5;-109.5;-110.0;-111.0;-111.0;-111.0;-111.0;-111.5;-111.0;-111.0;-110.5;-110.5;-111.0;-111.0;-111.0;-110.5;-110.0;-110.0;-109.5;-108.5;-108.0;-108.5;-108.5;-108.5;-108.5 2025-05-26T11:48:07+0000;-108.0;-108.0;-108.5;-108.5;-108.5;-106.0;-109.0;-109.0;-109.0;-109.5;-109.5;-109.5;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.5;-110.5;-111.0;-111.0;-110.5;-110.5;-109.5;-109.5;-109.0;-108.5;-108.5;-108.5;-108.5;-108.5;-108.5 2025-05-26T11:51:07+0000;-108.5;-108.0;-108.0;-108.5;-108.5;-106.0;-108.5;-109.0;-109.5;-109.5;-109.5;-109.5;-109.5;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.0;-110.5;-110.0;-110.5;-110.0;-109.5;-110.0;-109.5;-109.0;-108.5;-108.0;-108.0;-108.5;-108.5 === Scan with duration === == Activation == To start it: **Manually**: ''/user/spectral/scan -fullscan 30'' If no value is entered for duration, the script scans for 120s. Max value for duration is 300s **By Magic Link**: ''curl --compressed -s https://upgrade.wanesy.com/spectralscan_90s | sh'' \\ The duration value is set to 90s. == Results == ./scan -fullscan 10 Starting full scan from 863000000 to 870000000 Hz (36 steps) with duration 10s Full scan CSV saved to /var/log/full_scan.20250526_115723.csv Date;863000000;863200000;863400000;863600000;863800000;864000000;864200000;864400000;864600000;864800000;865000000;865200000;865400000;865600000;865800000;866000000;866200000;866400000;866600000;866800000;867000000;867200000;867400000;867600000;867800000;868000000;868200000;868400000;868600000;868800000;869000000;869200000;869400000;869600000;869800000;870000000 2025-05-26T11:57:28+0000;-108.5;-108.0;-108.0;-108.5;-108.0;-106.0;-109.0;-109.5;-109.5;-109.5;-109.5;-109.5;-109.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.0;-110.5;-111.0;-111.0;-110.5;-110.0;-110.0;-109.5;-109.5;-108.5;-108.0;-108.5;-108.5;-108.0;-108.5 2025-05-26T11:57:29+0000;-108.5;-108.0;-108.0;-108.0;-108.5;-105.5;-109.0;-109.5;-109.5;-109.5;-109.0;-109.5;-110.5;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.0;-110.5;-111.0;-110.5;-111.0;-110.5;-109.5;-109.5;-109.5;-109.0;-108.5;-108.0;-108.0;-108.5;-108.5;-108.5 2025-05-26T11:57:30+0000;-108.0;-108.0;-108.0;-108.0;-108.5;-106.5;-108.5;-109.0;-109.5;-109.5;-109.5;-109.5;-110.0;-110.0;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.0;-111.0;-110.5;-110.0;-109.5;-109.5;-109.0;-109.0;-108.5;-108.0;-108.0;-108.5;-108.5 2025-05-26T11:57:31+0000;-108.0;-108.0;-108.5;-108.0;-108.5;-106.5;-109.0;-109.5;-109.5;-109.5;-109.5;-109.5;-109.5;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.0;-111.0;-111.0;-111.0;-110.5;-109.5;-109.5;-109.5;-109.0;-108.0;-108.5;-108.5;-108.5;-108.5 2025-05-26T11:57:32+0000;-108.0;-108.0;-108.0;-108.5;-108.0;-106.0;-109.0;-109.0;-109.5;-110.0;-109.5;-109.5;-110.0;-110.5;-111.0;-110.5;-111.0;-111.0;-111.0;-111.5;-111.0;-110.0;-111.0;-110.5;-111.0;-110.5;-109.5;-109.5;-109.5;-109.5;-108.5;-108.0;-108.0;-108.5;-108.5;-108.5 2025-05-26T11:57:33+0000;-108.5;-108.0;-108.5;-109.0;-108.5;-106.5;-108.5;-109.5;-109.5;-109.5;-109.5;-109.5;-110.0;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.0;-110.5;-110.0;-110.5;-110.5;-110.5;-110.5;-109.5;-109.5;-109.5;-108.5;-108.5;-108.5;-108.5;-108.5;-108.5 2025-05-26T11:57:34+0000;-108.5;-108.0;-108.5;-108.5;-108.5;-105.5;-109.0;-109.0;-109.5;-109.5;-109.5;-109.5;-110.0;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.5;-110.5;-111.0;-110.5;-110.0;-109.5;-109.5;-109.5;-108.5;-108.0;-108.5;-108.5;-108.5;-108.5 2025-05-26T11:57:35+0000;-108.5;-108.0;-108.5;-108.0;-109.0;-105.0;-108.5;-109.0;-109.0;-109.5;-109.0;-109.5;-110.0;-110.5;-111.0;-111.0;-110.5;-111.0;-111.0;-111.0;-110.5;-110.5;-110.0;-111.0;-111.0;-110.0;-110.5;-109.5;-109.5;-109.5;-109.0;-108.5;-108.0;-108.5;-108.5;-108.5 2025-05-26T11:57:36+0000;-108.0;-108.0;-108.0;-108.0;-108.5;-106.0;-108.5;-109.5;-109.5;-109.5;-109.5;-109.5;-109.5;-110.5;-111.0;-110.5;-111.0;-111.0;-111.0;-111.0;-110.5;-110.0;-110.5;-110.5;-110.0;-110.5;-110.0;-110.0;-109.5;-109.5;-108.5;-108.0;-108.0;-108.5;-108.0;-108.5 2025-05-26T11:57:37+0000;-108.5;-108.0;-108.0;-108.0;-108.5;-106.5;-108.5;-108.5;-109.5;-109.5;-109.5;-109.5;-109.5;-110.0;-111.0;-111.0;-111.0;-111.0;-111.5;-111.0;-111.0;-111.0;-109.5;-110.5;-110.5;-111.0;-110.0;-109.5;-110.0;-109.0;-108.5;-108.0;-108.0;-108.5;-108.5;-108.5 2025-05-26T11:57:38+0000;-108.5;-108.0;-108.0;-108.5;-108.5;-106.5;-108.5;-109.5;-109.5;-109.5;-109.5;-109.0;-109.5;-111.0;-110.5;-111.0;-111.0;-111.0;-111.0;-111.0;-111.0;-110.5;-110.5;-110.5;-110.5;-110.0;-109.5;-109.5;-109.5;-109.0;-109.0;-108.5;-108.0;-108.0;-108.5;-108.5 2025-05-26T11:57:39+0000;-108.5;-108.0;-108.0;-108.0;-108.5;-106.5;-109.0;-109.5;-109.5;-109.5;-109.5;-109.5;-109.5;-110.5;-111.0;-110.5;-111.0;-111.0;-111.0;-110.5;-110.5;-110.5;-110.5;-111.0;-111.0;-110.5;-110.5;-109.5;-109.5;-109.5;-109.0;-108.0;-108.0;-108.5;-108.5;-108.5 ==== How to Exploiting results ==== If the scan has been launched with the ML, the result is automatically displayed in the cockpit logs. In Scan at regular intervals case, files can be retrieved using the classic get_logs function. ==== Package ==== {{ :resources_multi_hardware:spectralscan_1.3.0_klkgw.ipk |}}