Mqtt : packetId reste à 0, publication non reçues

Bonjour à tous !
J'ai plusieurs esp chez moi (nodemcuV1) qui envoient leurs info via mqtt.

J'ai essayé d'en refaire un avec un dht11, le code marchait, l'esp aussi car je l'avais au départ installé chez un ami.

Quand je le lance chez moi les publications ne sont pas reconnues par le serveur mqtt et le packetId reste à 0, signe que mqtt ne s'est pas abonné au topic.

Mon code :

#include <ESP8266WiFi.h>
#include <Ticker.h>
#include <AsyncMqttClient.h>
#include "DHT.h"

#define WIFI_SSID "Freebox-XXXXX"
#define WIFI_PASSWORD "XXXXXXX"

// Node Red on Mosquitto MQTT Broker
#define MQTT_HOST IPAddress(192, 168, 1, 30)
#define MQTT_PORT 1883


//MQTT Topics
#define MQTT_PUB_TEMP "esp/dht11/temperature"
#define MQTT_PUB_HUM "esp/dht11/humidity"

// Digital pin connected to the DHT sensor
#define DHTPIN 14

#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);

float temp;
float hum;

AsyncMqttClient mqttClient;
Ticker mqttReconnectTimer;

WiFiEventHandler wifiConnectHandler;
WiFiEventHandler wifiDisconnectHandler;
Ticker wifiReconnectTimer;

unsigned long previousMillis = 0; 
const long interval = 5000;

void connectToWifi() {
Serial.println("Connecting to Wi-Fi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
}

void onWifiConnect(const WiFiEventStationModeGotIP& event) {
Serial.println("Connected to Wi-Fi.");
connectToMqtt();
}

void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
Serial.println("Disconnected from Wi-Fi.");
mqttReconnectTimer.detach(); 
wifiReconnectTimer.once(2, connectToWifi);
}

void connectToMqtt() {
Serial.println("Connecting to MQTT...");
mqttClient.connect();
}

void onMqttConnect(bool sessionPresent) {
Serial.println("Connected to MQTT.");
Serial.print("Session present: ");
Serial.println(sessionPresent);
}

void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
Serial.println("Disconnected from MQTT.");

if (WiFi.isConnected()) {
mqttReconnectTimer.once(2, connectToMqtt);
}
}

void onMqttPublish(uint16_t packetId) {
Serial.print("Publish acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
}

void setup() {
Serial.begin(115200);
Serial.println();

dht.begin();

wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);


mqttClient.onConnect(onMqttConnect);
mqttClient.onDisconnect(onMqttDisconnect);
mqttClient.onPublish(onMqttPublish);
mqttClient.setServer(MQTT_HOST, MQTT_PORT);
// If your broker requires authentication (username and password), set them below
mqttClient.setCredentials("nodemcu_X", "XXXXXXX");
connectToWifi();
}

void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
//Sauvegarde le temps
previousMillis = currentMillis;
hum = dht.readHumidity();
temp = dht.readTemperature();

if (isnan(temp) || isnan(hum)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
} 
delay(100);

// Publish an MQTT message on topic esp8266/dht/temperature
uint16_t packetIdPub1 = mqttClient.publish(MQTT_PUB_TEMP, 1, true, String(temp).c_str()); 
Serial.printf("Publishing on topic %s at QoS 1, packetId: %i ", MQTT_PUB_TEMP, packetIdPub1);
Serial.printf("Message: %.2f \n", temp);

// Publish an MQTT message on topic esp8266/dht/humidity
uint16_t packetIdPub2 = mqttClient.publish(MQTT_PUB_HUM, 1, true, String(hum).c_str()); 
Serial.printf("Publishing on topic %s at QoS 1, packetId : %i ", MQTT_PUB_HUM, packetIdPub2);
Serial.printf("Message: %.2f \n", hum);
}
}

Voila le retour de l'ide :

Publishing on topic esp/dht11/humidity at QoS 1, packetId : 0 Message: 37.00

Connecting to MQTT...

Disconnected from MQTT.

Connecting to MQTT...

Disconnected from MQTT.

Publishing on topic esp/dht11/temperature at QoS 1, packetId: 0 Message: 20.00

Publishing on topic esp/dht11/humidity at QoS 1, packetId : 0 Message: 37.00

Quelqu'un saurait-il m'aiguiller ?

Joyeuses fêtes de fin d'années à tous ! :partying_face: :santa:

Vous voyez le

Oui je le vois ?

J'ai trouvé, le problème ne venait pas du code de l'esp.

J'avais fait un nouvel utilisateur sur mqtt pour l'esp et pour une raison qui m'échappe il n'était pas reconnu alors que présent dans le fichier passwd et mosquitto avait bien été redémarré après l'ajout de l'user.

Dans le fichier de configuration de mqtt j'ai autorisé les utilisateurs anonymes. Le serveur mqtt a alors directement reçu le message et envoyé sa confirmation de réception des publications. Et les N° de packetId étaient cette fois ci correctement incrémenté côté IDE.

J'ai repassé MQTT en
allow anonyous false
et les publications de l'esp sont toujours bien réceptionnées côté serveur mais cette fois ci avec mon nouvel utilisateur.

C'est assez bizarre je pense que je passe à côté d'un truc côté mqtt et de la confirmation de réception.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.