NEWS
Schreibzugriff auf (Objekt-)Attribute in Blockly
-
Vielen Dank für deine Unterstützung.
Ich kann nur vermuten, dass du ggf. diesen Block meinst ..
Aber wie gebe ich hier die Zieladresse ein? Datenpunkt des Aktors liegt mir doch nur als String vor.
Die Aufzählungen aus Blockly möchte ich aus zwei Gründen nicht verwenden. Zum einen möchte ich mich endlich in JavaScript vertiefen, zum anderen fehlt mir in den Aufzählungen die Möglichkeit einzelne Objekte hinzuzufügen oder zu löschen - oder habe ich die bloß nicht gefunden?
-
@legro sagte: wie gebe ich hier die Zieladresse ein?
@legro sagte in Schreibzugriff auf (Objekt-)Attribute in Blockly:
Möglichkeit einzelne Objekte hinzuzufügen oder zu löschen - oder habe ich die bloß nicht gefunden?
Die Funktionen zum Verändern (setObject) in "enum.functions.rollos" unter common.members liefert der Javascript-Adapter.
const idEnum = 'enum.functions.rollos'; const obj = getObject(idEnum); const members = obj.common.members; // Array mit IDs // Hinzufügen oder löschen von IDs in members setObject(idEnum, obj);
-
Wie ich oben schrieb: Ich möchte zum Üben dieses Projekt in der skizzierten Weise durchziehen.
Mithin habe ich bloß die eine Frage: Könnte man auf das Attribut „objAddr“ eines Rollladen-Objektes schreibend zugreifen?
So sieht meine Test-View aus. Mit den +/- Buttons kann man Rollladen in die Gruppen hinzufügen oder löschen.
-
@legro sagte: auf das Attribut „objAddr“ eines Rollladen-Objektes schreibend zugreifen?
Neues Objekt (wie im ersten Beitrag gezeigt):
Diese Blöcke stehen seit JS-Version 7.9.0 zur Verfügung.
-
Erst einmal: Vielen Dank für deine tatkräftige Unterstützung!
Wenn ich dich und das Ganze richtig verstanden habe, sollte ich mein Ziel doch auch (noch) kürzer erreichen, indem ich ..
.. kodiere. Der Datenpunkt Grp01_Position_01 enthält den Wert, den ich in den Datenpunkt objAddr schreiben möchte.
Oder liege ich (mal wieder voll) daneben?
Ich stelle mir das Ganze wie folgt vor ..
Der rechte Block liefert an den linken Block die Adresse des zu steuernden Datenpunktes des Rollladens, die im Attribut objAddr des Rollladen-Objektes enthalten ist. Der linke Block sorgt nun dafür, dass der Wert aus dem Datenpunkt Grp01_Position_01 in den Datenpunkt des Rollladens geschrieben wird.
-
@legro sagte: Grp01_Position_01 enthält den Wert, den ich in den Datenpunkt objAddr schreiben möchte.
Passt so.
-
@paul53 sagte in Schreibzugriff auf (Objekt-)Attribute in Blockly:
Passt so.
Langsam verstehe ich nun doch das Ganze.
Nach vier Jahren wurde es höchste Zeit, dass ich endlich einmal mit JavaScript beginne. Blockly ist ja für den Einstieg schon eine feine Sache, aber man kommt doch schnell an dessen Grenzen.
Nun bitte nochmals zu den Kodierungen. Sind meine Vorstellungen richtig, wenn ich davon ausgehe, dass in deinem Vorschlag ..
- .. der erste (grüne) Block den Wert des Attributs des Objektes neu schreibt/füllt.
- .. der zweite (grüne) Block einen Datenpunkt im Objektbaum anlegt mit der Bezeichnung aus der Variable name.
- .. mein Lösungsvorschlag einen nur temporär existierenden Datenpunkt (ohne Bezeichnung) erzeugt, der nach dem Schreibvorgang wieder gelöscht wird.
Wo finde ich diese grünen Blöcke?
-
@legro sagte: der erste (grüne) Block den Wert des Attributs des Objektes neu schreibt/füllt.
Ja, ein existierender Wert wird überschrieben, ein nicht existierendes Attribut des Javascript-Objektes wird erzeugt.
@legro sagte in Schreibzugriff auf (Objekt-)Attribute in Blockly:
der zweite (grüne) Block einen Datenpunkt im Objektbaum anlegt mit der Bezeichnung aus der Variable name.
Nein: Es handelt sich um ein Javascript-Objekt, das erzeugt wird in der Form
var obj = { objAddr: 'Objekt-ID', Name: 'Objekt-Name' };
Das hat nichts mit ioBroker-Objekten zu tun!
@legro sagte in Schreibzugriff auf (Objekt-)Attribute in Blockly:
mein Lösungsvorschlag einen nur temporär existierenden Datenpunkt (ohne Bezeichnung) erzeugt, der nach dem Schreibvorgang wieder gelöscht wird.
Es wird kein Datenpunkt erzeugt, sondern in einen Datenpunkt geschrieben, der bereits existieren muss.
@legro sagte in Schreibzugriff auf (Objekt-)Attribute in Blockly:
Wo finde ich diese grünen Blöcke?
Bei mir sind sie hellbraun und erst ab Javascript-Version 7.9.0 verfügbar (ich nutze Version 8.3.0).
-
Da habe ich ja richtig Glück gehabt, dass ich in dir einen sehr guten Kenner von ioBroker und JavaScript angetroffen habe.
Ich habe die letzte Version aus dem stable repository 7.8.0. Hierin sind diese Blöcke (noch) nicht vorhanden. Es fehlt in dieser Version das gesamte Register Objekte.
-
@legro sagte: Es fehlt in dieser Version das gesamte Register Objekte.
Ja, 7.9.0 > 7.8.0.