dissertation/where_fi/utils/antenna_order.py
Christos Falas 4f7a9d2e70
Make into package
Add CLI to bin, allow for tab-completions
2025-01-27 15:55:17 +00:00

57 lines
1.8 KiB
Python

import logging
from ..collection import ingest
logger = logging.getLogger(__name__)
AntennaIdentifier = tuple[ingest.Host, int]
order: list[AntennaIdentifier] = []
prev_unplugged: set[AntennaIdentifier] = set()
antenna_average: dict[AntennaIdentifier, float] = {}
RSSI_THRESHOLD = 8
def callback(antenna_data: dict[ingest.Host, ingest.CSI]) -> None:
global prev_unplugged
global antenna_average
global order
unplugged: set[tuple[ingest.Host, int]] = set()
logger.debug(
"Antenna RSSI: "
+ str(
{
host: (csi.header.rssi1, csi.header.rssi2)
for host, csi in antenna_data.items()
}
)
)
for host, csi in antenna_data.items():
antenna_average[(host, 0)] = (
antenna_average.get((host, 0), csi.header.rssi1) * 0.99
+ csi.header.rssi1 * 0.01
)
antenna_average[(host, 1)] = (
antenna_average.get((host, 1), csi.header.rssi2) * 0.99
+ csi.header.rssi2 * 0.01
)
if csi.header.rssi1 > antenna_average[(host, 0)] + RSSI_THRESHOLD:
unplugged.add((host, 0))
if csi.header.rssi2 > antenna_average[(host, 1)] + RSSI_THRESHOLD:
unplugged.add((host, 1))
if prev_unplugged != unplugged:
if len(prev_unplugged) > len(unplugged):
logger.info(f"Antenna plugged in: {prev_unplugged - unplugged}")
else:
logger.info(f"Antenna unplugged: {unplugged - prev_unplugged}")
diff = list(unplugged - prev_unplugged)
if len(diff) == 1 and diff[0] not in order:
host, antenna = diff.pop()
order.append((host, antenna))
logger.info(f"Current order: {order}")
prev_unplugged = unplugged
def main() -> None:
ingest.start_processing(pre_merge_callback=callback)