es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Incrementar 2 variables en el nodo paralelo de Node-RED

Estoy intentando crear un script que cree 2 variables e incremente cada una de ellas según una condición. El actualNetWeight se recibe en tiempo real mediante una conexión MQTT a un servidor y los valores se muestran en un gráfico de líneas. Cuando este valor es mayor o igual a 0.500, debo contar esa entrada del artículo como un artículo “ok”, y si es menor que 0.500, debo contarlo como un artículo “insuficiente”. El problema es que inicializando estas variables como lo tengo en mi código, las reinicializa a 0 cada vez que se recibe un nuevo valor, haciendo que los contadores vayan solo de 0 a 1 cuando se cumple la condición, y vuelvan a 0 cuando no se cumple la condición. Así que en términos lógicos, este script funciona, pero solo hace la mitad de su trabajo. He intentado muchas formas diferentes de abordar esto, pero parece que no logro obtener los resultados necesarios. También he buscado en los foros de Node-RED pero prácticamente no hay información útil sobre esta herramienta en línea en absoluto.

var ok = 0;
var under = 0;
var scartoTotale;
var actualNetWeight = msg.payload.actualNetWeight.value;
var numeroPezziTot = msg.payload.identity;

if(actualNetWeight >= 0.500)
{
    ok++;
}
else
{
    under++;
    scartoTotale += (0.500 - actualNetWeight);
}

msg.payload.ok = ok;
msg.payload.under = under;
msg.payload.scartoTotale = scartoTotale;
return msg;

El ‘msg’ es estándar para Node-RED y el payload es la respuesta que obtengo del servidor, de donde recibo mis datos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver el problema de que las variables se reinicien a 0 cada vez que se recibe un nuevo valor, puedes mover la inicialización de las variables fuera del script y usar variables de contexto en su lugar. Las variables de contexto son persistentes a lo largo de diferentes mensajes y se pueden acceder y modificar desde varios nodos.

    Puedes inicializar las variables de contexto en un nodo separado, por ejemplo, un nodo de función que se ejecuta solo una vez al comienzo del flujo:

    // Inicializar las variables de contexto
    context.set('ok', 0);
    context.set('under', 0);
    context.set('scartoTotale', 0);
    

    Luego, en el nodo de script donde se verifica el valor de actualNetWeight, puedes recuperar y actualizar las variables de contexto:

    var ok = context.get('ok');
    var under = context.get('under');
    var scartoTotale = context.get('scartoTotale');
    var actualNetWeight = msg.payload.actualNetWeight.value;
    var numeroPezziTot = msg.payload.identity;
    
    if (actualNetWeight >= 0.500) {
        ok++;
    } else {
        under++;
        scartoTotale += (0.500 - actualNetWeight);
    }
    
    // Actualizar las variables de contexto
    context.set('ok', ok);
    context.set('under', under);
    context.set('scartoTotale', scartoTotale);
    
    msg.payload.ok = ok;
    msg.payload.under = under;
    msg.payload.scartoTotale = scartoTotale;
    return msg;
    

    Con este enfoque, las variables mantendrán sus valores a lo largo de diferentes mensajes, lo que te permitirá contar correctamente los elementos “ok” y “under”.

Comments are closed.