viernes, 10 de junio de 2016

Ejemplos Basicos (3) - Salida con modo Automatico




Seguimos en esta mini-serie de tutoriales basicos con el ejemplo para configurar y controlar una Salida  que ademas tiene modo Automatico, de modo que podamos controlarla utilizando tanto un Sensor de Presencia (PIR) como ya lo haciamos desde la Aplicacion de Android.

Seguimos como siempre con el ejemplo:



/**************************************************************************
    Souliss - Autolight for Expressif ESP8266
   
    This is the basic example, create a software push-button on Android
    using SoulissApp (get it from Play Store). 
   
    Load this code on ESP8266 board using the porting of the Arduino core
    for this platform.
       
***************************************************************************/

// Let the IDE point to the Souliss framework
#include "SoulissFramework.h"

// Configure the framework
#include "bconf/MCU_ESP8266.h"              // Load the code directly on the ESP8266
#include "conf/Gateway.h"                   // The main node is the Gateway, we have just one node
#include "conf/IPBroadcast.h"

// **** Define the WiFi name and password ****
#define WIFICONF_INSKETCH
#define WiFi_SSID               "mywifi"
#define WiFi_Password           "mypassword"   

// Include framework code and libraries
#include <ESP8266WiFi.h>
#include <EEPROM.h>

/*** All configuration includes should be above this line ***/
#include "Souliss.h"

// This identify the number of the LED logic
#define MYLEDLOGIC          0              

// **** Define here the right pin for your ESP module ****
#define OUTPUTPIN   5

#define INPUTPIN       4 
#define LIGHT_ON_CYCLE 10 // Light ON for 10 cycles if triggered by a PIR sensor

void setup()
{  
    Initialize();

    // Connect to the WiFi network and get an address from DHCP
    GetIPAddress();                          
    SetAsGateway(myvNet_dhcp);       // Set this node as gateway for SoulissApp 

    Set_AutoLight(MYLEDLOGIC);        // Define a simple LED light logic
    pinMode(OUTPUTPIN, OUTPUT);         // Use pin as output
    pinMode(INPUTPIN, INPUT);         // Use pin as input
}

void loop()
{
    // Here we start to play
    EXECUTEFAST() {                    
        UPDATEFAST();  
       
        FAST_50ms() {   // We process the logic and relevant input and output every 50 milliseconds
            DigIn(INPUTPIN, LIGHT_ON_CYCLE, MYLEDLOGC);
            Logic_AutoLight(MYLEDLOGIC);
            nDigOut(OUTPUTPIN, Souliss_T1n_Coil, MYLEDLOGIC);
        }
             
        // Here we handle here the communication with Android
        FAST_GatewayComms();                                       
    }
    EXECUTESLOW()   {  
        UPDATESLOW();

        SLOW_10s()  {         
       
            // The timer handle timed-on states
            Timer_AutoLight(MYLEDLOGIC);                     
        }    
    }
}

En este ejemplo añadimos algunos elementos nuevos, en primer lugar añadimos un INPUTPIN que será al que vaya conectado el Sensor de Presencia (PIR), tambien #definimos una constante LIGHT_ON_CYCLE con valor 10, este valor es el que determina cuanto tiempo (ciclos) estará la Luz (Slot) encendida.

En el setup() unicamente hacemos el Set_AutoLight para declarar el Slot y un pinMode para indicar que el INPUTPIN será utilizado como Entrada para el PIR.

En el loop() vemos otra novedad, utilizamos la funcion DigIn para enviar la señal de encendido al Slot. Esto actuará unicamente si el Slot esta configurado en Auto en la App. Despues un Logic como siempre y en ultima instancia un nDigOut para enviar la señal al pin de Salida.

Por ultimo y tambien el el loop() encontramos en el EXECUTESLOW() el Timer_AutoLight, esta funcion está destinada a controlar el tiempo de encendido del Slot y cuando apagarlo.
Esta funcion tambien se puede utilizar en otros tipos de Slot como el SimpleLight o el DimmableLight para hacer la funcion "Dormir" de la App de Android, es decir, que una vez se pulsa el boton inicia un contador de 0 ciclos hasta que el Slot se apaga.

Para una comprension mas profunda de la estructura es recomendable leer esta Entrada:
Estructura del código Souliss

Comentarios, sugerencias o preguntas aqui abajo :P Salu2


3 comentarios:

  1. Hola, alguno ha conseguido usar el modo auto desde el openhab, disculpen si la pregunta no es la adecuada aqui.

    ResponderEliminar
    Respuestas
    1. Puedes preguntar por aqui o por el foro :P no hay problema.
      La respuesta: Dadas las limitaciones de OH en cuanto a interfaz (no hay botones de 3 posiciones) Antonino (quien hizo el binding) lo añadió utilizando 2 switches, uno para el ON / OFF de la luz y otro para activar o desactivar el AUTO mode, estos son los items que tengo yo en mi red:

      Switch node2_slot12 "ON-OFF Salida con modo AUT" (node2,lights) { souliss="T12:2:12:switch", autoupdate="false" }
      Switch node2_slot12_auto "ON-OFF Salida con modo AUT_Auto" (node2,lights) { souliss="T12:2:12:automode", autoupdate="false" }

      Si te fijas el quid de la cuestion está despues de souliss="T12:2:12: :P

      Salu2

      Eliminar
  2. Muy buenas, como se puede hacer para invertir el on-off , como si de un relé se tratase utilizando LowDigOut en nDigOut ? Gracias!!

    ResponderEliminar