Adds a vendor-agnostic radio-state extractor that lets the frequency- aware rules actually fire on production data without per-vendor plumbing for each profile. - Towerops.Snmp.RadioState — pure module that maps a frequency in MHz to the corresponding 802.11 channel across 2.4 GHz, 5 GHz, and 6 GHz bands; reads the freshest "frequency" sensor (already emitted by Cambium/MikroTik/AirOS/Mimosa/Exalt/etc. profiles) and persists the AP-level current_frequency_mhz, current_channel, last_radio_seen_at fields onto snmp_devices. - DevicePollerWorker now calls RadioState.update_from_sensors/1 after each sensor poll so frequency-aware rules read a single canonical source instead of joining sensors at query time. - Towerops.Recommendations.Rules.OwnFleetChannelConflict — new rule that needs no neighbor-scan collection: detects when 2+ of our own APs at the same site share a channel (self-interference). One insight per (site, channel) with a clickable list of conflicting APs and their channel widths. Critical when 3+ APs share a channel. - Insight.@valid_types extended with own_fleet_channel_conflict. - UI: amber card showing channel, frequency, AP count, and the linked list of conflicting devices. Wired into the existing hourly RecommendationsRunWorker. LLM enrichment automatically applies via the Phase 1 worker. |
||
|---|---|---|
| .. | ||
| mix/tasks | ||
| snmpkit | ||
| towerops | ||
| towerops_web | ||
| snmp_lib.ex | ||
| snmp_mgr.ex | ||
| snmpkit.ex | ||
| towerops.ex | ||
| towerops_native.ex | ||
| towerops_web.ex | ||