Arreglos varios y proyecto vs

master
Gerardo 2022-02-12 00:42:27 +01:00
parent a6406c785e
commit eae3647d68
34 changed files with 1106 additions and 505 deletions

View File

@ -0,0 +1,16 @@
{
"Version": 1,
"ProjectMap": {
"a2fe74e1-b743-11d0-ae1a-00a0c90fffc3": {
"ProjectGuid": "a2fe74e1-b743-11d0-ae1a-00a0c90fffc3",
"DisplayName": "Archivos varios",
"ColorIndex": -1
},
"c5f80730-f44f-4478-bdae-6634efc2ca88": {
"ProjectGuid": "c5f80730-f44f-4478-bdae-6634efc2ca88",
"DisplayName": "DomoEsp_v02",
"ColorIndex": 0
}
},
"NextColorIndex": 1
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@
{
"CurrentProjectSetting": "Visual Micro"
}

View File

@ -0,0 +1,7 @@
{
"ExpandedNodes": [
""
],
"SelectedNode": "\\MqttVarManager.h",
"PreviewInSolutionExplorer": false
}

BIN
DomoEsp_v02/.vs/slnx.sqlite Normal file

Binary file not shown.

View File

@ -0,0 +1,8 @@
{
"configurations": [
{
"name": "Visual Micro",
"intelliSenseMode": "windows-msvc-x86"
}
]
}

View File

@ -10,7 +10,7 @@ DomoEspManager::DomoEspManager()
suscrito=false;
}
void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiClient* espClient, DomoConfig* conf)
void DomoEspManager::inicia(WakeOnLan *pwol, LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiClient* espClient, DomoConfig* conf)
{
mqttclient=mqttClient;
#ifdef DEBUG_PS
@ -27,7 +27,7 @@ void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiC
//pasar funcion de configuracion de añadir sensores
conf->ConfigGen(&sens, &vars, &lcdm, &des);
conf->ConfigGen(&sens, &vars, &lcdm, &wol, &des);
#ifdef DEBUG_PS
@ -78,6 +78,7 @@ void DomoEspManager::inicia( LiquidCrystal *lcd, PubSubClient *mqttClient, WiFiC
Serial.println("iniciado LCD");
#endif
#endif
wol.inicia(pwol);
}
@ -102,6 +103,7 @@ void DomoEspManager::loop()
#if CON_LCD
lcdm.suscribe(mqttclient);
#endif
wol.suscribe(mqttclient);
suscrito=true;
}
@ -121,6 +123,10 @@ void DomoEspManager::OnMqtt(char* topic, char* payload)
lcdm.OnMqtt(topic, payload);
#endif
#if CON_WOL
wol.OnMqtt(topic, payload);
#endif
#ifdef DEBUG_PS
Serial.println("OnMqtt fin");
#endif

View File

@ -16,6 +16,8 @@
#include "MqttSensManager.h"
#include "MqttDesencadenadorManager.h"
#include "LcdMQTTViewer.h"
#include "MqttWOLManager.h"
#if CON_LCD
//configuracion del lcd--------------------------
@ -30,6 +32,7 @@
class PubSubClient;
class WiFiClient;
class MqttSensManager;
class WakeOnLan;
/*
* clase principal
*/
@ -66,7 +69,7 @@ class DomoConfig
int refresTimeSens;//tiempo de refresco en segundos de los sensores
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)=0;
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttWOLManager *wol, MqttDesencadenadorManager *des)=0;
};
@ -93,12 +96,15 @@ class DomoEspManager: public MqttReceiver
SonidoBuzzer buzz;
LcdMQTTViewer lcdm;
MqttWOLManager wol;
bool suscrito;
//PubSubClient client_qqtt(WifiManager::espClient);
DomoEspManager();
//PubSubClient client_qqtt(espClient);
void inicia( LiquidCrystal *lcd,PubSubClient *mqttClient, WiFiClient* espClient, DomoConfig* conf);
void inicia(WakeOnLan* pwol, LiquidCrystal *lcd,PubSubClient *mqttClient, WiFiClient* espClient, DomoConfig* conf);
void loop();
//funciones auxiliares

View File

@ -1,5 +1,3 @@
/*
* Software basico sersor domotica con esp8266 / esp32 nodemcu
* Controlado por mqtt
@ -33,6 +31,7 @@ Y PROBAR RF*/
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
WiFiUDP UDP;
#include <SimpleDHT.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
@ -40,6 +39,10 @@ Y PROBAR RF*/
#include "DomoEspManager.h"
#include "MqttWOLManager.h"
#include <WakeOnLan.h>
#include "config_rf.h"
//variables globales----------------------------
@ -50,13 +53,20 @@ DomoEspManager domoEspManager;
WiFiClient EspClient;
PubSubClient clienteMqtt(EspClient);
LiquidCrystal *plcd=NULL;
#if CON_LCD
#if CON_LCD
LiquidCrystal lcd(
ConfiguracionActual.lcd.rs,
ConfiguracionActual.lcd.en,
ConfiguracionActual.lcd.d0,ConfiguracionActual.lcd.d1,ConfiguracionActual.lcd.d2,ConfiguracionActual.lcd.d3);
#endif
#endif
WakeOnLan* pwol=NULL;
#if CON_WOL
WakeOnLan WOL(UDP);
//pwol=&WOL;
#endif
//funciones principales------------------------
void setup()
{
@ -69,7 +79,10 @@ void setup()
Serial.println("");
Serial.println("Iniciando");
#endif
domoManager.inicia(plcd,&clienteMqtt,&EspClient,&ConfiguracionActual);
#if CON_WOL
pwol=&WOL;
#endif
domoManager.inicia(pwol,plcd,&clienteMqtt,&EspClient,&ConfiguracionActual);
}

View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.32112.339
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DomoEsp_v02", "DomoEsp_v02.vcxproj", "{C5F80730-F44F-4478-BDAE-6634EFC2CA88}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.ActiveCfg = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.Build.0 = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.ActiveCfg = Release|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1995B5A1-341C-4B18-B509-04838EC7A212}
EndGlobalSection
EndGlobal

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="DomoEsp_v02.ino" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="__vm\.DomoEsp_v02.vsarduino.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="config_rf.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DomoEspManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="LcdMQTTViewer.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MqttDefines.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MqttDesencadenadorManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MqttSensManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MqttUtiles.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MqttVarManager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MqttWOLManager.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="DomoEspManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LcdMQTTViewer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MqttDesencadenadorManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MqttSensManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MqttUtiles.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MqttVarManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MqttWOLManager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

View File

@ -11,18 +11,29 @@
void LcdMQTTViewer::envia(char* txt, int pos, int line)
{
lcd->setCursor(pos, line);
char buf[MAXTOPICVAR];
int l = strlen(txt);
if (l < nchar)
for (int i = l; i < nchar; i++)
txt[i] = ' ';
txt[nchar] = 0;
lcd->print(txt);
if (l > nchar)
l = nchar;
for (int i = 0; i < nchar; i++)
if (i < l)
buf[i] = txt[i];
else
buf[i] = ' ';
buf[nchar] = 0;
lcd->setCursor(pos, line);
lcd->print(buf);
}
LcdMQTTViewer::LcdMQTTViewer()
{
ivarBuzzer=-1;
topic[0]=0;
panActual = 0;
ivarBuzzer=-1;
topic[0]=0;
maxpan = 0;
tiempo = 0;
incre_t = 10 * 1000;
@ -41,7 +52,7 @@ void LcdMQTTViewer::setTimer(int seg)
void LcdMQTTViewer::envia(int pan)
{
char val[16];
char buf[32];
char buf[MAXTOPICVAR];
for (int i = 0; i < maxtInfo; i++)
{
if (LcdConf[i].pan != pan)
@ -69,9 +80,9 @@ void LcdMQTTViewer::inicia(MqttVarManager *v, LiquidCrystal* lcdEx, int digi, in
{
ivarBuzzer=(byte)ibuz;
vars=v;
lcd =lcdEx;
nchar = digi;
lcd->begin(nchar, lines);
lcd =lcdEx;
nchar = digi;
lcd->begin(nchar, lines);
nlineslcd=lines;
for(int i=0; i<lines; i++)
{
@ -112,7 +123,7 @@ int LcdMQTTViewer::OnMqtt(char* top, char* payload)
int i=0;
int lin=0;
int n=0;
char buf[64];
char buf[MAXTOPICVAR*2];
char imelod[12];
int nmelod=0;
bool melodia=false;

View File

@ -13,7 +13,7 @@ class MqttVarManager;
struct LcdMQTTInfo
{
byte ivar;//indice a variable
char formatLCD[32];//formato
char formatLCD[MAXTOPICVAR];//formato
byte pan;//pantalla en la que sale
byte line;//linea en la que sale
@ -24,11 +24,11 @@ class LcdMQTTViewer
{
public:
LiquidCrystal *lcd;
int nchar;
int nchar;//caracteres maximos por linea del lcd
int maxtInfo;
int maxpan;
int panActual = 0;
byte nlineslcd;
int maxpan;//maximo de pantallas configuradas
int panActual;//pantalla que esta mostrando actualmente
byte nlineslcd;//lineas maximas del lcd
byte ivarBuzzer;
unsigned long tiempo;
unsigned long incre_t;
@ -49,6 +49,6 @@ public:
void setTimer(int seg);
void envia(char* txt, int pos, int line);
void envia(int pan);
void revisa();
//void revisa();
};
#endif

View File

@ -3,13 +3,14 @@
#define MqttDefinesDef 1
//generales
#define DEBUG_PS 1
#define CON_WOL 0
#define CON_LCD 0
#define MAXTOPICVAR 32//maximo de caracteres de los topic de las variables
//vars--------------------
#define MAXVAR 24//maximo de variables totales
#define MAXSTR 1024//maximo de caracteres para str
#define MAXSTR 2024//maximo de caracteres para str
//sens--------------------
#define MAXSENS 8

View File

@ -4,382 +4,383 @@
MqttDesencadenador::MqttDesencadenador()
{
activo=true;
activo = true;
}
MQTTvalor MqttDesencadenador::GetVarValue(char*ivar, MqttVarManager *vars)
MQTTvalor MqttDesencadenador::GetVarValue(char* ivar, MqttVarManager* vars)
{
MqttVar *v=GetVar(ivar, vars);
return v->val;
MqttVar* v = GetVar(ivar, vars);
return v->val;
}
float MqttDesencadenador::GetValue(char*ivar, MqttVarManager *vars)
float MqttDesencadenador::GetValue(char* ivar, MqttVarManager* vars)
{
MqttVar *v=GetVar(ivar, vars);
if(v->flags & MqttVar::FLOAT_VAR)
return v->val.f;
return (float)v->val.i;
MqttVar* v = GetVar(ivar, vars);
if (v->flags & MqttVar::FLOAT_VAR)
return v->val.f;
return (float)v->val.i;
}
int MqttDesencadenador::GetIvar(char*ivar)
int MqttDesencadenador::GetIvar(char* ivar)
{
char buf[16];
int n=strlen(ivar);
strcpy(buf,ivar);
buf[n-1]=0;
return atoi(buf);
char buf[16];
int n = strlen(ivar);
strcpy(buf, ivar);
buf[n - 1] = 0;
return atoi(buf);
}
MqttVar* MqttDesencadenador::GetVar(char*ivar, MqttVarManager *vars)
MqttVar* MqttDesencadenador::GetVar(char* ivar, MqttVarManager* vars)
{
return vars->Get(GetIvar(ivar));
return vars->Get(GetIvar(ivar));
}
void MqttDesencadenador::ExeEfecto(MqttVarManager *vars, char *oper, char*x, char*y)
void MqttDesencadenador::ExeEfecto(MqttVarManager* vars, char* oper, char* x, char* y)
{
#ifdef DEBUG_PS
#ifdef DEBUG_PS
Serial.print("MqttDesencadenador::ExeEfecto: ");
Serial.print(oper);
Serial.print(" x: ");
Serial.print(x);
Serial.print(" y: ");
Serial.println(y);
#endif
Serial.print("MqttDesencadenador::ExeEfecto: ");
Serial.print(oper);
Serial.print(" x: ");
Serial.print(x);
Serial.print(" y: ");
Serial.println(y);
#endif
switch(oper[0])
{
case('!'):
{
vars->InvierteVar(GetIvar(x));
return;
}
case('='):
{
MqttVar* v=GetVar(x, vars);
MQTTvalor val=GetVarValue(x, vars);
if(v->flags & MqttVar::FLOAT_VAR)
val.f=atof(y);
else
val.i=atoi(y);
vars->SetVal(GetIvar(x),val);
return;
}
}
switch (oper[0])
{
case('!'):
{
vars->InvierteVar(GetIvar(x));
return;
}
case('='):
{
MqttVar* v = GetVar(x, vars);
MQTTvalor val = GetVarValue(x, vars);
if (v->flags & MqttVar::FLOAT_VAR)
val.f = atof(y);
else
val.i = atoi(y);
vars->SetVal(GetIvar(x), val);
return;
}
}
}
bool MqttDesencadenador::Eval(MqttVarManager *vars, char *oper, char*x, char*y)
bool MqttDesencadenador::Eval(MqttVarManager* vars, char* oper, char* x, char* y)
{
#ifdef DEBUG_PS
#ifdef DEBUG_PS
Serial.print("MqttDesencadenador::eval: ");
Serial.print(oper);
Serial.print(" x: ");
Serial.print(x);
Serial.print(" y: ");
Serial.println(y);
#endif
//las variables estaran terminadas en }
float vx,vy;
//pilla valores
int nx=strlen(x);
int ny=strlen(y);
if(x[nx-1]=='}')
vx=GetValue(x, vars);
else
vx=atof(x);
if(ny<=0)
vy=0;
if(y[ny-1]=='}')
vy=GetValue(y, vars);
else
vy=atof(y);
switch(oper[0])
{
case('!'):
return vx!=1;
case('='):
return vx==vy;
case('<'):
{
if(oper[1]=='=')
return vx<=vy;
return vx<vy;
}
Serial.print("MqttDesencadenador::eval: ");
Serial.print(oper);
Serial.print(" x: ");
Serial.print(x);
Serial.print(" y: ");
Serial.println(y);
#endif
//las variables estaran terminadas en }
float vx, vy;
//pilla valores
int nx = strlen(x);
int ny = strlen(y);
if (x[nx - 1] == '}')
vx = GetValue(x, vars);
else
vx = atof(x);
if (ny <= 0)
vy = 0;
else if (y[ny - 1] == '}')
vy = GetValue(y, vars);
else
vy = atof(y);
switch (oper[0])
{
case('!'):
return vx != 1;
case('='):
return vx == vy;
case('<'):
{
if (oper[1] == '=')
return vx <= vy;
return vx < vy;
}
case('>'):
if(oper[1]=='=')
return vx>=vy;
return vx>vy;
}
return false;
case('>'):
if (oper[1] == '=')
return vx >= vy;
return vx > vy;
}
return false;
}
int MqttDesencadenador::GetElementosOper( char *oper)
int MqttDesencadenador::GetElementosOper(char* oper)
{
if(oper[0]=='!')
return 1;
else
return 2;
if (oper[0] == '!')
return 1;
else
return 2;
}
void MqttDesencadenador::procesaOper(MqttExeParam *p)
void MqttDesencadenador::procesaOper(MqttExeParam* p)
{
if(expresion[p->i]<='9' && expresion[p->i]>='0'|| expresion[p->i]=='.'|| expresion[p->i]=='{' || expresion[p->i]==' ' )
{
p->estado=0;
p->toper=true;
p->oper[p->noper]=0;
/* #ifdef DEBUG_PS
Serial.print("encontrado oper: ");
Serial.println( p->oper);
#endif*/
}
else
{
p->oper[p->noper++]=expresion[p->i];
p->i++;
}
if (expresion[p->i] <= '9' && expresion[p->i] >= '0' || expresion[p->i] == '.' || expresion[p->i] == '{' || expresion[p->i] == ' ')
{
p->estado = 0;
p->toper = true;
p->oper[p->noper] = 0;
#ifdef DEBUG_PS
Serial.print("encontrado oper: ");
Serial.println( p->oper);
#endif
}
else
{
p->oper[p->noper++] = expresion[p->i];
p->i++;
}
}
void MqttDesencadenador::procesaVar(MqttExeParam *p)
void MqttDesencadenador::procesaVar(MqttExeParam* p)
{
if((expresion[p->i]<='9' && expresion[p->i]>='0')|| expresion[p->i]=='.')
{
if(p->tvar1)
p->var2[p->nvar2++]=expresion[p->i];
else
p->var1[p->nvar1++]=expresion[p->i];
p->i++;
if ((expresion[p->i] <= '9' && expresion[p->i] >= '0') || expresion[p->i] == '.')
{
if (p->tvar1)
p->var2[p->nvar2++] = expresion[p->i];
else
p->var1[p->nvar1++] = expresion[p->i];
p->i++;
}
else
{
p->estado=0;
if(expresion[p->i]=='}')
{
if(p->tvar1)
p->var2[p->nvar2++]=expresion[p->i];
else
p->var1[p->nvar1++]=expresion[p->i];
p->i++;
}
if(p->tvar1)
{
p->var2[p->nvar2]=0;
p->tvar2=true;
/* #ifdef DEBUG_PS
Serial.print("encontrado var2: ");
Serial.println( p->var2);
#endif*/
}
else
{
p->var1[p->nvar1]=0;
p->tvar1=true;
/* #ifdef DEBUG_PS
Serial.print("encontrado var1: ");
Serial.println( p->var1);
#endif*/
}
}
}
else
{
p->estado = 0;
if (expresion[p->i] == '}')
{
if (p->tvar1)
p->var2[p->nvar2++] = expresion[p->i];
else
p->var1[p->nvar1++] = expresion[p->i];
p->i++;
}
if (p->tvar1)
{
p->var2[p->nvar2] = 0;
p->tvar2 = true;
#ifdef DEBUG_PS
Serial.print("encontrado var2: ");
Serial.println( p->var2);
#endif
}
else
{
p->var1[p->nvar1] = 0;
p->tvar1 = true;
#ifdef DEBUG_PS
Serial.print("encontrado var1: ");
Serial.println( p->var1);
#endif
}
}
}
bool MqttDesencadenador::Exe(MqttVarManager *vars)
bool MqttDesencadenador::Exe(MqttVarManager* vars)
{
#ifdef DEBUG_PS
#ifdef DEBUG_PS
Serial.print("MqttDesencadenador::Exe: ");
Serial.print(expresion);
Serial.print(" activo: ");
Serial.println(activo);
#endif
//por ahora limite de 2 var
MqttExeParam p;
bool res=false;
while(expresion[p.i]!=0 && p.sigue)
{
/*
#ifdef DEBUG_PS
Serial.print("MqttDesencadenador::Exe: ");
Serial.print(expresion[i]);
Serial.print(" estado ");
Serial.println(estado);
#endif
*/
Serial.print("MqttDesencadenador::Exe: ");
Serial.print(expresion);
Serial.print(" activo: ");
Serial.println(activo);
#endif
//por ahora limite de 2 var
MqttExeParam p;
bool res = false;
while (expresion[p.i] != 0 && p.sigue)
{
/*
#ifdef DEBUG_PS
Serial.print("MqttDesencadenador::Exe: ");
Serial.print(expresion[i]);
Serial.print(" estado ");
Serial.println(estado);
#endif
*/
switch(p.estado)
{
switch (p.estado)
{
case(0)://estado selector
{
//distincion de operar
if(p.toper)
{
if(p.oper[0]=='-' && p.oper[1]=='>')
{
case(0)://estado selector
{
//distincion de operar
if (p.toper)
{
if (p.oper[0] == '-' && p.oper[1] == '>')
{
p.tcausa=true;
p.toper=false;
p.noper=0;
p.tcausa = true;
p.toper = false;
p.noper = 0;
p.oper[0] = 0;
if (!p.res || !activo)
{
activo = !p.res;
/* #ifdef DEBUG_PS
if(!p.res || !activo)
{
activo=!p.res;
/* #ifdef DEBUG_PS
Serial.println("Fin causa sale ");
#endif*/
p.sigue = false;
break;
}
else
{
activo = false;
res = true;
/*#ifdef DEBUG_PS
activo=false;
Serial.println("Fin causa sigue ");
#endif*/
}
}
else if (p.oper[0] == '&')
{
/* #ifdef DEBUG_PS
Serial.println("Fin causa sale ");
#endif*/
p.sigue=false;
break;
}
else
{
activo=false;
res=true;
/*#ifdef DEBUG_PS
activo=false;
Serial.println("Fin causa sigue ");
#endif*/
}
}
else if(p.oper[0]=='&')
{
/* #ifdef DEBUG_PS
Serial.println("operador and ");
#endif*/
//p.tcausa=true;
p.toper = false;
p.noper = 0;
p.esAnd = true;
p.oper[0] = 0;
Serial.println("operador and ");
#endif*/
//p.tcausa=true;
p.toper=false;
p.noper=0;
p.esAnd=true;
}
else if (p.oper[0] == '|')
{
/*#ifdef DEBUG_PS
}
else if(p.oper[0]=='|')
{
/*#ifdef DEBUG_PS
Serial.println("operador or ");
#endif*/
//p.tcausa=true;
p.toper = false;
p.noper = 0;
p.esAnd = false;
}
}
if (p.toper && p.tvar1 && (GetElementosOper(p.oper) == 1 || p.tvar2))
{
Serial.println("operador or ");
#endif*/
//p.tcausa=true;
p.toper=false;
p.noper=0;
p.esAnd=false;
}
}
if(p.toper && p.tvar1 &&(GetElementosOper(p.oper)==1 || p.tvar2))
{
//valida causa
if (!p.tcausa)
{
//valida causa
if (p.esAnd)
p.res = p.res && Eval(vars, p.oper, p.var1, p.var2);
else
p.res = p.res || Eval(vars, p.oper, p.var1, p.var2);
//valida causa
if(!p.tcausa)
{
//valida causa
if(p.esAnd)
p.res= p.res && Eval(vars, p.oper, p.var1, p.var2 );
else
p.res=p.res || Eval(vars, p.oper, p.var1, p.var2 );
/* #ifdef DEBUG_PS
Serial.print("validaCausa res: ");
Serial.print(p.res);
Serial.print(" esAnd: ");
Serial.println(p.esAnd);
#endif*/
/* #ifdef DEBUG_PS
Serial.print("validaCausa res: ");
Serial.print(p.res);
Serial.print(" esAnd: ");
Serial.println(p.esAnd);
#endif*/
}
else
{
//ejecuta efecto
ExeEfecto(vars, p.oper, p.var1, p.var2);
}
/*#ifdef DEBUG_PS
}
else
{
//ejecuta efecto
ExeEfecto( vars,p.oper, p.var1, p.var2 );
}
/*#ifdef DEBUG_PS
Serial.println("Fin oper ");
#endif*/
p.tvar1 = p.tvar2 = p.toper = false;
p.nvar1 = p.nvar2 = p.noper = 0;
p.var1[0] = 0;
p.var2[0] = 0;
p.oper[0] = 0;
}
if (expresion[p.i] == ' ')//pasa de los espacios
{
p.i++;
break;
}
Serial.println("Fin oper ");
#endif*/
p.tvar1=p.tvar2=p.toper=false;
p.nvar1=p.nvar2=p.noper=0;
p.var1[0]=0;
p.var2[0]=0;
}
if(expresion[p.i]==' ')//pasa de los espacios
{
p.i++;
break;
}
//distincion de escalares
if ((expresion[p.i] <= '9' && expresion[p.i] >= '0') || expresion[p.i] == '.')
{
p.estado = 1;
if (p.tvar1)
p.nvar2 = 0;
else
p.nvar1 = 0;
}
else
{
//distincion de variables
if (expresion[p.i] == '{')
{
p.estado = 1;
p.i++;
}
else//distincion de operadores
{
p.estado = 2;
}
}
}
break;
case(1)://pillando var o escalar
procesaVar(&p);
break;
case(2)://pilla oper
procesaOper(&p);
break;
}
}
#ifdef DEBUG_PS
//distincion de escalares
if((expresion[p.i]<='9' && expresion[p.i]>='0') || expresion[p.i]=='.' )
{
p.estado=1;
if(p.tvar1)
p.nvar2=0;
else
p.nvar1=0;
}
else
{
//distincion de variables
if(expresion[p.i]=='{')
{
p.estado=1;
p.i++;
}
else//distincion de operadores
{
p.estado=2;
}
}
}
break;
case(1)://pillando var o escalar
procesaVar(&p);
break;
case(2)://pilla oper
procesaOper(&p);
break;
}
}
#ifdef DEBUG_PS
Serial.println("MqttDesencadenador::Exe fin");
#endif
return res;
Serial.println("MqttDesencadenador::Exe fin");
#endif
return res;
}
//*******************************************************************
MqttDesencadenadorArray::MqttDesencadenadorArray()
{
n=0;
n = 0;
}
MqttDesencadenador* MqttDesencadenadorArray::Get(int i)
{
return &(data[i]);
return &(data[i]);
}
int MqttDesencadenadorArray::Add(MqttDesencadenador* var)
{
data[n]=*var;
strcpy( data[n].expresion,var->expresion);
n++;
return n-1;
data[n] = *var;
strcpy(data[n].expresion, var->expresion);
n++;
return n - 1;
}
//*******************************************************************
MqttDesencadenadorManager::MqttDesencadenadorManager()
{
revisa=true;
revisa = true;
}
void MqttDesencadenadorManager::OnVarChange(int ivar)
{
revisa=true;
//marca Accion--
revisa = true;
//marca Accion--
}
void MqttDesencadenadorManager::inicia( MqttVarManager *v)
void MqttDesencadenadorManager::inicia(MqttVarManager* v)
{
vars=v;
if(des.n>0)
{
#ifdef DEBUG_PS
Serial.println("MqttDesencadenador::inicia como listenner");
#endif
vars->AddListenner(this);
}
vars = v;
if (des.n > 0)
{
#ifdef DEBUG_PS
Serial.println("MqttDesencadenador::inicia como listenner");
#endif
vars->AddListenner(this);
}
}
void MqttDesencadenadorManager::Suscribe()
@ -388,43 +389,43 @@ void MqttDesencadenadorManager::Suscribe()
}
int MqttDesencadenadorManager::OnMqtt(char* topic, char* payload)
{
return -1;
return -1;
}
void MqttDesencadenadorManager::loop()
{
if(revisa)
{
revisa=false;
RevisaDesencadenadores();
}
if (revisa)
{
revisa = false;
RevisaDesencadenadores();
}
}
void MqttDesencadenadorManager::RevisaDesencadenadores()
{
#ifdef DEBUG_PS
Serial.println("MqttDesencadenadorManager::RevisaDesencadenadores");
#endif
bool revisa=true;
while(revisa)
{
revisa=false;
for(int i=0; i<des.n; i++)
{
if(des.Get(i)->Exe(vars))
revisa=true;
}
//desmarca Var de volatiles
vars->ResetVolatileVar();
}
#ifdef DEBUG_PS
Serial.println("MqttDesencadenadorManager::RevisaDesencadenadores");
#endif
bool revisa = true;
while (revisa)
{
revisa = false;
for (int i = 0; i < des.n; i++)
{
if (des.Get(i)->Exe(vars))
revisa = true;
}
//desmarca Var de volatiles
vars->ResetVolatileVar();
}
#ifdef DEBUG_PS
Serial.println("RevisaDesencadenadores fin");
#endif
#ifdef DEBUG_PS
Serial.println("RevisaDesencadenadores fin");
#endif
}
void MqttDesencadenadorManager::AddDes(char *expresion)
void MqttDesencadenadorManager::AddDes(char* expresion)
{
MqttDesencadenador d;
strcpy(d.expresion, expresion);
des.Add(&d);
MqttDesencadenador d;
strcpy(d.expresion, expresion);
des.Add(&d);
}

View File

@ -45,7 +45,7 @@ struct MqttExeParam
class MqttDesencadenador
{
public:
char expresion[MAXSTRDESEN];//{1}=1->!{2}
char expresion[MAXSTRDESEN];//"{1}=1 -> !{2} "
bool activo;//se desactivan automaticamente cuando se cumple la condicion y se vuelve activar cuando deja de cumplirse
MqttDesencadenador();
@ -53,15 +53,18 @@ class MqttDesencadenador
bool Exe(MqttVarManager *vars);
//auxiliar----------------
void procesaVar(MqttExeParam *p);
void procesaOper(MqttExeParam *p);
void procesaVar(MqttExeParam *p);//recoge expresion de variable o float
void procesaOper(MqttExeParam *p);//recoge operador
MQTTvalor GetVarValue(char*ivar, MqttVarManager *vars);
int GetIvar(char*ivar);
MqttVar* GetVar(char*ivar, MqttVarManager *vars);
int GetElementosOper( char *oper);
bool Eval(MqttVarManager *vars, char *oper, char*x, char*y);
void ExeEfecto(MqttVarManager *vars, char *oper, char*x, char*y);
bool Eval(MqttVarManager *vars, char *oper, char*x, char*y);//evalua operador
void ExeEfecto(MqttVarManager *vars, char *oper, char*x, char*y);//ejecuta efecto
float GetValue(char *ivar, MqttVarManager *vars);
};

View File

@ -248,11 +248,12 @@ void MqttSensManager::procesaSensor(int i)
{
MqttSensor *s=sens.Get(i);
MqttVar *v=vars->Get(s->ivar);
MQTTvalor val;
switch((int)s->tipo)
{
case((int)MqttSensor::SENS_DHT22)://pilla temperatura y humedad
{
MqttVar *vh=vars->Get(s->ie.dht.ivarH);
//MqttVar *vh=vars->Get(s->ie.dht.ivarH);
float t,h;
for(int i=0; i<4; i++)
{
@ -261,27 +262,40 @@ void MqttSensManager::procesaSensor(int i)
delay(20);
continue;
}
v->val.f=t;
vh->val.f=h;
val.f = t;
vars->SetVal(s->ivar, val);
//v->val.f=t;
val.f = h;
vars->SetVal(s->ie.dht.ivarH, val);
//vh->val.f=h;
break;
}
break;
}
case((int)MqttSensor::SENS_BMP180)://pilla temperatura y humedad
{
MqttVar *vp=vars->Get(s->ie.bmp.ivarP);
MqttVar *va=vars->Get(s->ie.bmp.ivarA);
//MqttVar *vp=vars->Get(s->ie.bmp.ivarP);
// MqttVar *va=vars->Get(s->ie.bmp.ivarA);
val.f = s->ie.bmp.p->readTemperature();
vars->SetVal(s->ivar, val);
val.f = s->ie.bmp.p->readPressure();
vars->SetVal(s->ie.bmp.ivarP, val);
val.f = s->ie.bmp.p->readAltitude();
vars->SetVal(s->ie.bmp.ivarA, val);
/*
v->val.f=s->ie.bmp.p->readTemperature();
vp->val.i=s->ie.bmp.p->readPressure();//pascales;
va->val.f=s->ie.bmp.p->readAltitude();
*/
break;
}
case((int)MqttSensor::SENS_ANALOG_IN)://pilla temperatura y humedad
{
if(s->flags & MqttSensor::FLAG_NEG)
v->val.f=100.*((float)(1024- analogRead(s->pin)))/1024;
val.f =100.*((float)(1024- analogRead(s->pin)))/1024;
else
v->val.f=100.*((float)(analogRead(s->pin)))/1024;
val.f =100.*((float)(analogRead(s->pin)))/1024;
vars->SetVal(s->ivar, val);
break;
}
/* case((int)MqttSensor::SENS_DIGI_IN):

View File

@ -159,10 +159,10 @@ class MqttSensManager: public MqttOnVarChangeListenner
void inicia();
void loop();
int OnMqtt(char* topic, char* payload);//entra trama mqtt devuelve indice a sensor cambiado
//int OnMqtt(char* topic, char* payload);//entra trama mqtt devuelve indice a sensor cambiado
void AddSensor(MqttSensor* sens);
//void AddSensor(MqttSensor* sens);
//
//funcion add sensor
//tempe y humedad

View File

@ -210,8 +210,8 @@ void MqttManager::OnMqtt(char* topic, byte* payload, unsigned int length)
if(Mqttlistener==NULL)
return;
int i;
char buf[32];
i=30;
char buf[MAXTOPICVAR];
i= MAXTOPICVAR-1;
if(i>length)
i=length;
memcpy(buf, payload, i);

View File

@ -90,7 +90,7 @@ class MqttManager
void inicia(PubSubClient *mqttClient,char *ideEsp, char *host, int port, MqttReceiver* classReceiver);
bool loop();
void desconecta();
//void desconecta();
//auxiliar------------------
static void OnMqtt(char* topic, byte* payload, unsigned int length);

View File

@ -35,9 +35,17 @@ int MqttTopicAttay::Add(char *topic)
return i;
}
i=n;
if (n >= MAXVAR)
return-1;
n=n+1;
ind[i]=nst;
nst=nst+strlen(topic)+1;
if (nst > MAXSTR)
{
n--;
return-1;
}
strcpy(Get(i), topic);
return i;
}
@ -57,9 +65,20 @@ MqttVarArray::MqttVarArray()
n=0;
}
MqttVar* MqttVarArray:: Get(int i)
MqttVar* MqttVarArray::Get(int i)
{
return &(data[i]);
if (i < 0 || i >= n)
{
#ifdef DEBUG_PS
Serial.print("qttVarArray:: Get var no encontrada: ");
Serial.print(i);
Serial.print(" n: ");
Serial.println(i);
#endif
return NULL;
}
return &(data[i]);
}
MqttVar* MqttVarArray::GetVar(int itopic)
@ -74,6 +93,15 @@ MqttVar* MqttVarArray::GetVar(int itopic)
int MqttVarArray::Add(MqttVar* var)
{
if (n >= MAXVAR)
{
#ifdef DEBUG_PS
Serial.print("MqttVarArray::Add max var alcanzado: ");
Serial.println(n);
#endif
return -1;
}
data[n]=*var;
n++;
return n-1;
@ -88,7 +116,7 @@ MqttVarManager::MqttVarManager()
nListenner=0;
for (int i=0; i<nListenner; i++)
{
onChangeListener[2]=NULL;
onChangeListener[i]=NULL;
}
}
void MqttVarManager::SetTimeRefres(int seg)
@ -160,7 +188,7 @@ void MqttVarManager::OnMqtt(char* topic, char* payload)
//comprueba variables
MqttVar* v;
int res=-1;
MQTTvalor val;
for(int i=0; i<vars->n; i++)
{
v=vars->Get(i);
@ -170,23 +198,21 @@ void MqttVarManager::OnMqtt(char* topic, char* payload)
if(v->flags & MqttVar::FLOAT_VAR)
{
float ff=v->val.f;
v->val.f=atof(payload);
if(ff!=v->val.f)
res=i;
val.f=atof(payload);
}
else
{
int ii=v->val.i;
v->val.i=atoi(payload);
if(ii!=v->val.i)
res=i;
val.i=atoi(payload);
}
SetVal(i, val);
break;//suponemos solo una variable con el mismo topic
}
}
if(res>=0)
OnChange(res, isSet);
//if(res>=0)
// OnChange(res, isSet);
return;
}
@ -203,8 +229,8 @@ void MqttVarManager::loop()
void MqttVarManager::PublicaVar(int ivar)
{
char buffer_t[32];
char buffer_p[24];
char buffer_t[MAXTOPICVAR];
char buffer_p[MAXTOPICVAR];
MqttVar* v=vars->Get(ivar);
if(v->flags & MqttVar::CHANGE_VAR)
{
@ -215,7 +241,7 @@ void MqttVarManager::PublicaVar(int ivar)
Serial.println(buffer_t);
#endif
}
else
else//in var
{
sprintf(buffer_t, "%s/get",topics->Get(v->topic));
@ -243,9 +269,7 @@ void MqttVarManager::PublicaVars()
{
v=vars->Get(i);
if(v->flags & f)
{
PublicaVar(i);
}
}
}
void MqttVarManager::inicia(PubSubClient* client_mqtt)
@ -256,7 +280,7 @@ void MqttVarManager::inicia(PubSubClient* client_mqtt)
void MqttVarManager::Suscribe()
{
//suscribe a mqtt------------
char buffer_t[32];
char buffer_t[MAXTOPICVAR];
MqttVar* v;
for(int i=0; i<vars->n; i++)
{
@ -355,6 +379,7 @@ void MqttVarManager::ResetVolatileVar()
MqttVar* v=vars->Get(i);
if(v->flags& MqttVar::VOLATILE_VAR)
{
if(v->flags & MqttVar::FLOAT_VAR)
v->val.f=0;
else
@ -384,13 +409,13 @@ void MqttVarManager::SetVal(int ivar,MQTTvalor val)
Serial.println( val.f);
#endif
MqttVar* v=vars->Get(ivar);
v->val=val;
#ifdef DEBUG_PS
bool cambia = false;
if (v->flags & MqttVar::FLOAT_VAR)
cambia = val.f != v->val.f;
else
cambia = val.i != v->val.i;
Serial.print("MqttVarManager::SetVal out i: ");
Serial.print( v->val.i);
Serial.print(" f: ");
Serial.println( v->val.f);
#endif
OnChange(ivar, true);
v->val=val;
if(cambia)
OnChange(ivar, true);
}

View File

@ -37,10 +37,10 @@ class MqttVar
enum TipoFlags//indica el tipo de sensor
{
OUT_VAR=0x01,//variable de salida (acepta set)
IN_VAR=0x02,//variable de entrada (publica get)
IN_VAR=0x02,//variable de entrada (publica get) (publica cada x tiempo)
PRIV_VAR=0x04,//variable privada de entrada (acepta get como si fueran set)
FLOAT_VAR=0x08,//variable en coma flotante
ACCION_VAR=0x10,//variable de accion (publica en cada cambio)
ACCION_VAR=0x10,//variable de accion (publica en cada cambio onchange si se le llama como publicar)
VOLATILE_VAR=0x20, //marca variable que una vez revisada se cambia internamente su valor (usado en desencadenadores para variables de accion)
CHANGE_VAR=0x40, //publica con set en lugar de get

View File

@ -0,0 +1,36 @@
#include <PubSubClient.h>
#include <WakeOnLan.h>
#include "MqttWOLManager.h"
MqttWOLManager::MqttWOLManager()
{
topic[0]=0;
}
void MqttWOLManager::inicia(WakeOnLan *pwol)
{
wol=pwol;
}
void MqttWOLManager::loop()
{
}
int MqttWOLManager::OnMqtt(char* top, char* payload)
{
if(strcmp(top,topic))
return -1;
wol->sendMagicPacket(payload); // Send Wake On Lan packet with the above MAC address. Default to port 9.
#ifdef DEBUG_PS
Serial.print("Enviado wol a: ");
Serial.println(payload);
#endif
// WOL.sendMagicPacket(MACAddress, 7); // Change the port number
}
void MqttWOLManager::suscribe(PubSubClient *client_qqtt)
{
if(!topic[0])
return;
client_qqtt->subscribe(topic);
}

View File

@ -0,0 +1,22 @@
#ifndef MqttWOLManagerdef
#define MqttWOLManagerdef 1
#include "MqttDefines.h"
class WakeOnLan;
class MqttWOLManager
{
WakeOnLan* wol;
public:
char topic[MAXSTR];//topic para llamada wol
MqttWOLManager();
void inicia(WakeOnLan* pwol);
void loop();//publica datos variables
int OnMqtt(char* topic, char* payload);
void suscribe(PubSubClient *client_qqtt);
};
#endif

View File

@ -0,0 +1,141 @@
/*
Editor: https://www.visualmicro.com/
This file is for intellisense purpose only.
Visual micro (and the arduino ide) ignore this code during compilation. This code is automatically maintained by visualmicro, manual changes to this file will be overwritten
The contents of the _vm sub folder can be deleted prior to publishing a project
All non-arduino files created by visual micro and all visual studio project or solution files can be freely deleted and are not required to compile a sketch (do not delete your own code!).
Note: debugger breakpoints are stored in '.sln' or '.asln' files, knowledge of last uploaded breakpoints is stored in the upload.vmps.xml file. Both files are required to continue a previous debug session without needing to compile and upload again
Hardware: NodeMCU 1.0 (ESP-12E Module), Platform=esp8266, Package=esp8266
*/
#if defined(_VMICRO_INTELLISENSE)
#ifndef _VSARDUINO_H_
#define _VSARDUINO_H_
#define __ESP8266_esp8266__
#define __ESP8266_ESP8266__
#define __ets__
#define ICACHE_FLASH
#define _GNU_SOURCE
#define MMU_IRAM_SIZE 0x8000
#define MMU_ICACHE_SIZE 0x8000
#define NONOSDK22x_190703 1
#define F_CPU 80000000L
#define LWIP_OPEN_SRC
#define TCP_MSS 536
#define LWIP_FEATURES 1
#define LWIP_IPV6 0
#define ARDUINO 108016
#define ARDUINO_ESP8266_NODEMCU_ESP12E
#define ARDUINO_ARCH_ESP8266
#define LED_BUILTIN 2
#define FLASHMODE_DIO
#define ESP8266
#define __cplusplus 201103L
#undef __cplusplus
#define __cplusplus 201103L
#define __STDC__
#define __ARM__
#define __arm__
#define __inline__
#define __asm__(x)
#define __asm__
#define __extension__
#define __ATTR_PURE__
#define __ATTR_CONST__
#define __volatile__
#define __ASM
#define __INLINE
#define __attribute__(noinline)
//#define _STD_BEGIN
//#define EMIT
#define WARNING
#define _Lockit
#define __CLR_OR_THIS_CALL
#define C4005
#define _NEW
//typedef int uint8_t;
//#define __ARMCC_VERSION 400678
//#define PROGMEM
//#define string_literal
//
//#define prog_void
//#define PGM_VOID_P int
//
typedef int _read;
typedef int _seek;
typedef int _write;
typedef int _close;
typedef int __cleanup;
//#define inline
#define __builtin_clz
#define __builtin_clzl
#define __builtin_clzll
#define __builtin_labs
#define __builtin_va_list
typedef int __gnuc_va_list;
#define __ATOMIC_ACQ_REL
#define __CHAR_BIT__
#define _EXFUN()
typedef unsigned char byte;
extern "C" void __cxa_pure_virtual() {;}
typedef long __INTPTR_TYPE__ ;
typedef long __UINTPTR_TYPE__ ;
typedef long __SIZE_TYPE__ ;
typedef long __PTRDIFF_TYPE__;
// Additions needed for v3.0.0 Core - Needs to be conditional on it being this core really!!
#ifndef isnan
#undef _Lockit
#undef __STDC__
#define __STDC__ 1
#define __CHAR_BIT__ 1
extern int isinf(double);
extern int isnan(double);
extern int fpclassify(double);
extern int signbit(double);
extern int isfinite(double);
extern int isnormal(double);
extern int isgreater(double, double);
extern int isgreaterequal(double);
extern int isless(double, double);
extern int islessequal(double, double);
extern int islessgreater(double, double);
extern int isunordered(double, double);
#endif
#include "new"
#include "Esp.h"
#include "arduino.h"
#include <pins_arduino.h>
#include "..\generic\Common.h"
#include "..\generic\pins_arduino.h"
#undef F
#define F(string_literal) ((const PROGMEM char *)(string_literal))
#undef PSTR
#define PSTR(string_literal) ((const PROGMEM char *)(string_literal))
//current vc++ does not understand this syntax so use older arduino example for intellisense
//todo:move to the new clang/gcc project types.
#define interrupts() sei()
#define noInterrupts() cli()
#include "DomoEsp_v02.ino"
#endif
#endif

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,50 @@
//parametros configurables*************************************************
#define DEBUG_PS 1//Descomentar para debug
#define CON_LCD 0
#define CON_WOL 0
//va por 16
class CocinapRUBDomoConfig: public DomoConfig
{
public:
CocinapRUBDomoConfig()
{
velocidadPortSerie=115200;
strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_P");//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, MqttWOLManager* wol, MqttDesencadenadorManager *des)
{
sens->AddHDT22(D4, "casa/cocina");//01
sens->AddDinRetardOff(D5, 60,"casa/p/mov");//2
int mov=2;
sens->AddAnalogIn(0, "casa/p/luz",true);//3
int luz=3;
sens->AddDin( D1, "casa/p/inter");//4
int interr=4;
sens->AddDout(D2, "casa/p/lam", false);//5
int lam=5;
int lauto= vars->AddVirtualOutVarInt( "casa/p/luzAuto");//variable privada
char st[64];
//Efecto Pulsadores
sprintf(st,"{%d}>0 -> !{%d} ",interr,lam);//accion interruptor
des->AddDes(st);
sprintf(st,"{%d}<1 -> !{%d} ",interr,lam);//accion interruptor
des->AddDes(st);
sprintf(st,"{%d}<1&{%d}>0&{%d}=1 -> {%d}=0 ",mov,lauto,lam,lam);//apaga luz si no hay nadie
des->AddDes(st);
sprintf(st,"{%d}>20&{%d}>0&{%d}>0 -> {%d}=1 ",luz,mov,lauto,lam);//enciende luz si hay presencia y esta oscuro
des->AddDes(st);
}
};
class ActDomoConfig: public DomoConfig
{
public:
@ -31,7 +74,7 @@ class ActDomoConfig: public DomoConfig
}
//configuracion de sensores, variables, lcd---------------------------------
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttWOLManager* wol, MqttDesencadenadorManager *des)
{
//sensores--------------------------------------------------------
/*
@ -137,7 +180,7 @@ class PulSalonPruebConfig: public DomoConfig
}
//configuracion de sensores, variables, lcd---------------------------------
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttWOLManager* wol, MqttDesencadenadorManager *des)
{
//sensores--------------------------------------------------------
@ -179,7 +222,7 @@ class AutomatismosDomoConfig: public DomoConfig
}
//configuracion de sensores, variables, lcd---------------------------------
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttWOLManager* wol, MqttDesencadenadorManager *des)
{
//sensores--------------------------------------------------------
/*
@ -244,72 +287,13 @@ class AutomatismosDomoConfig: public DomoConfig
}
};
class PulCocinaConfig: public DomoConfig
{
public:
PulCocinaConfig()
{
velocidadPortSerie=115200;
strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi
strcpy(ideEsp,"Esp8266_Pulcocina");//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=0;
lcd.en=0;//eneable
lcd.d0=0;
lcd.d1=0;
lcd.d2=0;
lcd.d3=0;
}
//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->AddDinRetardOn(D1,5,"casa/p/pul");
sens->AddDout(D5, "casa/coci/lam", false);
sens->AddDinAccion( D1, "casa/coci/inter");
//sens->AddDinAccion( D2, "casa/Salon/pul2");
//sens->AddDinAccion( D5, "casa/Salon/pul3");
//sens->AddDinAccion( D6, "casa/Salon/pulAll");
char st[64];
//Efecto Pulsadores
sprintf(st,"{%d}>0 -> !{%d} ",1,0);//terminar en espacios
des->AddDes(st);
sprintf(st,"{%d}<1 -> !{%d} ",1,0);//terminar en espacios
des->AddDes(st);
}
};
class PulSalonConfig: public DomoConfig
{
public:
PulSalonConfig()
{
//CON LCD Y WOL
velocidadPortSerie=115200;
strcpy(ssidWifi,"Idhun");//nombre wifi
strcpy(keyWifi,"Ardileorca1234.");//key wifi
@ -334,7 +318,7 @@ class PulSalonConfig: public DomoConfig
}
//configuracion de sensores, variables, lcd---------------------------------
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttWOLManager* wol, MqttDesencadenadorManager *des)
{
//sensores--------------------------------------------------------
/*
@ -387,7 +371,7 @@ class DespachoDomoConfig: public DomoConfig
}
//configuracion de sensores, variables, lcd---------------------------------
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd,MqttWOLManager* wol, MqttDesencadenadorManager *des)
{
//sensores--------------------------------------------------------
sens->AddHDT22(D4, "casa/desp");
@ -410,6 +394,7 @@ class DespachoDomoConfig: public DomoConfig
lcd->add(temExt,"T Ext: %s",0,2);
lcd->add(hExt,"H Ext: %s",1,2);
strcpy(lcd->topic,"casa/desp/msg");
strcpy(wol->topic,"casa/wol");
}
};
class CocinaDomoConfig: public DomoConfig
@ -427,7 +412,7 @@ class CocinaDomoConfig: public DomoConfig
refresTimeSens=15;//tiempo de refresco en segundos de los sensores
}
//configuracion de sensores---------------------------------
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttWOLManager* wol, MqttDesencadenadorManager *des)
{
sens->AddHDT22(D4, "casa/cocina");//01
sens->AddDinRetardOff(D5, 60,"casa/cocina/mov");//2
@ -437,17 +422,20 @@ class CocinaDomoConfig: public DomoConfig
sens->AddDin( D1, "casa/cocina/inter");//4
sens->AddDout(D2, "casa/cocina/lam", false);//5
int lam=5;
int lauto= vars->AddVirtualOutVarInt( "casa/cocina/luzAuto");//variable privada
int lauto= vars->AddVirtualOutVarInt( "casa/cocina/luzAuto");
char st[64];
//Efecto Pulsadores
sprintf(st,"{%d}>0 -> !{%d} ",4,5);//accion interruptor
sprintf(st,"{%d}>0 -> !{%d} ",4,lam);//accion interruptor
des->AddDes(st);
sprintf(st,"{%d}<1 -> !{%d} ",4,5);//accion interruptor
sprintf(st,"{%d}<1 -> !{%d} ",4,lam);//accion interruptor
des->AddDes(st);
sprintf(st,"{%d}<1&{%d}>0&{%d}=1 -> {%d}=0 ",mov,lauto,lam,lam);//apaga luz si no hay nadie
des->AddDes(st);
sprintf(st,"{%d}<20&{%d}>0&{%d}>0&{%d}=0 -> {%d}=1 ",luz,mov,lauto,lam,lam);//enciende luz si hay presencia y esta oscuro
sprintf(st,"{%d}<20&{%d}>0&{%d}>0 -> {%d}=1 ",luz,mov,lauto,lam);//enciende luz si hay presencia y esta oscuro
des->AddDes(st);
}
@ -467,14 +455,14 @@ class SalonDomoConfig: public DomoConfig
refresTimeSens=15;//tiempo de refresco en segundos de los sensores
}
//configuracion de sensores---------------------------------
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttWOLManager* wol, MqttDesencadenadorManager *des)
{
sens->AddHDT22(D4, "casa/Salon");//01
sens->AddDinRetardOff(D5, 60,"casa/Salon/mov");//2
sens->AddAnalogIn(0, "casa/Salon/luz",true);//3
//variables----------------------------------------------------
//variables para pulsadores---------------------------
int lamb= vars->AddInternalVarInt( "casa/Salon/LAmb");
int lchim= vars->AddInternalVarInt( "casa/Salon/LChime");
int lent= vars->AddInternalVarInt( "casa/Salon/LEnt");
@ -484,6 +472,13 @@ class SalonDomoConfig: public DomoConfig
int pul3= vars->AddInternalVarInt( "casa/Salon/pul3");
int pulIall= vars->AddInternalVarInt( "casa/Salon/intAll");
int pulAll= vars->AddInternalVarInt( "casa/Salon/pulAll");
/*
int cociMov= vars->AddInternalVarInt( "casa/cocina/mov");
int cociLuz= vars->AddInternalVarInt( "casa/cocina/luz");
int cociLam= vars->AddInternalVarInt( "casa/cocina/lam");
int cociAuto= vars->AddInternalVarInt("casa/cocina/luzAuto");
*/
//variables para pulsadores cocina----------------------------
//desencadenaores----------
char st[64];
@ -501,7 +496,13 @@ class SalonDomoConfig: public DomoConfig
des->AddDes(st);
sprintf(st,"{%d}>0 -> !{%d} ",pul3,lent);//terminar en espacios
des->AddDes(st);
/*
//variablaes cocina
sprintf(st,"{%d}<1&{%d}>0&{%d}=1 -> {%d}=0 ",cociMov,cociAuto,cociLam,cociLam);//apaga luz si no hay nadie
des->AddDes(st);
sprintf(st,"{%d}<20&{%d}>0&{%d}>0 -> {%d}=1 ",cociLuz,cociMov,cociAuto,cociLam);//enciende luz si hay presencia y esta oscuro
des->AddDes(st);
*/
}
};
@ -520,7 +521,7 @@ class ExteriorDomoConfig: public DomoConfig
refresTimeSens=15;//tiempo de refresco en segundos de los sensores
}
//configuracion de sensores---------------------------------
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttWOLManager* wol, MqttDesencadenadorManager *des)
{
sens->AddHDT22(D2, "casa/ext");
sens->AddAnalogIn(0, "casa/ext/lluvia",true);
@ -531,4 +532,4 @@ class ExteriorDomoConfig: public DomoConfig
//configuracion que se usara--------------------------
CocinaDomoConfig ConfiguracionActual;
SalonDomoConfig ConfiguracionActual;

2
DomoEsp_v02/sube.bat Normal file
View File

@ -0,0 +1,2 @@
"c:\Program Files (x86)\Arduino\arduino.exe" --board arduino:avr:nano:cpu=atmega168 --port /dev/ttyACM0 --upload /path/to/sketch/sketch.ino
pause