NEWS
HILFE: Alle Fenster geschlossen ? Datenpunkte auf true
-
Bist du sicher dass der hier stimmt ?
$match($,/(.).(.)/).groups[0]
Woher kommt der Pfad ?
Kann ich ihn mir selbst irgendwoher kopieren ? -
@dellishelly Schau doch mal in dem Du mit debug das topic ausgibst was da steht. Dann lass Dir auch mal den Namen des Datenpunktes ausgeben. Name ist die 2. Spalte in der Objektansicht.
Du kannst das leicht prüfen in dem Du halt mal den Text direkt eingibst.
Im Grund wird also nur der vordere Teil abgeschnitten
Also aus Couchbeleuchtung.STATE wird Couchbeleuchtung.
Deaktiviere mal alle weiteren Bausteine dann gehen wir Schritt für Schritt vor.
Wenn der Name bei den Datenpunkten nicht gesetzt ist dann nehmen wir die ID - aber wir wollen ja die Couchbeleuchtung als Eigenschaft aus den Infos herauslösen.
-
@dellishelly sagte in HILFE: Alle Fenster geschlossen ? Datenpunkte auf true:
Bist du sicher dass der hier stimmt ?
$match($,/(.).(.)/).groups[0]
Woher kommt der Pfad ?
Kann ich ihn mir selbst irgendwoher kopieren ?Zitieren die * fehlen bei dem Befehl - das liegt aber daran weil Du es nicht in CodeTags geschrieben hast.
Du kannst auch wie gesagt die ID nehmen - wir müssen ja nur ermitteln was für eine Lampe es ist. Sonst poste den String, woher er ist (ID oder Name) und dann basteln wir den regulären Ausdruck
-
```
soweit so gut. das gibt er mir nun unten aus
Aber ich komme nicht in die Liste
beim starten des Skripts gibt er mir den debugjavascript.0 2023-09-19 15:01:31.776 info script.js.Lichterprüfen: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 2023-09-19 15:01:31.776 error script.js.Lichterprüfen Error by subscription (trigger): empty ID defined. All states matched. javascript.0 2023-09-19 15:01:31.775 warn at script.js.Lichterprüfen:23:3 javascript.0 2023-09-19 15:01:31.775 warn at script.js.Lichterprüfen:10:20 javascript.0 2023-09-19 15:01:31.773 warn getState "[object Object]" not found (3) javascript.0 2023-09-19 15:01:31.747 info Start javascript script.js.Lichterprüfen javascript.0 2023-09-19 15:01:29.256 info Stop script script.js.Lichterprüfen
-
@dellishelly Das getState kommt vom unteren Teil - deaktiviere den auch.
Dann ersetze mal
den Text durch Name und schau ob dann Couchbeleuchtung ohne weitere Fehler rauskommt. Oder Couchlicht
-
-
@dellishelly So dann aktiviere die nächsten beiden Blöcke und schau dass der Datenpunkt Liste_lampen existiert.
-
@mickym
Ich bekomme zum einen nenne Warnung und hier der Debug. Warum auch immer scheint er die Liste nicht zu finden, obwohl der Datenpunkt existiert.javascript.0 2023-09-19 15:30:09.150 info script.js.Lichterprüfen: {"Couchbeleuchtung":true} javascript.0 2023-09-19 15:30:09.148 warn at Object.<anonymous> (script.js.Lichterprüfen:9:142) javascript.0 2023-09-19 15:30:09.147 warn at script.js.Lichterprüfen:9:52 javascript.0 2023-09-19 15:30:09.146 warn getState "[object Object]" not found (3) javascript.0 2023-09-19 15:30:09.145 info script.js.Lichterprüfen: Couchbeleuchtung
-
@dellishelly Gut dann mach den nächsten auch noch scharf. Die Warnung kommt weil kein Objekt da ist.
Und dann prüfe ob anschließend was in Deinem Datenpunkt der Liste drin steht
Das schaut doch gut aus.
-
@mickym
läuft auch durch und er schreibt den Wert auch in die Liste_lampen.
Allerdings schreibt er immer nur einen Wert in die Liste auch wenn ich mehrere Lichter aus der Aufzählung schalte.Der Fehler kommt im Debug noch immer Object not found
2023-09-19 15:43:05.189 info script.js.Lichterprüfen: {"Couchbeleuchtung":true} javascript.0 2023-09-19 15:43:05.185 warn at Object.<anonymous> (script.js.Lichterprüfen:9:142) javascript.0 2023-09-19 15:43:05.185 warn at script.js.Lichterprüfen:9:52 javascript.0 2023-09-19 15:43:05.183 warn getState "[object Object]" not found (3) javascript.0 2023-09-19 15:43:05.182 info script.js.Lichterprüfen: Couchbeleuchtung
-
@dellishelly Also jetzt sollte der Fehler nicht mehr kommen hast Du auch als Datentyp JSON eingetragen?
-
@dellishelly sagte in HILFE: Alle Fenster geschlossen ? Datenpunkte auf true:
Allerdings schreibt er immer nur einen Wert in die Liste auch wenn ich mehrere Lichter aus der Aufzählung schalte.
Sollte auch nicht der Fall sein - da ja jedes Licht einen Trigger erzeugen müsste und somit müsste das ja mehrfach durchlaufen werden.
Nachdem jetzt einmal was drinsteht, sollten auch keine Warnungen mehr kommen.
-
Der DP ist eine JSON
und egal was ich mache, in der Debug bekomme ich immer angezeigt, dass er das Object nicht findet und auch steht nur weiterhin nur ein Wert drin.
Immer der, der als letztes getriggert wurde.2023-09-19 15:50:15.066 info script.js.Lichterprüfen: {"Couchbeleuchtung":false} javascript.0 2023-09-19 15:50:15.064 warn at Object.<anonymous> (script.js.Lichterprüfen:9:142) javascript.0 2023-09-19 15:50:15.063 warn at script.js.Lichterprüfen:9:52 javascript.0 2023-09-19 15:50:15.062 warn getState "[object Object]" not found (3)
-
@dellishelly Ok - ich verstehe es im Moment nicht - da es bei mir funktioniert. Nachdem Du jetzt schon was in Deinem Datenpunkt stehen hast, schau mal wenn Du die Objektprüfung wieder rausnimmst, ob sich dann das Objekt erweitert:
Also beim Datenpunkt schreiben:
nur
$merge($)
Was hast Du denn für eine Version des Javascript Adapters - denn ich hab diese Probleme ja nicht. Ich habe:
Alle Statusänderungen kommen nacheinander an und modifizieren das Objekt korrekt:
-
@mickym
sobald ich die raus nehme, läuft nur noch der debug für topic.2023-09-19 16:12:21.655 error at Object.<anonymous> (script.js.Lichterprüfen:10:31) javascript.0 2023-09-19 16:12:21.655 error at Object.evaluate (/opt/iobroker/node_modules/jsonata/jsonata.js:5558:26) javascript.0 2023-09-19 16:12:21.655 error at evaluate (/opt/iobroker/node_modules/jsonata/jsonata.js:3525:26) javascript.0 2023-09-19 16:12:21.655 error at evaluateFunction (/opt/iobroker/node_modules/jsonata/jsonata.js:4871:28) javascript.0 2023-09-19 16:12:21.655 error at apply (/opt/iobroker/node_modules/jsonata/jsonata.js:4896:24) javascript.0 2023-09-19 16:12:21.654 error at applyInner (/opt/iobroker/node_modules/jsonata/jsonata.js:4929:33) javascript.0 2023-09-19 16:12:21.654 error at validateArguments (/opt/iobroker/node_modules/jsonata/jsonata.js:5062:39) javascript.0 2023-09-19 16:12:21.654 error at Object.validate (/opt/iobroker/node_modules/jsonata/jsonata.js:7215:28) javascript.0 2023-09-19 16:12:21.654 error at Array.forEach (<anonymous>) javascript.0 2023-09-19 16:12:21.654 error at /opt/iobroker/node_modules/jsonata/jsonata.js:7242:45 javascript.0 2023-09-19 16:12:21.653 error at Array.forEach (<anonymous>) javascript.0 2023-09-19 16:12:21.653 error at /opt/iobroker/node_modules/jsonata/jsonata.js:7272:57 javascript.0 2023-09-19 16:12:21.653 error script.js.Lichterprüfen: Error: javascript.0 2023-09-19 16:12:21.646 warn at Object.<anonymous> (script.js.Lichterprüfen:9:142) javascript.0 2023-09-19 16:12:21.645 warn at script.js.Lichterprüfen:9:52 javascript.0 2023-09-19 16:12:21.639 warn getState "[object Object]" not found (3) javascript.0 2023-09-19 16:12:21.638 info script.js.Lichterprüfen: Couchbeleuchtung
-
@dellishelly Nee schon wieder aktivieren - wie gesagt diese Fehlermeldungen habe ich nicht.
diese Warnung dass er was nicht findet - das macht mich stutzig
Das muss bei Dir am System liegen.
Prüfe ob Du beim Einlesen des Wertes diese Fehler bekommst. Das ist der Grund warum das Objekt nicht erweitert wird, weil der Datenpunkt bei DIR NICHT EINGELESEN wird.
-
ich hab die debug Blöcke mal raus genommen.
Jetzt läufts und er schreibt auch die einmal getriggert wurden in die Liste.Nur die Prüfung am Ende läuft wohl noch nicht.
debug im Admin zeigt keine Warnungen oder Fehler
-
@dellishelly Na Dein Objektbezeichnungen sind zwar kryptisch - aber gut.
Für die Lichter musst Du ja die Logik etwas anders machen.
Die Lichter sind aus, wenn alles aus ist. Also musst Du mit OR verknüfen.
$reduce($.*,function($i, $j){$i or $j})
und das Ergebnis verneinen:
lampen_aus wird also von JSONATA nur dann false sein, wenn alle Eigenschaften des Objektes falsch sind. lampen_aus wird true sein, wenn NUR eine Eigenschaft true ist.
Um also postiv abzufragen, ob Lampen aus wahr ist, musst Du das Ergebnis verneinen.
Somit wird es true, sobald alle Eigenschaften false ist und false, falls eine Eigenschaft true ist.
Unten musst Du dann, um die Lampen rauszufischen die true sind - die Verneinung aufheben:
statt
$each($, function($v, $k) {$not($v) ? $k})~>$join(", ")
dann
$each($, function($v, $k) {$v ? $k})~>$join(", ")
-
@mickym said in HILFE: Alle Fenster geschlossen ? Datenpunkte auf true:
Ich muss hier noch die richtigen Namen hinterlegen. Die Object ID sind in Mehreren Ordnern mehrfach gleich vergeben.
Aber das mach ich hinterher.
Habe die Logik nun geändert, aber er gibt mir unten trotzdem keine Ausgabe.Habe mal nen debug direkt hinter den trigger der Listenprüfung gesetzt. - der gibt auch nichts aus, obwohl sich der Wert der Liste ändert
-
@mickym Nun dann prüfe halt erst mal ob der untere Teil getriggert wird (siehst Du ja mit Test) und dann lass Dir mal den Wert mit debug ausgeben, um zu sehen, dass er auch das Objekt einliest.