Um einen Art kleine Fernbedienung zu realisieren könnte man den Diesen Code so verwenden?

hallo ich würde gern mit einen esp8266 Art kleine Fernbedienung realisieren. Mit Mqtt hab ich gar keine Erfahrung ich habe hier einen Taster mit eine LED zur Zustandsanzeige der gewünschten Funktion also an / aus nur die Mqtt Nachricht weiss ich nicht ob das so richtig ist.

Danke im vorraus … für eure Tips und Hinweise

Für Adruino IDE mir ESP8266 Board Bibliothek

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char *ssid = “xxxxxxx”;
const char *password = “xxxx”;
const char *mqtt_server = “192.168.1.100”;
const int mqtt_port = 1883;
const char *mqtt_topic_relay_1_power = “pkw/cmnd/relay/1/POWER”;

const int buttonPin = D2; // GPIO2
const int ledPin = D5; // GPIO14

WiFiClient espClient;
PubSubClient client(espClient);

bool ledState = false;

void setup_wifi() {
delay(10);
Serial.begin(115200);
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) {
Serial.print(“Message arrived [”);
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();

}

void reconnect() {
while (!client.connected()) {
Serial.print(“Attempting MQTT connection…”);
if (client.connect(“ESP8266Client”)) {
Serial.println(“connected”);
client.subscribe(mqtt_topic_relay_1_power);
} else {
Serial.print(“failed, rc=”);
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}

void setup() {
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);

pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}

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

// Taster abfragen
if (digitalRead(buttonPin) == LOW) {
// LED-Zustand umkehren
ledState = !ledState;

// LED steuern
digitalWrite(ledPin, ledState ? HIGH : LOW);

// MQTT-Nachricht senden
client.publish(mqtt_topic_relay_1_power, ledState ? "true" : "false");

// Entprellen
delay(500);

}
}

Hey,
das sieht eigentlich so richtig aus, wenn du eine Payload mit true oder false (oder “on” oder “off”) an das Topic “pkw/cmnd/relay/1/POWER” schickst, wird das erste Relay geschaltet.
Das einzige was eventuell sein könnte ist, dass ein String anstatt eines Booleans erwartet wird, das müsstest du mal testen.

Ansonsten könntest du auch einen PUT Request and die HTTP-API schicken, also z.b. [PUT] <IP>:1880/relay/1/true im entsprechende Code Format für Arduino.

Lässt sich gut mit Postman (kann mittlerweile auch MQTT) testen.

Danke Dir , für alle für die es von Interesse ist wäre hier der Code .
Wir schalten hier von unserem Auto aus die Heizung wahlweise auf Forstfrei oder auf Heizbetrieb unseren WLED Streifen welchen wir als Umfeld Beleuchtung nutzen. Einen
Arbeitsscheinwerfer und Innenbeleuchtung .
Wir nutzen einen ESP8266 , das Gehäuse ist 3D gedruckt , und die Taster aus Amazon mit LED Beleuchtung welche ein Feedback über den Schaltzustand geben also Aktiviert LED Leuchtet. Evtl. möchte jemand es auch nutzen

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = “Dein Netzwerk”;
const char* password = “dein Netzwerk Passwort”;
const char* mqtt_server = “dein Mqtt Server”;
const int mqtt_port = 1883;

const char* mqtt_topic_relay_5_power = “pkw/cmnd/relay/5/POWER”;
const char* mqtt_topic_relay_7_power = “pkw/cmnd/relay/7/POWER”;
const char* mqtt_topic_wled_control = “wled/cmnd/white”;
const char* mqtt_topic_heater_power_hot = “pkw/cmnd/heater/POWER/23”;
const char* mqtt_topic_heater_power_cold = “pkw/cmnd/heater/POWER/12”;

const int buttonPin1 = D2; // GPIO Taster 1
const int buttonPin2 = D3; // GPIO Taster 2
const int buttonPin3 = D4; // GPIO Taster 3
const int buttonPin4 = D7; // GPIO Taster 4

const int ledPin1 = D5; // GPIO LED Feedback 1
const int ledPin2 = D6; // GPIO LED Feedback 2
const int ledPin3 = D8; // GPIO LED Feedback 3
const int ledPin4 = D10; // GPIO LED Feedback 4

WiFiClient espClient;
PubSubClient client(espClient);

bool ledState1 = false;
bool ledState2 = false;
bool ledState3 = false;
bool ledState4 = false;

unsigned long lastMillis = 0;
const long interval = 300000; // 5 Minuten

void setup_wifi() {
delay(10);
Serial.begin(115200);
Serial.println();
Serial.print("Verbinde mit ");
Serial.println(ssid);

WiFi.begin(ssid, password);

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

Serial.println(“”);
Serial.println(“WiFi verbunden”);
Serial.println("IP-Adresse: ");
Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
Serial.print(“Nachricht erhalten [”);
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();

}

void reconnect() {
while (!client.connected()) {
Serial.print(“Versuche MQTT-Verbindung…”);
if (client.connect(“ESP8266Client”)) {
Serial.println(“verbunden”);
// Taster-Status initial senden
client.publish(mqtt_topic_relay_5_power, ledState1 ? “true” : “false”);
client.publish(mqtt_topic_relay_7_power, ledState2 ? “true” : “false”);
client.publish(mqtt_topic_heater_power_hot, ledState4 ? “on” : “off”);
// Taster überwachen
client.subscribe(mqtt_topic_relay_5_power);
client.subscribe(mqtt_topic_relay_7_power);
client.subscribe(mqtt_topic_wled_control);
client.subscribe(mqtt_topic_heater_power_hot);
} else {
Serial.print(“fehlgeschlagen, rc=”);
Serial.print(client.state());
Serial.println(" Versuche es in 5 Sekunden erneut");
delay(5000);
}
}
}

void setup() {
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);

pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
pinMode(buttonPin4, INPUT_PULLUP);

pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
}

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

// Taster 1 abfragen
if (digitalRead(buttonPin1) == LOW) {
// LED 1-Zustand umkehren
ledState1 = !ledState1;

// LED 1 steuern
digitalWrite(ledPin1, ledState1 ? HIGH : LOW);

// MQTT-Nachricht für Relais 5 senden
client.publish(mqtt_topic_relay_5_power, ledState1 ? "true" : "false");

// Entprellen
delay(500);

}

// Taster 2 abfragen
if (digitalRead(buttonPin2) == LOW) {
// LED 2-Zustand umkehren
ledState2 = !ledState2;

// LED 2 steuern
digitalWrite(ledPin2, ledState2 ? HIGH : LOW);

// MQTT-Nachricht für Relais 8 senden
client.publish(mqtt_topic_relay_7_power, ledState2 ? "true" : "false");

// Entprellen
delay(500);

}

// Taster 3 abfragen
if (digitalRead(buttonPin3) == LOW) {
// LED 3-Zustand umkehren
ledState3 = !ledState3;

// LED 3 steuern
digitalWrite(ledPin3, ledState3 ? HIGH : LOW);

// WLED Strip steuern
if (ledState3) {
  client.publish(mqtt_topic_wled_control, "ON");
} else {
  client.publish(mqtt_topic_wled_control, "OFF");
}

// Entprellen
delay(500);

}

// Zeitgesteuertes Ausschalten des WLED Strips
if (ledState3 && (millis() - lastMillis >= interval)) {
lastMillis = millis();
client.publish(mqtt_topic_wled_control, “OFF”);
}

// Taster 4 abfragen
static unsigned long lastButtonPressTime = 0;
if (digitalRead(buttonPin4) == LOW) {
if (millis() - lastButtonPressTime > 1000) {
// LED 4-Zustand umkehren
ledState4 = !ledState4;

  // LED 4 steuern
  digitalWrite(ledPin4, ledState4 ? HIGH : LOW);

  // MQTT-Nachricht für Heater senden
  if (ledState4) {
    client.publish(mqtt_topic_heater_power_hot, "on");
  } else {
    client.publish(mqtt_topic_heater_power_cold, "on");
  }
}
lastButtonPressTime = millis();

}
}

hi @Thomro1974,
welche taster nutzt du da? und welchen led-strip? da gibt es ja ganz viele