Brauche Hilfe beim Troubleshooting ESP32 Relay

Hallo Liebe Commutity,

Ich bin gerade dabei dieses Projekt zu beenden aber manche Sachen funktionieren immer noch nicht wie es soll.

Folgende Fehler habe ich:
Die Relays gehen an aber nach ein paar sekunden wieder aus.

Regel sollte sein:
Von Nov bis Jan, um 8 Uhr eine Stunde und um 16 Uhr eine Stunde, beide Relays an.
zur ganzen Zeit darf die Temperatur nicht unter 12ºC gehen und nicht über 16ºC gesteuert wird dies über Relay #2.

Von Feb bis Apr, von 07:30 Uhr bis 16:30 Uhr, beide Relays an.
zur ganzen Zeit darf die Temperatur nicht unter 20ºC gehen und nicht über 35ºC gesteuert wird dies über Relay #2.

Von Mai bis July, von 05:30 Uhr bis 20:30 Uhr, beide Relays an.
zur ganzen Zeit darf die Temperatur nicht unter 20ºC gehen und nicht über 35ºC gesteuert wird dies über Relay #2.

Von Aug bis Okt, von 06:30 Uhr bis 19:30 Uhr, beide Relays an.
zur ganzen Zeit darf die Temperatur nicht unter 20ºC gehen und nicht über 35ºC gesteuert wird dies über Relay #2.

Es wäre nett wenn man mir bei diesen Problem behilflich sein kann.

Danke im vorraus.

#include <WiFi.h>
#include <time.h>
#include <RTClib.h>
#include <OneWire.h> 
#include <DallasTemperature.h>


//RTC and NTP Time with Daylight Saving and Sync
RTC_DS3231 rtc;

const char* ssid = "Honor";
const char* password = "27042026";


const char* NTP_SERVER = "ch.pool.ntp.org";
const char* TZ_INFO    = "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00";  // enter your time zone (https://remotemonitoringsystems.ca/time-zone-abbreviations.php)

tm timeinfo;
time_t now;
long unsigned lastNTPtime;
unsigned long lastEntryTime;


//Temperature Control
const int oneWireBus = 4;
OneWire oneWire(oneWireBus); 
DallasTemperature sensors(&oneWire);

//Relay Control
const int relay1 = 12;
const int relay2 = 14;
bool bothLampOn = true;
bool HeatLampOn = true;
bool bothLampOff = true;
bool HeatLampOff = true;


void setup() {
  Serial.begin(115200);
  Serial.println("\n\nNTP Time Test\n");
  WiFi.begin(ssid, password);

  int counter = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(200);
    if (++counter > 100) ESP.restart();
    Serial.print ( "." );
  }
  Serial.println("\n\nWiFi connected\n\n");

  configTime(0, 0, NTP_SERVER);
  // See https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv for Timezone codes for your region
  setenv("TZ", TZ_INFO, 1);

  if (getNTPtime(10)) {  // wait up to 10sec to sync
  } else {
    Serial.println("Time not set");
    ESP.restart();
  }
  showTime(timeinfo);
  lastNTPtime = time(&now);
  lastEntryTime = millis();

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }
  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    rtc.adjust(DateTime(uint32_t(now + 7200)));
  }
  sensors.begin();
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
}



void loop() {
  getNTPtime(10);
  writeRTCTime();
  showTime(timeinfo);
  Temperature();
  Terrarium(timeinfo);
  delay(3000);
}

bool getNTPtime(int sec) {

  {
    uint32_t start = millis();
    do {
      time(&now);
      localtime_r(&now, &timeinfo);
      Serial.print(".");
      delay(10);
    } while (((millis() - start) <= (1000 * sec)) && (timeinfo.tm_year < (2016 - 1900)));
    if (timeinfo.tm_year <= (2016 - 1900)) return false;  // the NTP call was not successful
    Serial.print("now ");  Serial.println(now);
    char time_output[30];
    strftime(time_output, 30, "%a  %d-%m-%y %T", localtime(&now));
    Serial.println(time_output);
    Serial.println();
    rtc.adjust(DateTime(uint32_t(now + 7200)));
  }
  return true;
}


void writeRTCTime() {
  
    DateTime now = rtc.now();

    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.println();
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
  
}


void Temperature(){
  sensors.requestTemperatures(); 
  float temperatureC = sensors.getTempCByIndex(0);
  Serial.print(temperatureC);
  Serial.println("ºC");
}


void Terrarium(tm localTime){
  switch (localTime.tm_mon){
    case 10:
    case 11:
    case 0:
      if (localTime.tm_hour == 7 && localTime.tm_hour == 15 && bothLampOn){
        digitalWrite(relay1,HIGH);
        digitalWrite(relay2,HIGH);
        bothLampOn = false;
      }
      else if(sensors.getTempCByIndex(0) <= 12.00 && sensors.getTempCByIndex(0) >= 16.00 && HeatLampOn){
        digitalWrite(relay2,HIGH);
        HeatLampOn = false;
      }
      else if(bothLampOff){
        digitalWrite(relay1,LOW);
        digitalWrite(relay2,LOW);
        bothLampOff = false;
      }
    break;
    case 1:
    case 2:
    case 3:
    if(localTime.tm_hour < 15 && localTime.tm_hour > 6 && localTime.tm_min > 29 && bothLampOn)
    {
      digitalWrite(relay1,HIGH);
      digitalWrite(relay2,HIGH);
      bothLampOn = false;
    }
    else if (bothLampOff)
    {
      digitalWrite(relay1,LOW);
      digitalWrite(relay2,LOW);
      bothLampOff = false;
    }
   
    if(sensors.getTempCByIndex(0) >= 35 && HeatLampOff)
    {
      digitalWrite(relay2,LOW);
      HeatLampOff = false;
    }
    else if(sensors.getTempCByIndex(0) <= 20 && HeatLampOn)
    {
      digitalWrite(relay2,HIGH);
      HeatLampOn = false;
    }
    break;
    case 4:
    case 5:
    case 6:
    if(localTime.tm_hour < 19 && localTime.tm_hour > 4 && localTime.tm_min > 29 && bothLampOn)
    {
      digitalWrite(relay1,HIGH);
      digitalWrite(relay2,HIGH);
      bothLampOn = false;
    }
    else if (bothLampOff)
    {
      digitalWrite(relay1,LOW);
      digitalWrite(relay2,LOW);
      bothLampOff = false;
    }
   
    if(sensors.getTempCByIndex(0) >= 35 && HeatLampOff)
    {
      digitalWrite(relay2,LOW);
      HeatLampOff = false;
    }
    else if(sensors.getTempCByIndex(0) <= 20 && HeatLampOn)
    {
      digitalWrite(relay2,HIGH);
      HeatLampOn = false;
    }
    break;
    case 7:
    case 8:
    case 9:
    if(localTime.tm_hour <= 18 && localTime.tm_hour >= 5 && localTime.tm_min > 29 && bothLampOn)
    {
      digitalWrite(relay1,HIGH);
      digitalWrite(relay2,HIGH);
      bothLampOn = false;
    }
    else if (bothLampOff)
    {
      digitalWrite(relay1,LOW);
      digitalWrite(relay2,LOW);
      bothLampOff = false;
    }
   
    if(sensors.getTempCByIndex(0) >= 35 && HeatLampOff)
    {
      digitalWrite(relay2,LOW);
      HeatLampOff = false;
    }
    else if(sensors.getTempCByIndex(0) <= 20 && HeatLampOn)
    {
      digitalWrite(relay2,HIGH);
      HeatLampOn = false;
    }
    break;
   }
}

void showTime(tm localTime) {
  Serial.print(localTime.tm_mday);
  Serial.print('/');
  Serial.print(localTime.tm_mon + 1);
  Serial.print('/');
  Serial.print(localTime.tm_year - 100);
  Serial.print('-');
  Serial.print(localTime.tm_hour);
  Serial.print(':');
  Serial.print(localTime.tm_min);
  Serial.print(':');
  Serial.print(localTime.tm_sec);
  Serial.print(" Day of Week ");
  if (localTime.tm_wday == 0)   Serial.println(7);
  else Serial.println(localTime.tm_wday);
}

Die Relays gehen an aber nach ein paar sekunden wieder aus.

Am Besten mit Serial.print Testausgaben rauskriegen, welche case und if Bedingung genau verantwortlich ist.

Und ausschliessen,dass es ein elektrisches Problem ist.