DomoEsp_v1/DomoEsp_v01_/MqttUtiles.cpp

112 lines
2.3 KiB
C++

#include <SPI.h>
#include <PubSubClient.h>
#include <Wire.h>
#include "MqttUtiles.h"
//**************************************************************************************************************************************************
bool MqttUtiles::pasa_incre( unsigned long *tt, unsigned long incre)
{
unsigned long t=millis();
if(t<*tt)
{
*tt=t;
return true;
}
if((*tt+incre)>=t)
return false;
*tt=t;
return true;
}
bool MqttUtiles::pasa_incre( volatile unsigned long *tt, unsigned long incre)
{
unsigned long t=millis();
if(t<*tt)
{
*tt=t;
return true;
}
if((*tt+incre)>=t)
return false;
*tt=t;
return true;
}
//**************************************************************************************************************************************************
WifiManager::WifiManager()
{
}
void WifiManager::inicia( WiFiClient *espclient,char *ssid, char* key)
{
espClient= espclient;
strcpy(nred, ssid);
strcpy(pass, key);
}
bool WifiManager::loop()
{
if((WiFi.status() == WL_CONNECTED))
return true;
WiFi.mode(WIFI_STA);
WiFi.begin(nred, pass);
for(int i=0; i<5 && WiFi.status() != WL_CONNECTED; i++)
{
delay(500);
}
return WiFi.status() == WL_CONNECTED;
}
//**************************************************************************************************************************************************
MqttManager::MqttManager()
{
}
void MqttManager::inicia(PubSubClient *mqttClient,char *ideEsp, char *host, int port, MqttReceiver* classReceiver)
{
strcpy(idEsp,ideEsp);
MqttManager::listener=classReceiver;
client_mqtt=mqttClient;
client_mqtt->setServer(host, port);
client_mqtt->setCallback(MqttManager::OnMqtt);
}
bool MqttManager::loop()
{
if(client_mqtt->loop())
return true;
if(client_mqtt->connect(idEsp))
{
subscribe_mqtt();
return true;
}
}
void MqttManager::subscribe_mqtt()
{
if(MqttManager::listener==NULL)
return;
MqttManager::listener->SubscribeMqtt(client_mqtt);
}
//auxiliar------------------
void MqttManager::OnMqtt(char* topic, byte* payload, unsigned int length)
{
if(MqttManager::listener==NULL)
return;
int i;
char buf[32];
i=31;
if(i>length)
i=length;
memcpy(buf, payload, i);
buf[i]=0;
MqttManager::listener->OnMqtt(topic, buf);
}