我正在开发Android应用。在这个应用程序中,我使用MQTT服务器来控制家庭设备与Wifi家庭自动化。后端团队使用Adafruit IO进行MQTT服务器连接。我不熟悉Adafruit IO和MQTT客户端代码。请帮助我使用Adafruit IO MQTT API。
后台应用如何连接到服务器,在数据库中注册设备?还要获取从服务器返回的IOT ID,密钥和提要。
这些细节必须提供给设备并保存。使用这些详细信息,该应用程序将能够订阅和发布与该设备相关的任何更新。
答案 0 :(得分:0)
请阅读文件
Adafruit IO是一个使数据有用的系统。我们的重点是易用性,并允许简单的数据连接,只需很少的编程。
IO包括client libraries,它们包含我们的REST和MQTT API。 IO建立在Ruby on Rails和Node.js。
之上MQTT或消息队列遥测传输是Adafruit IO支持的设备通信协议。使用MQTT库或客户端,您可以发布和订阅源以发送和接收订阅源数据。
答案 1 :(得分:0)
出于测试目的,您可以使用MQTT.fx软件并将其安装在您的PC上。MQTT.fx download
进入设置并提供经纪人详细信息(adafruitt.io)并在MQTT中提供connect.So,您的经纪人是服务器,发布者和订阅者都是客户。发布者和订阅者使用主题名称交换数据。
在Android中,我可以为您提供MQTT客户端(发布者和订阅者)的示例代码
1.创建Android客户端,如下所示 创建客户端后,使用正确的客户端ID指定客户端的保持活动和超时。如果要发布和订阅,请在应用程序中使用。您可以考虑创建2个MQTT客户端实例。
mpub = new MqttAndroidClient(context,
mqttBrokerURL, PublisherClientID, new MemoryPersistence())
MqttConnectOptions options = null;
options = new MqttConnectOptions();
options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);
options.setConnectionTimeout(60);
options.setKeepAliveInterval(120);
options.setCleanSession(true);
修改您的发布和订阅主题,假设您必须发布,您可以设置有效负载。然后发布数据。
messagePublisher.setPayload((msg.toString()).getBytes());
try {
mpub.connect(options, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken iMqttToken) {
try {
mpub.publish(Topic,
messagePublisher.getPayload(), Qos, retain);
} catch (MqttException | NullPointerException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(IMqttToken iMqttToken_p, Throwable
throwable) {
disconnect();
}
});
} catch (MqttException | NullPointerException ex) {
}
//上面的代码可用于将数据发布到客户端
3.对于订阅创建新的MQTT客户端,请执行所有常规设置(保留 有效,超时,加密,用户名,密码),最后设置回调和 实现MQTT回调以获取重写函数。
// subscribe refer this method :
SimpleClient(){
try {
client = new MqttClient(MQTT_BROKER, "myID");
client.connect();
client.setCallback(this);
client.subscribe("my/subscription/topic");
} catch (MqttException e) {
e.printStackTrace();
}
}
public void messageArrived(String s, MqttMessage mqttMessage) throws
Exception {
System.out.println("Here I am");
// get subscribed mssg here
}
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
// not needed
}
public void connectionLost(Throwable throwable) {
}
}
有关详细信息,请参阅eclipse paho
供参考:
您需要使用以下详细信息将MQTT客户端连接到Adafruit IO:
**Host**: io.adafruit.com
**Port**: 1883 or 8883 (for SSL encrypted connection)
**Username**: your Adafruit account username (see the accounts.adafruit.com
**Password**: your Adafruit IO key (click the AIO Key button on a dashboard
find the key)
Adafruit IO's MQTT API exposes feed data using special topics. You can
publish a new value for a feed to its topic, or you can subscribe to a
feed's topic to be notified when the feed has a new value. Anyone of the
following topic forms is valid for a feed:
(username)/feeds/(feed name or key)
(username)/f/(feed name or key)