MQTT Problem

themanfrommoon

Active member
Moin,

hier tummeln sich ja einige Leute, die sich offenbar mit MQTT auskennen.
Ich habe ein Thema mit MQTT, dass zwar nichts mit einem Ardumower zu tun hat, aber vielleicht kann mir trotzdem jemand helfen? (Am Ende tangiert es Alfred ein wenig)

Kurzer Umriss:
Ich habe einen Shelly und will diesen von einem ESP8266 fernsteuern.
Das klappt auch 4x und dann aber nicht mehr.
Woran kann das liegen, und wie kann ich es debuggen?

Das ist der Code:
Code:
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "23456";
const char* password =  "8765432345678";
const char* mqttServer = "192.168.178.10";
int mqttPort = 1883;
const char* mqttUser = "";
const char* mqttPassword = "";
constexpr uint8_t JSON_MEMORY {150};
StaticJsonDocument<JSON_MEMORY> doc;
char JSONmessageBuffer[JSON_MEMORY];

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);
  delay(200);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("Connected to the WiFi network");

  client.setServer(mqttServer, mqttPort);

  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP32Client", mqttUser, mqttPassword )) {

      Serial.println("connected");

    } else {

      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);

    }
  }

}

void loop() {

  JsonObject statement = doc.to<JsonObject>();
  statement["id"] = "req1";
  statement["src"] = "Bootsschuppen/Alfred/resp";
  statement["method"] = "Switch.set";
  JsonObject params = statement.createNestedObject("params");
  params["id"] = 0;
  params["on"] = true;
  params["toggle_after"] = 10;

  serializeJsonPretty(doc, Serial);
  serializeJson(doc, JSONmessageBuffer);
  Serial.println();
  Serial.println("Sending message to MQTT topic..");
  Serial.println(JSONmessageBuffer);
  if (client.publish("Bootsschuppen/Alfred/rpc", JSONmessageBuffer) == true) {
    Serial.println("Success sending message");
  } else {
    Serial.println("Error sending message");
  }

  client.loop();
  Serial.println("-------------");


  delay(20000);

}

Das funktioniert 4x ....und danach nicht mehr.
Der serielle Monitor zeigt folgendes:
Code:
Connecting to WiFi.......
Connected to the WiFi network
Connecting to MQTT...
connected
{
  "id": "req1",
  "src": "Bootsschuppen/Alfred/resp",
  "method": "Switch.set",
  "params": {
    "id": 0,
    "on": true,
    "toggle_after": 10
  }
}
Sending message to MQTT topic..
{"id":"req1","src":"Bootsschuppen/Alfred/resp","method":"Switch.set","params":{"id":0,"on":true,"toggle_after":10}}
Success sending message
-------------
{
  "id": "req1",
  "src": "Bootsschuppen/Alfred/resp",
  "method": "Switch.set",
  "params": {
    "id": 0,
    "on": true,
    "toggle_after": 10
  }
}
Sending message to MQTT topic..
{"id":"req1","src":"Bootsschuppen/Alfred/resp","method":"Switch.set","params":{"id":0,"on":true,"toggle_after":10}}
Success sending message
-------------
{
  "id": "req1",
  "src": "Bootsschuppen/Alfred/resp",
  "method": "Switch.set",
  "params": {
    "id": 0,
    "on": true,
    "toggle_after": 10
  }
}
Sending message to MQTT topic..
{"id":"req1","src":"Bootsschuppen/Alfred/resp","method":"Switch.set","params":{"id":0,"on":true,"toggle_after":10}}
Success sending message
-------------
{
  "id": "req1",
  "src": "Bootsschuppen/Alfred/resp",
  "method": "Switch.set",
  "params": {
    "id": 0,
    "on": true,
    "toggle_after": 10
  }
}
Sending message to MQTT topic..
{"id":"req1","src":"Bootsschuppen/Alfred/resp","method":"Switch.set","params":{"id":0,"on":true,"toggle_after":10}}
Error sending message
-------------
{
  "id": "req1",
  "src": "Bootsschuppen/Alfred/resp",
  "method": "Switch.set",
  "params": {
    "id": 0,
    "on": true,
    "toggle_after": 10
  }
}
Sending message to MQTT topic..
{"id":"req1","src":"Bootsschuppen/Alfred/resp","method":"Switch.set","params":{"id":0,"on":true,"toggle_after":10}}
Error sending message
-------------
{
  "id": "req1",
  "src": "Bootsschuppen/Alfred/resp",
  "method": "Switch.set",
  "params": {
    "id": 0,
    "on": true,
    "toggle_after": 10
  }
}
Sending message to MQTT topic..
{"id":"req1","src":"Bootsschuppen/Alfred/resp","method":"Switch.set","params":{"id":0,"on":true,"toggle_after":10}}
Error sending message
-------------
{
  "id": "req1",
  "src": "Bootsschuppen/Alfred/resp",
  "method": "Switch.set",
  "params": {
    "id": 0,
    "on": true,
    "toggle_after": 10
  }
}
Sending message to MQTT topic..
{"id":"req1","src":"Bootsschuppen/Alfred/resp","method":"Switch.set","params":{"id":0,"on":true,"toggle_after":10}}
Error sending message
-------------

In der mosquitto.log finde ich folgendes:
Code:
1689084649: New client connected from 192.168.178.33 as paho9079983062186 (c1, k60, u'').
1689084980: Socket error on client paho9079983062186, disconnecting.
1689085020: New connection from 192.168.178.33 on port 1883.
1689085020: New client connected from 192.168.178.33 as paho9079983062186 (c1, k60, u'').
1689085038: New connection from 192.168.178.68 on port 1883.
1689085038: New client connected from 192.168.178.68 as ESP32Client (c1, k15, u'').
1689085060: New connection from 192.168.178.68 on port 1883.
1689085060: Client ESP32Client already connected, closing old connection.
1689085060: Socket error on client ESP32Client, disconnecting.
1689085060: New client connected from 192.168.178.68 as ESP32Client (c1, k15, u'').
1689085100: Socket error on client ESP32Client, disconnecting.
1689085111: Socket error on client paho9079983062186, disconnecting.
1689085117: New connection from 192.168.178.33 on port 1883.
1689085117: New client connected from 192.168.178.33 as paho9079983062186 (c1, k60, u'').
1689085130: Socket error on client paho9079983062186, disconnecting.
1689085193: New connection from 192.168.178.33 on port 1883.

Der ESP hat die IP 192.168.178.68

Da scheint doch irgendwie die MQTT Verbindung nicht richtig aufgebaut/beendet zu werden?!

Hat jemand eine Idee?
Vielleicht auch eine Idee wo ich sonst fragen könnte? (Im Arduino Forum hat so ziemlich niemand Ahnung von MQTT)

Vielen Dank ud beste Grüße,
Chris
 
Oben