Falls das noch jemand gebrauchen kann - hier der Code, der ansich funktioniert.
Muss nur jeder für sich schauen, ob er andere Datenpunkte für die Auswertung heranziehen will, beispielsweise is_online. Da teste ich gerade noch, was besser passt. Im Moment frage ich ab, ob der jeweilige Client zuletzt mit dem Gast-WLAN verbunden war und in den letzten 2 Minuten gesehen wurde...
In den Adaptereinstellungen kann man das Offset für is_online einstellen. Setzt man diesen Wert auf 0 ist der Wert nach ca. 2 Minuten false, wenn der Client das WLAN verlassen hat.
Das Prinzip der Abfrage dürfte mit diesem Script klar werden.
schedule("*/10 * * * * *", function () {
var GuestClients = 0;
//WLAN-Clients holen mit Datenpunkt, der immer vorhanden ist
let Clients = $('unifi.0.default.clients.*.is_online');
//Clients auswerten
Clients.each(function(id, i) {
//Datenpunkt abschneiden (Client erzeugen)
var Client = id.split('.is_online')[0];
var ClientESSID = Client + '.essid'
var ClientLastSeen = Client + '.last_seen_by_uap'
//Netzwerknamen des Clients abfragen
if (existsState(ClientESSID) && getState(ClientESSID).val == 'tremendous-Guest') {
//Letzte Online-Zeit abfragen
if (existsState(ClientLastSeen)) {
var TimeLastSeen = getDateObject(getState(ClientLastSeen).val).getTime();
var TimeNow = new Date().getTime()
//Wenn Client in den letzten 2 Minuten gesehen wurde...
if (TimeNow - TimeLastSeen < 120000) {
++GuestClients;
}
}
}
});
setState('0_userdata.0.Netzwerk.WLAN.Anzahl_Gäste', GuestClients, true);
//log('Gäste im WLAN: ' + GuestClients.toString());
});