61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
import numpy as np
|
|
|
|
import pwnagotchi.mesh.wifi as wifi
|
|
|
|
MAX_EPOCH_DURATION = 1024
|
|
|
|
histogram_size = wifi.NumChannels
|
|
|
|
shape = (1,
|
|
# aps per channel
|
|
histogram_size +
|
|
# clients per channel
|
|
histogram_size +
|
|
# peers per channel
|
|
histogram_size +
|
|
# duration
|
|
1 +
|
|
# inactive
|
|
1 +
|
|
# active
|
|
1 +
|
|
# missed
|
|
1 +
|
|
# hops
|
|
1 +
|
|
# deauths
|
|
1 +
|
|
# assocs
|
|
1 +
|
|
# handshakes
|
|
1)
|
|
|
|
|
|
def featurize(state, step):
|
|
tot_epochs = step + 1e-10
|
|
tot_interactions = (state['num_deauths'] + state['num_associations']) + 1e-10
|
|
return np.concatenate((
|
|
# aps per channel
|
|
state['aps_histogram'],
|
|
# clients per channel
|
|
state['sta_histogram'],
|
|
# peers per channel
|
|
state['peers_histogram'],
|
|
# duration
|
|
[np.clip(state['duration_secs'] / MAX_EPOCH_DURATION, 0.0, 1.0)],
|
|
# inactive
|
|
[state['inactive_for_epochs'] / tot_epochs],
|
|
# active
|
|
[state['active_for_epochs'] / tot_epochs],
|
|
# missed
|
|
[state['missed_interactions'] / tot_interactions],
|
|
# hops
|
|
[state['num_hops'] / wifi.NumChannels],
|
|
# deauths
|
|
[state['num_deauths'] / tot_interactions],
|
|
# assocs
|
|
[state['num_associations'] / tot_interactions],
|
|
# handshakes
|
|
[state['num_handshakes'] / tot_interactions],
|
|
))
|