From 7e9bfac8f71a1ff1f857491862ad3bb01bf3de3f Mon Sep 17 00:00:00 2001
From: Debashish Sahu <debashish.sahu@gmail.com>
Date: Tue, 11 Dec 2018 10:30:31 -0500
Subject: [PATCH] HA 0.84 autodiscovery update

Changes as per https://github.com/home-assistant/home-assistant/pull/18227 and suggestion from https://github.com/toblum/McLighting/issues/286
---
 Arduino/McLighting/definitions.h      |  6 +++++-
 Arduino/McLighting/request_handlers.h | 14 ++++++++++++--
 platformio.ini                        |  2 ++
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/Arduino/McLighting/definitions.h b/Arduino/McLighting/definitions.h
index 10440e8..44bc8eb 100644
--- a/Arduino/McLighting/definitions.h
+++ b/Arduino/McLighting/definitions.h
@@ -27,6 +27,10 @@ const char HOSTNAME[] = "McLighting01";   // Friedly hostname
   uint8_t _sn[4] = {255,255,255,0};
 #endif
 
+#ifdef MQTT_HOME_ASSISTANT_SUPPORT
+  #define MQTT_HOME_ASSISTANT_0_84_SUPPORT // Comment if using HA version < 0.84 
+#endif
+
 #if defined(USE_WS2812FX_DMA) and defined(USE_WS2812FX_UART)
 #error "Cant have both DMA and UART method."
 #endif
@@ -50,7 +54,7 @@ uint32_t autoParams[][4] = { // color, speed, mode, duration (seconds)
 
 #if defined(ENABLE_MQTT) or defined(ENABLE_AMQTT)
   #ifdef ENABLE_MQTT
-    #define MQTT_MAX_PACKET_SIZE 512
+    #define MQTT_MAX_PACKET_SIZE 2048
     #define MQTT_MAX_RECONNECT_TRIES 4
 
     int mqtt_reconnect_retries = 0;
diff --git a/Arduino/McLighting/request_handlers.h b/Arduino/McLighting/request_handlers.h
index ee2b571..5e0949a 100644
--- a/Arduino/McLighting/request_handlers.h
+++ b/Arduino/McLighting/request_handlers.h
@@ -936,10 +936,15 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
           ha_send_data.detach();
           mqtt_client.subscribe(mqtt_ha_state_in.c_str(), qossub);
           #ifdef MQTT_HOME_ASSISTANT_SUPPORT
-            DynamicJsonDocument jsonBuffer(JSON_ARRAY_SIZE(strip.getModeCount()) + JSON_OBJECT_SIZE(11));
+            DynamicJsonDocument jsonBuffer(JSON_ARRAY_SIZE(strip.getModeCount()) + JSON_OBJECT_SIZE(12));
             JsonObject json = jsonBuffer.to<JsonObject>();
             json["name"] = HOSTNAME;
+            #ifdef MQTT_HOME_ASSISTANT_0_84_SUPPORT
+            json["platform"] = "mqtt";
+            json["schema"] = "json";
+            #else
             json["platform"] = "mqtt_json";
+            #endif
             json["state_topic"] = mqtt_ha_state_out;
             json["command_topic"] = mqtt_ha_state_in;
             json["on_command_type"] = "first";
@@ -1016,10 +1021,15 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght
         uint16_t packetIdSub2 = amqttClient.subscribe((char *)mqtt_ha_state_in.c_str(), qossub);
         DBG_OUTPUT_PORT.printf("Subscribing at QoS %d, packetId: ", qossub); DBG_OUTPUT_PORT.println(packetIdSub2);
         #ifdef MQTT_HOME_ASSISTANT_SUPPORT
-          DynamicJsonDocument jsonBuffer(JSON_ARRAY_SIZE(strip.getModeCount()) + JSON_OBJECT_SIZE(11));
+          DynamicJsonDocument jsonBuffer(JSON_ARRAY_SIZE(strip.getModeCount()) + JSON_OBJECT_SIZE(12));
           JsonObject json = jsonBuffer.to<JsonObject>();
           json["name"] = HOSTNAME;
+          #ifdef MQTT_HOME_ASSISTANT_0_84_SUPPORT
+          json["platform"] = "mqtt";
+          json["schema"] = "json";
+          #else
           json["platform"] = "mqtt_json";
+          #endif
           json["state_topic"] = mqtt_ha_state_out;
           json["command_topic"] = mqtt_ha_state_in;
           json["on_command_type"] = "first";
diff --git a/platformio.ini b/platformio.ini
index 192f8ae..26fa778 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -17,6 +17,8 @@ description = The ESP8266 based multi-client lighting gadget
 [common]
 build_flags =
   -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
+  -DMQTT_MAX_PACKET_SIZE=2048 ; PubSubClient Specific flags
+  -w ; supress all warnings
 monitor_speed = 115200
 board_build.flash_mode = dout
 upload_speed = 115200