2015-12-29 4 views
0

В моем текущем проекте мы пытаемся включить связь между двумя компонентами программного обеспечения, как показано ниже. Здесь компонент Temperaturesensor (написанный в JavaSE) периодически публикует измерение датчика, написанное в MQTT JavaSE Publisher. И CalculateTemp (написанный в Nodejs) компонент подписался с использованием MQTT Nodejs и полученных данных. Моя проблема - когда данные получены в CalculateAvgTemp компонента Junk (Возможно, проблема TemperatureSensor посылает данные в byte[] и на компонентной стороне calculateAvgTemp, данные не конвертируются из byte[] .-- Как я могу преобразовать байт [] в формат JSON ????)MQTT Java-издатель и абонент Nodejs

enter image description here Метод публикации в TemperatureSensor следующим образом. Обратите внимание, что данные преобразуются в байты перед публикацией в брокером MQTT.

public void publish(String topicName, Object arg, Device deviceInfo) { 

    DataWrapper dw = new DataWrapper(); 
    dw.setObject(arg); 
    dw.setDevice(deviceInfo); 

    java.io.ByteArrayOutputStream bstream = new java.io.ByteArrayOutputStream(); 
    java.io.ObjectOutputStream st; 

    try { 
     st = new java.io.ObjectOutputStream(bstream); 
     st.writeObject(dw); 
     st.flush(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    byte[] bytes = bstream.toByteArray(); 

    try { 

     pub.publish(topicName, 0, bytes); 
    } catch (Throwable e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

По данным приемной стороне CalculateAvgTemp, код выглядит следующим образом:

var mqtt = require('mqtt'); // no count for NodeRED 
var client = mqtt.connect('mqtt://test.mosquitto.org:1883'); 
var NUM_SAMPLE_FOR_AVG = 5; 
var numSample = 0; 
var tempCelcius = 0; 
var currentAvg = 0; 
client.subscribe('tempMeasurement'); 
client.on('message', function(topic, payload) { 
    if (topic.toString() == "tempMeasurement") { 

     // Here, we may need to convert the byte[] array. 
     // But I do not know-- how can I convert byte[] array to JSON. 

     var sensorMeasurement=JSON.parse(payload); 

     if (numSample <= NUM_SAMPLE_FOR_AVG) { 
      numSample = numSample + 1; 
      if (sensorMeasurement.unitOfMeasurement == 'F') { 
       tempCelcius = ((sensorMeasurement.tempValue - 32) * (5/9)); 
      } else { 
       tempCelcius = sensorMeasurement.tempValue; 
      } 
      currentAvg = parseFloat(currentAvg) + parseFloat(tempCelcius); 
      if (numSample == NUM_SAMPLE_FOR_AVG) { 
       currentAvg = currentAvg/NUM_SAMPLE_FOR_AVG; 
       var avgTemp = { 
        "tempValue" : parseFloat(currentAvg), 
        "unitOfMeasurement" : sensorMeasurement.unitOfMeasurement 
       }; 
       client.publish('roomAvgTempMeasurement', JSON 
         .stringify(avgTemp)); 
       console.log("Publishing Data roomAvgTempMeasurement "); 
       numSample = 0; 
       currentAvg = 0; 
      } 
     } 
    } 
}); 

есть возможно дублирование вопроса MQTT communication between nodejs and java Но, предложенное решение не работает, или я не являюсь способный четко понять это, что может решить проблему.

ответ

1

ObjectOutputStream преобразует объект в поток объектов Serialized Java Object, это внутренняя запись объекта Java и не может быть понята ничем другим (легко).

Чтобы создать объект JSON (или создать его вручную как строку, указанную в связанном вопросе), необходимо использовать библиотеку, например, одну из json.org, которая содержит то же состояние, что и объект DataWrapper, а затем JSON вывода объекта в виде строки, которая может быть отправлена ​​как байтовая полезная нагрузка сообщения MQTT.

+0

Еще раз спасибо за предложения. Я частично решил проблему сейчас. Теперь я получаю не мусорные символы, но получаю результат в '�� * {" tempValue ": 25.0," unitOfMeasurement ":" C "}' (некоторые нежелательные символы перед значениями JSON. Каким может быть решение из этого ??? – Pankesh

+0

Мы решили эту проблему сейчас, извлекая данные JSON. \t \t \t 'bytes = new String (байты,« UTF-8 »). substring (7) .getBytes();' – Pankesh

Смежные вопросы