NEWS
Unifi Adapter 0.6.6 Objekt Leichen
-
Hi zusammen,
habe schon lange den Unifi Adapter am laufen, funktioniert auch super.
Hab aber mittlerweile 14993 Objekte im Unifi Pfad. Ich vermute das dass evtl. ein Grund sein kann warum die Web UI etwas träger wird.Werden die nicht mehr vorhandenen Clienten die auch im Unifi Controller nicht mehr vorhanden sind, nicht weg gelöscht?
Ich habe da sehr viele Leichen drin die es im Unifi Controller nicht mehr gibt.kann das jemand bestätigen?
-
@bishop je nachdem was du ursprünglich in der Instanz eingestellt hattest, wurde dies angelegt.
Bin mir allerdings nichts sicher ob dies automatisch gelöscht wird, wenn in der Instanz deaktiviert.
Ich meine das muss man manuell anstoßen -
@bishop
14.000 ist ja schon mal 'ne HausnummerDa wird nix gelöscht.
Könnte man aber automatisieren, indem man mit 'nem Script durchrauscht und alles löscht, dessenlast_seen_by_uap
älter ist als X.Man könnte natürlich in GitHub auch ein Feature-Request an den Entwickler eröffnen.
So ein Bereinigungslauf dürfte viele Anwender interessieren. -
@codierknecht
ja so ein aufräum Script wäre nicht schlecht
fb-checkpresence hat auch ein Haufen Leichen.
Gibt es sowas in der Art schon für andere Zwecke im IoBroker? -
@bishop
Einsatz auf eigene Gefahr:const datum = new Date().getTime(); const diff = 90*24*60*60*1000; // Differenz in Millisekunden (90 Tage) let liste = Array.prototype.slice.apply($('state[id=unifi.0.default.clients.*.last_seen_by_uap]')); for (let dp of liste) { let timestamp = getDateObject(getState(dp).val).getTime(); if (datum-timestamp > diff) { dp = dp.replace('.last_seen_by_uap', ''); log('Lösche Datenpunkt: ' + dp); //deleteObject(dp, true); } }
-
vielen Dank
funktioniert bestens.was mir aber aufgefallen ist, es gibt auch clients ohne den "last_seen_by_uap" Datenpunkt.
Naja da ist wohl Handarbeit angesagt -
@bishop sagte in Unifi Adapter 0.6.6 Objekt Leichen:
es gibt auch clients ohne den "last_seen_by_uap" Datenpunkt
Dann nimm
last_seen
- das sollte genau so gut funktionieren. -
@codierknecht
hab dein Script mal wieder laufen lassen nur mit wie du gesagt hast "last_seen" habe auch im log einträge stehen die er gelöscht hat aber nur den Datenpunkt last_seen, nicht den kompletten Pfad.const datum = new Date().getTime(); const diff = 180*24*60*60*1000; // Differenz in Millisekunden (180 Tage) let liste = Array.prototype.slice.apply($('state[id=unifi.0.default.clients.*.last_seen]')); for (let dp of liste) { let timestamp = getDateObject(getState(dp).val).getTime(); if (datum-timestamp > diff) { dp = dp.replace('.last_seen', ''); log('Lösche Datenpunkt: ' + dp); deleteObject(dp, true); } }
was muss man abändern, dass er den kompletten Ordner löscht?
javascript.0 2024-08-07 12:38:26.221 info script.js.common.Debuggen.Objekt-Leichen-loeschen: Lösche Datenpunkt: unifi.0.default.clients.40:91:51:48:4d:26.last_seen
-
@bishop sagte in Unifi Adapter 0.6.6 Objekt Leichen:
was muss man abändern, dass er den kompletten Ordner löscht?
Eigentlich nix.
In Zeile 8 wird ja das.last_seen
aus der ID des DP entfernt.
Bei mir funktioniert das auch tadellos:
Aus einem für mich unersichtlichen Grund klappt das "replace" bei Dir nicht.Du könntest mal versuchen, Zeile 8 zu ersetzen durch:
dp = dp.substring(0,41);
Die Länge der ID ist ja fix. Unschön, aber einen Versuch wert.