NEWS
[gelöst] Verständnis Attribute mit Blockly ändern
-
Hi,
also, eigentlich will ich ein Attribut überschreiben, aber irgendwie komm ich da nicht ran.
Auslesen ist kein Problem, aber will ich schreiben, wird es nicht gefunden.
Bereits das Prüfen auf Existenz scheitert...
Wo biegt mein Hirn hier falsch ab? -
@padrino sagte in Verständnis Attribute mit Blockly ändern:
Wo biegt mein Hirn hier falsch ab?
Ganz am Anfang.
Dein Objekt sieht so aus:
WC_Besucher = { common: ... }
Die Funktion
hat attribut
Prüft nur dieses Objekt ab. Was auch immer da hinter dem Attributcommon
steht ist für die Funktion irrelevant. Das könnte soWC_Besucher = { common: "hier steht nur ein normaler Text" }
oder so aussehen
WC_Besucher = { common: { desc: "description", name: "WC_Besucher" }
der Baustein
attribut "A" von Objekt
Objekt B
übersetzt sich dagegen inB.A
Wenn da also an Stelle von"A"
"A.S.E"
steht, dann wird darausB.A.S.E
.Nebenbei geht das auch nur wenn da direkt ein Text eingesetzt wird. Wenn an Stelle des Bausteins
"common.desc"
eine die Variableattr
eingesetzt wird, dann ändert sich der Code vonWC_Besucher.common.desc
zuWC_Besucher[attr]
. Und wenn dann der Wert vonattr
"common.desc" ist, dann wird dein erstes Debug auchundefined
heraus werfen.A.
Edit: Typos. Wer noch welche Findet: Herzlichen Glückwunsch, Test bestanden
-
@padrino sagte: will ich schreiben, wird es nicht gefunden.
Um ein Datenpunkt-Attribut zu ändern, benötigt man die Funktion setObject(id, obj) oder extendObject(id, attr), die es in Blockly absichtlich nicht gibt.
EDIT: Man kann sich mit einer Javascript-Funktion behelfen:
extendObject(id, {common: {desc: desc}});
-
-
@asgothian
Uff, das ist schon etwas verwirrend, aber danke für die Erklärung.@paul53
Ah, ok, da man wohl vermutlich zu viel kaputt machen kann, kommt man nur mit Blockly nicht ran.
Aber danke, dass Du mir den Weg über JS gezeigt hast.
Damit kann ich was anfangen. 🥳Danke auch für den Hinweis, dass man einfacher an die Desc kommen kann.
Evtl. kann ich das später mal verwenden.
Für den aktuellen Fall war das mit der Desc nur als Beispiel gedacht, bzw. für mich, zum Testen, ein Attribute mit dem ich recht gefahrlos experimentieren könnte, bis mein Skript funktioniert.
In Wirklichkeit ist mein Ziel in ein paar rflink Objekten zu werkeln, genauer, deren interne "GeräteID" zu aktualieren/ändern."native": { "ID": 283538, "brand": "F007_TH", ...
Also, braucht es schon den "generellen Ansatz".
Denke, dass mit Deinem Beispiel Skript-Blockly-Hybriden die Chancen gut stehen, dass ich mein Ziel umsetzen kann.
-
@padrino sagte in [gelöst] Verständnis Attribute mit Blockly ändern:
Für den aktuellen Fall war das mit der Desc nur als Beispiel gedacht, bzw. für mich, zum Testen, ein Attribute mit dem ich recht gefahrlos experimentieren könnte, bis mein Skript funktioniert.
In Wirklichkeit ist mein Ziel in ein paar rflink Objekten zu werkeln, genauer, deren interne "GeräteID" zu aktualieren/ändern.Vorsicht beim Verändern von Objektattributen die in Namespaces der Adapter liegen - ggf. überwachen die Adapter diese und schreiben sie ggf. zu beliebigen Zeiten neu. Der Zigbee-Adapter macht das zum Beispiel bei jedem Start und jedes mal wenn ein Gerät neu angelernt wird.
A.
-
@asgothian
Also, ich weiß jetzt leider nicht, was Du mit "Namespace" meinst, aber die von mir angesprochene "ID" wird im rflink Adapter nur einmal beim Anlegen des Objekts vergeben. Sie dient wohl dazu ein 433mHz Gerät von den anderen (eines Herstellers) zu unterscheiden.
Wenn ich also z.B. die Batterie wechsle wird dieses ID neu vergeben, nachdem ich das Gerät neu hab suchen lassen.
Damit der Objektbaum sauber und geordnet bleibt, habe ich für mich den Weg über die ID auserkoren, statt ein neues Gerät anlegen zu lassen, das alte dann manuell zu löschen und das neue in den Nanen des alten umzubenennen... -
@padrino sagte in [gelöst] Verständnis Attribute mit Blockly ändern:
was Du mit "Namespace"
der "Namensbereich" des Adapters, Also
adapterName.#
im Prinzip alles was nicht 0_userdata.0 oder alias.0 ist -
@padrino sagte in [gelöst] Verständnis Attribute mit Blockly ändern:
@asgothian
Also, ich weiß jetzt leider nicht, was Du mit "Namespace" meinst, aber die von mir angesprochene "ID" wird im rflink Adapter nur einmal beim Anlegen des Objekts vergeben. Sie dient wohl dazu ein 433mHz Gerät von den anderen (eines Herstellers) zu unterscheiden.
Wenn ich also z.B. die Batterie wechsle wird dieses ID neu vergeben, nachdem ich das Gerät neu hab suchen lassen.
Damit der Objektbaum sauber und geordnet bleibt, habe ich für mich den Weg über die ID auserkoren, statt ein neues Gerät anlegen zu lassen, das alte dann manuell zu löschen und das neue in den Nanen des alten umzubenennen...Das müsste doch ein Standard-Problem für andere Nutzer des rflink Adapters zu sein. Hast du am Adapter mal ein Issue aufgemacht ob es eine Möglichkeit geben kann / soll das im Adapter abzubilden, anstatt das via JS nur für Dich zu lösen ?
A.
-
@asgothian
Also, ich glaube, der Adapter ist ziemlich tot.
Wollte damit auch niemanden behelligen...
Hatte schon angefangen zu überlegen ob der Adapter evtl... und wie....
Aber dann dachte ich, ich guck mal, was ich in JS hin bekomme, und wenn's ordentlich klappt mach ich das Skript zugänglich für Interessierte.