-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDeviceRootConfig.cpp
More file actions
109 lines (89 loc) · 4.36 KB
/
DeviceRootConfig.cpp
File metadata and controls
109 lines (89 loc) · 4.36 KB
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <DeviceRootConfig.h>
String DeviceRootConfig::getCleanedDeviceName() {
String deviceNameCleaned = deviceName;
deviceNameCleaned.replace(" ", "_");
deviceNameCleaned.toLowerCase();
return deviceNameCleaned;
}
boolean DeviceRootConfig::updateServerSet() { return updateServer.length() > 0; }
boolean DeviceRootConfig::read() {
if (fileExists(WIFI_CONFIG_PATH) && fileExists(MQTT_CONFIG_PATH)) {
DynamicJsonDocument wifiConfig = deserializeFileContent(WIFI_CONFIG_PATH, 256);
this->wifiSSID = (const char *)wifiConfig["ssid"];
this->wifiPasswd = (const char *)wifiConfig["pass"];
DynamicJsonDocument mqttConfig = deserializeFileContent(MQTT_CONFIG_PATH, 512);
this->mqttBroker = (const char *)mqttConfig["mqtt_broker"];
this->mqttBrokerPort = mqttConfig["mqtt_brokerport"];
this->mqttUser = (const char *)mqttConfig["mqtt_user"];
this->mqttPasswd = (const char *)mqttConfig["mqtt_pass"];
this->deviceName = (const char *)mqttConfig["device_name"];
this->homeassistantAutoConfigurePrefix = (const char *)mqttConfig["auto_conf_prefix"];
this->updateServer = (const char *)mqttConfig["update_server"];
this->updateServerPort = mqttConfig["update_server_port"];
return true;
}
return false;
}
boolean DeviceRootConfig::writeCurrent() {
if (fileExists(WIFI_CONFIG_PATH) || fileExists(MQTT_CONFIG_PATH)) {
deleteConfig();
}
DynamicJsonDocument wifiConfig(256);
wifiConfig["ssid"] = wifiSSID;
wifiConfig["pass"] = wifiPasswd;
writeJsonDocumentToFile(WIFI_CONFIG_PATH, wifiConfig);
DynamicJsonDocument mqttConfig(512);
mqttConfig["mqtt_broker"] = mqttBroker;
mqttConfig["mqtt_brokerport"] = mqttBrokerPort;
mqttConfig["mqtt_user"] = mqttUser;
mqttConfig["mqtt_pass"] = mqttPasswd;
mqttConfig["device_name"] = deviceName;
mqttConfig["auto_conf_prefix"] = homeassistantAutoConfigurePrefix;
mqttConfig["update_server"] = updateServer;
mqttConfig["update_server_port"] = updateServerPort;
writeJsonDocumentToFile(MQTT_CONFIG_PATH, mqttConfig);
return true;
}
DynamicJsonDocument DeviceRootConfig::deserializeFileContent(String path, int jsonDocCapacity) {
DynamicJsonDocument jsonDoc(jsonDocCapacity);
String jsonContent = readFile(path);
DeserializationError error = deserializeJson(jsonDoc, jsonContent);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
}
return jsonDoc;
}
void DeviceRootConfig::writeJsonDocumentToFile(String path, DynamicJsonDocument contentDocument) {
String jsonStingContent;
serializeJson(contentDocument, jsonStingContent);
Serial.println("Writing: " + jsonStingContent);
writeFile(path, jsonStingContent);
}
boolean DeviceRootConfig::deleteConfig() {
return deleteFile(WIFI_CONFIG_PATH) && deleteFile(MQTT_CONFIG_PATH);
}
MQTTDeviceService *DeviceRootConfig::createMQTTDeviceService(WiFiClient &wifiClient,
MQTTClientCallbackSimple messageReceivedCallback,
boolean verbose, int publisherCacheSize,
int subscriberCacheSize, int mqttCacheSize) {
MessageQueueClient *messageQueueClient =
createMessageQueueClient(wifiClient, messageReceivedCallback, verbose, mqttCacheSize);
return new MQTTDeviceService(messageQueueClient, publisherCacheSize, subscriberCacheSize);
}
MessageQueueClient *DeviceRootConfig::createMessageQueueClient(WiFiClient &wifiClient,
MQTTClientCallbackSimple messageReceived,
boolean verbose, int cacheSize) {
MessageQueueClient *mqttClient = new MessageQueueClient(getCleanedDeviceName(), mqttUser, mqttPasswd);
mqttClient->setupClient(wifiClient, messageReceived, mqttBroker, mqttBrokerPort, cacheSize);
mqttClient->setVerbose(verbose);
return mqttClient;
}
MQTTDeviceInfo DeviceRootConfig::createMQTTDeviceInfo(const String deviceId, const int buildNumber,
const String deviceType) {
String deviceVersion = VERSION + "-" + buildNumber;
MQTTDeviceInfo deviceInfo = {
deviceId, getCleanedDeviceName(), deviceName, homeassistantAutoConfigurePrefix,
deviceType, MANUFACTURER, deviceVersion};
return deviceInfo;
}