Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

415
Views
Problemas al pasar una matriz 2D en NodeRed

Estoy usando node-red (JS) para tomar datos de un sensor que transmite a través de MQTT. Los datos del sensor se analizan como una matriz de 4 valores [a, b, c, d] relacionados con 4 mediciones diferentes.

Estos datos se almacenan en una matriz global denominada dataArray, que es una matriz bidimensional.

 dataArray[0] = [a, b, c, d];

de modo que

 dataArray[i][0] = Temperature dataArray[i][1] = VibrationX dataArray[i][2] = VibrationY dataArray[i][3] = VibrationZ

La forma estándar en que accedería al contenido de esta matriz sería

 dataArray[i][j]

Sin embargo, aparece el error "No se puede acceder a la propiedad de indefinido" cuando intento leer la matriz para calcular los promedios.

Ok, entonces eliminé la segunda dimensión e intenté acceder a dataArray[0] - Esto devolvió 'array[0]' una matriz vacía.

Luego intenté devolver el dataArray tal como se pasó a la función: es decir

 function average(data) { return data; } average(dataArray);

esto también devolvió array[0].

Finalmente especifiqué manualmente la matriz dentro de la función.

 dataArray = [[a, b, c, d], [a1, b1, c1, d1]];

y esto devolvió el resultado esperado.

Creo que tiene algo que ver con la forma en que la matriz se pasa a la definición, o la forma en que el objeto se almacena en global antes del acceso, pero ninguna búsqueda en Google me ha ayudado a resolver esto.

código:

 function Average(data) { var temperatureValue = 0; var vibXValue = 0; var vibYValue = 0; var vibZValue = 0; for (var i = 0, n = data.length; i < n; i++) { temperatureValue = data[i][0] + temperatureValue; vibXValue = data[i][1] + vibXValue; vibYValue = data[i][2] + vibYValue; vibZValue = data[i][3] + vibZValue; } //Average values from each array element var msg1 = []; //msg1 = [temperatureValue / n, vibXValue / n, vibYValue / n, vibZValue / n] //DEBUG - Send dataArray straight through, and it's length msg1 = [data, data.length]; return msg1; } var dataArray = global.get("dataArray")||[]; var sensorData = msg.payload; //This is the input from the Cron node. As long as the input to the function isn't "ClearArray" then push new MQTT messages to the dataArray. if (msg.payload != "ClearArray") { dataArray.push(sensorData); } else if (dataArray.length != 0) { msg1 = Average(dataArray); msg2 = Peak(dataArray); msg.payload = [msg1, msg2]; //global.set("dataArray",[]); return msg; }
about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!