NEWS
[gelöst] Skript stoppt bei Zustandsänderung mit Fehler
-
javascript.0 2023-12-30 13:11:54.584 error at processImmediate (node:internal/timers:476:21) javascript.0 2023-12-30 13:11:54.584 error at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-states-redis/src/lib/states/statesInRedisClient.ts:381:37) javascript.0 2023-12-30 13:11:54.583 error at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11183:36) javascript.0 2023-12-30 13:11:54.583 error at Array.forEach (<anonymous>) javascript.0 2023-12-30 13:11:54.583 error at /opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11201:47 javascript.0 2023-12-30 13:11:54.583 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:645:29) javascript.0 2023-12-30 13:11:54.582 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1266:38) javascript.0 2023-12-30 13:11:54.582 error at Object.<anonymous> (script.js.common.Testbereich.Statistikprojekte.licht_zaehlen:334:30) javascript.0 2023-12-30 13:11:54.582 error Error in callback: TypeError: Cannot read properties of null (reading 'search')
Deine erste Frage kann ich nicht beantworten, da ich mich (noch) nicht wirklich auskenne (daher auch Probeläufe auf einem Testsystem).
-
@maloross sagte: TypeError: Cannot read properties of null (reading 'search')
Vermutung: Zum Trigger-Datenpunkt existiert kein Parent-Objekt, folglich auch keine "channelId"?
-
@paul53 sagte in [Fehler] Skript stoppt bei Zustandsänderung mit Fehler:
Vermutung: Zum Trigger-Datenpunkt existiert kein Parent-Objekt, folglich auch keine "channelId"?
Da bin ich überfragt, da ich den Datenpunkten nur Raum und Funktion zugeteilt habe (was auf dem Testsystem einwandfrei funktionierte).
Ich bin noch in der Phase "ich kopier das mal und schaue, was passiert" - ergo mit dem Erfahrungsschatz eines DAUs
-
-
@ticaki sagte in [Fehler] Skript stoppt bei Zustandsänderung mit Fehler:
dp.startWith(praefix)
heißt dass, das sich "praefix" auf den Channel bezieht, unter dem der Datenpunkt abgespeichert ist?
-
@maloross sagte: Da bin ich überfragt
Dann zeige bitte die komplette ID-Struktur zum 2. Datenpunkt (Index 1) der Sensorliste als Screenshot des Tab "Objekte".
-
Das bedeutet das
'0_userdata.0.meinOrdner.meinDatenpunkte'.startWith('0_userdata.0.meinOrdner') == true // das ist hier wahr, weil der erste String mit dem 2. startet.
-
@maloross sagte: "praefix" auf den Channel bezieht, unter dem der Datenpunkt abgespeichert ist?
Ja, genauer auf das übergeordnete Objekt. Wenn der übergeordnete Ordner kein Objekt hat, dann wird auch keine Kanal-ID geliefert.
-
@ticaki sagte: dann mit `dp.startWith(praefix)'.
if(!dp.id.startsWith(praefix)) { //Ausschliessen dass das Scriptverzeichnis zum Triggern verwendet wird
-
@paul53
Jap zu wenig Kaffee - Danke Paul -
@paul53
Bei mir ist es folgendermaßen aufgebaut:
Ich nutze Aliase
Hier der Ursprungsort
Von euren Angaben ausgehend: irgend ein Datenpunkt hat sowohl im Ursprung als auch im Alias eine doppelte Zuordnung Raum und/oder Funktion?
-
@maloross
Der Ordner "schrankbeleuchtung" hat kein Objekt: Deshalb der Fehler. -
@paul53 Unter Alias gibt es den Ordner "schrankbeleuchtung" mit dem Datenpunkt "switch" - ich dachte, das ist ein Objekt.
-
@maloross sagte: ich dachte, das ist ein Objekt.
Nein, das ist nur ein Ordner ohne Objekt, der durch Punkte in der Datenpunkt-ID erzeugt wird.
Das Objekt kann man von einem übergeordneten Ordner (mit Objekt) aus nachträglich erstellen, indem man den identischen Namen "schrankbeleuchtung" für das Objekt (Kanal) verwendet. Zeige bitte auch die übergeordnete Struktur von "schrankbeleuchtung.switch". -
@paul53
ich habe jetzt alle Funktionen entfernt, nur noch im Ursprungsordner das Schranklicht mit Raum und Funktion versehen - Fehler bleibt, Protokoll schreibtjavascript.0 2023-12-30 14:00:36.526 error script.js.common.Testbereich.Statistikprojekte.licht_zaehlen: Fehler, Datenpunkt im Scriptverzeichnis als Trigger definiert
Was mich irrtiert ist der Hinweis auf das Scriptverzeichnis, das in meinem Fall "javascript.0 ". Ich versuche es mal auf das Userverzeichnis umzuleiten.
Ich hoffe, das Bild der Struktur ist ausreichend
-
@maloross sagte: Ich hoffe, das Bild der Struktur ist ausreichend
Ja. Selektiere "homematic" und ändere in den Eigenschaften (Bleistift rechts) den Objekttyp von "Kanal" in "Gerät" oder "Verzeichnis". Dann erstelle unter "homematic" ein Objekt vom Typ "Kanal" mit dem Namen "schrankbeleuchtung" (genau so geschrieben).
-
@paul53 danke für deine Unterstützung
erster Testlauf positiv, Skript läuft ohne Fehler durch.
also sollte die Struktur auch im Alias-Verzeichnis "Gerät-Kanal-Datenpunkt" sein.EDIT: Es gibt Skripte, die auf ChannelID basieren - das würde dann ja super auch im Alias-Verzeichnis funktionieren.
-
@maloross sagte: sollte die Struktur auch im Alias-Verzeichnis "Gerät-Kanal-Datenpunkt" sein
Ja, wenn man "channelId" und / oder "deviceId" verwenden will. Außerdem lassen sich weitere Datenpunkte unter dem Kanal leichter manuell erstellen.
-
@paul53 super, habe heute eine ganze Menge gelernt (habe noch ein Skripte, die ich dann ausprobieren kann).
Da ich die Aliase mit dem Manager anlege, habe ich nicht auf die Ordnerstruktur geachtet. Bei der überschaubaren Anzahl kann ich das ganz schnell anpassen und für die Zukunft dann gleich richtig anlegen. -
@maloross sagte: Skript läuft ohne Fehler durch
Dann ändere in der Überschrift im ersten Beitrag [Fehler] in [gelöst].