From dbfb7120d503d88e45f9d03727c7e952e4cc1831 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 20 Apr 2017 11:13:06 +0200 Subject: [PATCH] WIP --- README.md | 2 + arduino/mqttfastledmenu/mqttfastledmenu.cpp | 52 +++++++++++++++++++-- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0847023..d65b1f3 100644 --- a/README.md +++ b/README.md @@ -34,3 +34,5 @@ Il reste des tweaks à faire pour que les effets marchent comme je le désire ma TODO: changer le mqtt light par un mqtt_json, cela permettrais d'avoir un truc un peu "normal". Il existe de nombreux exemples sur le net pour esp qu'il devrait être très simple d'intégrer. TODO: Utiliser ArduinoOTA pour gérer les mises à jours sans fil. TODO: Si le strip est démarré avant HA, HA n'arrive pas à trouver son état. Surement une question de persistance sur le topic +-> Ceci est du au fait que lorsque l'on redémarre HA on redémarre aussi mosquitto. +-> Au reconnect il faut donc réenvoyer son état actuel diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index c4a2d05..25dbb00 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -87,10 +87,15 @@ void testConnectMQTT() if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { Serial.print("OK\nSubscribe"); client.subscribe(MQTT_LED_COMMAND); + mqttSendState(); client.subscribe(MQTT_LED_EFFECT_COMMAND); + //mqttSendEffectState(); client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); + mqttSendBrightnessState(); client.subscribe(MQTT_LED_SPEED_COMMAND); + //mqttSendSpeedState(); client.subscribe(MQTT_LED_COLOR_COMMAND); + //mqttSendColorState(); Serial.println(" OK"); } else { Serial.print("KO, erreur : "); @@ -119,12 +124,11 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) if (stopic == MQTT_LED_COMMAND) { if (msgString == "ON") { ledState = true; - client.publish(MQTT_LED_STATE, message_buff, true); } else { ledState = false; ledBlackAll(); - client.publish(MQTT_LED_STATE, message_buff, true); } + mqttSendState(); } else if (stopic == MQTT_LED_EFFECT_COMMAND) { // Si on ne repasse pas tout à noir, cela peut faire des effets surprenants ledBlackAll(); @@ -148,6 +152,48 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) } } +void mqttSendState() +{ + if (ledState) { + client.publish(MQTT_LED_STATE, "ON", true); + } else { + client.publish(MQTT_LED_STATE, "OFF", true); + } +} + +void mqttSendEffectState() +{ + char buff[ledEffect.length() + 1]; + ledEffect.toCharArray(buff, ledEffect.length() + 1); + client.publish(MQTT_LED_EFFECT_STATE, buff, true); +} + +void mqttSendBrightnessState() +{ + char buff[4]; + itoa(brightness, buff, 10); + client.publish(MQTT_LED_BRIGHTNESS_STATE, buff, true); +} + +void mqttSendSpeedState() +{ + char buff[4]; + itoa(speed, buff, 10); + client.publish(MQTT_LED_SPEED_STATE, buff, true); +} + +void mqttSendColorState() +{ + /* + int red = msgString.substring(0, msgString.indexOf(',')).toInt(); + int green = msgString.substring(msgString.indexOf(',') + 1, msgString.lastIndexOf(',')).toInt(); + int blue = msgString.substring(msgString.lastIndexOf(',') + 1).toInt(); + color=((red <<16)|(green <<8)|blue); + TODO: client.publish(MQTT_LED_COLOR_STATE, message_buff, true); + avec color + */ +} + // LED /** * Coupe tout le strip de led. @@ -170,7 +216,7 @@ void ledCylon() if (ledEffect != LED_EFFECT_CYLON) { return; } - + if ((i - 3) >= 0) { leds[i - 3] = CRGB::Black; }