NEWS
Funktion mit einer Objekt-ID als Parameter
-
Hallo zusammen,
ich versuche, in Blockly eine Funktion zu schreiben, der ich die Objekt-ID eines Magnetventils übergeben kann und die Funktion dafür sorgt, dass das Ventil nach Spätestens X Minuten (Im Beispiel sind es 10 Sekunden) wieder abgeschaltet wird falls es dann noch eingeschaltet sein sollte. Ich muß das für ca. 20 Ventile machen, daher hielt ich es für sinnvoll, eine Funktion in Blockly zu erstellen und die dann aufzurufen, sobald ein Ventil aktiviert wird. Mein Problem ist, dass es mir nicht gelingt, der Funktion die Objekt-ID des Ventils als Parameter zu übergeben.
Meine Funktion und der Aufruf sieht so aus.

Als Fehlermeldung bekomme ich:
11.5.2026, 16:46:57.153 [info ]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: start JavaScript (Blockly) 11.5.2026, 16:46:57.166 [info ]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 11.5.2026, 16:47:02.079 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: getState has been called with id of type "object" but expects a string 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: Error: TypeError: Cannot read properties of undefined (reading 'val') 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at Ventile_abschalten (script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten:6:30) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at Object.<anonymous> (script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten:21:9) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/src/lib/sandbox.ts:1772:38) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at JavaScript.onStateChange (/opt/iobroker/node_modules/iobroker.javascript/src/main.ts:752:25) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at JavaScript.emit (node:events:519:28) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at JavaScript.emit (node:domain:489:12) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11110:57) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at processImmediate (node:internal/timers:484:21)Gibt es eine Möglichkeit, die Funktion so umzubauen, dass sie die Objekt-ID meiner Ventile auswerten kann, geht das generell nicht in Blockly oder habe ich das evtl. total falsch gebaut?
Vielen Dank für Eure Hilfe!
-
Hallo zusammen,
ich versuche, in Blockly eine Funktion zu schreiben, der ich die Objekt-ID eines Magnetventils übergeben kann und die Funktion dafür sorgt, dass das Ventil nach Spätestens X Minuten (Im Beispiel sind es 10 Sekunden) wieder abgeschaltet wird falls es dann noch eingeschaltet sein sollte. Ich muß das für ca. 20 Ventile machen, daher hielt ich es für sinnvoll, eine Funktion in Blockly zu erstellen und die dann aufzurufen, sobald ein Ventil aktiviert wird. Mein Problem ist, dass es mir nicht gelingt, der Funktion die Objekt-ID des Ventils als Parameter zu übergeben.
Meine Funktion und der Aufruf sieht so aus.

Als Fehlermeldung bekomme ich:
11.5.2026, 16:46:57.153 [info ]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: start JavaScript (Blockly) 11.5.2026, 16:46:57.166 [info ]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 11.5.2026, 16:47:02.079 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: getState has been called with id of type "object" but expects a string 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: Error: TypeError: Cannot read properties of undefined (reading 'val') 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at Ventile_abschalten (script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten:6:30) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at Object.<anonymous> (script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten:21:9) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/src/lib/sandbox.ts:1772:38) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at JavaScript.onStateChange (/opt/iobroker/node_modules/iobroker.javascript/src/main.ts:752:25) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at JavaScript.emit (node:events:519:28) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at JavaScript.emit (node:domain:489:12) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11110:57) 11.5.2026, 16:47:02.184 [error]: javascript.0 (1194) script.js.Bewässerung.Ventil_nach_30_Minuten_abschalten: at processImmediate (node:internal/timers:484:21)Gibt es eine Möglichkeit, die Funktion so umzubauen, dass sie die Objekt-ID meiner Ventile auswerten kann, geht das generell nicht in Blockly oder habe ich das evtl. total falsch gebaut?
Vielen Dank für Eure Hilfe!
@miwu [sagte]: Meine Funktion und der Aufruf sieht so aus.
Ein Objekt ist keine ID!
Weshalb eine Funktion? Wenn mit Funktion, dann so:
Besser ohne Funktion:

Eine Funktion ist ohnehin wenig geeignet, denn jedes Ventil benötigt seinen eigenen Timeout.
EDIT: Einfacher zu kopieren ist diese Version:
-
@paul53:
Vielen Dank für Deine superschnelle Hilfe. Du hast es schon selbst gesagt, ich wollte eine Funktion nutzen, um nicht bei allen Ventilen beim Kopieren des Blockes das Objekt ändern zu müssen. Im Moment haben alle Ventile die gleiche Abschaltdauer, das Script soll nur eine Art "Notabschaltung" sein, wenn ein Script, dass die die Ventile steuert aus irgendeinem Grund abbricht und die Ventile dann nicht wieder schließt. Um später flexibel zu sein habe ich beide Varianten eingebaut, dann kann ich später für einzelne Ventile die Funktion deaktivieren und den einfachen Block nutzen :
Nochmals vielen Dank für die schnelle und tolle Hilfe!
-
@paul53:
Vielen Dank für Deine superschnelle Hilfe. Du hast es schon selbst gesagt, ich wollte eine Funktion nutzen, um nicht bei allen Ventilen beim Kopieren des Blockes das Objekt ändern zu müssen. Im Moment haben alle Ventile die gleiche Abschaltdauer, das Script soll nur eine Art "Notabschaltung" sein, wenn ein Script, dass die die Ventile steuert aus irgendeinem Grund abbricht und die Ventile dann nicht wieder schließt. Um später flexibel zu sein habe ich beide Varianten eingebaut, dann kann ich später für einzelne Ventile die Funktion deaktivieren und den einfachen Block nutzen :
Nochmals vielen Dank für die schnelle und tolle Hilfe!
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
