diff --git a/.gitignore b/.gitignore index 6ed07e0a..ce49f5ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ +.idea .pio .vscode/.browse.c_cpp.db* .vscode/c_cpp_properties.json .vscode/launch.json .vscode/ipch /Tools -src/Globals.cpp +src/Globals.cpp diff --git a/platformio.ini b/platformio.ini index 8d6da583..a47ed1f0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,7 +14,7 @@ default_envs = ulanzi [env] framework = arduino board_build.f_cpu = 240000000L -upload_speed = 921600 +upload_speed = 115200 monitor_speed = 115200 monitor_filters = esp32_exception_decoder lib_deps = diff --git a/src/Globals.cpp b/src/Globals.cpp index 4390b762..e036da86 100644 --- a/src/Globals.cpp +++ b/src/Globals.cpp @@ -354,6 +354,7 @@ uint16_t MQTT_PORT = 1883; String MQTT_USER; String MQTT_PASS; String MQTT_PREFIX; +bool MQTT_TLS = false; bool IO_BROKER = false; bool NET_STATIC = false; bool SHOW_TIME = true; diff --git a/src/Globals.h b/src/Globals.h index 87b344a4..46a27321 100644 --- a/src/Globals.h +++ b/src/Globals.h @@ -41,6 +41,7 @@ extern uint16_t MQTT_PORT; extern String MQTT_USER; extern String MQTT_PASS; extern String MQTT_PREFIX; +extern bool MQTT_TLS; extern bool IO_BROKER; extern bool NET_STATIC; extern bool SHOW_TIME; diff --git a/src/MQTTManager.cpp b/src/MQTTManager.cpp index 6dba2c97..6b322def 100644 --- a/src/MQTTManager.cpp +++ b/src/MQTTManager.cpp @@ -4,6 +4,7 @@ #include "ServerManager.h" #include #include +#include #include #include "Dictionary.h" #include "PeripheryManager.h" @@ -12,9 +13,12 @@ const uint16_t PORT = 1883; -WiFiClient espClient; +WiFiClientSecure secureClient; +WiFiClient plainClient; HADevice device; -HAMqtt mqtt(espClient, device, 26); +HAMqtt *mqttPtr = nullptr; + +#define mqtt (*mqttPtr) HALight *Matrix, *Indikator1, *Indikator2, *Indikator3 = nullptr; HASelect *BriMode, *transEffect = nullptr; @@ -463,7 +467,6 @@ bool MQTTManager_::isConnected() void connect() { - mqtt.onMessage(onMqttMessage); mqtt.onConnected(onMqttConnected); @@ -537,6 +540,15 @@ void MQTTManager_::sendStats() void MQTTManager_::setup() { + if (MQTT_TLS) + { + secureClient.setInsecure(); + mqttPtr = new HAMqtt(secureClient, device, 26); + } + else + { + mqttPtr = new HAMqtt(plainClient, device, 26); + } if (HA_DISCOVERY) { @@ -741,7 +753,7 @@ void MQTTManager_::setup() void MQTTManager_::tick() { - if (MQTT_HOST != "") + if (mqttPtr != nullptr && MQTT_HOST != "") { mqtt.loop(); } @@ -755,6 +767,9 @@ void MQTTManager_::tick() void MQTTManager_::publish(const char *topic, const char *payload) { + if (mqttPtr == nullptr) + return; + char result[100]; strcpy(result, MQTT_PREFIX.c_str()); strcat(result, "/"); @@ -768,7 +783,7 @@ void MQTTManager_::publish(const char *topic, const char *payload) void MQTTManager_::rawPublish(const char *prefix, const char *topic, const char *payload) { - if (!mqtt.isConnected()) + if (mqttPtr == nullptr || !mqtt.isConnected()) return; char result[100]; strcpy(result, prefix); @@ -864,15 +879,21 @@ void MQTTManager_::setIndicatorState(uint8_t indicator, bool state, uint32_t col void MQTTManager_::beginPublish(const char *topic, unsigned int plength, boolean retained) { + if (mqttPtr == nullptr) + return; mqtt.beginPublish(topic, plength, retained); } void MQTTManager_::writePayload(const char *data, const uint16_t length) { + if (mqttPtr == nullptr) + return; mqtt.writePayload(data, length); } void MQTTManager_::endPublish() { + if (mqttPtr == nullptr) + return; mqtt.endPublish(); } diff --git a/src/ServerManager.cpp b/src/ServerManager.cpp index 0da6d87f..11ee8f12 100644 --- a/src/ServerManager.cpp +++ b/src/ServerManager.cpp @@ -235,6 +235,7 @@ void ServerManager_::setup() mws.addOption("Username", MQTT_USER); mws.addOption("Password", MQTT_PASS); mws.addOption("Prefix", MQTT_PREFIX); + mws.addOption("TLS", MQTT_TLS); mws.addOption("Homeassistant Discovery", HA_DISCOVERY); mws.addOptionBox("Time"); mws.addOption("NTP Server", NTP_SERVER); @@ -366,6 +367,7 @@ void ServerManager_::loadSettings() MQTT_PASS = doc["Password"].as(); MQTT_PREFIX = doc["Prefix"].as(); MQTT_PREFIX.trim(); + MQTT_TLS = doc.containsKey("TLS") ? doc["TLS"].as() : false; NET_STATIC = doc["Static IP"]; HA_DISCOVERY = doc["Homeassistant Discovery"]; NET_IP = doc["Local IP"].as();