hi
hoffe hier kann mir jemand helfen.
Nun zu mein Problem,
ich will das er nach dem Delay automatisch ein OFF message an den MQTT Broker senden ist das möglich?
So das einschalten geht soweit und schaltet sich nach den 5 sekunden aus.
Nun will ich aber das der schalter nach den 5s automatisch auf aus geht (paperui)
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* SSID = "";
const char* PSK = "";
const char* MQTT_BROKER = "";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(115200);
setup_wifi();
client.setServer(MQTT_BROKER, 1883);
client.setCallback(callback);
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(SSID);
WiFi.begin(SSID, PSK);
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("Received message [");
Serial.print(topic);
Serial.print("] ");
char msg[length+1];
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
msg[i] = (char)payload[i];
}
Serial.println();
msg[length] = '\0';
Serial.println(msg);
if(strcmp(msg,"ON")==0){
digitalWrite(13, HIGH);
delay (5000); // und zwar für 5 Sekunden (5000 Millisekunden).
digitalWrite(13, LOW);
}
else if(strcmp(msg,"OFF")==0){
digitalWrite(13, LOW);
}
}
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/MeinZimmer");
Serial.println("MQTT Connected...");
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}