EnigmaIOT  0.9.3
Secure sensor and gateway platform based on ESP8266 and ESP32
GwOutput_mqtt.h
Go to the documentation of this file.
1 
11 #ifndef _GWOUTPUT_MQTT_h
12 #define _GWOUTPUT_MQTT_h
13 
14 #if defined(ARDUINO) && ARDUINO >= 100
15 #include "Arduino.h"
16 #else
17 #include "WProgram.h"
18 #endif
19 
20 #include <GwOutput_generic.h>
21 #include "dstrootca.h"
22 #include <ESPAsyncWiFiManager.h>
23 #include <EnigmaIOTGateway.h>
24 #include <PubSubClient.h>
25 #include <queue>
26 #ifdef SECURE_MQTT
27 #include <WiFiClientSecure.h>
28 #else
29 #include <WiFiClient.h>
30 #endif // SECURE_MQTT
31 
32 
33 // DOWNLINK MESSAGES
34 #define GET_VERSION "get/version"
35 #define GET_VERSION_ANS "result/version"
36 #define GET_SLEEP "get/sleeptime"
37 #define GET_SLEEP_ANS "result/sleeptime"
38 #define SET_SLEEP "set/sleeptime"
39 #define SET_OTA "set/ota"
40 #define SET_OTA_ANS "result/ota"
41 #define SET_IDENTIFY "set/identify"
42 #define SET_RESET_CONFIG "set/reset"
43 #define SET_RESET_ANS "result/reset"
44 #define GET_RSSI "get/rssi"
45 #define GET_RSSI_ANS "result/rssi"
46 #define GET_NAME "get/name"
47 #define SET_NAME "set/name"
48 #define GET_NAME_ANS "result/name"
49 #define SET_USER_DATA "set/data"
50 #define GET_USER_DATA "get/data"
51 #define NODE_DATA "data"
52 #define LOST_MESSAGES "debug/lostmessages"
53 #define NODE_STATUS "status"
54 #define GW_STATUS "/gateway/status"
55 
56 constexpr auto CONFIG_FILE = "/mqtt.json";
57 
58 typedef struct {
59  char mqtt_server[41];
60 #ifdef SECURE_MQTT
61  int mqtt_port = 8883;
62 #else
63  int mqtt_port = 1883;
64 #endif //SECURE_MQTT
65  char mqtt_user[21];
66  char mqtt_pass[41];
68 
69 typedef struct {
70  char* topic;
71  char* payload;
72  size_t payload_len;
73  bool retain;
75 
76 
78 protected:
79  AsyncWiFiManagerParameter* mqttServerParam;
80  AsyncWiFiManagerParameter* mqttPortParam;
81  AsyncWiFiManagerParameter* mqttUserParam;
82  AsyncWiFiManagerParameter* mqttPassParam;
83 
84  std::queue<mqtt_queue_item_t*> mqtt_queue;
85 
87  bool shouldSaveConfig = false;
88 
89 #ifdef SECURE_MQTT
90  WiFiClientSecure espClient;
91 #ifdef ESP8266
92  BearSSL::X509List certificate;
93 #endif // ESP8266
94 #else
95  WiFiClient espClient;
96 #endif // SECURE_MQTT
97  PubSubClient mqtt_client;
98 
103  bool saveConfig ();
104 #ifdef SECURE_MQTT
105 
108  void setClock ();
109 #endif // SECURE_MQTT
110 
117  void reconnect ();
118 
126  bool addMQTTqueue (const char* topic, char* payload, size_t len, bool retain = false);
127 
133 
137  void popMQTTqueue ();
138 
146  bool publishMQTT (const char* topic, const char* payload, size_t len, bool retain = false);
147 
154  static void onDlData (char* topic, uint8_t* data, unsigned int len);
155 
156 public:
161 #if defined ESP8266 && defined SECURE_MQTT
162  certificate (DSTroot_CA),
163 #endif // ESP8266 && SECURE_MQTT
165 
170  void configManagerStart (EnigmaIOTGatewayClass* enigmaIotGw);
171 
176  void configManagerExit (bool status);
177 
182  bool begin ();
183 
188  bool loadConfig ();
189 
197  bool outputControlSend (char* address, uint8_t* data, size_t length);
198 
205  bool newNodeSend (char* address, uint16_t node_id);
206 
213  bool nodeDisconnectedSend (char* address, gwInvalidateReason_t reason);
214 
223  bool outputDataSend (char* address, char* data, size_t length, GwOutput_data_type_t type = data);
224 
228  void loop ();
229 };
230 
231 extern GwOutput_MQTT GwOutput;
232 
233 #endif // _GWOUTPUT_MQTT_h
234 
mqtt_queue_item_t::payload
char * payload
Definition: GwOutput_mqtt.h:71
GwOutput_MQTT::nodeDisconnectedSend
bool nodeDisconnectedSend(char *address, gwInvalidateReason_t reason)
Send node disconnection notification.
Definition: GwOutput_mqtt.cpp:642
GwOutput_MQTT::configManagerStart
void configManagerStart(EnigmaIOTGatewayClass *enigmaIotGw)
Called when wifi manager starts config portal.
Definition: GwOutput_mqtt.cpp:44
GwOutput_MQTT::mqttPassParam
AsyncWiFiManagerParameter * mqttPassParam
Configuration field for MQTT server password.
Definition: GwOutput_mqtt.h:82
mqtt_queue_item_t
Definition: GwOutput_mqtt.h:69
GwOutput_MQTT::newNodeSend
bool newNodeSend(char *address, uint16_t node_id)
Send new node notification.
Definition: GwOutput_mqtt.cpp:624
GatewayOutput_generic
Definition: GwOutput_generic.h:31
EnigmaIOTGatewayClass
Main gateway class. Manages communication with nodes and sends data to upper layer.
Definition: EnigmaIOTGateway.h:204
GwOutput_generic.h
Generic Gateway output module template.
GwOutput_MQTT::reconnect
void reconnect()
This is called anytime MQTT client is disconnected.
Definition: GwOutput_mqtt.cpp:231
GwOutput_MQTT::onDlData
static void onDlData(char *topic, uint8_t *data, unsigned int len)
Function that processes downlink data from network to node.
Definition: GwOutput_mqtt.cpp:364
GwOutput_MQTT::mqttPortParam
AsyncWiFiManagerParameter * mqttPortParam
Configuration field for MQTT server port.
Definition: GwOutput_mqtt.h:80
GwOutput_MQTT::begin
bool begin()
Starts output module.
Definition: GwOutput_mqtt.cpp:204
GwOutput_MQTT::popMQTTqueue
void popMQTTqueue()
Deletes next item in the queue.
Definition: GwOutput_mqtt.cpp:491
GwOutput_MQTT::mqttServerParam
AsyncWiFiManagerParameter * mqttServerParam
Configuration field for MQTT server address.
Definition: GwOutput_mqtt.h:79
GwOutput_MQTT::loop
void loop()
Should be called regularly for module management.
Definition: GwOutput_mqtt.cpp:414
mqtt_queue_item_t::retain
bool retain
Definition: GwOutput_mqtt.h:73
GwOutput_MQTT::outputDataSend
bool outputDataSend(char *address, char *data, size_t length, GwOutput_data_type_t type=data)
Send data from nodes.
Definition: GwOutput_mqtt.cpp:510
GwOutput_MQTT::mqttgw_config
mqttgw_config_t mqttgw_config
MQTT server configuration data.
Definition: GwOutput_mqtt.h:86
GwOutput_MQTT::shouldSaveConfig
bool shouldSaveConfig
Flag to indicate if configuration should be saved.
Definition: GwOutput_mqtt.h:87
CONFIG_FILE
constexpr auto CONFIG_FILE
MQTT outout configuration file name.
Definition: GwOutput_mqtt.h:56
GwOutput_MQTT
Definition: GwOutput_mqtt.h:77
GwOutput_MQTT::configManagerExit
void configManagerExit(bool status)
Called when wifi manager exits config portal.
Definition: GwOutput_mqtt.cpp:167
GwOutput
GwOutput_MQTT GwOutput
Definition: GwOutput_dummy.cpp:29
GwOutput_MQTT::getMQTTqueue
mqtt_queue_item_t * getMQTTqueue()
Gets next item in the queue.
Definition: GwOutput_mqtt.cpp:483
mqtt_queue_item_t::topic
char * topic
Definition: GwOutput_mqtt.h:70
GwOutput_data_type_t
enum GwOutput_data_type GwOutput_data_type_t
GwOutput_MQTT::outputControlSend
bool outputControlSend(char *address, uint8_t *data, size_t length)
Send control data from nodes.
Definition: GwOutput_mqtt.cpp:533
GwOutput_MQTT::GwOutput_MQTT
GwOutput_MQTT()
Constructor to initialize MQTT client.
Definition: GwOutput_mqtt.h:160
GwOutput_MQTT::mqttUserParam
AsyncWiFiManagerParameter * mqttUserParam
Configuration field for MQTT server user name.
Definition: GwOutput_mqtt.h:81
GwOutput_MQTT::espClient
WiFiClient espClient
TCP client.
Definition: GwOutput_mqtt.h:95
GwOutput_MQTT::addMQTTqueue
bool addMQTTqueue(const char *topic, char *payload, size_t len, bool retain=false)
Add MQTT message to queue.
Definition: GwOutput_mqtt.cpp:460
data
@ data
Definition: GwOutput_generic.h:23
mqtt_queue_item_t::payload_len
size_t payload_len
Definition: GwOutput_mqtt.h:72
GwOutput_MQTT::mqtt_client
PubSubClient mqtt_client
MQTT client.
Definition: GwOutput_mqtt.h:97
GwOutput_MQTT::saveConfig
bool saveConfig()
Saves output module configuration.
Definition: GwOutput_mqtt.cpp:60
EnigmaIOTGateway.h
Library to build a gateway for EnigmaIoT system.
gwInvalidateReason_t
gwInvalidateReason_t
Key invalidation reason definition.
Definition: EnigmaIOTGateway.h:64
GwOutput_MQTT::mqtt_queue
std::queue< mqtt_queue_item_t * > mqtt_queue
Output MQTT messages queue. It acts as a FIFO queue.
Definition: GwOutput_mqtt.h:84
GwOutput_MQTT::loadConfig
bool loadConfig()
Loads output module configuration.
Definition: GwOutput_mqtt.cpp:102
mqttgw_config_t
Definition: GwOutput_mqtt.h:58
dstrootca.h
status
@ status
Definition: GwOutput_generic.h:25
GwOutput_MQTT::publishMQTT
bool publishMQTT(const char *topic, const char *payload, size_t len, bool retain=false)
Publishes data over MQTT.
Definition: GwOutput_mqtt.cpp:431