#include 
    #include 
    #include 
    #include 
    BlynkTimer timer;
    
    #define BLYNK_PRINT Serial
    #define DEBUG_SW 0
    
    const int sensor_pin = 22;
    const int buzzer = 19;
    
    #define S1 25
    #define R1 15
    
    #define S2 33
    #define R2 2
    
    #define S3 32
    #define R3 4
    
    #define S4 35
    #define R4 5
    
    #define S5 34
    #define R5 18
    
    #define S6 36
    #define R6 21
    
    #define LED1 12
    #define LED2 14
    #define LED3 13
    #define Buzzer 19
    #define DHTPIN 26
    #define DHTTYPE DHT11 
    DHT dht(DHTPIN, DHTTYPE);
    
    int MODE = 0;
    
    
    // Your WiFi credentials.
    // Set password to "" for open networks.
    char ssid[] = "rab2";
    char pass[] = "065578444";
    
    // You should get Auth Token in the Blynk App.
    // Go to the Project Settings (nut icon).
    char auth[] = "NOTUizjQx4nWhwRWO7-iTo4qFgkroDH3";
    
    
    int switch_ON_Flag1_previous_I = 0;
    int switch_ON_Flag2_previous_I = 0;
    int switch_ON_Flag3_previous_I = 0;
    int switch_ON_Flag4_previous_I = 0;
    int switch_ON_Flag5_previous_I = 0;
    int switch_ON_Flag6_previous_I = 0;
    
    
    BLYNK_WRITE(V1)
    {
      int pinValue = param.asInt(); // assigning incoming value from pin V1 to a variable
      digitalWrite(R1, pinValue);
      // process received value
    }
    
    BLYNK_WRITE(V2)
    {
      int pinValue = param.asInt(); // assigning incoming value from pin V2 to a variable
      digitalWrite(R2, pinValue);
      // process received value
    }
    
    BLYNK_WRITE(V3)
    {
      int pinValue = param.asInt(); // assigning incoming value from pin V3 to a variable
      digitalWrite(R3, pinValue);
      // process received value
    }
    
    BLYNK_WRITE(V4)
    {
      int pinValue = param.asInt(); // assigning incoming value from pin V4 to a variable
      digitalWrite(R4, pinValue);
      // process received value
    }
    
    BLYNK_WRITE(V5)
    {
      int pinValue = param.asInt(); // assigning incoming value from pin V5 to a variable
      digitalWrite(R5, pinValue);
      // process received value
    }
    
    BLYNK_WRITE(V6)
    {
      int pinValue = param.asInt(); // assigning incoming value from pin V6 to a variable
      digitalWrite(R6, pinValue);
      // process received value
    }
    
    void sendSensor()
    {
      float h = dht.readHumidity();
      float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
     
      if (isnan(h) || isnan(t)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
      }
      // You can send any value at any time.
      // Please don't send more that 10 values per second.
      Blynk.virtualWrite(V7, t);
      Blynk.virtualWrite(V8, h);
    }
    
    void with_internet()
    {
      if (digitalRead(S1) == LOW)
      {
        if (switch_ON_Flag1_previous_I == 0 )
        {
          digitalWrite(R1, LOW);
          if (DEBUG_SW) Serial.println("Relay1- ON");
          Blynk.virtualWrite(V1, 0);
          switch_ON_Flag1_previous_I = 1;
        }
        if (DEBUG_SW) Serial.println("Switch1 -ON");
    
      }
      if (digitalRead(S1) == HIGH )
      {
        if (switch_ON_Flag1_previous_I == 1)
        {
          digitalWrite(R1, HIGH);
          if (DEBUG_SW) Serial.println("Relay1 OFF");
          Blynk.virtualWrite(V1, 1);
          switch_ON_Flag1_previous_I = 0;
        }
        if (DEBUG_SW)Serial.println("Switch1 OFF");
      }
    
    
      if (digitalRead(S2) == LOW)
      {
        if (switch_ON_Flag2_previous_I == 0 )
        {
          digitalWrite(R2, LOW);
          if (DEBUG_SW)  Serial.println("Relay2- ON");
          Blynk.virtualWrite(V2, 0);
          switch_ON_Flag2_previous_I = 1;
        }
        if (DEBUG_SW) Serial.println("Switch2 -ON");
    
      }
      if (digitalRead(S2) == HIGH )
      {
        if (switch_ON_Flag2_previous_I == 1)
        {
          digitalWrite(R2, HIGH);
          if (DEBUG_SW) Serial.println("Relay2 OFF");
          Blynk.virtualWrite(V2, 1);
          switch_ON_Flag2_previous_I = 0;
        }
        if (DEBUG_SW)Serial.println("Switch2 OFF");
        //delay(200);
      }
    
      if (digitalRead(S3) == LOW)
      {
        if (switch_ON_Flag3_previous_I == 0 )
        {
          digitalWrite(R3, LOW);
          if (DEBUG_SW) Serial.println("Relay3- ON");
          Blynk.virtualWrite(V3, 0);
          switch_ON_Flag3_previous_I = 1;
        }
        if (DEBUG_SW) Serial.println("Switch3 -ON");
    
      }
      if (digitalRead(S3) == HIGH )
      {
        if (switch_ON_Flag3_previous_I == 1)
        {
          digitalWrite(R3, HIGH);
          if (DEBUG_SW) Serial.println("Relay3 OFF");
          Blynk.virtualWrite(V3, 1);
          switch_ON_Flag3_previous_I = 0;
        }
        if (DEBUG_SW)Serial.println("Switch3 OFF");
        //delay(200);
      }
    
      if (digitalRead(S4) == LOW)
      {
        if (switch_ON_Flag4_previous_I == 0 )
        {
          digitalWrite(R4, LOW);
          if (DEBUG_SW) Serial.println("Relay4- ON");
          Blynk.virtualWrite(V4, 0);
          switch_ON_Flag4_previous_I = 1;
        }
        if (DEBUG_SW) Serial.println("Switch4 -ON");
    
      }
      if (digitalRead(S4) == HIGH )
      {
        if (switch_ON_Flag4_previous_I == 1)
        {
          digitalWrite(R4, HIGH);
          if (DEBUG_SW) Serial.println("Relay4 OFF");
          Blynk.virtualWrite(V4, 1);
          switch_ON_Flag4_previous_I = 0;
        }
        if (DEBUG_SW)Serial.println("Switch4 OFF");
        //delay(200);
      }
    
      if (digitalRead(S5) == LOW)
      {
        if (switch_ON_Flag5_previous_I == 0 )
        {
          digitalWrite(R5, LOW);
          if (DEBUG_SW)  Serial.println("Relay5- ON");
          Blynk.virtualWrite(V5, 0);
          switch_ON_Flag5_previous_I = 1;
        }
        if (DEBUG_SW) Serial.println("Switch5 -ON");
    
      }
      if (digitalRead(S5) == HIGH )
      {
        if (switch_ON_Flag5_previous_I == 1)
        {
          digitalWrite(R5, HIGH);
          if (DEBUG_SW) Serial.println("Relay5 OFF");
          Blynk.virtualWrite(V5, 1);
          switch_ON_Flag5_previous_I = 0;
        }
        if (DEBUG_SW)Serial.println("Switch5 OFF");
        //delay(200);
      }
    
    if (digitalRead(S6) == LOW)
      {
        if (switch_ON_Flag6_previous_I == 0 )
        {
          digitalWrite(R6, LOW);
          if (DEBUG_SW)  Serial.println("Relay6- ON");
          Blynk.virtualWrite(V6, 0);
          switch_ON_Flag6_previous_I = 1;
        }
        if (DEBUG_SW) Serial.println("Switch6 -ON");
    
      }
      if (digitalRead(S6) == HIGH )
      {
        if (switch_ON_Flag6_previous_I == 1)
        {
          digitalWrite(R6, HIGH);
          if (DEBUG_SW) Serial.println("Relay6 OFF");
          Blynk.virtualWrite(V6, 1);
          switch_ON_Flag6_previous_I = 0;
        }
        if (DEBUG_SW)Serial.println("Switch6 OFF");
        //delay(200);
      }
    
    
    }
    
    void without_internet()
    {
    
      digitalWrite(R1, digitalRead(S1));
      digitalWrite(R2, digitalRead(S2));
      digitalWrite(R3, digitalRead(S3));
      digitalWrite(R4, digitalRead(S4));
      digitalWrite(R5, digitalRead(S5));
      digitalWrite(R6, digitalRead(S6));
    
    }
    
    
    void checkBlynk() { // called every 3 seconds by SimpleTimer
    
      bool isconnected = Blynk.connected();
      if (isconnected == false) {
        MODE = 1;
        digitalWrite(LED1, HIGH);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, LOW);
      }
      if (isconnected == true) {
        MODE = 0;
        digitalWrite(LED1, HIGH);
        digitalWrite(LED2, HIGH);
        digitalWrite(LED3, HIGH);
      }
    }
    
    void setup()
    {
      {// Debug console
      if (DEBUG_SW) Serial.begin(9600);
      pinMode(S1, INPUT);
      pinMode(R1, OUTPUT);
    
      pinMode(S2, INPUT);
      pinMode(R2, OUTPUT);
    
      pinMode(S3, INPUT);
      pinMode(R3, OUTPUT);
    
      pinMode(S4, INPUT);
      pinMode(R4, OUTPUT);
    
      pinMode(S5, INPUT);
      pinMode(R5, OUTPUT);
    
      pinMode(S6, INPUT);
      pinMode(R6, OUTPUT);
    
    
      pinMode(LED1, OUTPUT);
      pinMode(LED2, OUTPUT);
      pinMode(LED3, OUTPUT);
      pinMode(Buzzer, OUTPUT);
    
      digitalWrite(LED1, HIGH);
      delay(200);
      digitalWrite(LED2, HIGH);
      delay(200);
      digitalWrite(LED3, HIGH);
      delay(200);
    
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      delay(500);
    
      digitalWrite(LED1, HIGH);
      delay(200);
      digitalWrite(LED2, HIGH);
      delay(200);
      digitalWrite(LED3, HIGH);
      delay(200);
    
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      //pinMode(MODE, INPUT);
      WiFi.begin(ssid, pass);
      timer.setInterval(3000L, checkBlynk); // check if connected to Blynk server every 3 seconds
      Blynk.config(auth);//, ssid, pass);
      }
    
    {
      // Debug console
      Serial.begin(9600);
     
      Blynk.begin(auth, ssid, pass);
      // You can also specify server:
      //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
      //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
     
      dht.begin();
     
      // Setup a function to be called every second
      timer.setInterval(1000L, sendSensor);
    }
    {
      pinMode(sensor_pin,INPUT_PULLUP);
      pinMode(buzzer,OUTPUT);
      Serial.begin(9600);
    }
    }
    
    void loop()
    {
      if (WiFi.status() != WL_CONNECTED)
      {
        if (DEBUG_SW) Serial.println("Not Connected");
      }
      else
      {
        if (DEBUG_SW) Serial.println(" Connected");
        Blynk.run();
      }
    
      timer.run(); // Initiates SimpleTimer
      if (MODE == 0)
        with_internet();
      else
        without_internet();
    
        {
      Blynk.run();
      timer.run();
    }
    {
      if(digitalRead(sensor_pin) == LOW){
        {
      digitalWrite(buzzer, HIGH);
      delay(100);
      digitalWrite(buzzer, LOW);
      delay(50);
      }
      }else{
        digitalWrite(buzzer,LOW);
      }
    }
    }