Publish the number of unique users online for each network
This commit is contained in:
parent
de3275ca28
commit
bb678be805
2 changed files with 13 additions and 4 deletions
|
@ -57,11 +57,14 @@ foreach($clientTable as $index => $value) {
|
||||||
|
|
||||||
if ($index2[0] == 1) {
|
if ($index2[0] == 1) {
|
||||||
$radio_mac = $clientTable["iso.3.6.1.4.1.14823.2.3.3.1.2.4.1.2.".$index3];
|
$radio_mac = $clientTable["iso.3.6.1.4.1.14823.2.3.3.1.2.4.1.2.".$index3];
|
||||||
|
$username = $clientTable["iso.3.6.1.4.1.14823.2.3.3.1.2.4.1.5.".$index3];
|
||||||
|
// Only count the username field an actual username if it contains an '@'.
|
||||||
|
$username = strpos($username, "@") !== false ? $username : "";
|
||||||
$radio_mac = str_replace(" ", ":", trim(str_replace("Hex-STRING: ", "", $radio_mac)));
|
$radio_mac = str_replace(" ", ":", trim(str_replace("Hex-STRING: ", "", $radio_mac)));
|
||||||
$macs[] = array (
|
$macs[] = array (
|
||||||
"mac" => strtolower(str_replace(" ", ":", trim(str_replace("Hex-STRING: ", "", $value)))),
|
"mac" => strtolower(str_replace(" ", ":", trim(str_replace("Hex-STRING: ", "", $value)))),
|
||||||
"ssid" => trim(str_replace("\"", "", str_replace("STRING: ", "", $ssid[$radio_mac]))),
|
"ssid" => trim(str_replace("\"", "", str_replace("STRING: ", "", $ssid[$radio_mac]))),
|
||||||
// "radio" => "IAP",
|
"username" => $username !== "" ? trim(str_replace("\"", "", str_replace("STRING: ", "", $username))) : NULL,
|
||||||
"signal" => intval(trim(str_replace("INTEGER: ", "", $clientTable["iso.3.6.1.4.1.14823.2.3.3.1.2.4.1.7.".$index3]))),
|
"signal" => intval(trim(str_replace("INTEGER: ", "", $clientTable["iso.3.6.1.4.1.14823.2.3.3.1.2.4.1.7.".$index3]))),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,10 @@ class Activity(object):
|
||||||
'parted': [ prev_activity.associations[mac] for mac in macs_parted ],
|
'parted': [ prev_activity.associations[mac] for mac in macs_parted ],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def unique_usernames_for_ssid(self, ssid):
|
||||||
|
include = lambda assoc: assoc['ssid'] == ssid and assoc['username'] is not None
|
||||||
|
return { assoc['username'] for assoc in self.associations.values() if include(assoc) }
|
||||||
|
|
||||||
|
|
||||||
def hook_print(activity, prev_activity, diff):
|
def hook_print(activity, prev_activity, diff):
|
||||||
print('')
|
print('')
|
||||||
|
@ -64,6 +68,8 @@ def hook_mqtt(activity, prev_activity, diff):
|
||||||
for ssid in activity.ssids() | prev_activity.ssids():
|
for ssid in activity.ssids() | prev_activity.ssids():
|
||||||
online_count = sum(assoc['ssid'] == ssid for assoc in activity.associations.values())
|
online_count = sum(assoc['ssid'] == ssid for assoc in activity.associations.values())
|
||||||
mqttc.publish('bitlair/wifi/%s/online' % normalize_ssid(ssid), str(online_count), retain=True)
|
mqttc.publish('bitlair/wifi/%s/online' % normalize_ssid(ssid), str(online_count), retain=True)
|
||||||
|
unique_usernames = len(activity.unique_usernames_for_ssid(ssid))
|
||||||
|
mqttc.publish('bitlair/wifi/%s/unique_usernames' % normalize_ssid(ssid), str(unique_usernames), retain=True)
|
||||||
for assoc in diff['joined']:
|
for assoc in diff['joined']:
|
||||||
signal = assoc['signal'] if 'signal' in assoc else '-'
|
signal = assoc['signal'] if 'signal' in assoc else '-'
|
||||||
payload = 'join %s %s' % (assoc['mac'], signal)
|
payload = 'join %s %s' % (assoc['mac'], signal)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue