diff --git a/src/ha.h b/src/ha.h index 2a3b4e9..0bd6609 100644 --- a/src/ha.h +++ b/src/ha.h @@ -6,7 +6,7 @@ using namespace std; -#define JSON_SIZE 512 +#define JSON_SIZE 1024 #define TOPIC_SIZE 255 #define CONFIG_TOPIC "homeassistant/%s/" MAIN_DEVICE_ID "/%s" #define BASE_TOPIC MAIN_DEVICE_ID "/%s" @@ -92,12 +92,8 @@ namespace Ha { void publishConfig() { StaticJsonDocument jsonDoc; buildConfig(jsonDoc); - - char message[JSON_SIZE] = {}; - serializeJson(jsonDoc, message); - auto configTopic = buildConfigTopic(); - publisher(configTopic.get(), message); + publisher(configTopic.get(), jsonDoc.as().c_str()); } void publishCleanupConfig() { diff --git a/src/webserver.h b/src/webserver.h index d16ce68..b9f0c81 100644 --- a/src/webserver.h +++ b/src/webserver.h @@ -30,10 +30,10 @@ namespace WebServer { server.on("/commands", HTTP_GET, [](AsyncWebServerRequest *request) { AsyncResponseStream *response = request->beginResponseStream("application/json"); - DynamicJsonDocument jsonResponse(JSON_SIZE*10); + DynamicJsonDocument jsonResponse(5120); JsonArray array = jsonResponse.to(); for (auto it = Command::mapCommandIds.begin(); it != Command::mapCommandIds.end(); ++it) { - StaticJsonDocument jsonDoc; + StaticJsonDocument<256> jsonDoc; it->second->toJson(jsonDoc); array.add(jsonDoc); } diff --git a/test/native/ha/test_components/main.cpp b/test/native/ha/test_components/main.cpp index aa2917e..3cacb02 100644 --- a/test/native/ha/test_components/main.cpp +++ b/test/native/ha/test_components/main.cpp @@ -1,5 +1,6 @@ #include #include +#include #define MAIN_DEVICE_ID "test" @@ -208,6 +209,18 @@ void testBinarySensor(void) { TEST_ASSERT_NOT_NULL(GenericSensor::mapSensors["id"]); } +void testPublisher(void) { + Ha::publisher = [](const char* topic, const char* message) -> uint16_t { + TEST_ASSERT_EQUAL_STRING("{\"name\":\"a_name\",\"unique_id\":\"test_id\",\"command_topic\":\"test/id/set\"}", message); + return 0; + }; + Switch s("a_name", "id"); + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + s.publishConfig(); +} + int main(int argc, char **argv) { UNITY_BEGIN(); RUN_TEST(testDevice); @@ -224,5 +237,6 @@ int main(int argc, char **argv) { RUN_TEST(testSwitchWithState); RUN_TEST(testNumber); RUN_TEST(testBinarySensor); + RUN_TEST(testPublisher); return UNITY_END(); }