knolleary / pubsubclient

A client library for the Arduino Ethernet Shield that provides support for MQTT.
http://pubsubclient.knolleary.net/
MIT License
3.78k stars 1.46k forks source link

How to select #962

Closed bil7317 closed 1 year ago

bil7317 commented 1 year ago

Issue:

I am using RabbitMQ as message-broker and want to send data through multiple devices. I am able to send data to a specific routing key (Queue) but it must be bind with default "Exchange". I want to send data to "Exchange" of my choice. I am able to select routing key/ queue through >client.connect("khan", mqtt_user, mqtt_pass) and >client.publish("khan",jsonStr,2);

I am using ESP32 usign Arduino IDE Broker: RabbitMQ

#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>

const char* ssid = "XXXXXXXX";
const char* password = "XXXXXXXX";
const char* mqtt_server = "XXX.XX.X.XX"; 
const char* mqtt_user = "XXXX";
const char* mqtt_pass= "XXXX"; 
//Stream str[15]; 
unsigned int x;

WiFiClient espClient;
PubSubClient client(espClient);

void callback(char* topic, byte* payload, unsigned int length) {
  // delay(1000);
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  Serial.println();

  //Publish the updated payload
  //client.publish("mq2_mqtt", "My Message from CB",true);

}

void setup_wifi() 
{
  // Connecting to a WiFi network
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  //client.beginPublish("khan",x,true);
}

void reconnect() 
{
  // Loop until we're reconnected
  Serial.println("In reconnect...");
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("khan", mqtt_user, mqtt_pass)) 
    {
      Serial.println("connected");
    } 
    else 
    {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

void setup() 
{ 
  x=60;
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  //client.beginPublish("khan",x,true);
  //client.subscribe("khan");

}

void loop() 
{
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  delay(5000);
  DynamicJsonDocument doc(1024);
  JsonObject obj=doc.as<JsonObject>();
  float temp=25.05;
  //float humid=dht.readHumidity();
  doc["Temp"]= temp;
  //doc["Humid"]= humid;
  char jsonStr[60];
  serializeJson(doc,jsonStr);
  Serial.print(jsonStr);
  Serial.println();
  client.publish("khan",jsonStr,2);
  delay(100);

}