-
Notifications
You must be signed in to change notification settings - Fork 1
/
Cloud.cpp
58 lines (48 loc) · 1.36 KB
/
Cloud.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "Cloud.h"
WiFiClientSecure espWifiClient;
PubSubClient mqtt(espWifiClient);
Cloud::Cloud(char *name, char *ssid, char *password, char *mqttServer, char *mqttUser, char *mqttPassword) {
this->name = name;
this->ssid = ssid;
this->password = password;
this->mqttServer = mqttServer;
this->mqttUser = mqttUser;
this->mqttPassword = mqttPassword;
}
bool Cloud::connect() {
WiFi.begin(this->ssid, this->password);
int8_t timeout = 5;
while (WiFi.status() != WL_CONNECTED && timeout > 0) {
// Loop until the connection is established
timeout--;
delay(1000);
}
mqtt.setServer(this->mqttServer, 8883);
this->mqttConnect();
return WiFi.status() == WL_CONNECTED;
}
bool Cloud::mqttConnect() {
mqtt.connect(this->name, this->mqttUser, this->mqttPassword);
mqtt.setBufferSize(512);
bool connected = mqtt.connected();
if (mqtt.connected()) {
this->sendEvent("connected");
}
return mqtt.connected();
}
void Cloud::send(char *topic, const char *message) {
if (WiFi.status() != WL_CONNECTED) {
return;
}
if (!mqtt.connected()) {
mqttConnect();
}
if (mqtt.connected()) {
mqtt.publish(topic, message);
}
}
void Cloud::sendEvent(char* event) {
char messageBuffer[255];
sprintf(messageBuffer, "{\"device\":\"%s\", \"event\": \"%s\"}", this->name, event);
mqtt.publish("home/devices/event", messageBuffer);
}