From 894d9cb04908a24641e3e4ec0a4f9f2c6f976939 Mon Sep 17 00:00:00 2001 From: gunner47 Date: Sat, 5 Oct 2019 23:10:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=D1=8F=D1=89=D0=B8=D1=85=20MQTT=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- firmware/GyverLamp_v1.4/GyverLamp_v1.4.ino | 3 ++- firmware/GyverLamp_v1.4/MqttManager.h | 13 ++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/firmware/GyverLamp_v1.4/GyverLamp_v1.4.ino b/firmware/GyverLamp_v1.4/GyverLamp_v1.4.ino index 5bde7ac..0ebfb98 100644 --- a/firmware/GyverLamp_v1.4/GyverLamp_v1.4.ino +++ b/firmware/GyverLamp_v1.4/GyverLamp_v1.4.ino @@ -137,6 +137,7 @@ char* MqttManager::mqttServer = NULL; char* MqttManager::mqttUser = NULL; char* MqttManager::mqttPassword = NULL; char* MqttManager::clientId = NULL; +char* MqttManager::lampInputBuffer = NULL; char* MqttManager::topicInput = NULL; char* MqttManager::topicOutput = NULL; bool MqttManager::needToPublish = false; @@ -307,7 +308,7 @@ void setup() // MQTT #if (USE_MQTT && ESP_MODE == 1) mqttClient = new AsyncMqttClient(); - MqttManager::setupMqtt(mqttClient, &sendCurrent); // создание экземпляров объектов для работы с MQTT, их инициализация и подключение к MQTT брокеру + MqttManager::setupMqtt(mqttClient, inputBuffer, &sendCurrent); // создание экземпляров объектов для работы с MQTT, их инициализация и подключение к MQTT брокеру #endif diff --git a/firmware/GyverLamp_v1.4/MqttManager.h b/firmware/GyverLamp_v1.4/MqttManager.h index fc21c95..0403ed2 100644 --- a/firmware/GyverLamp_v1.4/MqttManager.h +++ b/firmware/GyverLamp_v1.4/MqttManager.h @@ -68,7 +68,7 @@ class MqttManager { public: static uint32_t mqttLastConnectingAttempt; - static void setupMqtt(AsyncMqttClient* mqttClient, SendCurrentDelegate sendCurrentDelegate); + static void setupMqtt(AsyncMqttClient* mqttClient, char* lampInputBuffer, SendCurrentDelegate sendCurrentDelegate); static void mqttConnect(); static void onMqttConnect(bool sessionPresent); static void onMqttDisconnect(AsyncMqttClientDisconnectReason reason); @@ -84,6 +84,7 @@ class MqttManager static char* topicInput; // TopicBase + '/' + MqttClientIdPrefix + ESP.getChipId + '/' + TopicCmnd static char* topicOutput; // TopicBase + '/' + MqttClientIdPrefix + ESP.getChipId + '/' + TopicState static char* clientId; + static char* lampInputBuffer; // ссылка на inputBuffer для записи в него пришедшей MQTT команды и последующей её обработки лампой static AsyncMqttClient* mqttClient; static const uint8_t qos = 0U; // MQTT quality of service static const uint32_t connectionTimeout = MQTT_RECONNECT_TIME * 1000U; // период времени для проверки (пере)подключения к MQTT брокеру, 10 секунд @@ -94,13 +95,14 @@ class MqttManager }; -void MqttManager::setupMqtt(AsyncMqttClient* mqttClient, SendCurrentDelegate sendCurrentDelegate) +void MqttManager::setupMqtt(AsyncMqttClient* mqttClient, char* lampInputBuffer, SendCurrentDelegate sendCurrentDelegate) { allocStr_P(&MqttManager::mqttServer, MqttServer); allocStr_P(&MqttManager::mqttUser, MqttUser); allocStr_P(&MqttManager::mqttPassword, MqttPassword); MqttManager::mqttClient = mqttClient; + MqttManager::lampInputBuffer = lampInputBuffer; MqttManager::sendCurrentDelegate = sendCurrentDelegate; MqttManager::mqttClient->setServer(MqttManager::mqttServer, MqttPort); @@ -195,8 +197,9 @@ void MqttManager::onMqttMessage(char* topic, char* payload, AsyncMqttClientMessa { if (payload != NULL) // сохраняем пришедшее MQTT сообщение для дальнейшей обработки { - strncpy(mqttBuffer, payload, len); - mqttBuffer[len] = '\0'; + strncpy(lampInputBuffer, payload, len); + lampInputBuffer[len] = '\0'; + needToPublish = true; } #ifdef GENERAL_DEBUG @@ -219,7 +222,7 @@ void MqttManager::onMqttMessage(char* topic, char* payload, AsyncMqttClientMessa LOG.println(total); */ LOG.print(F(", значение \"")); - LOG.print(mqttBuffer); + LOG.print(lampInputBuffer); LOG.println("\""); LOG.println(); #endif