У меня есть микроконтроллер с термостатом, который отправляет свои данные через Raspberry Pi на мой компьютер с использованием протокола MQTT. Кура установлена и работает на малине.Как подписаться на тему MQTT и распечатать полученные сообщения на Eclipse (Java)
У меня нет проблем с получением данных о Putty, но теперь мне нужно получить его на Eclipse, чтобы я мог разработать программу.
мне удалось опубликовать на эту тему с помощью затмения, используя Pāho с помощью следующего кода (который является адаптацией этой другой теме Subscribe and Read MQTT Message Using PAHO):
package publish;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public class PublishSemInterface {
MqttClient client;
public PublishSemInterface() {}
public static void main(String[] args) {
new PublishSemInterface().doDemo();
}
public void doDemo() {
try {
client = new MqttClient("tcp://192.168.0.39:1883", "user");
client.connect();
MqttMessage message = new MqttMessage();
message.setPayload("Published message".getBytes());
client.publish("sensor/temp/out", message);
client.disconnect();
} catch (MqttException e) {
e.printStackTrace();
}
}
}
Но подписываться это время боль. Я попытался с помощью ответа на эту тему я уже упоминал выше, внедрение MqttCallback интерфейса:
public class PublishSemInterface implements MqttCallback
Добавление setCallback после подключения к клиенту и методов требуется интерфейс (мне нужно только messageArrived):
client.setCallback(this);
@Override
public void connectionLost(Throwable cause) {}
@Override
public void messageArrived(String topic, MqttMessage message)
throws Exception {
System.out.println(message);
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {}
Но это не сработало. Я также попытался с помощью ответа от следующей темы: How to read data from MQTT in Eclipse Paho?
public static void main(String[] args) {
MqttClient client;
MqttConnectOptions conn;
try {
client = new MqttClient("tcp://192.168.0.39:1883", "user");
client.connect();
client.setCallback(new MqttCallback() {
public void connectionLost(Throwable cause) {}
public void messageArrived(String topic,
MqttMessage message)
throws Exception {
System.out.println(message.toString());
}
public void deliveryComplete(IMqttDeliveryToken token) {}
});
client.subscribe("sensor/temp/in");
} catch (MqttException e) {
e.printStackTrace();
}
}
Кроме того, что он не работает. В обоих случаях, когда я запускаю код, консоль активна, но когда микроконтроллер отправляет данные (которые появляются на Putty), вместо того, чтобы печатать, программа прекращается. Похоже, что методы messageArrived не вызываются.
Может ли кто-нибудь помочь мне с подпиской и печатью на консоли Eclipse?
Разница в тематике объясняется тем, что коды взяты из моих подписных и публичных программ. «датчик/темп/выход» предназначен для приема данных, а «датчик/темп/вход» - для отправки данных. Что касается дополнительных параметров MQTT, я еще не использовал их, потому что сейчас я сосредоточен на подписке и показе сообщений соответствующим образом. Как только я преуспею, я обязательно добавлю эти параметры к соединениям. – Ernani