NEWS
$Selector für Objekte
-
Ich habe einige "verweiste" Alias Einträge.
"_id": "alias.0.lights.stehlampe.online", "type": "state", "common": { "alias": { "id": "0_userdata.0.online.shelly.0.SHSW-25#112E6F#1.online" },...
d.h. der state bzw das object dahinter gibt es nicht mehr (0_userdata.0.online.shelly.0.SHSW-25#112E6F#1.online)
Um aufzuräumen, würde ich gerne durch die Liste gehen
$("alias.*").each(id=>{ if(!existsObject(getObject(id).common.alias.id)){ //cleanup... } })
Allerdings scheint zu alias.0.lights.stehlampe.online kein state mehr zu existieren,(Allerdings gibt es das objekt natürlich noch) und der selector gibt mir diese ids nicht zurück.
Wie kann ich durch alle objekte "loopen"? $(...) scheint nur ids zu liefern zu denen es auch einen state gibt? -
Du benutzt zu oft state so das ich nicht wirklich verstehe was du genau meinst.
Ich finde bei mir aliase die einen ungültigen common.alias.id haben.
Das hier hab ich angelegt und die alias.id gibts nicht:
{ "common": { "name": "test1", "desc": "Manuell erzeugt", "role": "state", "type": "boolean", "read": true, "write": true, "def": false, "alias": { "id": "0_userdata.0.internet_connecte" } },
Bei einem Test mit :
log(JSON.stringify($('alias.*')))
Ist dieser State in der Aufzählung.
edit:
Und mit$("alias.*").each(id=>{ if(!existsObject(getObject(id).common.alias.id)){ log(id) } })
erscheint er auch im log.
-
@ticaki sagte: nicht wirklich verstehe was du genau meinst.
Ich übersetze mal:
Allerdings scheint zu alias.0.lights.stehlampe.online kein Zustand mehr zu existieren,(Allerdings gibt es das statische Objekt natürlich noch) und der selector gibt mir diese ids nicht zurück.
@coalado sagte in $Selector für Objekte:
"id": "0_userdata.0.online.shelly.0.SHSW-25#112E6F#1.online"
Weshalb hat ein eigenen Datenpunkt einen Alias und weshalb enthält die ID eines eigenen Datenpunktes eine Geräte-ID?
-
Meinst du weil das common leer ist?
{ "common": { "alias": { "id": "userdata.0.gibsnicht" } }, "type": "state", "native": {},
wird auch gefunden
-
@ticaki sagte: wird auch gefunden
Ein Objekt, das keinen Zustand ({val, ack, ts, lc, ...}) hat, wird vom $Selector offenbar nicht gefunden.
EDIT: Gerade getestet: Bei mir findet der Selektor auch Datenpunkte ohne Zustand - erkennbar im Tab "Objekte" am Wert (null).
-
-
Ich bin auf 7.1.6
Warum hat ein eigener Datenpunkt einen Alias und warum hat die ID eine GeräteID hat, tut jetzt hier eigentlich nichts zur Sache. Ich kann das gerne erklären, aber ich denke das würde jetzt nur vom eigentlichen Problem ablenken.Begrifflichkeiten:
-
object: Das Json-Objekt, das z.B. mit getObject abgerufen oder mit existsObject überprüft werden kann.
-
state: Der Zustand, den man mit getState abrufen oder mit existsState prüfen kann.
So kann ich das Problem nachstellen:
- Ich erstelle einen Alias (alias.0.example) zu einer ID (0_userdata.0.example) für die es sowohl object als auch state gibt
- Ich lösche das object (deleteObject("0_userdata.0.example"))
- das object alias.0.example gibt es noch. existsObject("alias.0.example") gibt true zurück
- den state alias.0.example gibt es nicht mehr. existsState("alias.0.example") gibt false zurück
- log($("alias.0.example")) gibt mir jetzt {'length':0} aus.
- log($("alias.0.*")) enthält alias.0.example auch nicht mehr
-
-
@coalado sagte: log($("alias.0.*")) enthält alias.0.example auch nicht mehr
Das kann ich bei mir (JS 7.4.0) nicht nachvollziehen: