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 ClearStatistics ();
46 void Process ();
47 void GetDriverName (String& sDriverName) { sDriverName = "MQTT"; }
48 void SetBufferInfo (uint32_t BufferSize);
49 void NetworkStateChanged (bool IsConnected); // used by poorly designed rx functions
50
51private:
52#define MQTT_PORT 1883
53
54 AsyncMqttClient mqtt; // MQTT object
55 Ticker mqttTicker; // Ticker to handle MQTT
58
59 // Keep track of last known effect configuration state
61
62 // from original config struct
63 String ip;
64 uint16_t port = MQTT_PORT;
65 String user;
66 String password;
67 String topic;
68#ifdef SUPPORT_SENSOR_DS18B20
69 String TemperatureSensorTopic;
70#endif // def SUPPORT_SENSOR_DS18B20
72 String haprefix = "homeassistant";
73 bool hadisco = true;
74 String lwtTopic;
75
76 #define deletePlayFileEngine() \
77 { \
78 if (nullptr != pPlayFileEngine) \
79 { \
80 pPlayFileEngine->~c_InputFPPRemotePlayItem(); \
81 memset(PlayFileEngine, 0x0, sizeof(PlayFileEngine)); \
82 pPlayFileEngine = nullptr; \
83 } \
84 }
85 // char PlayFileEngine[sizeof(c_InputFPPRemotePlayFile)];
87
88 #define deleteEffectsEngine() \
89 { \
90 if (nullptr != pEffectsEngine) \
91 { \
92 pEffectsEngine->~c_InputEffectEngine(); \
93 memset(EffectsEngine, 0x0, sizeof(EffectsEngine)); \
94 pEffectsEngine = nullptr; \
95 } \
96 }
98
99 const char* ON = "ON";
100 const char* OFF = "OFF";
101 const char* LWT_ONLINE = "online";
102 const char* LWT_OFFLINE = "offline";
103
104 void validateConfiguration ();
105
106 void setup ();
107 void onNetworkConnect ();
108 void onNetworkDisconnect ();
109 void validate ();
110 void NetworkStateChanged (bool IsConnected, bool RebootAllowed); // used by poorly designed rx functions
111 void PlayFseq (JsonObject & JsonConfig);
112 void PlayEffect (JsonObject & JsonConfig);
113 void GetEngineConfig (JsonObject & JsonConfig);
114 void GetEffectList (JsonObject & JsonConfig);
115 void StopPlayFileEngine ();
116 void UpdateEffectConfiguration (JsonObject & JsonConfig);
117
118 void load ();
119 void save ();
120
121 bool stateOn = false;
122
124 //
125 // MQTT Section
126 //
128
129 void disconnectFromMqtt ();
130 void connectToMqtt (); // onMqttDisconnect, onWifiConnect
131 void onMqttConnect (bool sessionPresent); // setup
132 void onMqttDisconnect (AsyncMqttClientDisconnectReason reason); // setup
133 void onMqttMessage (char* topic, char* payload, AsyncMqttClientMessageProperties properties, uint32_t len, uint32_t index, uint32_t total); // setup
134 void publishHA (); // updateConfig
135 void publishState (); // onMqttConnect, onMqttMessage, procT, updateConfig
136};
#define MQTT_PORT
Default MQTT port.
Definition InputMQTT.h:52
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:121
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:632
void onMqttMessage(char *topic, char *payload, AsyncMqttClientMessageProperties properties, uint32_t len, uint32_t index, uint32_t total)
Definition InputMQTT.cpp:376
virtual ~c_InputMQTT()
Definition InputMQTT.cpp:64
char PlayFileEngine[sizeof(c_InputFPPRemotePlayList)]
Definition InputMQTT.h:86
void ClearStatistics()
Definition InputMQTT.cpp:145
c_InputFPPRemotePlayItem * pPlayFileEngine
Definition InputMQTT.h:57
Ticker mqttTicker
Definition InputMQTT.h:55
void GetDriverName(String &sDriverName)
get the name for the instantiated driver
Definition InputMQTT.h:47
void PlayEffect(JsonObject &JsonConfig)
Definition InputMQTT.cpp:550
const char * LWT_ONLINE
Definition InputMQTT.h:101
void validateConfiguration()
Definition InputMQTT.cpp:233
bool hadisco
Definition InputMQTT.h:73
void GetConfig(JsonObject &jsonConfig)
Get the current config used by the driver.
Definition InputMQTT.cpp:109
void StopPlayFileEngine()
Definition InputMQTT.cpp:581
void publishHA()
Definition InputMQTT.cpp:664
void disconnectFromMqtt()
Definition InputMQTT.cpp:292
const char * ON
Definition InputMQTT.h:99
void onNetworkDisconnect()
Call from onWiFiDisconnect()
Definition InputMQTT.cpp:258
void validate()
Call from validateConfig()
void publishState()
Definition InputMQTT.cpp:726
const char * LWT_OFFLINE
Definition InputMQTT.h:102
void SetBufferInfo(uint32_t BufferSize)
Definition InputMQTT.cpp:181
const char * OFF
Definition InputMQTT.h:100
String lwtTopic
Definition InputMQTT.h:74
bool SetConfig(JsonObject &jsonConfig)
Set a new config in the driver.
Definition InputMQTT.cpp:197
void GetStatus(JsonObject &jsonStatus)
Definition InputMQTT.cpp:133
AsyncMqttClient mqtt
Definition InputMQTT.h:54
void connectToMqtt()
Definition InputMQTT.cpp:270
c_InputEffectEngine::MQTTConfiguration_t effectConfig
Definition InputMQTT.h:60
c_InputEffectEngine * pEffectsEngine
Definition InputMQTT.h:56
void onMqttDisconnect(AsyncMqttClientDisconnectReason reason)
Definition InputMQTT.cpp:353
void PlayFseq(JsonObject &JsonConfig)
Definition InputMQTT.cpp:470
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:783
void GetEngineConfig(JsonObject &JsonConfig)
Definition InputMQTT.cpp:592
void Process()
Call from loop(), renders Input data.
Definition InputMQTT.cpp:154
uint16_t port
Definition InputMQTT.h:64
String user
Definition InputMQTT.h:65
void setup()
Call from setup()
bool CleanSessionRequired
Definition InputMQTT.h:71
void onNetworkConnect()
Call from onWifiConnect()
Definition InputMQTT.cpp:247
void onMqttConnect(bool sessionPresent)
Definition InputMQTT.cpp:306
String ip
Definition InputMQTT.h:63
String password
Definition InputMQTT.h:66
String topic
Definition InputMQTT.h:67
void NetworkStateChanged(bool IsConnected)
Definition InputMQTT.cpp:756
void load()
Load configuration from File System.
String haprefix
Definition InputMQTT.h:72
char EffectsEngine[sizeof(c_InputEffectEngine)]
Definition InputMQTT.h:97
void save()
Save configuration to File System.
e_InputType
Definition InputMgr.hpp:73
e_InputChannelIds
Definition InputMgr.hpp:40
Definition InputEffectEngine.hpp:80