NEWS
[gelöst] channelID hat keinen Wert
-
Hallo zusammen,
nach einem Update vom Javascript-Adapter auf Version 4.6.22 laufen bestimmen Funktionen nicht mehr.
Insbesondere z.B.: Der Kanal-ID (channelID) hat keinen Wert mehr(auch weitere Werte fehlen: Kanalname usw.; objectID ist aber vorhanden.
Dies tritt aber nur bei neueren BLOCKLY-Scripten auf. Bei alten BLOCKLY-Scripten läuft es es nachwievor. Auch ein Downgrade des Adapters auf die Version 4.6.14 hat keinen Erfolg gebracht.Als Beispiel habe ich zwei Scripte zur Auswahl:
Wert wird hier angezeigt:

Hier fehlt der WERT für die KanalID:

Zum eingesetzten SYSTEM: RaspPi4B 4GB, NODEJS: v12.18.3, NPM: 6.14.6, Festplatte: 1,8TB , Aktive Instanzen: 32
Ich jemand kann mir helfen es zu verstehen, bzw. den Fehler zu beheben.
Neuinstallation vom javascript-Adapter habe ich noch nicht durchgeführt, da ich genau weiß wie dies durchzuführen ist.
Vielen Dank
-
@MCU sagte:
Vielleicht hängt es auch mit meinen Einstellungen in der Instanz zusammen?
Nein, die haben darauf keinen Einfluss und sind so okay. Ist parent vom DP mit ".app_start" ein Kanal ?
@paul53 Sorry. Hatte das mit dem DP ganz überlesen.
Also die Struktur sieht so aus:
javascript.0.TASKER.geräte-ID.Apps.app_start
Bis zur Ebene: javascript.0.geräte-ID. funktioniert es mit der Kanal-ID.
Geht man eine Ebene tiefer und wählt einen State von dort, zeigt er die Kanal-ID nicht mehr an.
Kann evtl auch daran liegen, daß die Kanal-ID nur bis zur 2. Ebene geht?Vielen Dank.
-
@paul53 Sorry. Hatte das mit dem DP ganz überlesen.
Also die Struktur sieht so aus:
javascript.0.TASKER.geräte-ID.Apps.app_start
Bis zur Ebene: javascript.0.geräte-ID. funktioniert es mit der Kanal-ID.
Geht man eine Ebene tiefer und wählt einen State von dort, zeigt er die Kanal-ID nicht mehr an.
Kann evtl auch daran liegen, daß die Kanal-ID nur bis zur 2. Ebene geht?Vielen Dank.
-
@MCU Änderung: Bis zur Ebene: javascript.0.TASKER.geräte-ID. funktioniert es mit der Kanal-ID.
-
@paul53 Sorry. Hatte das mit dem DP ganz überlesen.
Also die Struktur sieht so aus:
javascript.0.TASKER.geräte-ID.Apps.app_start
Bis zur Ebene: javascript.0.geräte-ID. funktioniert es mit der Kanal-ID.
Geht man eine Ebene tiefer und wählt einen State von dort, zeigt er die Kanal-ID nicht mehr an.
Kann evtl auch daran liegen, daß die Kanal-ID nur bis zur 2. Ebene geht?Vielen Dank.
@MCU sagte:
daran liegen, daß die Kanal-ID nur bis zur 2. Ebene geht?
Ja, die Kanal-ID liefert immer das parent-Objekt, sofern vorhanden. "Apps" ist kein Objekt, sondern nur ein Ordner. Die Kanal-ID solltest Du erhalten, wenn Du stattdessen die Geräte-ID abfragst.
-
@MCU sagte:
daran liegen, daß die Kanal-ID nur bis zur 2. Ebene geht?
Ja, die Kanal-ID liefert immer das parent-Objekt, sofern vorhanden. "Apps" ist kein Objekt, sondern nur ein Ordner. Die Kanal-ID solltest Du erhalten, wenn Du stattdessen die Geräte-ID abfragst.
-
-
@MCU Ok, dann muß die Datenpunkte verändern:
/* Apps */
createState('TASKER.' + TASKER_ID + '.Apps',false, {
write:true,
read: false,
desc: "Apps",
type: "channel",
name: "Apps",
role: "channel",
def: false
});Wäre das so richtig?
Vielen Dank.@MCU sagte:
Wäre das so richtig?
Nein, mit createState kann man keinen "channel" erzeugen.
let obj = {}; obj.type = 'channel'; obj.common = {}; obj.common.name = 'Alle Applikation-Daten'; obj.native ={}; setObject('javascript.0.TASKER.' + TASKER_ID + '.Apps', obj); -
@MCU Ok, dann muß die Datenpunkte verändern:
/* Apps */
createState('TASKER.' + TASKER_ID + '.Apps',false, {
write:true,
read: false,
desc: "Apps",
type: "channel",
name: "Apps",
role: "channel",
def: false
});Wäre das so richtig?
Vielen Dank.@MCU
/* Apps-Struktur */
createState('TASKER.' + TASKER_ID + '.Apps',false, {
write:true,
read: false,
desc: "Apps",
type: "channel",
name: "Alle Applikation-Daten",
role: "channel",
def: false
});Den "Ordner" auch als Channel definiert und schon klappt es. Hatte also nichts mit dem Update auf 4.6.22 zu tun.
Vielen Dank @paul53 -
@MCU sagte:
Wäre das so richtig?
Nein, mit createState kann man keinen "channel" erzeugen.
let obj = {}; obj.type = 'channel'; obj.common = {}; obj.common.name = 'Alle Applikation-Daten'; obj.native ={}; setObject('javascript.0.TASKER.' + TASKER_ID + '.Apps', obj); -
@MCU sagte:
Hat aber geklappt!
Ja, Du hast zwar ein Objekt erzeugt, allerdings einen Datenpunkt mit dem unzulässigen Typ "channel".
-
@MCU Genau so wie ich geschrieben habe: Datenpunkt vom unzulässigen Typ "channel". Du kannst das falsche Objekt aber - wie oben beschrieben - korrigieren: setObject(id, obj) überschreibt das bestehende Objekt.
-
@MCU sagte:
Typ geändert. Klappt wunderbar.
Dann solltest Du gleich noch das parent-Objekt vom channel korrigieren:
let obj = {}; obj.type = 'device'; obj.common = {}; obj.common.name = 'TAB_2'; obj.native = {}; setObject('javascript.0.TASKER.' + TASKER_ID, obj); -
@MCU sagte:
Typ geändert. Klappt wunderbar.
Dann solltest Du gleich noch das parent-Objekt vom channel korrigieren:
let obj = {}; obj.type = 'device'; obj.common = {}; obj.common.name = 'TAB_2'; obj.native = {}; setObject('javascript.0.TASKER.' + TASKER_ID, obj);



