From 47293eebe4eb2dc97f2034c64c3c63005fa4f76d Mon Sep 17 00:00:00 2001 From: ArnieO Date: Fri, 21 Feb 2020 18:38:28 +0100 Subject: [PATCH 1/4] Added code for RGB LED --- src/AmsToMqttBridge.ino | 74 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/src/AmsToMqttBridge.ino b/src/AmsToMqttBridge.ino index 0a89d47a..87725f60 100644 --- a/src/AmsToMqttBridge.ino +++ b/src/AmsToMqttBridge.ino @@ -44,6 +44,16 @@ Stream* debugger = NULL; // The HAN Port reader, used to read serial data and decode DLMS HanReader hanReader; +#if HAS_RGB_LED + //void rgb_led(int color, int mode); + #define RGB_RED 1 + #define RGB_GREEN 2 + #define RGB_YELLOW 3 + #define RGB_OFF 0 + #define RGB_ON 1 + #define RGB_BLINK 2 +#endif + // the setup function runs once when you press reset or power the board void setup() { if(config.hasConfig()) { @@ -133,6 +143,21 @@ void setup() { hanReader.compensateFor09HeaderBug = (config.getMeterType() == 1); ws.setup(&config, debugger, &mqtt); + +#if HAS_RGB_LED + //Test Red and Green LED blink + rgb_led(RGB_RED, RGB_BLINK); + delay(500); + rgb_led(RGB_RED, RGB_BLINK); + delay(500); + rgb_led(RGB_GREEN, RGB_BLINK); + delay(500); + rgb_led(RGB_GREEN, RGB_BLINK); + delay(500); + rgb_led(RGB_YELLOW, RGB_BLINK); + delay(500); + rgb_led(RGB_YELLOW, RGB_BLINK); +#endif } int buttonTimer = 0; @@ -279,7 +304,11 @@ void readHanPort() { if(config.getMeterType() > 0) { // Flash LED on, this shows us that data is received - led_on(); + #if HAS_RGB_LED + rgb_led(RGB_GREEN, RGB_ON); + #else + led_on(); + #endif // Get the timestamp (as unix time) from the package time_t time = hanReader.getPackageTime(); @@ -329,7 +358,13 @@ void readHanPort() { ws.setJson(json); // Flash LED off - led_off(); + // Flash LED off + #if HAS_RGB_LED + rgb_led(RGB_GREEN, RGB_OFF); + #else + led_off(); + #endif + } else { for(int i = 1; i <= 3; i++) { String list; @@ -498,4 +533,37 @@ void sendMqttData(String data) if (debugger) debugger->println(data); } - +void rgb_led(int color, int mode) { +// Activate red and green LEDs +// color: 1=red, 2=green, 3=yellow +// mode: 0=OFF, 1=ON, 2=Short blink +#if + int blinkduration = 50; // milliseconds + switch (mode) { + case 0: //OFF + digitalWrite(LED_RGB_RED, HIGH); + digitalWrite(LED_RGB_GREEN, HIGH); + break; + case 1: //ON + switch (color) { + case 1: //Red + digitalWrite(LED_RGB_RED, LOW); + digitalWrite(LED_RGB_GREEN, HIGH); + break; + case 2: //Green + digitalWrite(LED_RGB_RED, HIGH); + digitalWrite(LED_RGB_GREEN, LOW); + break; + case 3: //Yellow + digitalWrite(LED_RGB_RED, LOW); + digitalWrite(LED_RGB_GREEN, LOW); + break; + } + break; + case 2: //Blink + rgb_led(color, 1); + delay(blinkduration); + rgb_led(color, 0); + break; + } +} From 79274e490d2393828af99d551eb324042e1ae33a Mon Sep 17 00:00:00 2001 From: ArnieO Date: Fri, 21 Feb 2020 18:53:05 +0100 Subject: [PATCH 2/4] Added code for RGB LED --- src/AmsToMqttBridge.ino | 53 ++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/src/AmsToMqttBridge.ino b/src/AmsToMqttBridge.ino index 87725f60..3bb3f0dc 100644 --- a/src/AmsToMqttBridge.ino +++ b/src/AmsToMqttBridge.ino @@ -44,16 +44,6 @@ Stream* debugger = NULL; // The HAN Port reader, used to read serial data and decode DLMS HanReader hanReader; -#if HAS_RGB_LED - //void rgb_led(int color, int mode); - #define RGB_RED 1 - #define RGB_GREEN 2 - #define RGB_YELLOW 3 - #define RGB_OFF 0 - #define RGB_ON 1 - #define RGB_BLINK 2 -#endif - // the setup function runs once when you press reset or power the board void setup() { if(config.hasConfig()) { @@ -145,18 +135,12 @@ void setup() { ws.setup(&config, debugger, &mqtt); #if HAS_RGB_LED - //Test Red and Green LED blink - rgb_led(RGB_RED, RGB_BLINK); - delay(500); - rgb_led(RGB_RED, RGB_BLINK); - delay(500); - rgb_led(RGB_GREEN, RGB_BLINK); - delay(500); - rgb_led(RGB_GREEN, RGB_BLINK); - delay(500); - rgb_led(RGB_YELLOW, RGB_BLINK); - delay(500); - rgb_led(RGB_YELLOW, RGB_BLINK); + //Signal startup by blinking red / green / yellow + rgb_led(RGB_RED, 2); + delay(250); + rgb_led(RGB_GREEN, 2); + delay(250); + rgb_led(RGB_YELLOW, 2); #endif } @@ -305,7 +289,7 @@ void readHanPort() { if(config.getMeterType() > 0) { // Flash LED on, this shows us that data is received #if HAS_RGB_LED - rgb_led(RGB_GREEN, RGB_ON); + rgb_led(RGB_GREEN, 1); #else led_on(); #endif @@ -360,7 +344,7 @@ void readHanPort() { // Flash LED off // Flash LED off #if HAS_RGB_LED - rgb_led(RGB_GREEN, RGB_OFF); + rgb_led(RGB_GREEN, 0); #else led_off(); #endif @@ -537,26 +521,29 @@ void rgb_led(int color, int mode) { // Activate red and green LEDs // color: 1=red, 2=green, 3=yellow // mode: 0=OFF, 1=ON, 2=Short blink -#if +#ifndef HAS_RGB_LED +#define LEDPIN_RGB_RED LED_PIN +#define LEDPIN_RGB_GREEN LED_PIN +#endif int blinkduration = 50; // milliseconds switch (mode) { case 0: //OFF - digitalWrite(LED_RGB_RED, HIGH); - digitalWrite(LED_RGB_GREEN, HIGH); + digitalWrite(LEDPIN_RGB_RED, HIGH); + digitalWrite(LEDPIN_RGB_GREEN, HIGH); break; case 1: //ON switch (color) { case 1: //Red - digitalWrite(LED_RGB_RED, LOW); - digitalWrite(LED_RGB_GREEN, HIGH); + digitalWrite(LEDPIN_RGB_RED, LOW); + digitalWrite(LEDPIN_RGB_GREEN, HIGH); break; case 2: //Green - digitalWrite(LED_RGB_RED, HIGH); - digitalWrite(LED_RGB_GREEN, LOW); + digitalWrite(LEDPIN_RGB_RED, HIGH); + digitalWrite(LEDPIN_RGB_GREEN, LOW); break; case 3: //Yellow - digitalWrite(LED_RGB_RED, LOW); - digitalWrite(LED_RGB_GREEN, LOW); + digitalWrite(LEDPIN_RGB_RED, LOW); + digitalWrite(LEDPIN_RGB_GREEN, LOW); break; } break; From be75b013c01966fdd291eb3dea5aa82e4218677b Mon Sep 17 00:00:00 2001 From: ArnieO Date: Fri, 21 Feb 2020 19:13:44 +0100 Subject: [PATCH 3/4] Added code for RGB LED --- src/AmsToMqttBridge.ino | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/AmsToMqttBridge.ino b/src/AmsToMqttBridge.ino index 3bb3f0dc..f68d11d8 100644 --- a/src/AmsToMqttBridge.ino +++ b/src/AmsToMqttBridge.ino @@ -89,6 +89,12 @@ void setup() { ESP.deepSleep(10000000); //Deep sleep to allow output cap to charge up } + #if HAS_RGB_LED + // Initialize RGB LED pins + pinMode(LEDPIN_RGB_GREEN, OUTPUT); + pinMode(LEDPIN_RGB_RED, OUTPUT); + #endif + // Flash the LED, to indicate we can boot as AP now pinMode(LED_PIN, OUTPUT); pinMode(AP_BUTTON_PIN, INPUT_PULLUP); From e5ac823f692ae1cc131c988078e4aa384bdef67a Mon Sep 17 00:00:00 2001 From: ArnieO Date: Fri, 21 Feb 2020 23:29:01 +0100 Subject: [PATCH 4/4] Changed mqtt buffer to 384, JSON buffer to <512> --- src/AmsToMqttBridge.ino | 4 ++-- src/web/AmsWebServer.cpp | 2 +- src/web/AmsWebServer.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/AmsToMqttBridge.ino b/src/AmsToMqttBridge.ino index f68d11d8..959b58d3 100644 --- a/src/AmsToMqttBridge.ino +++ b/src/AmsToMqttBridge.ino @@ -36,7 +36,7 @@ AmsWebServer ws; // WiFi client and MQTT client WiFiClient *client; -MQTTClient mqtt(512); +MQTTClient mqtt(384); // Object used for debugging Stream* debugger = NULL; @@ -306,7 +306,7 @@ void readHanPort() { if (debugger) debugger->println(time); // Define a json object to keep the data - StaticJsonDocument<1024> json; + StaticJsonDocument<512> json; // Any generic useful info here json["id"] = WiFi.macAddress(); diff --git a/src/web/AmsWebServer.cpp b/src/web/AmsWebServer.cpp index 38822033..1263edc7 100644 --- a/src/web/AmsWebServer.cpp +++ b/src/web/AmsWebServer.cpp @@ -35,7 +35,7 @@ void AmsWebServer::loop() { server.handleClient(); } -void AmsWebServer::setJson(StaticJsonDocument<1024> json) { +void AmsWebServer::setJson(StaticJsonDocument<512> json) { if(!json.isNull()) { p = json["data"]["P"].as(); po = json["data"]["PO"].as(); diff --git a/src/web/AmsWebServer.h b/src/web/AmsWebServer.h index e43d4aea..f908bcee 100644 --- a/src/web/AmsWebServer.h +++ b/src/web/AmsWebServer.h @@ -28,7 +28,7 @@ class AmsWebServer { public: void setup(AmsConfiguration* config, Stream* debugger, MQTTClient* mqtt); void loop(); - void setJson(StaticJsonDocument<1024> json); + void setJson(StaticJsonDocument<512> json); private: HwTools hw;