Files
project-vesper/vesper/build/sketch/MQTT_WiFi_Utilities.hpp
bonamin 7dd6f81264 Added basic Scheduling Functionality
A JSON message can now be received on:
'vesper/DEV_ID/control/addSchedule"
Each message, must hold a "file" and "data".
The file is the month's name in 3 letter mode (eg jan, feb, mar)
The data is an entry for each day of the month.
Each day can be an array containing multiple items.
2025-01-26 14:02:15 +02:00

140 lines
3.3 KiB
C++

#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\MQTT_WiFi_Utilities.hpp"
#pragma once
TimerHandle_t mqttReconnectTimer;
TimerHandle_t wifiReconnectTimer;
String GetPayloadContent(char * data, size_t len) {
String content = "";
for(size_t i = 0; i < len; i++)
{
content.concat(data[i]);
}
return content;
}
void ConnectToMqtt()
{
Serial.println("Connecting to MQTT...");
mqttClient.connect();
}
void OnMqttConnect(bool sessionPresent)
{
Serial.println("Connected to MQTT.");
Serial.print("Session present: ");
Serial.println(sessionPresent);
SuscribeMqtt();
}
void OnMqttDisconnect(AsyncMqttClientDisconnectReason reason)
{
Serial.println("Disconnected from MQTT.");
if(WiFi.isConnected())
{
xTimerStart(mqttReconnectTimer, 0);
}
}
void OnMqttSubscribe(uint16_t packetId, uint8_t qos)
{
Serial.println("Subscribe acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
Serial.print(" qos: ");
Serial.println(qos);
}
void OnMqttUnsubscribe(uint16_t packetId)
{
Serial.println("Unsubscribe acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
}
void OnMqttPublish(uint16_t packetId)
{
Serial.println("Publish acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
}
void ConnectWiFi_STA(bool useStaticIP = false)
{
Serial.println("");
WiFi.mode(WIFI_STA);
if(useStaticIP) {
WiFi.config(ip, gateway, subnet);
WiFi.setHostname(hostname);
}
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print('.');
}
Serial.println("");
Serial.print("Iniciado STA:\t");
Serial.println(ssid);
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
}
void ConnectWiFi_AP(bool useStaticIP = false)
{
Serial.println("");
WiFi.mode(WIFI_AP);
while(!WiFi.softAP(ssid, password))
{
Serial.println(".");
delay(100);
}
if(useStaticIP) WiFi.softAPConfig(ip, gateway, subnet);
Serial.println("");
Serial.print("Iniciado AP:\t");
Serial.println(ssid);
Serial.print("IP address:\t");
Serial.println(WiFi.softAPIP());
}
void WiFiEvent(WiFiEvent_t event)
{
Serial.printf("[WiFi-event] event: %d\n", event);
switch(event)
{
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
ConnectToMqtt();
break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.println("WiFi lost connection");
xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
xTimerStart(wifiReconnectTimer, 0);
break;
}
}
void InitMqtt()
{
mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(ConnectToMqtt));
wifiReconnectTimer = xTimerCreate("wifiTimer", pdMS_TO_TICKS(5000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(ConnectWiFi_STA));
mqttClient.onConnect(OnMqttConnect);
mqttClient.onDisconnect(OnMqttDisconnect);
mqttClient.onSubscribe(OnMqttSubscribe);
mqttClient.onUnsubscribe(OnMqttUnsubscribe);
mqttClient.onMessage(OnMqttReceived);
mqttClient.onPublish(OnMqttPublish);
mqttClient.setServer(MQTT_HOST, MQTT_PORT);
mqttClient.setCredentials(MQTT_USER, MQTT_PASS);
}