MQTT-Problem

Hallo Frank,
da fehlt noch mehr, zb Node_Name.

Ich versuche mal…

Nachtrag,
schau dir mal das Beispiel an :

Da LED schalten. In deinem Code fehlt was.

void reconnect() {
while (!client.connected()) {
Serial.println(„Reconnecting MQTT…“);
if (!client.connect(„ESP8266Client“)) {
Serial.print(„failed, rc=“);
Serial.print(client.state());
Serial.println(" retrying in 5 seconds");
delay(5000);
}
}
client.subscribe("/home/data");
Serial.println(„MQTT Connected…“);
}

ich habe die subscribes im void_setup. das habe ich auch aus einen Beispiel im INET gefunden - ist es dort falsch platziert ?

habe ich im config übersehen …

const char* Node_Name = „ESP_MQTT_Test“; // Nodename eingeben *****************************

@Kai: nein, die serialsprints kommen nicht - wenn die subscribes falsch gesetzt sind, wäre das ja auch klar

Hallo Frank,
mal sehen ob ich Morgen noch was probieren kann, muss mal meine alten Dateien durchsuchen.
Seit es Tasmota so gibt, mache ich nicht mehr viel mit Arduino.:confused:
Aber, was möchtest du genau mit eigenem Code machen ?
Für einen Doppelschalter sollte doch Tasmota gut gehen.

ja, für Doppelschalter werde ich die Shellies einsetzen - bei den selbst gebauten Modulen möchte ich eine etwas komplexere Logik einbauen und den einen oder anderen Ein-/Ausgang zusätzlich benutzen.

Danke schon mal für dein Interesse und Engagement.

Es läuft - die subscribes waren im Setup falsch platziert - vielen dank für die Hilfe

Grüße Frank

Ich hab das gleiche Problem, das MQTT mit dem Befehl

RequestAction(17874, "OPEN");

kommt zwar im MQTT Server Debug

"MQTT:TX:PUBLISH | Topic: myRelay-001/command, Payload: CLOSE"

aber es passiert nichts.

Die mqttServer IP auf den Raspberry gesetzt und mit

mosquitto_pub -t "/myRelay-001/command" -u "myuser" -P "mypassword" -m "CLOSE"

funktioniert einwandfrei


#Code des ESP8266
#include <PubSubClient.h>
#include <ESP8266WiFi.h>

#define WIFI_SSID "xxxxxxxxx"
#define WIFI_PASSWORD "xxxxxxxxxx"

char mqttServer[]  = "IP-Symcon Server IP oder Raspberry IP"; //change it for your MQTT server IP or network name
int mqttPort  = 1883; //1883 is the default port for MQTT. Change if necessary
char deviceId[]  = "myRelay-001"; //every device should have a different name
char topic[]  = "/myRelay-001/command"; //the topic should be different for each device as well
char mqttUser[]  = "";
char mqttPassword[]  = "";

WiFiClient wifiClient;

PubSubClient client(wifiClient);

int status = WL_IDLE_STATUS;

void setup() {
  Serial.begin(9600);
  delay(10);
  Serial.println("Let' start now");
}

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

unsigned long lastOperation;
const long MIN_OPERATION_INTERVAL = 2000L;

const String openString = "OPEN";
const String closeString = "CLOSE";
byte close[] = {0xA0, 0x01, 0x01, 0xA2};
byte open[] = {0xA0, 0x01, 0x00, 0xA1};

void callback(char* topic, byte* payload, unsigned int length) {
    signed long now = millis();
    long deltaTime = now - lastOperation;
    if (deltaTime > MIN_OPERATION_INTERVAL) {
      String message = "";
      for (int i = 0; i < length; i++) {
        message = message + (char)payload[i];
      }
      if(message == openString) { 
        Serial.println("Performing open command");
        Serial.write(open, sizeof(open)); 
        lastOperation = now;
      } else if(message == closeString) {
         Serial.println("Performing close command");
        Serial.write(close, sizeof(close)); 
        lastOperation = now;
      }
  } else {
    Serial.println("Operation denied right now. Try again later.");
  }
}

void connect() {
  while (!client.connected()) {
    status = WiFi.status();
    if ( status != WL_CONNECTED) {
      WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.print("Connected to ");
      Serial.println(WIFI_SSID);
    }
    client.setServer(mqttServer, mqttPort);
    client.setCallback(callback);
    if (client.connect(deviceId, mqttUser, mqttPassword)) {
      client.subscribe(topic);
      Serial.println("Connected to MQTT Server");
    } else {
      Serial.print("[FAILED] [ rc = ");
      Serial.print(client.state() );
      Serial.println(" : retrying in 5 seconds]");
      delay(5000);
    }
  }
}

Was könnte ich übersehen haben?