Showing posts with label switch. Show all posts
Showing posts with label switch. Show all posts

Home Assistant Basic Sun Automations Sunrise / Sunset Mqtt Lights On / Off

##############################################
## First the Switches in Configuration.yaml file #####
##############################################


###############################################################
# MOSQUITTO MQTT ##########################################
###############################################################

mqtt:
  broker: localhost
  port: 1883
  client_id: home-assistant-1
  keepalive: 60
  username: newuser
  password: 12345
  protocol: 3.1

###############################################################
# SWITCHES ##################################################
###############################################################


switch 1:
  - platform: mqtt
    name: "Wall Light"
    state_topic: "/house/switchConfirm1/"
    command_topic: "/house/switch1/"
    payload_on: "1"
    payload_off: "0"
    qos: 0
    retain: true
#####################

switch 2:
  - platform: mqtt
    name: "Garage Light One"
    state_topic: "/house/switchConfirm2/"
    command_topic: "/house/switch2/"
    payload_on: "1"
    payload_off: "0"
    qos: 0
    retain: true
#####################

switch 3:
  - platform: mqtt
    name: "Garage Light Two"
    state_topic: "/house/switchConfirm3/"
    command_topic: "/house/switch3/"
    payload_on: "1"
    payload_off: "0"
    qos: 0
    retain: true
#####################

switch 4:
  - platform: mqtt
    name: "Garage Light Three"
    state_topic: "/house/switchConfirm4/"
    command_topic: "/house/switch4/"
    payload_on: "1"
    payload_off: "0"
    qos: 0
    retain: true


####################

switch 5:
  - platform: mqtt
    name: "Switch Sleep"
    state_topic: "/house/switchSleepConfirm/"
    command_topic: "/house/switchSleep/"
    payload_on: "1"
    payload_off: "0"
    qos: 0
    retain: true
####################

switch 6:
  - platform: mqtt
    name: "Switch Reset"
    state_topic: "/house/switchResetConfirm/"
    command_topic: "/house/switchReset/"
    payload_on: "1"
    payload_off: "0"
    qos: 0
    retain: true
######################


##########################################################################
##########################################################################


# NOTE : when using "switch " like above the Service "switch.turn_on" will work
# but if you use " light " the "light.turn_on" will work with it 
# for example : if mqtt switches are defined as "light" below:





################################################################
# LIGHTS ######################################################
###############################################################
#light 1:
# - platform: mqtt
#  name: "Light 01"
#    state_topic: "/house/switchConfirm5/"
#    command_topic: "/house/switch5/"
#    payload_on: "1"
#    payload_off: "0"
#    qos: 0
#    retain: true
#####################


####################################################################
# in the " light 1 " example above the  name: "Light 01 " can be changed but 
# the top light 1 is important here as it will change the service name too 
# see at the end of this post 
####################################################################








###########################################
## This is my Automations.yaml file right now ##
###########################################



#############################################################
## TURN ON OUTSIDE LIGHTS AT SUN-SET ###################
############################################################################


## Copy it so that the minus sign before " id:" is on extreme left the rest should be as it is 
## for example the letter "a" in alias should be beneath the letter " i" in id 

############################################################################

- id: auto_one
  alias: 'Turn On Outside Lights at Sunset'
  trigger:
  - platform: sun
    event: sunset
    offset: '+00:17:00'
  action:
  - service: switch.turn_on
    entity_id: switch.garage_light_one
  - delay: 00:02:00
  - service: switch.turn_on
    entity_id: switch.garage_light_two
  - delay: 00:02:00
  - service: switch.turn_on
    entity_id: switch.garage_light_three
  - delay: 00:03:00
  - service: switch.turn_on
    entity_id: switch.wall_light

#############################################################
## TURN OFF OUTSIDE LIGHTS AT SUN-RISE #################
#############################################################

############################################################################
## Note that the dash/minus sign " - " before id is on extreme left with NO spaces from left
############################################################################

- id: auto_two
  alias: 'Turn Off Outside Lights at Sunrise'
  trigger:
  - platform: sun
    event: sunrise
    offset: '-00:25:00'
  action:
  - service: switch.turn_off
    entity_id: switch.wall_light
  - delay: 00:05:00
  - service: switch.turn_off
    entity_id: switch.garage_light_one
  - delay: 00:04:00
  - service: switch.turn_off
    entity_id: switch.garage_light_two
  - delay: 00:03:00
  - service: switch.turn_off
    entity_id: switch.garage_light_three


###########################################################################

###########################################################################
#############################################################
## TURN ON LIGHTS AT SUNSET ###           Using light            #####
#############################################################



#- id: auto
#  alias: 'Turn On Lights'
#  trigger:
#  - platform: sun
#    event: sunset
#    offset: '-02:44:00'
#  action:
#  - service: light.turn_on
#    entity_id: light.light_01
#  - delay: 00:00:05
#  - service: light.turn_on
#    entity_id: light.light_02
#  - delay: 00:00:05
#  - service: light.turn_on
#    entity_id: light.light_03
#  - delay: 00:00:05
#  - service: light.turn_on
#    entity_id: light.light_04


Home Assistant / Hassbian MQTT Switches Using ESP8266 / Arduino IDE v1.0



   
 /* ################################################################  
    ################################################################  
    ########## ESP 8266 MQTT Switch for Home Assistant #############  
    ################################################################  
    ###################*** MOSQUITTO ***############################  
 */  
   
   
   
 //########################################################################################  
   
  // You Can find this sketch on Home Assistant forum i have just modified it according to my 
  // Requirements as it is just a waste of time trying to re-invent the wheel 
  // so thank you for it random citizen :D  
  
  //** INCLUDE LIBRARIES ** make sure you have all the Libraries installed   
  // Get them from within the Arduino IDE Sketch > Include Libraries > Manage Libraries   
   
 //########################################################################################   
   
   
   
 #include <PubSubClient.h>  
 #include <ESP8266WiFi.h>  
 #include <ArduinoOTA.h>  
 #include <ESP8266mDNS.h>  
 #include <WiFiUdp.h>  
   
   
   
 //##################################################################  
   
   
 void callback(char* topic, byte* payload, unsigned int length);  
   
   
   
 #define MQTT_SERVER "192.168.1.3"      // IP of your MQTT Server   
   
   
 const char* ssid = "cool-spot";        // SSID for you Wifi Hotspot  
 const char* password = "12345678";     // Password for Wifi Hotspot   
   
   
 //########### ESP 8266 GPIO Pins ###########################################  
   
   
 const int switchPin1 = 4;  
 const int switchPin2 = 5;  
 const int switchPin3 = 13;  
 const int switchPin4 = 12;  
   
   
 //#########################################################################  
         
         
 // ***** MQTT Topics Defined In Home Assistant's Configuration.yaml file ***  
         
   
 //#########################################################################  
   
 char const* switchTopic1 = "/house/switch1/";      //four switches for relays  
   
 char const* switchTopic2 = "/house/switch2/";  
   
 char const* switchTopic3 = "/house/switch3/";  
   
 char const* switchTopic4 = "/house/switch4/";  
   
   
   
 char const* switchSleep  = "/house/switchSleep/";  // fifth for putting the Esp in sleep mode   
   
 char const* switchReset  = "/house/switchReset/";  // sixth for Reseting the Esp  
   
 //##########################################################################  
   
   
   
 WiFiClient wifiClient;  
   
   
 PubSubClient client(MQTT_SERVER, 1883, callback, wifiClient);  
   
   
   
   
   
   
 //#################################################################################  
 //#################################################################################  
   
 //############## SETUP BEGINS #####################################################  
   
 //#################################################################################  
 //#################################################################################  
   
   
   
 void setup() {  
   
        
                                  // These lines will keep the Relays off during start-up    
    
  pinMode(switchPin1, OUTPUT);    // Relay Switch 1    
    
  digitalWrite(switchPin1, LOW);  // Because i'm Using NPN transistors for   
   
                                  // switching the relays which are actually   
                     
                                  // LOW-level-trigger type   
   
                                  // adding the transistor will invert that logic  
   
                                  // and LOW will be OFF because Transistor is off    
                         
    
    
  pinMode(switchPin2, OUTPUT);   // Relay Switch 2  
    
  digitalWrite(switchPin2, LOW);  
   
   
   
  pinMode(switchPin3, OUTPUT);   // Relay Switch 3  
   
  digitalWrite(switchPin3, LOW);  
   
   
   
  pinMode(switchPin4, OUTPUT);   // Relay Switch 4  
   
  digitalWrite(switchPin4, LOW);  
   
   
  //####################################################################################  
   
    
    
    
  Serial.begin(115200);  
  delay(100);  
    
    
   
    
    
    
  WiFi.mode(WIFI_STA);        // Set Esp8266 in Station mode  
   
  WiFi.begin(ssid, password);       
   
    
    
    
    
   while (WiFi.waitForConnectResult() != WL_CONNECTED) {  
    
   Serial.println("Connection Failed! Rebooting...");  
     
   delay(2000);  
          

  }  
   
 //############################################################################################  
 //############################################################################################  
   
 //############# CHANGE OTA UPDATE PASSWORD ###################################################    
 //############################################################################################  
 //############################################################################################  
   
  ArduinoOTA.setPassword((const char *)"123"); // Password for OTA Update "123"  
  ArduinoOTA.begin();                          // on every reset it waits for 60 secs   
                                               // During that time it will accept OTA updates  
  Serial.println("Ready");                     // Turn Firewall off on the PC when trying to   
                                               // Over The Air update sketch  
    
  Serial.print("IP address: ");  
  Serial.println(WiFi.localIP());  
   
   
   
 }  
   
 //##########################################################################################  
   
 //############ SETUP END ###################################################################  
   
 //##########################################################################################   
   
   
  bool ota_update = true ;  // Don't change this manually   
   
   
   
   
   
 //#########################################################################################  
   
 //######### LOOP BEGINS ##################################################################  
   
 //#########################################################################################  
   
   
 void loop()  {  
   
    
    
    
    
   
 //################# WAIT FOR OTA UPDATE ON EVERY START UP #################  
    
   
    
  if(ota_update)                 // on Every Reset ota update boolean will be set to TRUE   
     
  {  
     
     
     
   while(millis()/1000 < 15 ) // then it will count to 60 seconds *******WHEN Reset Switch is Turned ON **********  
                          // it will constantly Reboot and wait for 60 Secs and then after Subscribing Reboots   
   {                      // again  
   
      
     
    ArduinoOTA.handle() ;  // During that time update ota can be done  
      
      
    Serial.println(millis()/1000);  
   
      
    delay(10);  
      
      
   }  
     
     
   Serial.println("Time up");  
   
   ota_update = false ;  // then after time up it will be set to false  
                         // and the rest of the code runs for that instance   
                         // it will happen if the reset switch is then turned off 
     
     
   }  
    
    
    
    
    
 //#########################################################  
    
    
    
    
    
    
    
  if (!client.connected() && WiFi.status() == 3)   
     
   {  
     
    reconnect(); // Reconnect if connection is lost  
      
   }   
   
    
    
    
    
    
  client.loop();  // Maintain MQTT connection  
   
   
  delay(10);      // MUST delay to allow ESP8266 WIFI functions to run  
   
   
 }  
   
   
   
   
   
 void callback(char* topic, byte* payload, unsigned int length) {  
   
    
 String topicStr = topic;   
    
   
    
  Serial.println("Callback update.");  
  Serial.print("Topic: ");  
  Serial.println(topicStr);  
   
    
  //################## Switch 1 ################### COPY THESE BLOCKS FOR MORE SWITCHES ####################   
     
   if (topicStr == "/house/switch1/")   
   {  
   
     
      
    if(payload[0] == '1'){  
      
     digitalWrite(switchPin1, HIGH);  
           
     client.publish("/house/switchConfirm1/", "1");  
     delay(700);  
     }  
   
     
      
    else if (payload[0] == '0'){  
      
     digitalWrite(switchPin1, LOW);  
       
     client.publish("/house/switchConfirm1/", "0");  
       
     }  
      
    }  
      
   
     
      
  //################## Switch 2 #####################################################   
      
      
      
      
      
      
    else if (topicStr == "/house/switch2/")   
    {  
      
     
      
    if(payload[0] == '1'){  
      
     digitalWrite(switchPin2, HIGH);  
       
     client.publish("/house/switchConfirm2/", "1");  
     delay(700);  
      
     }  
       
   
     
     else if (payload[0] == '0'){  
      
     digitalWrite(switchPin2, LOW);  
       
     client.publish("/house/switchConfirm2/", "0");  
       
     }  
       
    }  
      
      
      
  //################## Switch 3 #####################################################   
   
      
      
      
      
      
    else if (topicStr == "/house/switch3/")   
    {  
      
      
      
    if(payload[0] == '1'){  
      
     digitalWrite(switchPin3, HIGH);  
       
     client.publish("/house/switchConfirm3/", "1");  
     delay(700);  
       
     }  
   
      
      
    else if (payload[0] == '0'){  
       
     digitalWrite(switchPin3, LOW);  
       
     client.publish("/house/switchConfirm3/", "0");  
       
     }  
    }  
      
      
      
      
      
 //################## Switch 4 #####################################################   
   
      
      
      
    else if (topicStr == "/house/switch4/")   
    {  
      
      
    if(payload[0] == '1'){  
      
     digitalWrite(switchPin4, HIGH);  
       
     client.publish("/house/switchConfirm4/", "1");  
     delay(700);  
       
     }  
   
      
      
    else if (payload[0] == '0'){  
      
    digitalWrite(switchPin4, LOW);  
      
     client.publish("/house/switchConfirm4/", "0");  
     }  
    }  
   
   
   
   
    
    
    
 //################## Switch 5 Sleep Mode #######################################   
     
   
    
    
    
    
    
  else if (topicStr == "/house/switchSleep/")   
    {  
      
    
    if(payload[0] == '1'){  
   
     client.publish("/house/switchSleepConfirm/", "1");  
   
     Serial.println("going to sleep for 10 secs");  
   
       
     delay(2000);  
          ESP.deepSleep(60*1000000);  
     }  
   
    
      
    else if (payload[0] == '0'){  
      
       
     client.publish("/house/switchSleepConfirm/", "0");  
     }  
    }  
   
   
   
   
 //################## Switch 6 Reset #######################################   
   
   
  else if (topicStr == "/house/switchReset/")   
    {  
      
    
    if(payload[0] == '1'){  
   
     client.publish("/house/switchResetConfirm/", "1");  
   
     Serial.println("going to Reset ");  
   
       
     delay(2000);  
     ESP.deepSleep(5*1000000);  
  
     }  
   
    
      
    else if (payload[0] == '0'){  
      
       
     client.publish("/house/switchResetConfirm/", "0");  
     }  
    }  
   
   
   
   
   
   
   
   
   
   
      
 }  
   
   
 //#########################################################################################  
   
 //######### LOOP ENDS ##################################################################  
   
 //#########################################################################################  
   
   
   
   
   
   
 void reconnect() {  
   
    
    
  if(WiFi.status() != WL_CONNECTED){  
     
   Serial.print("Connecting to ");  
    
   Serial.println(ssid);  
   
     
     
   while (WiFi.status() != WL_CONNECTED) {  
     
    delay(500);  
      
    Serial.print(".");  
     
   }  
   
     
     
   Serial.println("");  
     
   Serial.println("WiFi connected");   
     
   Serial.println("IP address: ");  
     
   Serial.println(WiFi.localIP());  
  }  
   
    
    
    
    
  if(WiFi.status() == WL_CONNECTED){  
    
   while (!client.connected()) {  
    
    Serial.print("Attempting MQTT connection...");  
   
      
      
    // Generate client name based on MAC address and last 8 bits of microsecond counter  
    String clientName;  
    clientName += "esp8266-";  
    uint8_t mac[6];  
    WiFi.macAddress(mac);  
    clientName += macToStr(mac);  
   
       
 //#########################################################################################  
   
 //######### CHANGE MQTT USER NAME AND PASSWORD BELOW ####################################  
   
 //#########################################################################################  
    
      
      
      
    if (client.connect((char*) clientName.c_str(),"newuser", "12345")) {    
      
     Serial.print("\tMQTT Connected");  
       
       
       
       
     client.subscribe(switchReset);        // the order in which topics are arranged here  
   
       
     client.subscribe(switchSleep);        // is how ESP will Subscribe and if you put   
   
                            // relays first and also turn them on and reset or sleep too  
       
                            // the switches will turn on momentarily untill it gets the message to sleep or reset   
       
     client.subscribe(switchTopic1);       // so keep them on the top and then even if the Relay switches are turned on from the page   
       
     client.subscribe(switchTopic2);       // the switch will reset or sleep even before subscribing to the later topics in the list   
       
     client.subscribe(switchTopic3);  
       
     client.subscribe(switchTopic4);  
   
     // ##**************************########  Add MORE TOPICS FOR  SWITCHES HERE   #####################  
       
       
    }  
   
      
    else{Serial.println("\tFailed.");  
      
    delay(2000);  
   //  ESP.deepSleep(5*1000000); 
break;}  
     
   }  
    
  }  
   
 }  
   
   
   
   
   
 String macToStr(const uint8_t* mac){  
   
  String result;  
   
  for (int i = 0; i < 6; ++i) {  
   result += String(mac[i], 16);  
   
   if (i < 5){  
    result += ':';  
   }  
  }  
   
  return result;  
 }