From 31aa46c1a125ba28fae194fd78200f4eab3bdcaf Mon Sep 17 00:00:00 2001 From: openshwprojects Date: Mon, 1 May 2023 13:20:33 +0200 Subject: [PATCH] rgbcw discovery self test --- src/selftest/selftest_hass_discovery.c | 43 +++++++++++++++++++++++++- src/selftest/selftest_util_mqtt.c | 30 ++++++++++++++++-- 2 files changed, 69 insertions(+), 4 deletions(-) diff --git a/src/selftest/selftest_hass_discovery.c b/src/selftest/selftest_hass_discovery.c index 8d13d0427..801c37ed5 100644 --- a/src/selftest/selftest_hass_discovery.c +++ b/src/selftest/selftest_hass_discovery.c @@ -120,7 +120,48 @@ void Test_HassDiscovery_LED_RGB() { } void Test_HassDiscovery_LED_RGBCW() { - // TODO + const char *shortName = "RGBCWtest"; + const char *fullName = "Windows Fake RGBCW"; + const char *mqttName = "testRGBCW"; + + SIM_ClearOBK(shortName); + SIM_ClearAndPrepareForMQTTTesting(mqttName, "bekens"); + + PIN_SetPinRoleForPinIndex(24, IOR_PWM); + PIN_SetPinChannelForPinIndex(24, 1); + + PIN_SetPinRoleForPinIndex(26, IOR_PWM); + PIN_SetPinChannelForPinIndex(26, 2); + + PIN_SetPinRoleForPinIndex(9, IOR_PWM); + PIN_SetPinChannelForPinIndex(9, 3); + + PIN_SetPinRoleForPinIndex(6, IOR_PWM); + PIN_SetPinChannelForPinIndex(6, 4); + + PIN_SetPinRoleForPinIndex(7, IOR_PWM); + PIN_SetPinChannelForPinIndex(7, 5); + + SIM_ClearMQTTHistory(); + + CMD_ExecuteCommand("scheduleHADiscovery 1", 0); + Sim_RunSeconds(10, false); + + + // OBK device should publish JSON on MQTT topic "homeassistant" + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT("homeassistant", true); + //SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, "dev", 0, "name", shortName); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "bri_cmd_t", "cmnd/testRGBCW/led_dimmer"); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "bri_stat_t", "~/led_dimmer/get"); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "bri_scl", "100"); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "~", mqttName); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "rgb_stat_t", "~/led_basecolor_rgb/get"); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "rgb_cmd_t", "cmnd/testRGBCW/led_basecolor_rgb"); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "clr_temp_cmd_t", "cmnd/testRGBCW/led_temperature"); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "clr_temp_stat_t", "~/led_temperature/get"); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "cmd_t", "cmnd/testRGBCW/led_enableAll"); + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY("homeassistant", true, 0, 0, "stat_t", "~/led_enableAll/get"); + } void Test_HassDiscovery_LED_SingleColor() { // TODO diff --git a/src/selftest/selftest_util_mqtt.c b/src/selftest/selftest_util_mqtt.c index 02bdc8052..3a434386e 100644 --- a/src/selftest/selftest_util_mqtt.c +++ b/src/selftest/selftest_util_mqtt.c @@ -65,6 +65,18 @@ bool SIM_CheckMQTTHistoryForString(const char *topic, const char *value, bool bR } return false; } +bool ST_IsIntegerString(const char *s) { + if (s == 0) + return false; + if (*s == 0) + return false; + while (*s) { + if (isdigit(*s) == false) + return false; + s++; + } + return true; +} bool SIM_HasMQTTHistoryStringWithJSONPayload(const char *topic, bool bPrefixMode, const char *object1, const char *object2, const char *key, const char *value) { mqttHistoryEntry_t *ne; int cur = history_tail; @@ -96,9 +108,21 @@ bool SIM_HasMQTTHistoryStringWithJSONPayload(const char *topic, bool bPrefixMode if (tmp) { tmp = cJSON_GetObjectItemCaseSensitive(tmp, key); if (tmp) { - const char *ret = tmp->valuestring; - if (!strcmp(ret, value)) { - return true; + if (tmp->valuestring) { + const char *ret = tmp->valuestring; + if (!strcmp(ret, value)) { + return true; + } + } + else { + if (ST_IsIntegerString(value)) { + if (atoi(value) == tmp->valueint) { + return true; + } + } + else { + printf("TODO: float compare selftest"); + } } } }