diff --git a/platformio.ini b/platformio.ini index 558768a..e2cbd41 100644 --- a/platformio.ini +++ b/platformio.ini @@ -10,7 +10,7 @@ [env:esp32dev] platform = espressif32 -lib_extra_dirs = ~/Documents/Arduino/libraries +;lib_extra_dirs = ~/Documents/Arduino/libraries board = esp32dev framework = arduino board_build.partitions = min_spiffs.csv @@ -19,9 +19,9 @@ upload_speed = 921600 ;upload_protocol = espota upload_port = COM16 upload_protocol = esptool -upload_flags = - --port=3232 -monitor_speed = 115200 +;upload_flags = +; --port=3232 +;monitor_speed = 115200 extra_scripts = post:add_CRC.py ; replace shitty Arduino millis with a linear time version build_flags = diff --git a/src/Utility/NVStorage.cpp b/src/Utility/NVStorage.cpp index a6c7f83..9519d3d 100644 --- a/src/Utility/NVStorage.cpp +++ b/src/Utility/NVStorage.cpp @@ -430,6 +430,7 @@ sMQTTparams::load() validatedLoad("host", host, 127, "hostIP"); validatedLoad("username", username, 31, "username"); validatedLoad("password", password, 31, "password"); + validatedLoad("topic", topic, 31, "Afterburner"); preferences.end(); } @@ -443,6 +444,7 @@ sMQTTparams::save() preferences.putString("host", host); preferences.putString("username", username); preferences.putString("password", password); + preferences.putString("topic", topic); preferences.end(); } diff --git a/src/Utility/NVStorage.h b/src/Utility/NVStorage.h index 117277b..cc3a49d 100644 --- a/src/Utility/NVStorage.h +++ b/src/Utility/NVStorage.h @@ -219,12 +219,14 @@ struct sMQTTparams : public CESP32_NVStorage { char host[128]; char username[32]; char password[32]; + char topic[32]; void init() { enabled = false; port = 1234; memset(host, 0, 128); memset(username, 0, 32); memset(password, 0, 32); + memset(topic, 0, 32); } sMQTTparams& operator=(const sMQTTparams& rhs) { enabled = rhs.enabled; @@ -232,9 +234,11 @@ struct sMQTTparams : public CESP32_NVStorage { memcpy(host, rhs.host, 128); memcpy(username, rhs.username, 32); memcpy(password, rhs.password, 32); + memcpy(topic, rhs.topic, 32); host[127] = 0; username[31] = 0; password[31] = 0; + topic[31] = 0; return *this; } void load(); diff --git a/src/WiFi/ABMqtt.cpp b/src/WiFi/ABMqtt.cpp index 59ff3fa..f1ddbe2 100644 --- a/src/WiFi/ABMqtt.cpp +++ b/src/WiFi/ABMqtt.cpp @@ -4,13 +4,14 @@ #include "../cfg/BTCConfig.h" -#ifdef USE_MQTT +#if USE_MQTT == 1 #include #include "ABMqtt.h" -#include "../../lib/PubSubClient/src/PubSubClient.h" +#include "../../lib/aysync-mqtt-client/src/AsyncMqttClient.h" #include "BTCWifi.h" #include "BTCWebServer.h" #include "../Utility/DebugPort.h" +#include "../Utility/NVStorage.h" // Update these with values suitable for your network. byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; @@ -26,17 +27,27 @@ void MqttCallback(char* topic, byte* payload, unsigned int length) { char test[256]; int len = length < 256 ? length : 255; strncpy(test, (char*)payload, len); - test[len]; + test[len] = 0; DebugPort.println(test); // handle message arrived } -WiFiClient espClient; -PubSubClient MQTTclient(espClient); +//WiFiClient espClient; +AsyncMqttClient MQTTclient; -void MqttSetup() { +bool MqttSetup() { MQTTclient.setServer(MQTTserver, 1883); - MQTTclient.setCallback(MqttCallback); + espClient.setTimeout(5); + const sMQTTparams params = NVstore.getMQTTinfo(); + if(params.enabled) { + if(strlen(params.host)) { +// DebugPort.printf("MQTT: setting server to %s:%d\r\n", params.host, params.port); +// MQTTclient.setServer(params.host, params.port); + MQTTclient.setCallback(MqttCallback); + return true; + } + } + return false; } bool reconnect() { @@ -46,23 +57,28 @@ bool reconnect() { long tDelta = millis() - HoldOff; if(tDelta > 0) HoldOff = 0; + return false; } - if(HoldOff == 0 && !MQTTclient.connected()) { - DebugPort.println("Attempting MQTT connection"); - if (MQTTclient.connect("afterburnerClient")) { - DebugPort.println("MQTT connected"); - // Once connected, publish an announcement... - MQTTclient.publish("Afterburner/test", "hello world"); - // ... and resubscribe -// MQTTclient.subscribe("inTopic"); -// MQTTclient.subscribe("Test/Test/Test/Test"); - MQTTclient.subscribe("Afterburner"); - MQTTclient.publish("Afterburner/test", "the end is nigh"); - } - else { - DebugPort.printf("MQTT connect failed, rc = %d, try again in 5 seconds\r\n", MQTTclient.state()); - HoldOff = millis() + 5000; + if(MqttSetup()) { + + if(NVstore.getMQTTinfo().enabled && HoldOff == 0 && !MQTTclient.connected()) { + DebugPort.println("Attempting MQTT connection"); + if (MQTTclient.connect("afterburnerClient")) { + DebugPort.println("MQTT connected"); + // Once connected, publish an announcement... + // MQTTclient.publish("Afterburner/test", "hello world"); + // ... and resubscribe + const sMQTTparams params = NVstore.getMQTTinfo(); + char topic[128]; + sprintf(topic, "%s/JSONin", params.topic); + MQTTclient.subscribe(topic); + // MQTTclient.publish("Afterburner/test", "the end is nigh"); + } + else { + DebugPort.printf("MQTT connect failed, rc = %d, try again in 5 seconds\r\n", MQTTclient.state()); + HoldOff = millis() + 5000; + } } } return MQTTclient.connected(); diff --git a/src/WiFi/ABmqtt.h b/src/WiFi/ABmqtt.h index 8b6d6fc..811d881 100644 --- a/src/WiFi/ABmqtt.h +++ b/src/WiFi/ABmqtt.h @@ -10,7 +10,7 @@ void MqttCallback(char* topic, byte* payload, unsigned int length); -void MqttSetup(); +bool MqttSetup(); void doMQTT(); #endif diff --git a/src/cfg/BTCConfig.h b/src/cfg/BTCConfig.h index ca1f248..6909ed1 100644 --- a/src/cfg/BTCConfig.h +++ b/src/cfg/BTCConfig.h @@ -42,7 +42,7 @@ #define USE_WIFI 1 #define USE_OTA 1 #define USE_WEBSERVER 1 -#define USE_MQTT 1 +#define USE_MQTT 0 #define USE_PORTAL_TRIGGER_PIN 0