NEWS
Alias-manager: Objektdaten nicht im Alias
-
@warhammer73 sagte: Idee wie ich die gesamte Struktur von oben in den Alias bekomme
Wozu? Wird das Array nicht in den Alias übernommen?
@warhammer73 sagte in Alias-manager: Objektdaten nicht im Alias:
gleich einen einzelnen Eintrag ("quality": "GOOD")?
Dann muss der Alias vom Typ "string" sein und man verwendet eine Lesekonvertierung:
JSON.parse(val)[0]
für "CommunicationQuality", wenn das Array so gefüllt ist wie unter "deviceServiceIds" beschrieben.
-
@paul53 said in Alias-manager: Objektdaten nicht im Alias:
@warhammer73 sagte: Idee wie ich die gesamte Struktur von oben in den Alias bekomme
Wozu? Wird das Array nicht in den Alias übernommen?Nein, siehe oben.
Beim Anlegen meckert der Alias-Manager vor dem Speichern auch:
Speichert man trotzdem führt das zu der Anzeige oben. -
@warhammer73 sagte: einen Alias anzulegen, dort sieht das Ergebnis aber so aus:
Das sieht doch gut aus. Damit muss es funktionieren.
Anmerkung: Was im Original-DP unter "native" steht, interessiert den Alias nicht. -
@warhammer73
Ich habe mal mit fast identischen Datenpunkten getestet: Bei mir funktioniert der Alias wie erwartet.
Original-DP:{ "common": { "name": "TRV2.0 18fc26000002fa89.CommunicationQuality.faults", "desc": "Manuell erzeugt", "role": "list", "type": "array", "read": true, "write": false }, "type": "state", "native": { "device": { "@type": "device", "rootDeviceId": "64-da-a0-11-96-b6", "id": "hdm:ZigBee:18fc26000002fa89", "deviceServiceIds": [ "CommunicationQuality", "Thermostat", "BatteryLevel", "ValveTappet", "DisplayedTemperatureConfiguration", "DisplayConfiguration", "DisplayDirection", "TemperatureLevel", "Linking", "TemperatureOffset" ], "manufacturer": "BOSCH", "roomId": "hz_1", "deviceModel": "TRV_GEN2", "serial": "18FC26000002FA89", "profile": "GENERIC", "name": "TRV2.0 18fc26000002fa89", "status": "AVAILABLE", "parentDeviceId": "roomClimateControl_hz_1", "childDeviceIds": [] }, "deviceService": { "@type": "DeviceServiceData", "id": "CommunicationQuality", "deviceId": "hdm:ZigBee:18fc26000002fa89", "state": { "@type": "communicationQualityState", "quality": "GOOD" }, "path": "/devices/hdm:ZigBee:18fc26000002fa89/services/CommunicationQuality" }, "state": "faults" }, "_id": "0_userdata.0.Test.hdm:ZigBee:18fc26000002fa89.CommunicationQuality.faults", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1688834888359 }
Alias mit Lesekonvertierung:
{ "common": { "name": "link quality", "desc": "Manuell erzeugt", "role": "text", "type": "string", "read": true, "write": false, "alias": { "id": "0_userdata.0.Test.hdm:ZigBee:18fc26000002fa89.CommunicationQuality.faults", "read": "JSON.parse(val)[0]" } }, "type": "state", "native": {}, "_id": "alias.0.Test.Liste_bshb", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1688835072358 }
EDIT: Ich hatte zuerst mit dem Alias als Liste getestet, was auch funktioniert hat.
-
... mein Problem liegt ja aber an der Stelle, das "val" bei mir "[]" ist:
console.log (getState("console.log (getState("bshb.0.hdm:ZigBee:18fc26000002fa89.CommunicationQuality.faults"));")); javascript.0 (1833) script.js.Heim.check: {'val':[],'ack':true,'ts':1687715515607,'q':0,'from':'system.adapter.bshb.0','user':'system.user.admin','lc':1670363668833}
... ich hatte eigentlich die Hoffnung das mir getState den gesamten Baum wie ich ihn mit "Objekt bearbeiten" (siehe oben) anzeigt und ich mich dann über "deviceService" bis "quality" durchhangeln kann um den Wert "GOOD" zu bekommen. Da aber getState das schon nicht tut, habe ich irgendwo ein anderes Problem.
-
@warhammer73: "val" bei mir "[]" ist
Dann kann ein Alias nichts liefern (außer ein leeres Array).
-
@paul53 :
Ja, an der falschen Stelle angefangen mit suche...
Tja, und auch wenn jetzt die Überschrift nicht mehr zu 100% passt:
Den Wert den ich brauche gibt es ja offensichtlich (Objekt bearbeiten zeigt ihn ja an), aber wie bekomme ich per JS ihn ausgelesen? -
@warhammer73 sagte: wie bekomme ich per JS ihn ausgelesen?
getObject('bshb.0.hdm:ZigBee:18fc26000002fa89.CommunicationQuality.faults').native.deviceService.state.quality
Dieses Attribut sollte allerdings statisch sein, sich also nicht im laufenden Betrieb ändern.
-
Danke, manchmal kommt man auf naheliegende Sachen nicht...
Damit hat sich dann aber auch die Idee das Geräteunabhängig als Alias auslesen zu können erledigt. -
@warhammer73 sagte: als Alias auslesen zu können
Der Datenpunkt heißt "faults": Das Array wird sich wahrscheinlich erst füllen, wenn mind. ein Fehler auftritt.