diff --git a/code/src/config/general.h b/code/src/config/general.h index 2124af7c..c40a00c4 100644 --- a/code/src/config/general.h +++ b/code/src/config/general.h @@ -68,6 +68,7 @@ #define MQTT_KEEPALIVE 30 #define MQTT_RECONNECT_DELAY 10000 #define MQTT_RELAY_TOPIC "/relay" +#define MQTT_LED_TOPIC "/led" #define MQTT_IP_TOPIC "/ip" #define MQTT_VERSION_TOPIC "/version" #define MQTT_FSVERSION_TOPIC "/fsversion" diff --git a/code/src/led.ino b/code/src/led.ino index 3e8de022..e2cb3bbe 100644 --- a/code/src/led.ino +++ b/code/src/led.ino @@ -59,17 +59,23 @@ void ledMQTTCallback(unsigned int type, const char * topic, const char * payload static bool isFirstMessage = true; + String mqttSetter = getSetting("mqttSetter", MQTT_USE_SETTER); + if (type == MQTT_CONNECT_EVENT) { - mqttSubscribe("/led/#"); + char buffer[strlen(MQTT_LED_TOPIC) + mqttSetter.length() + 3]; + sprintf(buffer, "%s/+%s", MQTT_LED_TOPIC, mqttSetter.c_str()); + mqttSubscribe(buffer); } if (type == MQTT_MESSAGE_EVENT) { // Match topic - if (memcmp("/led/", topic, 5) != 0) return; + String t = String(topic); + if (!t.startsWith(MQTT_LED_TOPIC)) return; + if (!t.endsWith(mqttSetter)) return; // Get led ID - unsigned int ledID = topic[strlen(topic)-1] - '0'; + unsigned int ledID = topic[strlen(MQTT_LED_TOPIC)+1] - '0'; if (ledID >= ledCount()) ledID = 0; // get value