diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index 4487e0260..76a5cc132 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -494,7 +494,7 @@ int http_fn_index(http_request_t* request) { iValue = CHANNEL_Get(i); poststr(request, ""); - if (iValue == (channelType == ChType_Motion)) { + if (iValue == (channelType != ChType_Motion)) { hprintf255(request, "No motion (ch %i)", i); } else { diff --git a/src/selftest/selftest_hass_discovery_ext.c b/src/selftest/selftest_hass_discovery_ext.c index faab6698a..5e00e4053 100644 --- a/src/selftest/selftest_hass_discovery_ext.c +++ b/src/selftest/selftest_hass_discovery_ext.c @@ -330,6 +330,34 @@ void Test_HassDiscovery_Channel_Motion() { SELFTEST_ASSERT_JSON_VALUE_STRING(0, "pl_on", "1"); SELFTEST_ASSERT_JSON_VALUE_STRING(0, "pl_off", "0"); } +void Test_HassDiscovery_Channel_Motion_inv() { + const char *shortName = "WinMotionTest"; + const char *fullName = "Windows Fake Motion"; + const char *mqttName = "testMotion"; + SIM_ClearOBK(shortName); + SIM_ClearAndPrepareForMQTTTesting(mqttName, "bekens"); + + CFG_SetShortDeviceName(shortName); + CFG_SetDeviceName(fullName); + + CHANNEL_SetType(4, ChType_Motion_n); + + SIM_ClearMQTTHistory(); + CMD_ExecuteCommand("scheduleHADiscovery 1", 0); + Sim_RunSeconds(5, false); + + // OBK device should publish JSON on MQTT topic "homeassistant" + SELFTEST_ASSERT_HAS_MQTT_JSON_SENT("homeassistant", true); + SELFTEST_ASSERT_JSON_VALUE_STRING("dev", "name", shortName); + SELFTEST_ASSERT_JSON_VALUE_STRING("dev", "sw", USER_SW_VER); + SELFTEST_ASSERT_JSON_VALUE_STRING("dev", "mf", MANUFACTURER); + SELFTEST_ASSERT_JSON_VALUE_STRING("dev", "mdl", PLATFORM_MCU_NAME); + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "~", mqttName); + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "dev_cla", "motion"); + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "stat_t", "~/4/get"); + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "pl_on", "0"); // inv so swapped + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "pl_off", "1"); // inv so swapped +} void Test_HassDiscovery_Channel_LowMidHigh() { const char *shortName = "WinReadOnlyLowMidHighTest"; const char *fullName = "Windows Fake ReadOnlyLowMidHigh"; @@ -560,6 +588,7 @@ void Test_HassDiscovery_Ext() { Test_HassDiscovery_Channel_Motion(); Test_HassDiscovery_Channel_Motion_With_dInput(); Test_HassDiscovery_Channel_Motion_longName(); + Test_HassDiscovery_Channel_Motion_inv(); Test_HassDiscovery_Channel_Illuminance(); Test_HassDiscovery_Channel_LowMidHigh();