//parametros configurables*************************************************
#define DEBUG_PS 1//Descomentar para debug
#define CON_LCD 0
    
class ActualDomoConfig: public DomoConfig
{
  public:
  ActualDomoConfig()
  {
    velocidadPortSerie=115200;
    strcpy(ssidWifi,"Idhun");//nombre wifi
    strcpy(keyWifi,"Ardileorca1234.");//key wifi
    
    strcpy(ideEsp,"Esp8266_012");//idenitificador del esp (sera único)
    strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
    portMQTT=1883;//puerto del servidor mqtt Broker

    refresTimeVars=30;//tiempo de refresco en segundos de las variables
    refresTimeSens=15;//tiempo de refresco en segundos de los sensores

    //config lcd--------------------
    lcd.colum=16;//columnas lcd
    lcd.lines=2;//lineas
    //pines lcd
    lcd.rs=D5;
    lcd.en=D6;//eneable
    lcd.d0=D3;
    lcd.d1=D2;
    lcd.d2=D1;
    lcd.d3=D0;

  }
  //configuracion de sensores, variables, lcd---------------------------------
  virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
  {
    //sensores--------------------------------------------------------
    /*
    sens->AddHDT22(int pin, char* topic);
    //tempe y presion varometrica
    sens->AddBMP180(int sda,int scl, char* topic);
    //entradas digitales
    sens->AddDin(int pin, char* topic);//añade variable digital que se actualiza de manera instantanea (interruptores sensor presencia ..)
    sens->AddDinAccion(int pin, char* topic);//añade variable que solo publica en el cambio (pulsadores, ...)
    //salida digital
    sens->AddDout(int pin, char* topic, bool defautlValor);//variable que solo publica en el cambio (pulsadores, ...)
    Sensor analogico
    sens->AddAnalogIn(int pin, char* topic, bool ValNegado);//nivel de luz, nivel de lluvia ...
    */
     //sens->AddHDT22(D4, "casa/desp");
     //sens->AddAnalogIn(0, "casa/desp/luz",true);
    //variables----------------------------------------------------
  /*
    int ivar= vars->AddVar(byte flags, char*topic);//variable con flags a elegir
  int ivar= vars->AddInternalVarFloat( char*topic);//variable privada
  int ivar= vars->AddInternalVarInt( char*topic);//variable privada
   */
    int lamb= vars->AddInternalVarInt( "casa/Salon/LAmb");
    int lchim= vars->AddInternalVarInt( "casa/Salon/LChime");
    int pul1= vars->AddInternalVarInt( "casa/Salon/pul1");
    //lcd---------------------------------------------------------
    
     //lcd->add(0,"T des: %s",0,0);
     //lcd->add(1,"H des: %s",1,0);
     //lcd->add(temCoci,"T coci: %s",0,1);
     //lcd->add(temDesp,"H coci: %s",1,1);
     
      /*
     //sin depender de variable
     lcd->add(-1,"Hola",0,0);
     lcd->add(-1,"como va",1,0);

     lcd->add(-1,"Mi ritmo",0,1);
     lcd->add(-1,"bueno pa goza",1,1);*/


     //desencadenadores----------------------------------
      int id=des-> addDesencadenador(MqttCausa::AND_CAUSA);//MqttCausa::AND_CAUSA  MqttCausa::OR_CAUSA  
      //MqttEfecto::InvierteValVar
      //MqttEfecto::SetValVar
      des->addEfecto(id,MqttEfecto::InvierteValVar, "casa/Salon/LAmb");//añade efecto al desencadenador (devuelve id efecto)

      //MqttOper::Igual_val_oper
      //MqttOper::Menor_val_oper
      //MqttOper::Mayor_val_oper
      des->addOperCausaI(id, "casa/Salon/pul1", MqttOper::Igual_val_oper, (byte)1 );
      //des->addOperCausaF(int ides, char *topic, int tipo, float val );
     
  }
};
//#define DEBUG_PS 1//Descomentar para debug
//#define CON_LCD 1
class DespachoDomoConfig: public DomoConfig
{
  public:
  DespachoDomoConfig()
  {
    velocidadPortSerie=115200;
    strcpy(ssidWifi,"Idhun");//nombre wifi
    strcpy(keyWifi,"Ardileorca1234.");//key wifi
    
    strcpy(ideEsp,"Esp8266_despacho");//idenitificador del esp (sera único)
    strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
    portMQTT=1883;//puerto del servidor mqtt Broker

    refresTimeVars=30;//tiempo de refresco en segundos de las variables
    refresTimeSens=15;//tiempo de refresco en segundos de los sensores

    //config lcd--------------------
    lcd.colum=16;//columnas lcd
    lcd.lines=2;//lineas
    //pines lcd
     lcd.rs=D5;
    lcd.en=D6;//eneable
    lcd.d0=D3;
    lcd.d1=D2;
    lcd.d2=D1;
    lcd.d3=D0;

  }
  //configuracion de sensores, variables, lcd---------------------------------
  virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
  {
    //sensores--------------------------------------------------------
     sens->AddHDT22(D4, "casa/desp");
     sens->AddAnalogIn(0, "casa/desp/luz",true);
    //variables----------------------------------------------------
    int temCoci= vars->AddInternalVarFloat( "casa/cocina/t");//variable privada
    int temDesp= vars->AddInternalVarFloat( "casa/cocina/h");//variable privada
     
    //lcd---------------------------------------------------------
     lcd->add(0,"T des: %s",0,0);
     lcd->add(1,"H des: %s",1,0);
     lcd->add(temCoci,"T coci: %s",0,1);
     lcd->add(temDesp,"H coci: %s",1,1);    
  }
};
class CocinaDomoConfig: public DomoConfig
{
  public:
  CocinaDomoConfig()
  {
    velocidadPortSerie=115200;
    strcpy(ssidWifi,"Idhun");//nombre wifi
    strcpy(keyWifi,"Ardileorca1234.");//key wifi
    strcpy(ideEsp,"Esp8266_cocina");//idenitificador del esp (sera único)
    strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
    portMQTT=1883;//puerto del servidor mqtt Broker
    refresTimeVars=30;//tiempo de refresco en segundos de las variables
    refresTimeSens=15;//tiempo de refresco en segundos de los sensores
  }
  //configuracion de sensores---------------------------------
  virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
  {
     sens->AddHDT22(D4, "casa/cocina");
     sens->AddDinAccion(D5, "casa/cocina/mov");
     sens->AddAnalogIn(0, "casa/cocina/luz",true);
  }
};


//configuracion que se usara--------------------------
ActualDomoConfig ConfiguracionActual;
