Esp8266 mqtt,html Anfänger brauche Hilfe

Moin,
ich hab ein Problem
ich möchte gerne ein Relais mit mqtt und einem Link steuern also z.B. "123.456.789.000/?ON"

Entweder es Funktioniert MQTT oder über Link beides nicht.

#include <ESP8266WiFi.h>
#include <PubSubClient.h>`
//---------------------BASIC SETTINGS ---------------------------
const char* ssid = "wlan"; //WiFi Name
const char* password = "12345"; //WiFi Password
const char* mqtt_server = "123.456.789.000";
int relais_pin = 14; //Pin Relais
String switch1;
String strTopic;
String strPayload;

//---------------------BASIC SETTINGS ---------------------------

WiFiServer server(80);
WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {

  delay(10);
  // WiFi connect
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  payload[length] = '\0';
  strTopic = String((char*)topic);
  if(strTopic == "ha/pc")
    {
    switch1 = String((char*)payload);
    if(switch1 == "ON")
      {
        Serial.println("ON");
        digitalWrite(relais_pin, HIGH);
      }
    else
      {
        Serial.println("OFF");
        digitalWrite(relais_pin, LOW);
      }
    }
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    if (client.connect("arduinoClient")) {
      Serial.println("connected");

      client.subscribe("ha/#");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  setup_wifi(); 
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);

  pinMode(relais_pin, OUTPUT);
  digitalWrite(relais_pin, LOW);
}

void loop() {
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  while (!client.available()) {
    delay(1);
  }

  String req = client.readStringUntil('\r');
  client.flush();
  if (req.indexOf("?ON") != -1) {
    digitalWrite(relais_pin, HIGH);
  } else if (req.indexOf("?OFF") != -1) {
    digitalWrite(relais_pin, LOW);
  }
  if (!client.connected()) {
    reconnect();
  }
}

Kann mir jemand weiterhelfen??

Warum machst Du das?

Du bist mit jedem Aufruf für 5 Sekunden blind.

Das ist Standart bei den ganzen MQTT Beispielen im Netz und wird ja auch nur selten Mal aufgerufen.

Strings werden mit strcmp verglichen, deine If Abfrage funktioniert so nicht.

Gruß

Und was wäre eine Lösung?

Das passiert ja nur wenn ich keine verbindung zu meinem MQTT server herstellen kann.

Gib einfach mal hier in der Suche sowas ein wie "strings vergleichen", ich denke da werden dir einige Postings dazu angezeigt.

Gruß

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