NEWS
$ findet Aliase mit mit fehlender Source nicht
-
Hallo
Ich versuche ein kleines Script zu erstellen, welches Aliase bei denen der Source-Datenpunkt fehlt bereinigt.
Dazu muss ich als erstes die IDs aller möglicherweise betroffenen Aliase finden, damit ich anschliessen prüfen kann ob die alias id auf einen existierenden Datenpunkt zeigt. Der folgende Code gibt die IDs der Aliase zurück.const ids=$("[id=alias.0.*]").toArray(); log(ids);
Leider gibt es dabei ein Problem. Bei Alias Punkten deren Quell-Datenpunkt gelöscht wurde, wird die ID mit dem obigen Statement nicht zurückgegeben, obwohl der Alias in der Objekt-Übersicht weiterhin angezeigt wird. Wenn der Alias Datenpunkt von Hand modifiziert wird, z.B. Änderung von common.name, dann gibt die obige Abfrage, die ID des Datenpunkts wieder zurück. Was ist der Hintergrund dieses Verhaltens bzw. ist das so gewollt?
Gibt es einen Weg mit $ die IDs aller Aliase, inkl. jener die eine fehlende Quelle haben und danach nicht von Hand modifiziert wurden, zurückzugeben?
Oder gibt es einen anderen Weg alle Aliase per Code zu finden? -
@swisslizard sagte in $ findet Aliase mit mit fehlender Source nicht:
Bei Alias Punkten deren Quell-Datenpunkt gelöscht wurde, wird die ID mit dem obigen Statement nicht zurückgegeben
Da bekommst Du doch im Log entsprechende Warnungen.
-
@mickym
Habs grad nochmal ausprobiert.- Neuen Datenpunkt angelegt unter userdata und neuen Alias dazu angelegt.
- ID des Alias wird wie erwartet aufgelistet.
- Datenpunkt unter userdata gelöscht (per Abfalleimersymbol). Alias nicht modifiziert.
- ID des Alias wird vom Code nicht aufgelistet. Im Log gibt es keine Warnng.
- Objektdaten des Alias modifiziert (common.name um ein x ergänzt).Alias zeigt aber immer noch ins leere,
- ID des Alias wird vom Code aufgelistet.
Etwas merkwürdig
-
@swisslizard Ja ich habs auch gerade ausprobiert. Scheint nur Warnungen zu geben, wenn der alias geändert oder erstellt wurde.
-
Kann man da vielleicht einen indirekten Weg gehen ...
- Liste mit "_id" als Schlüssel
- Liste mit "id" als Schlüssel
Alle die in 1. vorkommen aber nicht in 2. sind verwaist ...
-
@swisslizard sagte: Bei Alias Punkten deren Quell-Datenpunkt gelöscht wurde, wird die ID mit dem obigen Statement nicht zurückgegeben
Das kann ich bei mir (JS Version 8.7.6) nicht nachvollziehen. Es werden auch Alias-DP aufgelistet, deren Quell-Datenpunkt schon vor einiger Zeit gelöscht wurde.
Den Quell-DP "0_userdata.0.Batterie.Gesamt.Restkapazitaet" zu "alias.0.Batterie.Restladung" gibt es nicht mehr.
EDIT: Weiter getestet und einen existierenden DP zugewiesen: Alias aufgelistet. Dann existierenden Quell-DP gelöscht: Alias nicht aufgelistet. Merkwürdig!
Noch weiter getestet und Javascript-Instanz neu gestartet: Alias mit nicht existierendem Quell-DP wird wieder aufgelistet.
-
@paul53 sagte in $ findet Aliase mit mit fehlender Source nicht:
EDIT: Weiter getestet und einen existierenden DP zugewiesen: Alias aufgelistet. Dann existierenden Quell-DP gelöscht: Alias nicht aufgelistet. Merkwürdig!
Noch weiter getestet und Javascript-Instanz neu gestartet: Alias mit nicht existierendem Quell-DP wird wieder aufgelistet.Puh, kannst Du das irgendwie in eine reproduzierbaren Beschreibung gießen (am liebsten als Issue)?
-
@haus-automatisierung sagte: reproduzierbaren Beschreibung
Zusammenfassung: Nach Löschen des Quell-DP eines Alias muss die Javascript-Instanz neu gestartet werden, damit ein $-Selektor auf "alias.0" den Alias mit dem gelöschten Quell-DP weiter auflistet.
-
Ich kann das Problem mit folgender Anleitung reproduzieren. Kann auch gerne ein Issue erfassen. Bei https://github.com/ioBroker/ioBroker/issues ?
-
Neuen Datenpunkt in 0_userdata.0.testdatenpunkt anlegen. Von Hand oder per Script.
-
Neuen Alias anlegen. Entweder per Alias-Manager, von Hand oder per Script.
{ "type": "state", "common": { "name": "testdatenpunkt", "role": "state", "type": "string", "read": true, "write": true, "alias": { "id": "0_userdata.0.testdatenpunkt" } }, "_id": "alias.0.testdatenpunktalias.testdatenpunkt", "native": {}, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1725463536428, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
- Alias suchen mit:
const ids=$("[id=alias.0.testdatenpunktalias.testdatenpunkt]").toArray(); log(ids);
Alias wird gefunden:
script.js.common.test.aliasMissingSourceTest: [ 'alias.0.testdatenpunktalias.testdatenpunkt' ]
-
Datenpunkt löschen
-
Alias suchen mit:
const ids=$("[id=alias.0.testdatenpunktalias.testdatenpunkt]").toArray(); log(ids);
Alias wird nicht gefunden:
script.js.common.test.aliasMissingSourceTest: []
-
Javascript Instance neu starten oder Object Data von Alias ändern (z.B. common.name) und speichern.
-
Alias suchen mit:
const ids=$("[id=alias.0.testdatenpunktalias.testdatenpunkt]").toArray(); log(ids);
Alias wird gefunden:
script.js.common.test.aliasMissingSourceTest: [ 'alias.0.testdatenpunktalias.testdatenpunkt' ]
-
-
@swisslizard sagte: Kann auch gerne ein Issue erfassen
Unter https://github.com/ioBroker/ioBroker.javascript/issues.
-
@paul53
Issue erfasst.