diff --git a/buttons.cpp b/buttons.cpp index a0e313f..c10bdcc 100644 --- a/buttons.cpp +++ b/buttons.cpp @@ -20,13 +20,14 @@ int led_timeout = 1000; long led_time = 0; long last_wifi_check_time = 0; - long lastReconnectAttempt = 0; long reconnectAttempts = 0; long debouncing_time = 1000; volatile unsigned long last_micros; +long lastTimesignalTime = 0; + WiFiClient espClient; PubSubClient client(espClient); @@ -98,12 +99,13 @@ void setup_wifi() { boolean reconnect() { reconnectAttempts++; - # String clientID = "ESP8266Client-"; clientID += String(random(0xffff), HEX); - if (client.connect(clientID.c_str())) { + if (client.connect(clientID.c_str(), NULL, NULL, willTopic, 0, 1, "0")) { Serial.println("MQTT Connected"); + client.publish(willTopic, "1", true); + client.subscribe(timeTopic); } else { Serial.print("failed, rc = "); Serial.print(client.state()); @@ -113,6 +115,11 @@ boolean reconnect() { return client.connected(); } +void callback(char* topic, byte* payload, unsigned int length) { + Serial.println("Timesignal received"); + lastTimesignalTime = millis(); +} + void setup() { pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output pinMode(LED_PIN, OUTPUT); @@ -127,6 +134,8 @@ void setup() { setup_ota(); client.setServer(mqtt_server, 1883); + client.setCallback(callback); + attachInterrupt(INPUT1, debounceInterrupt1, RISING); attachInterrupt(INPUT2, debounceInterrupt2, RISING); attachInterrupt(INPUT3, debounceInterrupt3, RISING); @@ -162,6 +171,7 @@ void debounceInterrupt4() { } void Interrupt1() { + Serial.println("Button 1 pressed"); client.publish(outTopic, "1", true); digitalWrite(LED_PIN, 1); led_time = millis(); @@ -169,27 +179,32 @@ void Interrupt1() { } void Interrupt2() { + Serial.println("Button 2 pressed"); client.publish(outTopic, "2", true); digitalWrite(LED_PIN, 1); led_time = millis(); } void Interrupt3() { + Serial.println("Button 3 pressed"); client.publish(outTopic, "3", true); digitalWrite(LED_PIN, 1); led_time = millis(); } void Interrupt4() { + Serial.println("Button 4 pressed"); client.publish(outTopic, "4", true); digitalWrite(LED_PIN, 1); led_time = millis(); } void loop() { - long now = millis(); + if (millis() - lastTimesignalTime > 180000) { + ESP.restart(); + } - if (now - last_wifi_check_time > WIFI_TIMEOUT) { + if (millis() - last_wifi_check_time > WIFI_TIMEOUT) { Serial.print("Checking WiFi... "); if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi connection lost. Reconnecting..."); @@ -197,12 +212,13 @@ void loop() { } else { Serial.println("OK"); } - last_wifi_check_time = now; + last_wifi_check_time = millis(); } if (!client.connected()) { - if (now - lastReconnectAttempt > 5000) { - lastReconnectAttempt = now; + if (millis() - lastReconnectAttempt > 5000) { + Serial.println("checking MQTT connection"); + lastReconnectAttempt = millis(); // Attempt to reconnect Serial.println("Attempting MQTT reconnect"); if (reconnect()) { @@ -218,7 +234,7 @@ void loop() { client.loop(); } - if (now - led_time > led_timeout) { + if (millis() - led_time > led_timeout) { digitalWrite(LED_PIN, 0); }