NEWS
SOLVED [gelöst] split is not a function
-
Hallo,
ich bin gerade dabei ein Script zu erstellen das mir den 3stündigen Trend für die Barometerdaten errechnet. Dazu habe lege ich alle 5 Minuten den Wert für den Unterschied zum vorherigen Wert in einem Datenpunkt als Liste ab-0.05,0.02,0.04,0.04,0,0.08,0.06,0,0.03,0.03,-0.02,-0.05,0.05,-0.05,0.06,0.02,-0.12,0.06,0.02,-0.04,0.07,0.04,-0.02,0.02,0.04,0.04,0.01,-0.02,0.06,0.04,-0.07,-0.11,0.11,-0.11,0,0.02,-0.02,0.05,0.02,0,0.03,0.01,0.04,-0.09,0.02,-0.04,0.03,0.06,0.1,-0.08,-0.04,0.05,0.03,0.01,0.02,0.01,0.05,0.03,0.1,0,0.01,-0.02,0.02,-0.01,-0.04,0.04,0.08,0.03,-0.05,-0.12,0.09,0.07
Diese Liste lese ich mit ein und will sie mit split zum errechnen des Trends zerlegen
function barotrend() { var tmpelements = getState(DP_BAROTREND_DATA).val.split(','); for (let i = 2; i <= ELEMENTS - 1; i++) { b_tmp = parseFloat(tmpelements[i]); A_BAROTRENDTEMPDATA.push(b_tmp); b_akt_diff = b_akt_diff + b_tmp; } A_BAROTRENDTEMPDATA.push(b_diff); b_akt_diff = b_akt_diff + b_diff; b_akt_diff = Math.round((b_akt_diff / ELEMENTS) * 100 ) / 100; setState(DP_BAROTREND_DATA, A_BAROTRENDTEMPDATA); setState(DP_BAROTREND_ALT, b); setState(DP_BAROTREND_TREND, b_akt_diff); } schedule('*/'+CRON+' * * * *', function () { barotrend(); });
Allerdings kommt spätestens nach dem zweiten Aufruf der Funktion barotrend() der Fehler
javascript.1 2019-11-05 19:49:00.018 error (2070) at Timer.processTimers (timers.js:223:10) javascript.1 2019-11-05 19:49:00.017 error (2070) at listOnTimeout (timers.js:263:5) javascript.1 2019-11-05 19:49:00.017 error (2070) at tryOnTimeout (timers.js:300:5) javascript.1 2019-11-05 19:49:00.017 error (2070) at ontimeout (timers.js:436:11) javascript.1 2019-11-05 19:49:00.017 error (2070) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7) javascript.1 2019-11-05 19:49:00.016 error (2070) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11 javascript.1 2019-11-05 19:49:00.016 error (2070) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10) javascript.1 2019-11-05 19:49:00.016 error (2070) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1279:34) javascript.1 2019-11-05 19:49:00.015 error (2070) at Object.<anonymous> (script.js.Test.Weathercalc:417:3) javascript.1 2019-11-05 19:49:00.015 error (2070) at barotrend (script.js.Test.Weathercalc:390:53) javascript.1 2019-11-05 19:49:00.014 error (2070) Error in callback: TypeError: getState(...).val.split is not a function
Node.js v10.17.0
NPM 6.11.3
js-controller: 2.0.39Kann mir einer sagen wo da der Fehler ist?
-
@CKMartens sagte:
wo da der Fehler ist?
Enthält der Datenpunkt schon ein Array ? Dann funktioniert .split(',') nicht und ist auch nicht erforderlich.
-
@paul53 sagte in split is not a function:
@CKMartens sagte:
wo da der Fehler ist?
Enthält der Datenpunkt schon ein Array ? Dann funktioniert .split(',') nicht und ist auch nicht erforderlich.
Wie muss ich dann vorgehen @paul53 ?
-
@CKMartens sagte:
Wie muss ich dann vorgehen
Ohne split() einlesen.
var tmpelements = getState(DP_BAROTREND_DATA).val;
-
@paul53 Ah... Ok, versuche ich morgen. Danke schon einmal.
-
@paul53 sagte in split is not a function:
@CKMartens sagte:
Wie muss ich dann vorgehen
Ohne split() einlesen.
var tmpelements = getState(DP_BAROTREND_DATA).val;
Hallo @paul53
leider habe ich jetzt das Problem das jetzt die Variable tmpelements als Elemente jedes Zeichen enthält. Also aus dem Wert -0.3 werden die Elemente "-", "0", "." und "3" gemacht. Der Typ des Datenpunktes ist ein Array. -
@CKMartens sagte:
Also aus dem Wert -0.3 werden die Elemente "-", "0", "." und "3" gemacht. Der Typ des Datenpunktes ist ein Array.
Dann wurde das Array an anderer Stelle als String im Datenpunkt gespeichert. Das muss korrigiert werden.
-
@paul53 sagte in split is not a function:
@CKMartens sagte:
Also aus dem Wert -0.3 werden die Elemente "-", "0", "." und "3" gemacht. Der Typ des Datenpunktes ist ein Array.
Dann wurde das Array an anderer Stelle als String im Datenpunkt gespeichert. Das muss korrigiert werden.
Hmmm, eigentlich greift nur noch ein andres Script lesend auf den DP zu. Danke für den Tip, ich mach mich da mal geziehlt auf die Suche
-
@CKMartens sagte:
ich mach mich da mal geziehlt auf die Suche
Der Typ des Datenpunktes ist ein Array.Wenn in einem Skript ein String in einen Datenpunkt vom Typ "array" geschrieben wird, erfolgt eine Warnung "wrong type ...". Im Reiter "Log" findet man dazu den Skriptnamen und die Zeilennummer.
-
@paul53 Habe es gefunden. Ein Testscript ist noch gelaufen obwohl es im eigentlich deaktiviert gewesen sein sollte.
Jetzt läuft es. Danke nochmals!