From c2fe8b118f395a3ea2a4d1245451fc02aa4158d5 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Mon, 6 Mar 2017 13:33:46 +0100 Subject: [PATCH 01/19] test pour la couleur --- mqttfastledmenu.ino | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mqttfastledmenu.ino b/mqttfastledmenu.ino index e8e657c..d61158d 100644 --- a/mqttfastledmenu.ino +++ b/mqttfastledmenu.ino @@ -116,7 +116,12 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) FastLED.setBrightness(brightness); client.publish(MQTT_LED_BRIGHTNESS_STATE, message_buff, true); } else if (stopic == MQTT_LED_COLOR_COMMAND) { - color = msgString.toInt(); + // Sample : 134,168,255 + color = CRGB( + msgString.substring(0,3).toInt(), + msgString.substring(4,7).toInt(), + msgString.substring(8,11).toInt() + ); client.publish(MQTT_LED_COLOR_STATE, message_buff, true); } else if (stopic == MQTT_LED_SPEED_COMMAND) { speed = msgString.toInt(); From a4c8fc3606ea83f3bd978d44ededcdfe248d6883 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Mon, 6 Mar 2017 13:42:43 +0100 Subject: [PATCH 02/19] Test every n seconds plutot qu'un nombre de passe --- mqttfastledmenu.ino | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/mqttfastledmenu.ino b/mqttfastledmenu.ino index d61158d..953290e 100644 --- a/mqttfastledmenu.ino +++ b/mqttfastledmenu.ino @@ -140,13 +140,12 @@ void ledBlackAll() void ledCylon() { // Effet cylon : on allume une led, on attends, on eteinds, on passe à la suivante - // TODO : trop d'attente entre les clients.loop !!!! for(int i = 0; i < LED_NUM; i++) { - if ((i % 10) == 0) { - client.loop(); - if (ledEffect != LED_EFFECT_CYLON) { - return; - } + EVERY_N_SECONDS(1) { + client.loop(); + if (ledEffect != LED_EFFECT_CYLON) { + return; + } } leds[i] = color; @@ -156,14 +155,15 @@ void ledCylon() FastLED.show(); FastLED.delay(1000 / speed); } + for(int i = LED_NUM - 1; i > 0; i--) { - if ((i % 10) == 0) { - client.loop(); - if (ledEffect != LED_EFFECT_CYLON) { - return; - } + EVERY_N_SECONDS(1) { + client.loop(); + if (ledEffect != LED_EFFECT_CYLON) { + return; + } } - + leds[i] = color; FastLED.show(); FastLED.delay(1000 / speed); From 159ab28b76b1156e4740bfb1a171c89d6e962fcb Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Mon, 6 Mar 2017 13:42:58 +0100 Subject: [PATCH 03/19] ledFullRed -> ledFullColor --- mqttfastledmenu.ino | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/mqttfastledmenu.ino b/mqttfastledmenu.ino index 953290e..40874ae 100644 --- a/mqttfastledmenu.ino +++ b/mqttfastledmenu.ino @@ -187,8 +187,7 @@ void ledError() FastLED.delay(1000 / speed); } -// TODO : ne doit pas rester à terme, ça ne sert à rien de garder une fonction comme ça -void ledFullRed() +void ledFullColor() { fill_solid(leds, LED_NUM, color); FastLED.show(); @@ -200,29 +199,16 @@ void loop() { testConnectMQTT(); client.loop(); - // TODO : à retirer je pense - //EVERY_N_SECONDS(180) { - // Serial.print("MQTT Subscribe refresh"); - // 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 if (!ledState) { - ledBlackAll(); FastLED.delay(1000); } else { if (ledEffect == LED_EFFECT_CYLON) { ledCylon(); } else if (ledEffect == LED_EFFECT_FULLRED) { - ledFullRed(); + ledFullColor(); } else { ledError(); } } -} - -// 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 From ea42471308a4584fe91e80cb06f19303ad098f6a Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Mon, 6 Mar 2017 13:56:19 +0100 Subject: [PATCH 04/19] =?UTF-8?q?pas=20besoin=20de=20FastLED.show=20+=20Fa?= =?UTF-8?q?stLED.delay,=20le=20second=20fait=20d=C3=A9j=C3=A0=20show()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mqttfastledmenu.ino | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/mqttfastledmenu.ino b/mqttfastledmenu.ino index 40874ae..b113763 100644 --- a/mqttfastledmenu.ino +++ b/mqttfastledmenu.ino @@ -134,7 +134,6 @@ void ledBlackAll() { FastLED.clear(); FastLED.show(); - FastLED.delay(1000 / speed); } void ledCylon() @@ -149,10 +148,8 @@ void ledCylon() } leds[i] = color; - FastLED.show(); FastLED.delay(1000 / speed); leds[i] = CRGB::Black; - FastLED.show(); FastLED.delay(1000 / speed); } @@ -165,7 +162,6 @@ void ledCylon() } leds[i] = color; - FastLED.show(); FastLED.delay(1000 / speed); leds[i] = CRGB::Black; FastLED.show(); @@ -182,15 +178,13 @@ void ledError() leds[i] = color; } } - - FastLED.show(); + FastLED.delay(1000 / speed); } void ledFullColor() { fill_solid(leds, LED_NUM, color); - FastLED.show(); FastLED.delay(1000 / speed); } From d235bf6c3af5b0244b2da055ebbaac09d2449667 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Mon, 6 Mar 2017 14:53:26 +0100 Subject: [PATCH 05/19] hide_entity : true des automatismes --- ha_configuration.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ha_configuration.yml b/ha_configuration.yml index 9bcbd43..8f2e684 100644 --- a/ha_configuration.yml +++ b/ha_configuration.yml @@ -17,13 +17,13 @@ input_slider: strip1_animation_speed: name: "Strip1 Animation Speed" initial: 120 - min: 10 - max: 150 - step: 10 + min: 10 + max: 150 + step: 10 light: platform: "mqtt" - name: "Test ESP" + name: "Test ESP" command_topic: "strip1/switch" state_topic: "strip1/status" rgb_state_topic: "strip1/color/switch" @@ -33,24 +33,24 @@ light: automation: - alias: "Strip1 Effect" - hide_entity: False + hide_entity: True trigger: - - platform: "state" + - platform: "state" entity_id: "input_select.strip1_effect" action: - service: "mqtt.publish" data_template: - topic: "strip1/effect/switch" + topic: "strip1/effect/switch" payload: '{{ trigger.to_state.state | string }}' - retain: True + retain: True - alias: "Strip1 Animation Speed" - hide_entity: False + hide_entity: True trigger: - - platform: "state" + - platform: "state" entity_id: "input_slider.strip1_animation_speed" action: - service: "mqtt.publish" data_template: - topic: "strip1/speed/switch" + topic: "strip1/speed/switch" payload: '{{ trigger.to_state.state | int }}' - retain: True + retain: True From 14e9d45376d045dc7e7e945c79506bca6f206d85 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Mon, 6 Mar 2017 14:56:09 +0100 Subject: [PATCH 06/19] on trie les fichiers --- README.md | 6 +++--- .../mqttfastledmenu.example.h | 0 mqttfastledmenu.ino => arduino/mqttfastledmenu.ino | 0 .../ha_configuration.yml | 0 irl1.jpg => medias/irl1.jpg | Bin logo.jpg => medias/logo.jpg | Bin mqttfastledmenu.fzz => medias/mqttfastledmenu.fzz | Bin .../mqttfastledmenu_bb.png | Bin 8 files changed, 3 insertions(+), 3 deletions(-) rename mqttfastledmenu.example.h => arduino/mqttfastledmenu.example.h (100%) rename mqttfastledmenu.ino => arduino/mqttfastledmenu.ino (100%) rename ha_configuration.yml => home-assistant/ha_configuration.yml (100%) rename irl1.jpg => medias/irl1.jpg (100%) rename logo.jpg => medias/logo.jpg (100%) rename mqttfastledmenu.fzz => medias/mqttfastledmenu.fzz (100%) rename mqttfastledmenu_bb.png => medias/mqttfastledmenu_bb.png (100%) diff --git a/README.md b/README.md index 0e46454..10ab59d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Introduction ============ Le but est d'avoir un selecteur d'effet, choix de la vitesse et de la couleur. -Un exemple de configuration pour home-assistant se trouve dans [ha_configuration.yml](ha\_configuration.yml). +Un exemple de configuration pour home-assistant se trouve dans [ha_configuration.yml](home-assistant/ha\_configuration.yml). Matériel ======== @@ -17,5 +17,5 @@ Matériel Médias ====== -![Fritzing BreadBoard](mqttfastledmenu_bb.png) -![IRL](irl1.jpg) +![Fritzing BreadBoard](medias/mqttfastledmenu_bb.png) +![IRL](medias/irl1.jpg) diff --git a/mqttfastledmenu.example.h b/arduino/mqttfastledmenu.example.h similarity index 100% rename from mqttfastledmenu.example.h rename to arduino/mqttfastledmenu.example.h diff --git a/mqttfastledmenu.ino b/arduino/mqttfastledmenu.ino similarity index 100% rename from mqttfastledmenu.ino rename to arduino/mqttfastledmenu.ino diff --git a/ha_configuration.yml b/home-assistant/ha_configuration.yml similarity index 100% rename from ha_configuration.yml rename to home-assistant/ha_configuration.yml diff --git a/irl1.jpg b/medias/irl1.jpg similarity index 100% rename from irl1.jpg rename to medias/irl1.jpg diff --git a/logo.jpg b/medias/logo.jpg similarity index 100% rename from logo.jpg rename to medias/logo.jpg diff --git a/mqttfastledmenu.fzz b/medias/mqttfastledmenu.fzz similarity index 100% rename from mqttfastledmenu.fzz rename to medias/mqttfastledmenu.fzz diff --git a/mqttfastledmenu_bb.png b/medias/mqttfastledmenu_bb.png similarity index 100% rename from mqttfastledmenu_bb.png rename to medias/mqttfastledmenu_bb.png From 81337b415e91790a07faaf833652b14fa3bba918 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Mon, 6 Mar 2017 14:56:58 +0100 Subject: [PATCH 07/19] =?UTF-8?q?deplacement=20des=20fichiers=20oubli?= =?UTF-8?q?=C3=A9s=20ici?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9201265..fc03c5a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,7 +13,7 @@ inocode: - /arduino-nightly/arduino --pref "boardsmanager.additional.urls=${ESPURL}" - /arduino-nightly/arduino --install-boards "${INSTBOARD}" script: - - cd "${CI_PROJECT_DIR}" + - cd "${CI_PROJECT_DIR}/arduino" - cp "mqttfastledmenu.example.h" "mqttfastledmenu.h" - /arduino-nightly/arduino --install-library "FastLED" - /arduino-nightly/arduino --install-library "PubSubClient" @@ -24,5 +24,5 @@ yaml: before_script: - pip install "PyYAML" script: - - cd "${CI_PROJECT_DIR}" - - python -c "from yaml import load, Loader; load(open('ha_configuration.yml'), Loader=Loader)" \ No newline at end of file + - cd "${CI_PROJECT_DIR}/home-assistant" + - python -c "from yaml import load, Loader; load(open('ha_configuration.yml'), Loader=Loader)" From 26975798793dd05577db07550c77653a34cb9f6b Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Mon, 6 Mar 2017 15:09:40 +0100 Subject: [PATCH 08/19] corrections chemin --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 36138a7..7166903 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .vscode/* -mqttfastledmenu.h +arduino/mqttfastledmenu.h From bb62d0f75f7952a302624386c179315b9c59436b Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Mon, 6 Mar 2017 15:57:11 +0100 Subject: [PATCH 09/19] arduino a besoin d'un sous repertoire du meme nom --- .gitignore | 2 +- .gitlab-ci.yml | 7 +++---- arduino/{ => mqttfastledmenu}/mqttfastledmenu.example.h | 0 arduino/{ => mqttfastledmenu}/mqttfastledmenu.ino | 0 4 files changed, 4 insertions(+), 5 deletions(-) rename arduino/{ => mqttfastledmenu}/mqttfastledmenu.example.h (100%) rename arduino/{ => mqttfastledmenu}/mqttfastledmenu.ino (100%) diff --git a/.gitignore b/.gitignore index 7166903..3647168 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .vscode/* -arduino/mqttfastledmenu.h +arduino/mqttfastledmenu/mqttfastledmenu.h diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fc03c5a..55abb96 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,18 +6,17 @@ inocode: INSTBOARD: "esp8266:esp8266" BOARD: "${INSTBOARD}:nodemcuv2" before_script: - - apt update >/dev/null - cd / - wget --quiet "https://www.arduino.cc/download.php?f=/arduino-nightly-linux64.tar.xz" -O "arduino-nightly-linux64.tar.xz" - tar axf "arduino-nightly-linux64.tar.xz" - /arduino-nightly/arduino --pref "boardsmanager.additional.urls=${ESPURL}" - /arduino-nightly/arduino --install-boards "${INSTBOARD}" script: - - cd "${CI_PROJECT_DIR}/arduino" - - cp "mqttfastledmenu.example.h" "mqttfastledmenu.h" + - cd "${CI_PROJECT_DIR}/arduino/${CI_PROJECT_NAME}" + - cp "${CI_PROJECT_NAME}.example.h" "${CI_PROJECT_NAME}.h" - /arduino-nightly/arduino --install-library "FastLED" - /arduino-nightly/arduino --install-library "PubSubClient" - - /arduino-nightly/arduino --pref "${MEMORY}" --board "${BOARD}" --verify "mqttfastledmenu.ino" + - /arduino-nightly/arduino --pref "${MEMORY}" --board "${BOARD}" --verify "${CI_PROJECT_NAME}.ino" yaml: image: "python:alpine" diff --git a/arduino/mqttfastledmenu.example.h b/arduino/mqttfastledmenu/mqttfastledmenu.example.h similarity index 100% rename from arduino/mqttfastledmenu.example.h rename to arduino/mqttfastledmenu/mqttfastledmenu.example.h diff --git a/arduino/mqttfastledmenu.ino b/arduino/mqttfastledmenu/mqttfastledmenu.ino similarity index 100% rename from arduino/mqttfastledmenu.ino rename to arduino/mqttfastledmenu/mqttfastledmenu.ino From 452533ae251d290ad38348819af4dcaceb589f38 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Tue, 7 Mar 2017 09:17:50 +0100 Subject: [PATCH 10/19] preparation pour platformio --- arduino/.gitignore | 4 + arduino/mqttfastledmenu/mqttfastledmenu.cpp | 210 ++++++++++++++++++ .../mqttfastledmenu/mqttfastledmenu.example.h | 8 + arduino/mqttfastledmenu/mqttfastledmenu.ino | 208 ----------------- arduino/platformio.ini | 18 ++ 5 files changed, 240 insertions(+), 208 deletions(-) create mode 100644 arduino/.gitignore create mode 100644 arduino/mqttfastledmenu/mqttfastledmenu.cpp create mode 100644 arduino/platformio.ini diff --git a/arduino/.gitignore b/arduino/.gitignore new file mode 100644 index 0000000..5dac9f5 --- /dev/null +++ b/arduino/.gitignore @@ -0,0 +1,4 @@ +.pioenvs +.piolibdeps +.clang_complete +.gcc-flags.json diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp new file mode 100644 index 0000000..770d184 --- /dev/null +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -0,0 +1,210 @@ +#include + +#include "mqttfastledmenu.h" + +#include +#include +#include + +// LED +int brightness = LED_BRIGHTNESS_DEFAULT; +int color = LED_COLOR_DEFAULT; +int speed = LED_SPEED_DEFAULT; +CRGB leds[LED_NUM]; +String ledEffect = LED_EFFECT_CYLON; +boolean ledState = false; + +// WIFI +WiFiClient espClient; + +// MQTT +char message_buff[100]; +PubSubClient client(espClient); + +void setup() +{ + Serial.begin(SERIAL_SPEED); + Serial.println("\nresetting"); + + // WIFI + setupWifi(); + + // MQTT + client.setServer(MQTT_SERVER, MQTT_PORT); + client.setCallback(callbackMQTT); + testConnectMQTT(); + client.subscribe(MQTT_LED_COMMAND); + client.subscribe(MQTT_LED_EFFECT_COMMAND); + client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); + client.subscribe(MQTT_LED_SPEED_COMMAND); + client.subscribe(MQTT_LED_COLOR_COMMAND); + + // LED + LEDS.addLeds(leds, LED_NUM).setCorrection(TypicalSMD5050); + ledBlackAll(); + FastLED.setBrightness(brightness); +} + +// WIFI +void setupWifi() +{ + Serial.print("Connexion a "); + Serial.print(WIFI_SSID); + WiFi.mode(WIFI_STA); + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + + Serial.println(); + Serial.print("IP : "); + Serial.println(WiFi.localIP()); +} + +// MQTT +void testConnectMQTT() +{ + while (!client.connected()) { + Serial.print("Connexion au serveur MQTT... "); + if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { + Serial.println("OK"); + client.subscribe(MQTT_LED_COMMAND); + client.subscribe(MQTT_LED_EFFECT_COMMAND); + client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); + client.subscribe(MQTT_LED_SPEED_COMMAND); + client.subscribe(MQTT_LED_COLOR_COMMAND); + } else { + Serial.print("KO, erreur : "); + Serial.print(client.state()); + Serial.println(", on attend 5 secondes avant de recommencer"); + delay(5000); + } + } +} + +// Déclenche les actions à la réception d'un message +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(); + ledEffect = msgString; + // 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); + client.publish(MQTT_LED_BRIGHTNESS_STATE, message_buff, true); + } else if (stopic == MQTT_LED_COLOR_COMMAND) { + // Sample : 134,168,255 + color = CRGB( + msgString.substring(0,3).toInt(), + msgString.substring(4,7).toInt(), + msgString.substring(8,11).toInt() + ); + client.publish(MQTT_LED_COLOR_STATE, message_buff, true); + } else if (stopic == MQTT_LED_SPEED_COMMAND) { + speed = msgString.toInt(); + client.publish(MQTT_LED_SPEED_STATE, message_buff, true); + } +} + +// LED +void ledBlackAll() +{ + FastLED.clear(); + FastLED.show(); +} + +void ledCylon() +{ + // Effet cylon : on allume une led, on attends, on eteinds, on passe à la suivante + for(int i = 0; i < LED_NUM; i++) { + EVERY_N_SECONDS(1) { + client.loop(); + if (ledEffect != LED_EFFECT_CYLON) { + return; + } + } + + leds[i] = color; + FastLED.delay(1000 / speed); + leds[i] = CRGB::Black; + FastLED.delay(1000 / speed); + } + + for(int i = LED_NUM - 1; i > 0; i--) { + EVERY_N_SECONDS(1) { + client.loop(); + if (ledEffect != LED_EFFECT_CYLON) { + return; + } + } + + leds[i] = color; + FastLED.delay(1000 / speed); + leds[i] = CRGB::Black; + FastLED.show(); + } + FastLED.delay(1000 / speed); +} + +void ledError() +{ + for(int i = 0; i < LED_NUM; i++) { + if ((i % 2) == 0) { + leds[i] = CRGB::Black; + } else { + leds[i] = color; + } + } + + FastLED.delay(1000 / speed); +} + +void ledFullColor() +{ + fill_solid(leds, LED_NUM, color); + FastLED.delay(1000 / speed); +} + +void loop() { + // MQTT + testConnectMQTT(); + client.loop(); + + // LED + if (!ledState) { + FastLED.delay(1000); + } else { + if (ledEffect == LED_EFFECT_CYLON) { + ledCylon(); + } else if (ledEffect == LED_EFFECT_FULLRED) { + ledFullColor(); + } else { + ledError(); + } + } +} diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.example.h b/arduino/mqttfastledmenu/mqttfastledmenu.example.h index c11aca0..553b5cd 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.example.h +++ b/arduino/mqttfastledmenu/mqttfastledmenu.example.h @@ -38,3 +38,11 @@ // TODO : essayer, devrait limiter le flikering //#define FASTLED_ALLOW_INTERRUPTS 0 #define FASTLED_ESP8266_NODEMCU_PIN_ORDER + +void setupWifi(); +void testConnectMQTT(); +void callbackMQTT(char* topic, byte* payload, unsigned int length); +void ledBlackAll(); +void ledCylon(); +void ledError(); +void ledFullColor(); diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.ino b/arduino/mqttfastledmenu/mqttfastledmenu.ino index b113763..e69de29 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.ino +++ b/arduino/mqttfastledmenu/mqttfastledmenu.ino @@ -1,208 +0,0 @@ -#include "mqttfastledmenu.h" - -#include -#include -#include - -// LED -int brightness = LED_BRIGHTNESS_DEFAULT; -int color = LED_COLOR_DEFAULT; -int speed = LED_SPEED_DEFAULT; -CRGB leds[LED_NUM]; -String ledEffect = LED_EFFECT_CYLON; -boolean ledState = false; - -// WIFI -WiFiClient espClient; - -// MQTT -char message_buff[100]; -PubSubClient client(espClient); - -void setup() -{ - Serial.begin(SERIAL_SPEED); - Serial.println("\nresetting"); - - // WIFI - setupWifi(); - - // MQTT - client.setServer(MQTT_SERVER, MQTT_PORT); - client.setCallback(callbackMQTT); - testConnectMQTT(); - client.subscribe(MQTT_LED_COMMAND); - client.subscribe(MQTT_LED_EFFECT_COMMAND); - client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); - client.subscribe(MQTT_LED_SPEED_COMMAND); - client.subscribe(MQTT_LED_COLOR_COMMAND); - - // LED - LEDS.addLeds(leds, LED_NUM).setCorrection(TypicalSMD5050); - ledBlackAll(); - FastLED.setBrightness(brightness); -} - -// WIFI -void setupWifi() -{ - Serial.print("Connexion a "); - Serial.print(WIFI_SSID); - WiFi.mode(WIFI_STA); - WiFi.begin(WIFI_SSID, WIFI_PASSWORD); - - while (WiFi.status() != WL_CONNECTED) { - delay(500); - Serial.print("."); - } - - Serial.println(); - Serial.print("IP : "); - Serial.println(WiFi.localIP()); -} - -// MQTT -void testConnectMQTT() -{ - while (!client.connected()) { - Serial.print("Connexion au serveur MQTT... "); - if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { - Serial.println("OK"); - client.subscribe(MQTT_LED_COMMAND); - client.subscribe(MQTT_LED_EFFECT_COMMAND); - client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); - client.subscribe(MQTT_LED_SPEED_COMMAND); - client.subscribe(MQTT_LED_COLOR_COMMAND); - } else { - Serial.print("KO, erreur : "); - Serial.print(client.state()); - Serial.println(", on attend 5 secondes avant de recommencer"); - delay(5000); - } - } -} - -// Déclenche les actions à la réception d'un message -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(); - ledEffect = msgString; - // 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); - client.publish(MQTT_LED_BRIGHTNESS_STATE, message_buff, true); - } else if (stopic == MQTT_LED_COLOR_COMMAND) { - // Sample : 134,168,255 - color = CRGB( - msgString.substring(0,3).toInt(), - msgString.substring(4,7).toInt(), - msgString.substring(8,11).toInt() - ); - client.publish(MQTT_LED_COLOR_STATE, message_buff, true); - } else if (stopic == MQTT_LED_SPEED_COMMAND) { - speed = msgString.toInt(); - client.publish(MQTT_LED_SPEED_STATE, message_buff, true); - } -} - -// LED -void ledBlackAll() -{ - FastLED.clear(); - FastLED.show(); -} - -void ledCylon() -{ - // Effet cylon : on allume une led, on attends, on eteinds, on passe à la suivante - for(int i = 0; i < LED_NUM; i++) { - EVERY_N_SECONDS(1) { - client.loop(); - if (ledEffect != LED_EFFECT_CYLON) { - return; - } - } - - leds[i] = color; - FastLED.delay(1000 / speed); - leds[i] = CRGB::Black; - FastLED.delay(1000 / speed); - } - - for(int i = LED_NUM - 1; i > 0; i--) { - EVERY_N_SECONDS(1) { - client.loop(); - if (ledEffect != LED_EFFECT_CYLON) { - return; - } - } - - leds[i] = color; - FastLED.delay(1000 / speed); - leds[i] = CRGB::Black; - FastLED.show(); - } - FastLED.delay(1000 / speed); -} - -void ledError() -{ - for(int i = 0; i < LED_NUM; i++) { - if ((i % 2) == 0) { - leds[i] = CRGB::Black; - } else { - leds[i] = color; - } - } - - FastLED.delay(1000 / speed); -} - -void ledFullColor() -{ - fill_solid(leds, LED_NUM, color); - FastLED.delay(1000 / speed); -} - -void loop() { - // MQTT - testConnectMQTT(); - client.loop(); - - // LED - if (!ledState) { - FastLED.delay(1000); - } else { - if (ledEffect == LED_EFFECT_CYLON) { - ledCylon(); - } else if (ledEffect == LED_EFFECT_FULLRED) { - ledFullColor(); - } else { - ledError(); - } - } -} \ No newline at end of file diff --git a/arduino/platformio.ini b/arduino/platformio.ini new file mode 100644 index 0000000..deddd6f --- /dev/null +++ b/arduino/platformio.ini @@ -0,0 +1,18 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; http://docs.platformio.org/page/projectconf.html + +[env:nodemcuv2] +platform=espressif8266 +board=nodemcuv2 +framework=arduino + +[platformio] +src_dir=mqttfastledmenu +lib_dir=/home/jcabillot/Arduino/libraries From 51feda961849ac585bfbd0fb89fa9bc20393d0dd Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Tue, 7 Mar 2017 09:31:27 +0100 Subject: [PATCH 11/19] on unifie le gitignore --- .gitignore | 4 ++++ arduino/.gitignore | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 arduino/.gitignore diff --git a/.gitignore b/.gitignore index 3647168..f099378 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ .vscode/* arduino/mqttfastledmenu/mqttfastledmenu.h +arduino/.pioenvs +arduino/.piolibdeps +arduino/.clang_complete +arduino/.gcc-flags.json diff --git a/arduino/.gitignore b/arduino/.gitignore deleted file mode 100644 index 5dac9f5..0000000 --- a/arduino/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.pioenvs -.piolibdeps -.clang_complete -.gcc-flags.json From 9f1ba10163c8692ddc1ef2eb2547534dcf65b7d2 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Tue, 7 Mar 2017 19:45:03 +0100 Subject: [PATCH 12/19] =?UTF-8?q?correction=20du=20retour=20de=20l'=C3=A9t?= =?UTF-8?q?at?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index 770d184..f574cb5 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -105,7 +105,7 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) client.publish(MQTT_LED_STATE, message_buff, true); } else { ledState = false; - client.publish(MQTT_LED_STATE, message_buff, true); + client.publish(MQTT_LED_STATE, message_buff, false); } } else if (stopic == MQTT_LED_EFFECT_COMMAND) { // Si on ne repasse pas tout à noir, cela peut faire des effets surprenants From 4119491bbe81ce62552a6c657b73e2ea43ed2a0a Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Tue, 7 Mar 2017 19:45:16 +0100 Subject: [PATCH 13/19] inversion switch/status --- arduino/mqttfastledmenu/mqttfastledmenu.example.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.example.h b/arduino/mqttfastledmenu/mqttfastledmenu.example.h index 553b5cd..3653ce5 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.example.h +++ b/arduino/mqttfastledmenu/mqttfastledmenu.example.h @@ -23,8 +23,8 @@ #define MQTT_USER "XXX" #define MQTT_PASS "XXX" -#define MQTT_LED_STATE "strip1/switch" -#define MQTT_LED_COMMAND "strip1/status" +#define MQTT_LED_COMMAND "strip1/switch" +#define MQTT_LED_STATE "strip1/status" #define MQTT_LED_EFFECT_COMMAND "strip1/effect/switch" #define MQTT_LED_EFFECT_STATE "strip1/effect/status" #define MQTT_LED_BRIGHTNESS_COMMAND "strip1/brightness/switch" From 14eb644f1fad4aafa0b0477cbff0da0e5da8f278 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Tue, 7 Mar 2017 19:45:24 +0100 Subject: [PATCH 14/19] inversion switch/status --- home-assistant/ha_configuration.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/home-assistant/ha_configuration.yml b/home-assistant/ha_configuration.yml index 8f2e684..0dc9e7b 100644 --- a/home-assistant/ha_configuration.yml +++ b/home-assistant/ha_configuration.yml @@ -26,10 +26,10 @@ light: name: "Test ESP" command_topic: "strip1/switch" state_topic: "strip1/status" - rgb_state_topic: "strip1/color/switch" - rgb_command_topic: "strip1/color/status" - brightness_state_topic: "strip1/brightness/switch" - brightness_command_topic: "strip1/brightness/status" + rgb_command_topic: "strip1/color/switch" + rgb_state_topic: "strip1/color/status" + brightness_command_topic: "strip1/brightness/switch" + brightness_state_topic: "strip1/brightness/status" automation: - alias: "Strip1 Effect" From 5ab39d80fb964489931acad4cfec3282a9650133 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 9 Mar 2017 19:22:08 +0100 Subject: [PATCH 15/19] =?UTF-8?q?oubli=20off=20=3D=20ledBlackAll,=20sinon?= =?UTF-8?q?=20reste=20dans=20l'=C3=A9tat=20initial?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index f574cb5..a82a338 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -105,6 +105,7 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) client.publish(MQTT_LED_STATE, message_buff, true); } else { ledState = false; + ledBlackAll(); client.publish(MQTT_LED_STATE, message_buff, false); } } else if (stopic == MQTT_LED_EFFECT_COMMAND) { From fac537f5beef1bf6bb2ca7da8cbf7fb3fa9a832c Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 9 Mar 2017 20:17:28 +0100 Subject: [PATCH 16/19] conversion du rgb string -> hex --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index a82a338..1038507 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -120,11 +120,11 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) client.publish(MQTT_LED_BRIGHTNESS_STATE, message_buff, true); } else if (stopic == MQTT_LED_COLOR_COMMAND) { // Sample : 134,168,255 - color = CRGB( - msgString.substring(0,3).toInt(), - msgString.substring(4,7).toInt(), - msgString.substring(8,11).toInt() - ); + 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); client.publish(MQTT_LED_COLOR_STATE, message_buff, true); } else if (stopic == MQTT_LED_SPEED_COMMAND) { speed = msgString.toInt(); From 0ca78c3695d4cc06971d4c63d41af4e1d6cc50fd Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 9 Mar 2017 20:24:03 +0100 Subject: [PATCH 17/19] on evite le double subscribe, deja fait via testConnectMQTT --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index 1038507..0f3ebb1 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -33,11 +33,6 @@ void setup() client.setServer(MQTT_SERVER, MQTT_PORT); client.setCallback(callbackMQTT); testConnectMQTT(); - client.subscribe(MQTT_LED_COMMAND); - client.subscribe(MQTT_LED_EFFECT_COMMAND); - client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); - client.subscribe(MQTT_LED_SPEED_COMMAND); - client.subscribe(MQTT_LED_COLOR_COMMAND); // LED LEDS.addLeds(leds, LED_NUM).setCorrection(TypicalSMD5050); From 150818aa4e50dfe77a6129f537abfcb5196552c3 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 9 Mar 2017 21:02:13 +0100 Subject: [PATCH 18/19] todo + plus de debug --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index 0f3ebb1..77be392 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -33,11 +33,14 @@ void setup() client.setServer(MQTT_SERVER, MQTT_PORT); client.setCallback(callbackMQTT); testConnectMQTT(); + // TODO : ne marche pas comme je le désire : + // au boot il prends les params par défaut, j'aimerais ceux de home assistant // LED LEDS.addLeds(leds, LED_NUM).setCorrection(TypicalSMD5050); ledBlackAll(); FastLED.setBrightness(brightness); + Serial.println("Ready"); } // WIFI @@ -52,8 +55,7 @@ void setupWifi() delay(500); Serial.print("."); } - - Serial.println(); + Serial.println(" OK"); Serial.print("IP : "); Serial.println(WiFi.localIP()); } @@ -64,12 +66,13 @@ void testConnectMQTT() while (!client.connected()) { Serial.print("Connexion au serveur MQTT... "); if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { - Serial.println("OK"); + Serial.print("OK\nSubscribe"); client.subscribe(MQTT_LED_COMMAND); client.subscribe(MQTT_LED_EFFECT_COMMAND); client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); client.subscribe(MQTT_LED_SPEED_COMMAND); client.subscribe(MQTT_LED_COLOR_COMMAND); + Serial.println(" OK"); } else { Serial.print("KO, erreur : "); Serial.print(client.state()); From 97e0307af1aef1e01b7b592a4da0955a35a957e2 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 9 Mar 2017 21:04:03 +0100 Subject: [PATCH 19/19] tweak --- home-assistant/ha_configuration.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home-assistant/ha_configuration.yml b/home-assistant/ha_configuration.yml index 0dc9e7b..2481434 100644 --- a/home-assistant/ha_configuration.yml +++ b/home-assistant/ha_configuration.yml @@ -17,7 +17,7 @@ input_slider: strip1_animation_speed: name: "Strip1 Animation Speed" initial: 120 - min: 10 + min: 0 max: 150 step: 10 @@ -27,7 +27,7 @@ light: command_topic: "strip1/switch" state_topic: "strip1/status" rgb_command_topic: "strip1/color/switch" - rgb_state_topic: "strip1/color/status" + rgb_state_topic: "strip1/color/status" brightness_command_topic: "strip1/brightness/switch" brightness_state_topic: "strip1/brightness/status"