Danke dir für die schnelle Antwort, diesen Eintrag habe ich bereits bei meinen Recherchen geunden, aber leider reicht mein Verständnis nicht aus um das zu verwenden da ich den Unterschied nicht verstehe, es müsste doch auch mit meinem Weg möglich seine einen Timer zu verwenden.
Das Problem ist ja auch nicht der Timer selbst sondern die Art und weise wie/wo er eingebaut und aufgerufen werden muss damit er mit dem button zusammen funktioniert.
Hier der Großteil vom Sketch
#include <Bounce2.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ESP8266HTTPClient.h>
//Pin Settings
const int ledPin = D0; // LED wennn Pi Läuft
const int buttonPin_toggle = D6; // PIN für Play-Pause
const int buttonPin_volup = D2; //Pin für Lautstärke erhöhen
const int buttonPin_voldown = D5; // Pin für Lautstärke verringern
const int buttonPin_shutdown = D1; // Pin für ausschalten der Funcksteckdose
// WiFi Settings
const char* ssid = "xx";
const char* wifi_password = "xx";
// Check Onlinestatus from Server
const String serverAdress = "http://192.168.1.39/ping/ping_online_status.txt";
// MQTT Broker
const char* mqtt_server = "192.168.1.39";
const char* mqtt_topic = "/home/moode/terrasse/";
const char* clientID = "MoodeRemote";
// Buttons initailisieren
Bounce bouncer_toggle = Bounce();
Bounce bouncer_volup = Bounce();
Bounce bouncer_voldown = Bounce();
Bounce bouncer_shutdown = Bounce();
// Variable für den Interval zum Online Server Check
const long intervalCheckServerStatus = 30000;
const long intervalPingForSwitchoff = 1000;
//Timer bei Start auf 0 Stellen
unsigned long previousMillis = 0;
// Wifi Initialisieren
WiFiClient wifiClient;
PubSubClient client(mqtt_server, 1883, wifiClient); //1883
///////////////////////////////////////////////////////////////////////////////////////////////////
// SWITCH OFF WIFI PLUG (Neue Variante)
// Pi wir per Shudwon ausgeschalten, wenn nichtmehr erreichbar vom ESP dann soll
// das CMD für die Funksteckdose gesendet werden
void powerOffPlug() {
Serial.println("Funksteckdose auschalten, Raspi Shutdown beendet, AMP Power OFF");
HTTPClient http;
// Variablen definieren
String vpg, vcom, vdevice, getData, Link;
vpg = String("dosen");
vcom ="0";
vdevice="2";
// GET Data - Querystring zusammenbauen
getData = "?pg=" + vpg + "&com=" + vcom + "&device=" + vdevice ; //querystring
// Server Pfad
Link = "http://192.168.1.34/home/index.php" + getData;
Serial.println(Link); //Link prüfen
// Request senden
http.begin(Link);
int httpCode = http.GET();
http.end(); //Close connection
}
// S E T U P
///////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
// PINS definieren IN/OUT
pinMode(ledPin, OUTPUT);
pinMode(buttonPin_toggle, INPUT);
pinMode(buttonPin_volup, INPUT);
pinMode(buttonPin_voldown, INPUT);
pinMode(buttonPin_shutdown, INPUT);
// LED nach Start ein
digitalWrite(ledPin, LOW);
// Buttons Objekte erstellen
bouncer_toggle.attach(buttonPin_toggle);
bouncer_toggle.interval(5);
bouncer_volup.attach(buttonPin_volup);
bouncer_volup.interval(5);
bouncer_voldown.attach(buttonPin_voldown);
bouncer_voldown.interval(5);
bouncer_shutdown.attach(buttonPin_shutdown);
bouncer_shutdown.interval(5);
// Baud Rate
Serial.begin(115200);
Serial.print("Connecting to ");
Serial.println(ssid);
// Verbinden mit WiFi
WiFi.begin(ssid, wifi_password);
// Verbindung herstellen, es geht erst weiter wenn Verbindung hergestellt
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Debugging - IP Anzeigen
Serial.println("WiFi connected");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
// Verbinden mit dem MQTT Broker
if (client.connect(clientID)) {
Serial.println("Verbunden mit dem MQTT Broker!");
} else {
Serial.println("Keine Verbindung mit dem MQTT Broker hergestellt");
}
// Beim Booten Funksteckdose auf On schalten damit Raspi gestartet wird
bootRaspi();
} // End Setup
// L O O P
///////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
// MoodAdio Server Status prüfen Online/Offline
// millis() = Gibt Zeit seit Boot zurück
// currentMillis = Zeit seit Boot
// previousMillis = Aktuelle Zeit
// Startzeit - Aktuelle Zeit > Intervall
// InvetrtalCheckServerStatus = Prüfintervall in Millisekundden
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > intervalCheckServerStatus) {
previousMillis = currentMillis; //wieder zurücksetzen
getStatusMoodeServer();
}
// Toggle Play/Pause Button
bouncer_toggle.update();
if (bouncer_toggle.rose()) {
// Sende über MQTT das cmd toggle
if (client.publish(mqtt_topic, "toggle")) {
Serial.println("Send cmd toggle");
} else {
Serial.println("cmd toggle konnte nicht gesendet werden, nochmal versuchen!");
client.connect(clientID);
delay(10);
client.publish(mqtt_topic, "toggle");
}
}
// Volumen UP Button
bouncer_volup.update();
if (bouncer_volup.rose()) {
//digitalWrite(ledPin, LOW);
// Sende über MQTT das cmd volup
if (client.publish(mqtt_topic, "volup")) {
Serial.println("Send cmd volup");
} else {
Serial.println("cmd volup konnte nicht gesendet werden, nochmal versuchen!");
client.connect(clientID);
delay(10);
client.publish(mqtt_topic, "volup");
}
}
// Volumen DOWN Button
bouncer_voldown.update();
if (bouncer_voldown.rose()) {
//digitalWrite(ledPin, HIGH);
// Sende über MQTT das cmd voldown
if (client.publish(mqtt_topic, "voldown")) {
Serial.println("Send cmd voldown");
} else {
Serial.println("cmd voldown konnte nicht gesendet werden, nochmal versuchen!");
client.connect(clientID);
delay(10);
client.publish(mqtt_topic, "voldown");
}
}
// Shutdown Button
bouncer_shutdown.update();
if (bouncer_shutdown.rose()) {
// Shutdown befehl senden
if (client.publish(mqtt_topic, "shutdown")) {
Serial.println("Send cmd für Soft Shutdown!");
} else {
Serial.println("Konnte nicht gesendet werden, Versuche es nochmal!");
client.connect(clientID);
delay(10);
client.publish(mqtt_topic, "shutdown");
}
if(currentMillis - previousMillis > intervalPingForSwitchoff) {
previousMillis = currentMillis; //wieder zurücksetzen
//////////////////
HTTPClient http;
Serial.print("Waiting for Shutdown: ");
http.begin(serverAdress);
int httpCode = http.GET();
if (httpCode > 0) {
String answer = http.getString();
Serial.print(answer);
Serial.println(" > Server Online");
} else {
Serial.printf("Server now Offline > %s\n", http.errorToString(httpCode).c_str());
Serial.println("Steckdose powerOffPlug ausführen!");
powerOffPlug(); //Funktion zum Ausschalten der Funksteckdose aufrufen
}
http.end();
/////////////////////
}
}
} // End Loop()