diff --git a/mqttfastledmenu.ino b/mqttfastledmenu.ino index c581557..7823c08 100644 --- a/mqttfastledmenu.ino +++ b/mqttfastledmenu.ino @@ -10,6 +10,7 @@ int color = LED_COLOR_DEFAULT; int speed = LED_SPEED_DEFAULT; CRGB leds[LED_NUM]; int ledEffect = LED_EFFECT_OFF; +boolean ledState = false; // WIFI WiFiClient espClient; @@ -18,7 +19,8 @@ WiFiClient espClient; char message_buff[100]; PubSubClient client(espClient); -void setup() { +void setup() +{ Serial.begin(SERIAL_SPEED); Serial.println("\nresetting"); @@ -29,19 +31,20 @@ void setup() { client.setServer(MQTT_SERVER, MQTT_PORT); client.setCallback(callbackMQTT); testConnectMQTT(); - client.subscribe(MQTT_LED_EFFECT); - client.subscribe(MQTT_LED_BRIGHTNESS); - client.subscribe(MQTT_LED_COLOR); - client.subscribe(MQTT_LED_SPEED); + client.subscribe(MQTT_LED_EFFECT_COMMAND); + client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); + client.subscribe(MQTT_LED_COLOR_COMMAND); + client.subscribe(MQTT_LED_SPEED_COMMAND); // LED LEDS.addLeds(leds, LED_NUM).setCorrection(TypicalSMD5050); - FastLED.setBrightness(brightness); ledBlackAll(); + FastLED.setBrightness(brightness); } // WIFI -void setupWifi() { +void setupWifi() +{ Serial.print("Connexion a "); Serial.print(WIFI_SSID); WiFi.mode(WIFI_STA); @@ -58,7 +61,8 @@ void setupWifi() { } // MQTT -void testConnectMQTT() { +void testConnectMQTT() +{ while (!client.connected()) { Serial.print("Connexion au serveur MQTT... "); if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { @@ -74,54 +78,44 @@ void testConnectMQTT() { } // Déclenche les actions à la réception d'un message -void callbackMQTT(char* topic, byte* payload, unsigned int length) { - if (String(topic) == MQTT_LED_EFFECT) { - Serial.print("Received [" + String(topic) + "] : "); - - Serial.print(payload[0]); - Serial.print(" ~ "); - Serial.print(payload[0] - '0'); - - ledEffect = payload[0] - '0'; - Serial.print("["); - Serial.print(ledEffect); - Serial.println("]"); - +void callbackMQTT(char* topic, byte* payload, unsigned int length) +{ + String stopic = String(topic); + + unsigned int i = 0; + for(i = 0; i < length; i++) { + message_buff[i] = payload[i]; + } + message_buff[i] = '\0'; + String msgString = String(message_buff); + + Serial.print("Received [" + stopic + "] : "); + Serial.println(msgString); + + if (stopic == MQTT_LED_COMMAND) { + if (msgString == "ON") { + ledState = true; + client.publish(MQTT_LED_STATE, message_buff, true); + } else { + ledState = false; + client.publish(MQTT_LED_STATE, message_buff, true); + } + } else if (stopic == MQTT_LED_EFFECT_COMMAND) { // Si on ne repasse pas tout à noir, cela peut faire des effets surprenants ledBlackAll(); - } else if (String(topic) == MQTT_LED_BRIGHTNESS) { - unsigned int i = 0; - for(i = 0; i < length; i++) { - message_buff[i] = payload[i]; - } - message_buff[i] = '\0'; - // TODO : il est surement possible de faire plus propre - String msgString = String(message_buff); + ledEffect = msgString.toInt(); + // TODO : a vraiment tester + client.publish(MQTT_LED_EFFECT_STATE, message_buff, true); + } else if (stopic == MQTT_LED_BRIGHTNESS_COMMAND) { brightness = msgString.toInt(); FastLED.setBrightness(brightness); - - Serial.print("Received [" + String(topic) + "] : "); - Serial.println(msgString); - } else if (String(topic) == MQTT_LED_COLOR) { - unsigned int i = 0; - for(i = 0; i < length; i++) { - message_buff[i] = payload[i]; - } - message_buff[i] = '\0'; - String msgString = String(message_buff); + client.publish(MQTT_LED_BRIGHTNESS_STATE, message_buff, true); + } else if (stopic == MQTT_LED_COLOR_COMMAND) { color = msgString.toInt(); - Serial.print("Received [" + String(topic) + "] : "); - Serial.println(msgString); - } else if (String(topic) == MQTT_LED_SPEED) { - unsigned int i = 0; - for(i = 0; i < length; i++) { - message_buff[i] = payload[i]; - } - message_buff[i] = '\0'; - String msgString = String(message_buff); + client.publish(MQTT_LED_COLOR_STATE, message_buff, true); + } else if (stopic == MQTT_LED_SPEED_COMMAND) { speed = msgString.toInt(); - Serial.print("Received [" + String(topic) + "] : "); - Serial.println(msgString); + client.publish(MQTT_LED_SPEED_STATE, message_buff, true); } } @@ -196,31 +190,34 @@ void loop() { testConnectMQTT(); client.loop(); + // TODO : à retirer je pense EVERY_N_SECONDS(180) { Serial.print("MQTT Subscribe refresh"); - client.subscribe(MQTT_LED_EFFECT); - client.subscribe(MQTT_LED_BRIGHTNESS); - client.subscribe(MQTT_LED_COLOR); - client.subscribe(MQTT_LED_SPEED); + client.subscribe(MQTT_LED_EFFECT_COMMAND); + client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); + client.subscribe(MQTT_LED_COLOR_COMMAND); + client.subscribe(MQTT_LED_SPEED_COMMAND); Serial.println(" done"); } // LED - switch(ledEffect) - { - case LED_EFFECT_OFF: - ledBlackAll(); - break; - case LED_EFFECT_CYLON: - ledCylon(); - break; - case LED_EFFECT_FULLRED: - ledFullRed(); - break; - default: - ledError(); - break; + if (!ledState) { + ledBlackAll(); + FastLED.delay(1000); + } else { + switch(ledEffect) + { + case LED_EFFECT_CYLON: + ledCylon(); + break; + case LED_EFFECT_FULLRED: + ledFullRed(); + break; + default: + ledError(); + break; + } } } -// TODO : regrouper input et select en un seul group, l'input enverrait directement Off et les effets ne seraient que effets +// TODO : regrouper input et select en un seul group, l'input enverrait directement Off et les effets ne seraient que effets \ No newline at end of file