ESPixelStick Firmware
Firmware for the ESPixelStick
Loading...
Searching...
No Matches
InputMQTT.h
Go to the documentation of this file.
1#pragma once
2/*
3* InputMQTT.h
4*
5* Project: ESPixelStick - An ESP8266 / ESP32 and E1.31 based pixel driver
6* Copyright (c) 2021, 2025 Shelby Merrick
7* http://www.forkineye.com
8*
9* This program is provided free for you to use in any way that you wish,
10* subject to the laws and regulations where you are using it. Due diligence
11* is strongly suggested before using this code. Please give credit where due.
12*
13* The Author makes no warranty of any kind, express or implied, with regard
14* to this program or the documentation contained in this document. The
15* Author shall not be liable in any event for incidental or consequential
16* damages in connection with, or arising out of, the furnishing, performance
17* or use of these programs.
18*
19*/
20
21#include "InputCommon.hpp"
22#include "InputEffectEngine.hpp"
24#include <Arduino.h>
25#include <AsyncMqttClient.hpp>
28
30{
31 public:
32
34 c_InputMgr::e_InputChannelIds NewInputChannelId,
35 c_InputMgr::e_InputType NewChannelType,
36 uint32_t BufferSize);
37
38 virtual ~c_InputMQTT ();
39
40 // functions to be provided by the derived class
41 void Begin ();
42 bool SetConfig (JsonObject& jsonConfig);
43 void GetConfig (JsonObject& jsonConfig);
44 void GetStatus (JsonObject& jsonStatus);
45 void Process ();
46 void GetDriverName (String& sDriverName) { sDriverName = "MQTT"; }
47 void SetBufferInfo (uint32_t BufferSize);
48 void NetworkStateChanged (bool IsConnected); // used by poorly designed rx functions
49
50private:
51#define MQTT_PORT 1883
52
53 AsyncMqttClient mqtt; // MQTT object
54 Ticker mqttTicker; // Ticker to handle MQTT
57
58 // Keep track of last known effect configuration state
60
61 // from original config struct
62 String ip;
63 uint16_t port = MQTT_PORT;
64 String user;
65 String password;
66 String topic;
67#ifdef SUPPORT_SENSOR_DS18B20
68 String TemperatureSensorTopic;
69#endif // def SUPPORT_SENSOR_DS18B20
71 String haprefix = "homeassistant";
72 bool hadisco = true;
73 String lwtTopic;
74
75 #define deletePlayFileEngine() \
76 { \
77 if (nullptr != pPlayFileEngine) \
78 { \
79 pPlayFileEngine->~c_InputFPPRemotePlayItem(); \
80 memset(PlayFileEngine, 0x0, sizeof(PlayFileEngine)); \
81 pPlayFileEngine = nullptr; \
82 } \
83 }
84 // char PlayFileEngine[sizeof(c_InputFPPRemotePlayFile)];
86
87 #define deleteEffectsEngine() \
88 { \
89 if (nullptr != pEffectsEngine) \
90 { \
91 pEffectsEngine->~c_InputEffectEngine(); \
92 memset(EffectsEngine, 0x0, sizeof(EffectsEngine)); \
93 pEffectsEngine = nullptr; \
94 } \
95 }
97
98 const char* ON = "ON";
99 const char* OFF = "OFF";
100 const char* LWT_ONLINE = "online";
101 const char* LWT_OFFLINE = "offline";
102
103 void validateConfiguration ();
104
105 void setup ();
106 void onNetworkConnect ();
107 void onNetworkDisconnect ();
108 void validate ();
109 void NetworkStateChanged (bool IsConnected, bool RebootAllowed); // used by poorly designed rx functions
110 void PlayFseq (JsonObject & JsonConfig);
111 void PlayEffect (JsonObject & JsonConfig);
112 void GetEngineConfig (JsonObject & JsonConfig);
113 void GetEffectList (JsonObject & JsonConfig);
114 void StopPlayFileEngine ();
115 void UpdateEffectConfiguration (JsonObject & JsonConfig);
116
117 void load ();
118 void save ();
119
120 bool stateOn = false;
121
123 //
124 // MQTT Section
125 //
127
128 void disconnectFromMqtt ();
129 void connectToMqtt (); // onMqttDisconnect, onWifiConnect
130 void onMqttConnect (bool sessionPresent); // setup
131 void onMqttDisconnect (AsyncMqttClientDisconnectReason reason); // setup
132 void onMqttMessage (char* topic, char* payload, AsyncMqttClientMessageProperties properties, uint32_t len, uint32_t index, uint32_t total); // setup
133 void publishHA (); // updateConfig
134 void publishState (); // onMqttConnect, onMqttMessage, procT, updateConfig
135};
#define MQTT_PORT
Default MQTT port.
Definition InputMQTT.h:51
Definition InputCommon.hpp:27
Definition InputEffectEngine.hpp:25
Definition InputFPPRemotePlayItem.hpp:26
Definition InputFPPRemotePlayList.hpp:31
Definition InputMQTT.h:30
bool stateOn
Definition InputMQTT.h:120
void Begin()
set up the operating environment based on the current config (or defaults)
Definition InputMQTT.cpp:88
void GetEffectList(JsonObject &JsonConfig)
Definition InputMQTT.cpp:623
void onMqttMessage(char *topic, char *payload, AsyncMqttClientMessageProperties properties, uint32_t len, uint32_t index, uint32_t total)
Definition InputMQTT.cpp:367
virtual ~c_InputMQTT()
Definition InputMQTT.cpp:64
char PlayFileEngine[sizeof(c_InputFPPRemotePlayList)]
Definition InputMQTT.h:85
c_InputFPPRemotePlayItem * pPlayFileEngine
Definition InputMQTT.h:56
Ticker mqttTicker
Definition InputMQTT.h:54
void GetDriverName(String &sDriverName)
get the name for the instantiated driver
Definition InputMQTT.h:46
void PlayEffect(JsonObject &JsonConfig)
Definition InputMQTT.cpp:541
const char * LWT_ONLINE
Definition InputMQTT.h:100
void validateConfiguration()
Definition InputMQTT.cpp:224
bool hadisco
Definition InputMQTT.h:72
void GetConfig(JsonObject &jsonConfig)
Get the current config used by the driver.
Definition InputMQTT.cpp:109
void StopPlayFileEngine()
Definition InputMQTT.cpp:572
void publishHA()
Definition InputMQTT.cpp:655
void disconnectFromMqtt()
Definition InputMQTT.cpp:283
const char * ON
Definition InputMQTT.h:98
void onNetworkDisconnect()
Call from onWiFiDisconnect()
Definition InputMQTT.cpp:249
void validate()
Call from validateConfig()
void publishState()
Definition InputMQTT.cpp:717
const char * LWT_OFFLINE
Definition InputMQTT.h:101
void SetBufferInfo(uint32_t BufferSize)
Definition InputMQTT.cpp:172
const char * OFF
Definition InputMQTT.h:99
String lwtTopic
Definition InputMQTT.h:73
bool SetConfig(JsonObject &jsonConfig)
Set a new config in the driver.
Definition InputMQTT.cpp:188
void GetStatus(JsonObject &jsonStatus)
Definition InputMQTT.cpp:133
AsyncMqttClient mqtt
Definition InputMQTT.h:53
void connectToMqtt()
Definition InputMQTT.cpp:261
c_InputEffectEngine::MQTTConfiguration_t effectConfig
Definition InputMQTT.h:59
c_InputEffectEngine * pEffectsEngine
Definition InputMQTT.h:55
void onMqttDisconnect(AsyncMqttClientDisconnectReason reason)
Definition InputMQTT.cpp:344
void PlayFseq(JsonObject &JsonConfig)
Definition InputMQTT.cpp:461
c_InputMQTT(c_InputMgr::e_InputChannelIds NewInputChannelId, c_InputMgr::e_InputType NewChannelType, uint32_t BufferSize)
Definition InputMQTT.cpp:31
void UpdateEffectConfiguration(JsonObject &JsonConfig)
Definition InputMQTT.cpp:774
void GetEngineConfig(JsonObject &JsonConfig)
Definition InputMQTT.cpp:583
void Process()
Call from loop(), renders Input data.
Definition InputMQTT.cpp:145
uint16_t port
Definition InputMQTT.h:63
String user
Definition InputMQTT.h:64
void setup()
Call from setup()
bool CleanSessionRequired
Definition InputMQTT.h:70
void onNetworkConnect()
Call from onWifiConnect()
Definition InputMQTT.cpp:238
void onMqttConnect(bool sessionPresent)
Definition InputMQTT.cpp:297
String ip
Definition InputMQTT.h:62
String password
Definition InputMQTT.h:65
String topic
Definition InputMQTT.h:66
void NetworkStateChanged(bool IsConnected)
Definition InputMQTT.cpp:747
void load()
Load configuration from File System.
String haprefix
Definition InputMQTT.h:71
char EffectsEngine[sizeof(c_InputEffectEngine)]
Definition InputMQTT.h:96
void save()
Save configuration to File System.
e_InputType
Definition InputMgr.hpp:72
e_InputChannelIds
Definition InputMgr.hpp:40
Definition InputEffectEngine.hpp:80