MQTT Communication
Smart Factory
myMQTT.cpp
Go to the documentation of this file.
1 
16 #include "myMQTT.h"
17 
18 //=====PUBLIC====================================================================================
19 myMQTT::myMQTT(String hostname,
20  const int BrokerIP1,
21  const int BrokerIP2,
22  const int BrokerIP3,
23  const int BrokerIP4,
24  const int BrokerPort) : pHostname(hostname),
25  pBrokerIP(BrokerIP1,
26  BrokerIP2,
27  BrokerIP3,
28  BrokerIP4),
29  pBrokerPort(BrokerPort) {
30  // myMQTTclient.PubSubClient(pBrokerIP, pBrokerPort, pToCallback, *myClient);
31 }
32 
33 void myMQTT::init(WiFiClient *myClient, void (*pToCallback)(char *, unsigned char *, unsigned int)) {
34  DBFUNCCALLln("myMQTT::init()");
35  myMQTTclient.setClient(*myClient);
37  myMQTTclient.setCallback(pToCallback);
38  connectToMQTT(); // connecting to MQTT-Broker
39 }
40 
41 bool myMQTT::subscribe(const String topic) { // subscribes to a new MQTT topic
42  DBFUNCCALLln("myMQTT::subscribe(const String topic) ");
43  connectToMQTT();
44  if (myMQTTclient.connected()) {
45  DBINFO3("Subscribing to: " + topic);
46  DBINFO3ln(" Client ID: " + pHostname);
47  if (myMQTTclient.subscribe(topic.c_str())) {
48  DBINFO1ln("suscription succesful");
49  return true;
50  } else {
51  DBINFO1ln("suscription failed");
52  return false;
53  }
54  }
55  return false;
56 }
57 
58 bool myMQTT::unsubscribe(const String topic) {
59  DBFUNCCALLln("myMQTT::unsubscribe(const String topic)");
60  connectToMQTT();
61  if (myMQTTclient.connected()) {
62  DBINFO3("Unsubscribe from " + topic);
63  DBINFO3ln(" Client ID: " + pHostname);
64  if (myMQTTclient.unsubscribe(topic.c_str())) {
65  DBINFO3ln("unsubscribed successfully");
66  return true;
67  } else {
68  DBWARNINGln("unsubscribe failed");
69  return false;
70  }
71  }
72  return false;
73 }
74 
75 bool myMQTT::publishMessage(const String topic, const String msg) { // publishes a message to the server
76  DBFUNCCALLln("myMQTT::publishMessage(const String topic, const String msg)");
77  // DBINFO3ln("try to publish to[" + topic + "] message: " + msg);
78  connectToMQTT();
79  if (myMQTTclient.connected()) {
80  if (myMQTTclient.publish(topic.c_str(), msg.c_str())) {
81  DBINFO3ln("Publish to topic [" + topic + "] message:" + msg);
82  return true;
83  } else {
84  DBWARNINGln("Publish failed");
85  return false;
86  }
87  }
88  return false;
89 }
90 
91 //=====PRIVATE====================================================================================
92 
94  DBFUNCCALLln("myMQTT::connectToMQTT()");
95  /*
96  * loop() should be called regularly to allow
97  * the client to process incoming messages and
98  * maintain its connection to the server.
99  * https://pubsubclient.knolleary.net/api.html#loop
100  */
101  myMQTTclient.loop();
102  while (!myMQTTclient.connected()) {
103  DBSTATUSln("Status: " + decodeMQTTstate(myMQTTclient.state()));
104  DBINFO3ln("Attempting MQTT connection...");
105  DBINFO3ln("MQTT Client ID: " + pHostname);
106  if (myMQTTclient.connect(pHostname.c_str())) {
107  DBINFO3ln("MQTT has successfully connected with hostname: " + pHostname);
108  } else {
110  DBINFO3ln("trying again in 3 seconds");
111  delay(3000);
112  }
113  }
114 }
115 
117  DBFUNCCALLln("NetworkManager::MQTTConnectionFailed()");
118  DBERROR("MQTT connection failed: " + decodeMQTTstate(myMQTTclient.state()));
119  DBINFO3ln("client status: " + decodeMQTTstate(myMQTTclient.state()));
120 }
121 
122 String myMQTT::decodeMQTTstate(int errorcode) {
123  DBFUNCCALLln("myMQTT::decodeMQTTstate(int errorcode)");
124  switch (errorcode) {
125  case -4:
126  return "MQTT_CONNECTION_TIMEOUT";
127  case -3:
128  return "MQTT_CONNECTION_LOST";
129  case -2:
130  return "MQTT_CONNECT_FAILED";
131  case -1:
132  return "MQTT_DISCONNECTED";
133  case 0:
134  return "MQTT_CONNECTED";
135  case 1:
136  return "MQTT_CONNECT_BAD_PROTOCOL";
137  case 2:
138  return "MQTT_CONNECT_BAD_CLIENT_ID";
139  case 3:
140  return "MQTT_CONNECT_UNAVAILABLE";
141  case 4:
142  return "MQTT_CONNECT_BAD_CREDENTIALS";
143  case 5:
144  return "MQTT_CONNECT_UNAUTHORIZED";
145  default:
146  return "Error";
147  }
148 }
const int pBrokerPort
port to connect to MQTT
Definition: myMQTT.h:131
void MQTTConnectionFailed()
Writes Error-Message about MQTT connection.
Definition: myMQTT.cpp:116
void connectToMQTT()
Connects to the MQTT-server.
Definition: myMQTT.cpp:93
myMQTT(String hostname, const int BrokerIP1, const int BrokerIP2, const int BrokerIP3, const int BrokerIP4, const int BrokerPort)
Construct a new my M Q T T object.
Definition: myMQTT.cpp:19
IPAddress pBrokerIP
the IP-address of the server/broker
Definition: myMQTT.h:130
This class handels the MQTT connection.
String decodeMQTTstate(int errorcode)
Decodes the Error Values from MQTT state() and returns a description.
Definition: myMQTT.cpp:122
void init(WiFiClient *myClient, void(*pToCallback)(char *, unsigned char *, unsigned int))
Definition: myMQTT.cpp:33
bool unsubscribe(const String topic)
unsubsribes from MQTT topic on Server
Definition: myMQTT.cpp:58
bool subscribe(const String topic)
subsribes to MQTT topic on Server
Definition: myMQTT.cpp:41
PubSubClient myMQTTclient
instance of PubSubClient
Definition: myMQTT.h:132
String pHostname
Contains Hostname/Client ID.
Definition: myMQTT.h:129
bool publishMessage(const String topic, const String msg)
handles outgoing MQTT messages to Server
Definition: myMQTT.cpp:75