NEWS
[GELÖST] Objekt (type: channel/device) erzeugen?
[GELÖST] Objekt (type: channel/device) erzeugen?
-
Moin,
ich erzeuge in Blockly ein Datenpunkt per Skript:

Sieht dann so aus:

{"type":"channel", "write":false,"read": true,"name": "Eigene_Objekte"}Mein Problem ist, dass der Datenpunkt immer mit dem type "state" angelegt wird, selbes beim type "device", bei allen gängigen typen (z.B. boolean, string...) gibt es keine Probleme, wenn ich ein Datenpunkt manuel den type "device/channel" gebe, gibt es keine probleme... :man-shrugging:
Woran liegt das und was kann ich hier machen, damit ein ordner nicht vom type "state" ist?
Sieht ja auch nicht schön aus, es wird so der wert (null) angegeben, was ich nicht möchte:

Viel besser:

Bin für jeden Tipp dankbar, ps hab keine ahnung von dem was ich hier mache!

-
Moin,
ich erzeuge in Blockly ein Datenpunkt per Skript:

Sieht dann so aus:

{"type":"channel", "write":false,"read": true,"name": "Eigene_Objekte"}Mein Problem ist, dass der Datenpunkt immer mit dem type "state" angelegt wird, selbes beim type "device", bei allen gängigen typen (z.B. boolean, string...) gibt es keine Probleme, wenn ich ein Datenpunkt manuel den type "device/channel" gebe, gibt es keine probleme... :man-shrugging:
Woran liegt das und was kann ich hier machen, damit ein ordner nicht vom type "state" ist?
Sieht ja auch nicht schön aus, es wird so der wert (null) angegeben, was ich nicht möchte:

Viel besser:

Bin für jeden Tipp dankbar, ps hab keine ahnung von dem was ich hier mache!

@newpicsel sagte: wenn ich ein Datenpunkt manuel den type "device/channel" gebe, gibt es keine probleme...
Es gibt keine Datenpunkte vom Typ "device" oder "channel", sondern nur Objekte. Ein Datenpunkt ist ein Objekt vom Typ "state". Objekte kann man nur mit setObject(id, obj) erstellen.
-
@newpicsel sagte: wenn ich ein Datenpunkt manuel den type "device/channel" gebe, gibt es keine probleme...
Es gibt keine Datenpunkte vom Typ "device" oder "channel", sondern nur Objekte. Ein Datenpunkt ist ein Objekt vom Typ "state". Objekte kann man nur mit setObject(id, obj) erstellen.
Wie gesagt ich kenne mich damit nicht sehr gut aus, aber hab mir schon sowas in der Richtung gedacht.
Danke schon mal für deine Hilfe, ein paar Fragen hätte ich noch, um alles besser verstehen zu können, eventuell magst du mir da auch weiter helfen?
Kann ich direkt setObjectNoExists(id, obj) verwenden?
Womit füttere ich 'obj' ? Direkt mit den Objektdaten (type)?
Oder muss ich 'type' separat anhängen (id, obj, type)
'Common' kann ich zusätzlich als json einspeisen (Name, write, read), wie ich es auch beim Datenpunkt mache JSON.parse(common)?z.B. setObjectNoExists(id, obj, type, JSON.parse(common))
Oder gehört 'type' mit in 'common'?
Stellt sich mir wieder die Frage was ich bei 'obj' angeben muss?
Oder hab ich hier grad komplett ein Denkfehler?Sollte ich hier in der Überschrift Datenpunkt zu Objekt ändern?
Vielen Dank

-
Wie gesagt ich kenne mich damit nicht sehr gut aus, aber hab mir schon sowas in der Richtung gedacht.
Danke schon mal für deine Hilfe, ein paar Fragen hätte ich noch, um alles besser verstehen zu können, eventuell magst du mir da auch weiter helfen?
Kann ich direkt setObjectNoExists(id, obj) verwenden?
Womit füttere ich 'obj' ? Direkt mit den Objektdaten (type)?
Oder muss ich 'type' separat anhängen (id, obj, type)
'Common' kann ich zusätzlich als json einspeisen (Name, write, read), wie ich es auch beim Datenpunkt mache JSON.parse(common)?z.B. setObjectNoExists(id, obj, type, JSON.parse(common))
Oder gehört 'type' mit in 'common'?
Stellt sich mir wieder die Frage was ich bei 'obj' angeben muss?
Oder hab ich hier grad komplett ein Denkfehler?Sollte ich hier in der Überschrift Datenpunkt zu Objekt ändern?
Vielen Dank

@newpicsel sagte: setObjectNoExists(id, obj) verwenden?
Das kennt der Javascript-Adapter nicht, sondern wird vom js-controller für Adapter-Entwickler bereit gestellt.
Beispiel, in dem Objekte vom Typ "folder", "device" und "channel" erstellt werden.
-
Wie gesagt ich kenne mich damit nicht sehr gut aus, aber hab mir schon sowas in der Richtung gedacht.
Danke schon mal für deine Hilfe, ein paar Fragen hätte ich noch, um alles besser verstehen zu können, eventuell magst du mir da auch weiter helfen?
Kann ich direkt setObjectNoExists(id, obj) verwenden?
Womit füttere ich 'obj' ? Direkt mit den Objektdaten (type)?
Oder muss ich 'type' separat anhängen (id, obj, type)
'Common' kann ich zusätzlich als json einspeisen (Name, write, read), wie ich es auch beim Datenpunkt mache JSON.parse(common)?z.B. setObjectNoExists(id, obj, type, JSON.parse(common))
Oder gehört 'type' mit in 'common'?
Stellt sich mir wieder die Frage was ich bei 'obj' angeben muss?
Oder hab ich hier grad komplett ein Denkfehler?Sollte ich hier in der Überschrift Datenpunkt zu Objekt ändern?
Vielen Dank

@newpicsel sagte: Womit füttere ich 'obj' ?
const obj = { type: 'device', common: { name: 'Gerätename' }, native: {} }@newpicsel sagte in Datenpunkt (type: channel/device) erzeugen?:
Sollte ich hier in der Überschrift Datenpunkt zu Objekt ändern?
Ja.
-
@newpicsel sagte: setObjectNoExists(id, obj) verwenden?
Das kennt der Javascript-Adapter nicht, sondern wird vom js-controller für Adapter-Entwickler bereit gestellt.
Beispiel, in dem Objekte vom Typ "folder", "device" und "channel" erstellt werden.
Ah ok das macht Sinn!
In deinem Beispiel bildet die var. obj, in einer json die objektdaten (Typ, common, native), sehe ich das richtig?
Dann müsste es doch theoretisch gehen, wenn ich es so formatiere: setObject(id, {type: type, JSON.parse(common)}; ?
Die var. type Fülle ich dann mit der Angabe (folder, device, channel)
Die var. common würde ich dann mit den Angaben {"Name":"xyz","write":false} füllen…
Die Angabe 'native' kann ich problemlos weglassen, wenn ich nicht vorhabe sie zu füllen?Oder sollte ich dennoch mit der var. obj arbeiten und diese mit {type:'folder', common:{name:'xyz', write: false}} füllen?
Vielen vielen Dank!
-
Ah ok das macht Sinn!
In deinem Beispiel bildet die var. obj, in einer json die objektdaten (Typ, common, native), sehe ich das richtig?
Dann müsste es doch theoretisch gehen, wenn ich es so formatiere: setObject(id, {type: type, JSON.parse(common)}; ?
Die var. type Fülle ich dann mit der Angabe (folder, device, channel)
Die var. common würde ich dann mit den Angaben {"Name":"xyz","write":false} füllen…
Die Angabe 'native' kann ich problemlos weglassen, wenn ich nicht vorhabe sie zu füllen?Oder sollte ich dennoch mit der var. obj arbeiten und diese mit {type:'folder', common:{name:'xyz', write: false}} füllen?
Vielen vielen Dank!
@newpicsel sagte: in einer json die objektdaten (Typ, common, native), sehe ich das richtig?
Nein, in meinem Beispiel ist es direkt als Objekt (nicht als JSON) deklariert. Weshalb sollte man den Umweg über JSON gehen?
@newpicsel sagte in Datenpunkt (type: channel/device) erzeugen?:
Die var. common würde ich dann mit den Angaben {"Name":"xyz","write":false} füllen…
Kein JSON und common.write gibt es nur bei Datenpunkten.
-
@newpicsel sagte: Womit füttere ich 'obj' ?
const obj = { type: 'device', common: { name: 'Gerätename' }, native: {} }@newpicsel sagte in Datenpunkt (type: channel/device) erzeugen?:
Sollte ich hier in der Überschrift Datenpunkt zu Objekt ändern?
Ja.
-
if(existsObject(id) === false) { setObject(id, obj); } const obj = { type: type, common: { name: name, write: write, read: read }, native: {} }Wäre das ok? Kann ich obj wieder mit variablen füllen?
Würde dann im block so aussehen...

-
if(existsObject(id) === false) { setObject(id, obj); } const obj = { type: type, common: { name: name, write: write, read: read }, native: {} }Wäre das ok? Kann ich obj wieder mit variablen füllen?
@newpicsel sagte in Datenpunkt (type: channel/device) erzeugen?:
Wäre das ok? Kann ich obj wieder mit variablen füllen?
const obj = {muss vor
setObject(id, obj);erfolgen.
Sämtliche Variablen / Konstanten müssen vorher deklariert werden und Werte erhalten.const id = '0_userdata.0.meinGeraet.meinKanal'; const type = 'channel'; const Name = 'mein Kanalname'; const obj = { type: type, common: { name: Name }, native: {} } if(existsObject(id) === false) setObject(id, obj); -
Würde dann im block so aussehen...

@newpicsel sagte: Würde dann im block so aussehen...
Du möchtest es als Javascript-Funktion in Blockly? Dann bitte ohne write und read, denn die gibt es nur in Datenpunkten.
Funktion createObject(id, type, name):if(!existsObject(id)) { const obj = { type: type, common: {name: name}, native: {} }; setObject(id, obj); }Für Datenpunkte verwende createState().
-
@newpicsel sagte in Datenpunkt (type: channel/device) erzeugen?:
Wäre das ok? Kann ich obj wieder mit variablen füllen?
const obj = {muss vor
setObject(id, obj);erfolgen.
Sämtliche Variablen / Konstanten müssen vorher deklariert werden und Werte erhalten.const id = '0_userdata.0.meinGeraet.meinKanal'; const type = 'channel'; const Name = 'mein Kanalname'; const obj = { type: type, common: { name: Name }, native: {} } if(existsObject(id) === false) setObject(id, obj); -
@newpicsel sagte: Würde dann im block so aussehen...
Du möchtest es als Javascript-Funktion in Blockly? Dann bitte ohne write und read, denn die gibt es nur in Datenpunkten.
Funktion createObject(id, type, name):if(!existsObject(id)) { const obj = { type: type, common: {name: name}, native: {} }; setObject(id, obj); }Für Datenpunkte verwende createState().
-
@newpicsel sagte: Würde dann im block so aussehen...
Du möchtest es als Javascript-Funktion in Blockly? Dann bitte ohne write und read, denn die gibt es nur in Datenpunkten.
Funktion createObject(id, type, name):if(!existsObject(id)) { const obj = { type: type, common: {name: name}, native: {} }; setObject(id, obj); }Für Datenpunkte verwende createState().
-
Funktioniert fast astrein, lediglich der Name wird nicht übernommen, hier steht immer der Pfad des Objekts…

@newpicsel sagte: der Name wird nicht übernommen, hier steht immer der Pfad des Objekts…
name ist eine im Javascript-Adapter vordefinierte Variable und enthält den Namen des Skripts. Wie sieht das Skript aus, das den falschen Namen übergibt? Als globale Variable / Konstante sollte name nicht verwendet werden (ausnahmsweise besser Name).
-
@newpicsel sagte: der Name wird nicht übernommen, hier steht immer der Pfad des Objekts…
name ist eine im Javascript-Adapter vordefinierte Variable und enthält den Namen des Skripts. Wie sieht das Skript aus, das den falschen Namen übergibt? Als globale Variable / Konstante sollte name nicht verwendet werden (ausnahmsweise besser Name).
-
@newpicsel
wie sieht denn jetzt die fertige Funktion bzw. das Blockly mit der Funktion aus. (interessiert mich auch)
Bitte mal als Export hier zur Verfügung stellen. -
@newpicsel sagte: Würde dann im block so aussehen...
Du möchtest es als Javascript-Funktion in Blockly? Dann bitte ohne write und read, denn die gibt es nur in Datenpunkten.
Funktion createObject(id, type, name):if(!existsObject(id)) { const obj = { type: type, common: {name: name}, native: {} }; setObject(id, obj); }Für Datenpunkte verwende createState().
@paul53 sagte in [GELÖST] Objekt (type: channel/device) erzeugen?:
@newpicsel sagte: Würde dann im block so aussehen...
Du möchtest es als Javascript-Funktion in Blockly? Dann bitte ohne write und read, denn die gibt es nur in Datenpunkten.
Funktion createObject(id, type, name):if(!existsObject(id) { const obj = { type: type, common: {name: name}, native: {} }; setObject(id, obj); }Für Datenpunkte verwende createState().
Danke, bei mir funktioniert es jetzt auch. Hier fehlte nur eine schließende Klammer hinter id. (deshalb hatte ich eine Fehlermeldung)
if(!existsObject(id)) { -
@paul53 sagte in [GELÖST] Objekt (type: channel/device) erzeugen?:
@newpicsel sagte: Würde dann im block so aussehen...
Du möchtest es als Javascript-Funktion in Blockly? Dann bitte ohne write und read, denn die gibt es nur in Datenpunkten.
Funktion createObject(id, type, name):if(!existsObject(id) { const obj = { type: type, common: {name: name}, native: {} }; setObject(id, obj); }Für Datenpunkte verwende createState().
Danke, bei mir funktioniert es jetzt auch. Hier fehlte nur eine schließende Klammer hinter id. (deshalb hatte ich eine Fehlermeldung)
if(!existsObject(id)) { -
@newpicsel
wie sieht denn jetzt die fertige Funktion bzw. das Blockly mit der Funktion aus. (interessiert mich auch)
Bitte mal als Export hier zur Verfügung stellen.





