JEV WiFi Analyzer

Het apparaat monitort passief WiFi-activiteit, converteert vastgelegde 802.11-frames naar gestructureerde RF-telemetrie en verzendt elk meetvenster naar Jev via de OpenRouter Decisions API. Jev evalueert de telemetrie en geeft gestructureerde beslissingen terug over dekking, congestie en mogelijke netwerkoptimalisatie.

Functies

  • Passieve WiFi-monitoring
  • Scannen van 2,4 GHz-kanalen
  • Meting van frames per seconde (frames/sec)
  • Detectie van access points
  • RSSI-statistieken
  • Telling van waargenomen clients
  • Configureerbare kanalen en meetvensters

Hardware

  • ZimaBoard 2
  • Alfa AWUS036H
  • 16 GB USB-flashdrive
  • HDMI-monitor
  • USB-toetsenbord
  • Ethernetkabel

Installatie

Ubuntu

  1. Download de Ubuntu Desktop ISO en maak een opstartbare USB-stick met Balena Etcher.
  2. Sluit de USB-stick, HDMI-monitor, toetsenbord en Ethernetkabel aan op de ZimaBoard 2.
  3. Zet het apparaat aan, druk tijdens het opstarten op F11, selecteer de USB-stick en installeer Ubuntu.

Afhankelijkheden

Open een terminal met CTRL + ALT + T en voer de volgende commando's uit:

sudo apt update
sudo apt install python3-pip python3-scapy
pip install requests --break-system-packages

Alfa AWUS036H

Sluit de Alfa-adapter aan en controleer of Ubuntu deze detecteert:

ip link
iw dev
lsusb

Een typische installatie kan het volgende tonen:

  • Interface: wlx018c0cb28c7b1
  • Chipset: Realtek RTL8187
  • Huidige modus: managed
  • MAC: 01:c0:ca:19:23:b1

De інтерfacenaam en het MAC-adres verschillen per systeem. De analyzer schakelt de interface automatisch over naar monitor-modus voordat de survey start.

OpenRouter API-sleutel

  1. Maak een API-sleutel aan via: https://openrouter.ai/workspaces/default/keys
  2. Configureer deze in het bestand scan.py.

De analyzer uitvoeren

Scan kanalen 1-13 met het volgende commando:

sudo -E python3 scan.py \
-c 1,2,3,4,5,6,7,8,9,10,11,12,13 \
-t 1 \
-w 30

Opties

ParameterBeschrijving
-cKanalen om te scannen
-tSeconden besteed aan elk kanaal
-wMeetvenster in seconden
-iWiFi-interface
-mJev-model
--exportDirMap voor JSON-export

De analyzer springt sequentieel tussen de kanalen; hij monitort niet alle kanalen gelijktijdig. Druk op Q om af te sluiten.

Hoe het werkt

De Alfa-adapter vangt 802.11-frames op terwijl de analyzer door de geselecteerde 2,4 GHz-kanalen beweegt. Scapy verwerkt de frames en Python aggregeert de metingen lokaal.

Voor elk kanaal berekent de analyzer:

  • Kanaal
  • Aantal frames
  • Verblijftijd in seconden (dwellSeconds)
  • Frames per seconde
  • Aantal access points
  • Gemiddelde RSSI
  • Aantal clients

Elk gedetecteerd access point bevat daarnaast een samenvatting met:

  • BSSID
  • SSID
  • Kanaal
  • Beacon-count
  • Beacons per seconde
  • RSSI gemiddelde/minimum/maximum
  • Actieve clients

Jev-integratie

Het scanproces creëert een gestructureerde status bestaande uit:

  • channelsScanned
  • channelMetrics
  • accessPointsDetected
  • measurementWindowSeconds

Deze informatie wordt via OpenRouter naar Jev AI verzonden met behulp van ~typesafe/jev-latest.

Architectuur

Ruwe WiFi-frames $\downarrow$ Python / Scapy (Frame-counts, frames/sec, AP-detectie, RSSI-statistieken, waargenomen clients) $\downarrow$ Gestructureerde RF-telemetrie $\downarrow$ Jev (CoverageQuality, CongestionLevel, OptimizationAction)

Python voert de deterministische meting en aggregatie uit. Jev interpreteert de resulterende telemetrie en neemt afgebakende beslissingen.

Wat is Jev?

Jev is een beslissingsmodel van TypeSafe, ontworpen voor gestructureerde besluitvorming. In plaats van een generatief model te vragen om een tekstueel rapport te produceren (dat vervolgens geparsed moet worden), biedt de applicatie een status en getypeerde vragen aan. Jev geeft gestructureerde antwoorden terug, zoals scores en keuzes.

In dit project is de taakverdeling als volgt:

Python verzorgt:

  • Capture
  • Count
  • Calculate
  • Aggregate

Jev verzorgt:

  • Score
  • Classify
  • Choose

Jev-beslissingen

  1. Dekkingskwaliteit (coverageQuality) → score

De criteria variëren van 'zeer slecht/dead zone' tot 'uitstekend/sterk signaal'.

  1. Congestie (congestionLevel) → keuze

Mogelijke resultaten: low, moderate, high, critical.

  1. Optimalisatie (optimizationAction) → keuze

Mogelijke resultaten: none, powerAdjustment, channelPlan, hardwareAddition.

De drie beslissingen worden samen in één Jev-verzoek verzonden.

Meetvensters en exports

Aan het einde van elk meetvenster aggregeert de analyzer de huidige gegevens, verzendt de gestructureerde status naar Jev, slaat de resultaten op en start een nieuw venster.

De standaard exportmap is: surveyExports/. Elke JSON-export bevat:

  • Timestamp
  • Vensterduur in seconden
  • Gescande kanalen
  • Kanaalmetrieken
  • Access points
  • Jev-evaluaties

Dashboard

Het terminal-dashboard toont:

  • Huidig kanaal
  • Kanaalactiviteit
  • Frames/sec
  • Access points
  • Gemiddelde RSSI
  • Waargenomen clients
  • Jev-dekkingsscore
  • Jev-congestieniveau
  • Jev-optimalisatieactie
  • Voortgang van de meting
  • Geaccumuleerde Jev-kosten

Toepassingen

  • WiFi-problemen oplossen: Identificeer kanalen met hoge activiteit of veel nabijgelegen access points.
  • Kanaalplanning: Vergelijk kanaalactiviteit voordat u een kanaal kiest voor een access point.
  • Dekkingsanalyse: Neem metingen op verschillende locaties en vergelijk de waargenomen RSSI.
  • Wijzigingsdetectie: Voer herhaaldelijk surveys uit en vergelijk de resulterende JSON-metingen.
  • IoT-monitoring: Observeer WiFi-activiteit in omgevingen met veel verbonden apparaten.
  • Continue monitoring: De ZimaBoard kan dienen als een dedicated WiFi-meetsysteem dat periodiek de lokale omgeving registreert.

Beperkingen

  • Dit project is een WiFi-activiteitsanalyser, geen algemene spectrumanalyser.
  • RSSI wordt gemeten bij de Alfa-adapter en is representatief voor het signaal op de locatie van de sensor.
  • Het project maakt gebruik van sequentiële kanaalhopping; kanalen worden dus niet gelijktijdig gemonitord.

Demo en Referenties

Demo: YouTube

Referenties:

Auteur

Roni Bandini

Licentie: GPL