NEWS
[gelöst] Über Datenpunkte iterieren und Inhalte auswerten
-
Hi zusammen,
für ein neues Feature in meiner Heimautomation möchte ich mehrere Datenpunkte auswerten, weiß jedoch nicht, wie ich diese im Script greifen kann.
Der Aufbau sieht so aus:unifi.0.default.clients.<mac_1>.essid
unifi.0.default.clients.<mac_1>.last_seen
unifi.0.default.clients.<mac_2>.essid
unifi.0.default.clients.<mac_2>.last_seen
...
unifi.0.default.clients.<mac_n>.essid
unifi.0.default.clients.<mac_n>.last_seen
Die Anzahl der Einträge ist unbekannt und kann sich jederzeit ändern. Jeder Eintrag besitzt jedoch immer die gleichen Datenpunkte.
Hintergrund der Frage:
Ich möchte gerne wissen, wieviele Teilnehmer sich aktuell im Gäste-WLAN befinden um in der Automation entsprechend darauf reagieren zu können. Die vorhandenen Datenpunkte reichen dafür leider nicht aus.Kann mir jemand auf die Sprünge helfen, die MAC-Adressen zu greifen und die darunter liegenden Datenpunkte für eine Auswertung heranzuziehen?
Vielen Dank schonmal.
-
Hi zusammen,
für ein neues Feature in meiner Heimautomation möchte ich mehrere Datenpunkte auswerten, weiß jedoch nicht, wie ich diese im Script greifen kann.
Der Aufbau sieht so aus:unifi.0.default.clients.<mac_1>.essid
unifi.0.default.clients.<mac_1>.last_seen
unifi.0.default.clients.<mac_2>.essid
unifi.0.default.clients.<mac_2>.last_seen
...
unifi.0.default.clients.<mac_n>.essid
unifi.0.default.clients.<mac_n>.last_seen
Die Anzahl der Einträge ist unbekannt und kann sich jederzeit ändern. Jeder Eintrag besitzt jedoch immer die gleichen Datenpunkte.
Hintergrund der Frage:
Ich möchte gerne wissen, wieviele Teilnehmer sich aktuell im Gäste-WLAN befinden um in der Automation entsprechend darauf reagieren zu können. Die vorhandenen Datenpunkte reichen dafür leider nicht aus.Kann mir jemand auf die Sprünge helfen, die MAC-Adressen zu greifen und die darunter liegenden Datenpunkte für eine Auswertung heranzuziehen?
Vielen Dank schonmal.
@Hiltex sagte:
Die Anzahl der Einträge ist unbekannt und kann sich jederzeit ändern.
Dann müssen zyklisch per $Selector die IDs ermittelt werden.
schedule('* * * * *', function() { let ids = $('unifi.0.default.clients.*.essid'); log('Anzahl Verbindungen: ' + ids.length); ids.each(function(id, i) { log('essid: ' + getState(id).val); log('MAC: ' + id.split('.')[4]); }); }); -
@Hiltex sagte:
Die Anzahl der Einträge ist unbekannt und kann sich jederzeit ändern.
Dann müssen zyklisch per $Selector die IDs ermittelt werden.
schedule('* * * * *', function() { let ids = $('unifi.0.default.clients.*.essid'); log('Anzahl Verbindungen: ' + ids.length); ids.each(function(id, i) { log('essid: ' + getState(id).val); log('MAC: ' + id.split('.')[4]); }); }); -
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, beispielsweiseis_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_onlineeinstellen. Setzt man diesen Wert auf0ist der Wert nach ca. 2 Minutenfalse, 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()); });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden