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.

Actualización del proyecto: Conectando el broker Mqtt (portátil) con dispositivos android cliente de IoT.

1.[RESUELTO] Como recién llegado a este campo, tengo lagunas fundamentales en relación con la OOP en Java. Por lo tanto, estoy intentando obtener el valor de dangerLevel del método calculateDangerLevel, para almacenarlo junto con otros valores en una base de datos mysql. Hasta ahora, he logrado tomar los valores del payload: y, x, batería, humo, gas, temperatura, uv. Y necesito calcular los valores de los sensores para evaluar el nivel de peligro. El problema es que no puedo tomar el valor de dangerLevel, en su lugar, siempre obtengo null.

2.[RESUELTO] Estoy intentando tomar el tema publicado por el cliente, para almacenarlo en la variable de cadena “topicCheck” y luego ponerlo en línea: result.updateString(2, “topicCheck”); para distinguir los temas del mensaje recibido y ponerlos en una base de datos mysql. El problema es que no sé cómo obtener el valor del tema publicado y ponerlo en result.updateString(2, “topicCheck”);.

  1. ¡Gracias de antemano!
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    1. Obtener el valor de DangerLevel

    Para obtener el valor de dangerLevel del método calculateDangerLevel, es necesario llamar al método y almacenar el resultado en una variable. Para esto, se puede modificar el método parseMqttPayload de la siguiente manera:

    private static void parseMqttPayload(String payload) {
    
        ...
        // Parse the sensor readings
        double smokeSensorReading = -1;
        try { smokeSensorReading = Double.valueOf(payloadTokens[3]); }
        catch (NumberFormatException e) {}
    
        double gasSensorReading = -1;
        try { gasSensorReading = Double.valueOf(payloadTokens[4]); }
        catch (NumberFormatException e) {}
    
        double tempSensorReading = -1;
        try { tempSensorReading = Double.valueOf(payloadTokens[5]); }
        catch (NumberFormatException e) {}
    
        double uvSensorReading = -1;
        try { uvSensorReading = Double.valueOf(payloadTokens[6]); }
        catch (NumberFormatException e) {}
    
        dangerLevel = calculateDangerLevel(smokeSensorReading,gasSensorReading,tempSensorReading,uvSensorReading);
    
        LOGGER.warn("y: {}", y);
        LOGGER.warn("x: {}", x);
        LOGGER.warn("battery: {}", battery);
        LOGGER.warn("smoke: {}", smokeSensorReading);
        LOGGER.warn("gas: {}", gasSensorReading);
        LOGGER.warn("temp: {}", tempSensorReading);
        LOGGER.warn("uv: {}", uvSensorReading);
        LOGGER.warn("danger: {}",dangerLevel);
    
        ...
    }
    

    Esto almacenará el valor de dangerLevel en la variable estática dangerLevel, que se puede utilizar para almacenar el valor en la base de datos MySQL.

    2. Obtener el tema publicado

    Para obtener el tema publicado del cliente, es necesario modificar la expresión lambda en el método subscribe. Se puede utilizar el parámetro topic para obtener el tema publicado y almacenarlo en la variable topicCheck. Así es como se puede modificar el método subscribe:

    subscriber.subscribe(topicProperty, (topic, msg) -> {
        byte[] payload = msg.getPayload();
        LOGGER.debug("Message received: topic={}, payload={}", topic, new String(payload));
        parseMqttPayload(new String(payload));
    
        //Calculate time of the event
        LocalDateTime localDate = LocalDateTime.now();
        //System.out.println(localDate);
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yy h:mm:ss");
        // System.out.println(dtf.format(localDate));
        timeEvent =dtf.format(localDate);
    
        //Distinguish topics
        topicCheck = topic;
    });
    

    Esto almacenará el tema publicado en la variable estática topicCheck, que se puede utilizar para almacenar el valor en la base de datos MySQL.

    3. Conclusión

    Al modificar el método parseMqttPayload y la expresión lambda en el método subscribe como se describe anteriormente, debería ser posible obtener el valor de dangerLevel y el tema publicado del cliente, y almacenarlos en la base de datos MySQL.

Comments are closed.