NEWS
[gelöst] Seltsames Verhal. von "für jeden Wert a. d. Liste"
-
Hallo zusammen,
zuerst einmal die Daten meines Systems:
Iobroker ist parallel zu OMV auf einem Selbstbau-NAS installiert und läuft seit Jahren Problemlos.node / nodejs: 21.2.0
npm: 10.2.3
der iobroker-Version (js-controller) zu finden unter Hosts: 5.0.16
des admin-Adapters: 6.12.0
Linux-Version: Debian Bullseyeich habe das Problem, daß ein Blockly-Script nicht wie erwartet funktioniert.
Zuerst einmal das Blockly als Bild und dann noch der zugehörige Javascript-Code.
Darunter folgen dann Erklärungen zum Script.
for (var j_index in Raum) { j = Raum[j_index]; Parameter = Raum.indexOf(j) + 1; Parameter = String(ParamId[(Parameter - 1)]) + ':1'; console.log(j); console.log(Parameter); Raumtext = ['0_userdata.0.General.Heizgruppen.',j,'.P'].join(''); console.log(Raumtext); sendTo('hm-rpc.1', 'getParamset', { 'ID': Parameter, 'paramType': 'MASTER' }, async (result) => { ERGEBNIS = result; console.log(ERGEBNIS); }); console.debug("hm-rpc.1: " + ""); }Ziel des Scriptes:
Das Script soll nacheinander mehrere Datensätze aus einer Raspberrymatic lesen und diese weiterverarbeiten.
Der Teil zum weiterverarbeiten funktioniert und ist daher hier nicht mit aufgeführt.Die Listen:
Die Liste "Raum" enthält die Werte "EG.BZ" und "EG.WZ"
Die Liste "ParamId" enthält die Werte "INT0000002" und "INT0000004"Erwartetes verhalten des Scriptes:
Für jeden Wert der Liste Raum werden die Befehle innerhalb der Schleife der Reihe nach ausgeführt.
1.) Zuerst wird die Position des Schleifenwertes in der Liste "Raum" ermittelt, um dann in der Folgezeile den Wert an der gleichen Position in der Liste "ParamId" zu bekommen.
Ergebnis: Wertepaarungen "EG.BZ - INT0000002" und "EG.WZ - INT0000004" funktioniert einwandfrei.
2.) Das setzen der Variable "Raumtext" ist hier nebensächlich und wird nur im nicht dargestellten Teil des Scriptes benötigt
3.) In jedem Schleifendurchgang soll jetzt mit dem SendTo-Befehl an hm-rpc.1 das Ergebnis-Json abgerufen und ausgegebe werden.
Auch das funktioniert für sich gesehen einwandfrei. Der Aufruf liefert das korrekte Ergebnis zurück.Es soll also im Endeffekt für jeden Raum das entsprechende Ergebnis-Json abgerufen und ausgegeben werden.
Das Problem:
Es wird, so wie es aussieht, zuerst zweimal die Positionen 1.) und 2.) ausgeführt.
Erst danach springt das Script in den SendTo-Teil und führt diesen zweimal aus.
Ich hatte das dadurch festgestellt, daß ich die Variable "Raumtext" im SendTo-Teil nochmals hatte ausgeben lassen und folgende Ausgabe bekam:23:06:34.881 info javascript.0 (643292) Start javascript script.js.common.test103 23:06:34.883 info javascript.0 (643292) script.js.common.test103: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 23:06:34.886 info javascript.0 (643292) script.js.common.test103: EG.BZ 23:06:34.886 info javascript.0 (643292) script.js.common.test103: INT0000002:1 23:06:34.886 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.BZ.P 23:06:34.886 info javascript.0 (643292) script.js.common.test103: EG.WZ 23:06:34.886 info javascript.0 (643292) script.js.common.test103: INT0000004:1 23:06:34.886 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.WZ.P 23:06:34.924 info javascript.0 (643292) script.js.common.test103: {'result':{'P2_ENDTIME_THURSDAY_7':1440, ... ,'P5_TEMPERATURE_THURSDAY_10':17},'error':null} 23:06:34.924 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.WZ.P 23:06:34.949 info javascript.0 (643292) script.js.common.test103: {'result':{'P2_ENDTIME_THURSDAY_7':1440, ... ,'P5_TEMPERATURE_THURSDAY_10':17},'error':null} 23:06:34.949 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.WZ.PDie beiden JSON-Ausgaben habe ich stark eingekürzt, weil jede mehrere hundert Positionen beinhaltet.
Meine Frage ist jetzt, wie dieses seltsame Verhalten zu erklären ist und wie ich es abstellen kann.
Ich habe IoBroker jetzt seit ca. 3 Jahren laufen und auch schon jede Menge Blocklys für die verschiedensten Aufgaben erstellt, aber hier finde ich den Fehler einfach nicht.
Vielen Dank schon mal im Voraus für eure Hilfe und Mühe
Christoph
-
Hallo zusammen,
zuerst einmal die Daten meines Systems:
Iobroker ist parallel zu OMV auf einem Selbstbau-NAS installiert und läuft seit Jahren Problemlos.node / nodejs: 21.2.0
npm: 10.2.3
der iobroker-Version (js-controller) zu finden unter Hosts: 5.0.16
des admin-Adapters: 6.12.0
Linux-Version: Debian Bullseyeich habe das Problem, daß ein Blockly-Script nicht wie erwartet funktioniert.
Zuerst einmal das Blockly als Bild und dann noch der zugehörige Javascript-Code.
Darunter folgen dann Erklärungen zum Script.
for (var j_index in Raum) { j = Raum[j_index]; Parameter = Raum.indexOf(j) + 1; Parameter = String(ParamId[(Parameter - 1)]) + ':1'; console.log(j); console.log(Parameter); Raumtext = ['0_userdata.0.General.Heizgruppen.',j,'.P'].join(''); console.log(Raumtext); sendTo('hm-rpc.1', 'getParamset', { 'ID': Parameter, 'paramType': 'MASTER' }, async (result) => { ERGEBNIS = result; console.log(ERGEBNIS); }); console.debug("hm-rpc.1: " + ""); }Ziel des Scriptes:
Das Script soll nacheinander mehrere Datensätze aus einer Raspberrymatic lesen und diese weiterverarbeiten.
Der Teil zum weiterverarbeiten funktioniert und ist daher hier nicht mit aufgeführt.Die Listen:
Die Liste "Raum" enthält die Werte "EG.BZ" und "EG.WZ"
Die Liste "ParamId" enthält die Werte "INT0000002" und "INT0000004"Erwartetes verhalten des Scriptes:
Für jeden Wert der Liste Raum werden die Befehle innerhalb der Schleife der Reihe nach ausgeführt.
1.) Zuerst wird die Position des Schleifenwertes in der Liste "Raum" ermittelt, um dann in der Folgezeile den Wert an der gleichen Position in der Liste "ParamId" zu bekommen.
Ergebnis: Wertepaarungen "EG.BZ - INT0000002" und "EG.WZ - INT0000004" funktioniert einwandfrei.
2.) Das setzen der Variable "Raumtext" ist hier nebensächlich und wird nur im nicht dargestellten Teil des Scriptes benötigt
3.) In jedem Schleifendurchgang soll jetzt mit dem SendTo-Befehl an hm-rpc.1 das Ergebnis-Json abgerufen und ausgegebe werden.
Auch das funktioniert für sich gesehen einwandfrei. Der Aufruf liefert das korrekte Ergebnis zurück.Es soll also im Endeffekt für jeden Raum das entsprechende Ergebnis-Json abgerufen und ausgegeben werden.
Das Problem:
Es wird, so wie es aussieht, zuerst zweimal die Positionen 1.) und 2.) ausgeführt.
Erst danach springt das Script in den SendTo-Teil und führt diesen zweimal aus.
Ich hatte das dadurch festgestellt, daß ich die Variable "Raumtext" im SendTo-Teil nochmals hatte ausgeben lassen und folgende Ausgabe bekam:23:06:34.881 info javascript.0 (643292) Start javascript script.js.common.test103 23:06:34.883 info javascript.0 (643292) script.js.common.test103: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 23:06:34.886 info javascript.0 (643292) script.js.common.test103: EG.BZ 23:06:34.886 info javascript.0 (643292) script.js.common.test103: INT0000002:1 23:06:34.886 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.BZ.P 23:06:34.886 info javascript.0 (643292) script.js.common.test103: EG.WZ 23:06:34.886 info javascript.0 (643292) script.js.common.test103: INT0000004:1 23:06:34.886 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.WZ.P 23:06:34.924 info javascript.0 (643292) script.js.common.test103: {'result':{'P2_ENDTIME_THURSDAY_7':1440, ... ,'P5_TEMPERATURE_THURSDAY_10':17},'error':null} 23:06:34.924 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.WZ.P 23:06:34.949 info javascript.0 (643292) script.js.common.test103: {'result':{'P2_ENDTIME_THURSDAY_7':1440, ... ,'P5_TEMPERATURE_THURSDAY_10':17},'error':null} 23:06:34.949 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.WZ.PDie beiden JSON-Ausgaben habe ich stark eingekürzt, weil jede mehrere hundert Positionen beinhaltet.
Meine Frage ist jetzt, wie dieses seltsame Verhalten zu erklären ist und wie ich es abstellen kann.
Ich habe IoBroker jetzt seit ca. 3 Jahren laufen und auch schon jede Menge Blocklys für die verschiedensten Aufgaben erstellt, aber hier finde ich den Fehler einfach nicht.
Vielen Dank schon mal im Voraus für eure Hilfe und Mühe
Christoph
@christophh sagte in Seltsames Verhalten von "für jeden Wert aus der Liste":
node / nodejs: 21.2.0
Falsche Version. Ungerade Versionen sind nicht "stable". Aktuell empfohlen für ioBroker ist 18.
Linux-Version: Debian Bullseye
Sollte ebenfalls aktualisiert werden.
-
Hallo zusammen,
zuerst einmal die Daten meines Systems:
Iobroker ist parallel zu OMV auf einem Selbstbau-NAS installiert und läuft seit Jahren Problemlos.node / nodejs: 21.2.0
npm: 10.2.3
der iobroker-Version (js-controller) zu finden unter Hosts: 5.0.16
des admin-Adapters: 6.12.0
Linux-Version: Debian Bullseyeich habe das Problem, daß ein Blockly-Script nicht wie erwartet funktioniert.
Zuerst einmal das Blockly als Bild und dann noch der zugehörige Javascript-Code.
Darunter folgen dann Erklärungen zum Script.
for (var j_index in Raum) { j = Raum[j_index]; Parameter = Raum.indexOf(j) + 1; Parameter = String(ParamId[(Parameter - 1)]) + ':1'; console.log(j); console.log(Parameter); Raumtext = ['0_userdata.0.General.Heizgruppen.',j,'.P'].join(''); console.log(Raumtext); sendTo('hm-rpc.1', 'getParamset', { 'ID': Parameter, 'paramType': 'MASTER' }, async (result) => { ERGEBNIS = result; console.log(ERGEBNIS); }); console.debug("hm-rpc.1: " + ""); }Ziel des Scriptes:
Das Script soll nacheinander mehrere Datensätze aus einer Raspberrymatic lesen und diese weiterverarbeiten.
Der Teil zum weiterverarbeiten funktioniert und ist daher hier nicht mit aufgeführt.Die Listen:
Die Liste "Raum" enthält die Werte "EG.BZ" und "EG.WZ"
Die Liste "ParamId" enthält die Werte "INT0000002" und "INT0000004"Erwartetes verhalten des Scriptes:
Für jeden Wert der Liste Raum werden die Befehle innerhalb der Schleife der Reihe nach ausgeführt.
1.) Zuerst wird die Position des Schleifenwertes in der Liste "Raum" ermittelt, um dann in der Folgezeile den Wert an der gleichen Position in der Liste "ParamId" zu bekommen.
Ergebnis: Wertepaarungen "EG.BZ - INT0000002" und "EG.WZ - INT0000004" funktioniert einwandfrei.
2.) Das setzen der Variable "Raumtext" ist hier nebensächlich und wird nur im nicht dargestellten Teil des Scriptes benötigt
3.) In jedem Schleifendurchgang soll jetzt mit dem SendTo-Befehl an hm-rpc.1 das Ergebnis-Json abgerufen und ausgegebe werden.
Auch das funktioniert für sich gesehen einwandfrei. Der Aufruf liefert das korrekte Ergebnis zurück.Es soll also im Endeffekt für jeden Raum das entsprechende Ergebnis-Json abgerufen und ausgegeben werden.
Das Problem:
Es wird, so wie es aussieht, zuerst zweimal die Positionen 1.) und 2.) ausgeführt.
Erst danach springt das Script in den SendTo-Teil und führt diesen zweimal aus.
Ich hatte das dadurch festgestellt, daß ich die Variable "Raumtext" im SendTo-Teil nochmals hatte ausgeben lassen und folgende Ausgabe bekam:23:06:34.881 info javascript.0 (643292) Start javascript script.js.common.test103 23:06:34.883 info javascript.0 (643292) script.js.common.test103: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 23:06:34.886 info javascript.0 (643292) script.js.common.test103: EG.BZ 23:06:34.886 info javascript.0 (643292) script.js.common.test103: INT0000002:1 23:06:34.886 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.BZ.P 23:06:34.886 info javascript.0 (643292) script.js.common.test103: EG.WZ 23:06:34.886 info javascript.0 (643292) script.js.common.test103: INT0000004:1 23:06:34.886 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.WZ.P 23:06:34.924 info javascript.0 (643292) script.js.common.test103: {'result':{'P2_ENDTIME_THURSDAY_7':1440, ... ,'P5_TEMPERATURE_THURSDAY_10':17},'error':null} 23:06:34.924 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.WZ.P 23:06:34.949 info javascript.0 (643292) script.js.common.test103: {'result':{'P2_ENDTIME_THURSDAY_7':1440, ... ,'P5_TEMPERATURE_THURSDAY_10':17},'error':null} 23:06:34.949 info javascript.0 (643292) script.js.common.test103: 0_userdata.0.General.Heizgruppen.EG.WZ.PDie beiden JSON-Ausgaben habe ich stark eingekürzt, weil jede mehrere hundert Positionen beinhaltet.
Meine Frage ist jetzt, wie dieses seltsame Verhalten zu erklären ist und wie ich es abstellen kann.
Ich habe IoBroker jetzt seit ca. 3 Jahren laufen und auch schon jede Menge Blocklys für die verschiedensten Aufgaben erstellt, aber hier finde ich den Fehler einfach nicht.
Vielen Dank schon mal im Voraus für eure Hilfe und Mühe
Christoph
@christophh sagte in Seltsames Verhalten von "für jeden Wert aus der Liste":
Meine Frage ist jetzt, wie dieses seltsame Verhalten zu erklären ist und wie ich es abstellen kann.
Nur ein Schuss ins Blaue: vielleicht braucht der sendto-Block mehr Zeit. Setze doch mal nach diesem Block eine Pause, vielleicht klappt es dann.
-
@christophh sagte in Seltsames Verhalten von "für jeden Wert aus der Liste":
node / nodejs: 21.2.0
Falsche Version. Ungerade Versionen sind nicht "stable". Aktuell empfohlen für ioBroker ist 18.
Linux-Version: Debian Bullseye
Sollte ebenfalls aktualisiert werden.
@samson71 said in Seltsames Verhalten von "für jeden Wert aus der Liste":
@christophh sagte in Seltsames Verhalten von "für jeden Wert aus der Liste":
node / nodejs: 21.2.0
Falsche Version. Ungerade Versionen sind nicht "stable". Aktuell empfohlen für ioBroker ist 18.
Bin gerade dabei, auf 18 zu aktualisieren. Vielen Dank für den Hinweis.
Linux-Version: Debian Bullseye
Sollte ebenfalls aktualisiert werden.
Gebe ich dir recht, allerdings läuft Openmediavault noch nicht unter Debian Bookworm. Habe ich schonmal nachgesehen.
Muß also erstmal auf Bullseye bleiben, wird aber aktualisiert, sobald OMV unter Bookworm läuft.Edit:
nodejs ist jetzt auf v18.19.0 -
@christophh sagte in Seltsames Verhalten von "für jeden Wert aus der Liste":
Meine Frage ist jetzt, wie dieses seltsame Verhalten zu erklären ist und wie ich es abstellen kann.
Nur ein Schuss ins Blaue: vielleicht braucht der sendto-Block mehr Zeit. Setze doch mal nach diesem Block eine Pause, vielleicht klappt es dann.
@dr-bakterius said in Seltsames Verhalten von "für jeden Wert aus der Liste":
@christophh sagte in Seltsames Verhalten von "für jeden Wert aus der Liste":
Meine Frage ist jetzt, wie dieses seltsame Verhalten zu erklären ist und wie ich es abstellen kann.
Nur ein Schuss ins Blaue: vielleicht braucht der sendto-Block mehr Zeit. Setze doch mal nach diesem Block eine Pause, vielleicht klappt es dann.
Das war es, vielen Dank. Es reicht bei mir eine Pause von 100ms.
Damit ist das Problem gelöst
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