diff --git a/src/httpserver/hass.c b/src/httpserver/hass.c index f6f622a9d..9a34475ec 100644 --- a/src/httpserver/hass.c +++ b/src/httpserver/hass.c @@ -208,6 +208,9 @@ HassDeviceInfo* hass_init_device_info(ENTITY_TYPE type, int index, char* payload isSensor = true; sprintf(g_hassBuffer, "%s Voltage", CFG_GetShortDeviceName()); break; + case VOLTAGE_SENSOR: + sprintf(g_hassBuffer, "%s Voltage", CFG_GetShortDeviceName()); + break; } cJSON_AddStringToObject(info->root, "name", g_hassBuffer); cJSON_AddStringToObject(info->root, "~", CFG_GetMQTTClientId()); //base topic diff --git a/src/selftest/selftest_hass_discovery_ext.c b/src/selftest/selftest_hass_discovery_ext.c index 5f6944748..c55fb7d99 100644 --- a/src/selftest/selftest_hass_discovery_ext.c +++ b/src/selftest/selftest_hass_discovery_ext.c @@ -61,6 +61,38 @@ void Test_HassDiscovery_Channel_Humidity() { SELFTEST_ASSERT_JSON_VALUE_STRING(0, "stat_t", "~/15/get"); SELFTEST_ASSERT_JSON_VALUE_STRING(0, "stat_cla", "measurement"); } +void Test_HassDiscovery_Channel_Voltage_div10() { + const char *shortName = "WinVolTest"; + const char *fullName = "Windows Fake Vol"; + const char *mqttName = "testVol"; + SIM_ClearOBK(shortName); + SIM_ClearAndPrepareForMQTTTesting(mqttName, "bekens"); + + CFG_SetShortDeviceName(shortName); + CFG_SetDeviceName(fullName); + + // in this example, i am using channel 15 + CHANNEL_SetType(23, ChType_Voltage_div10); + + 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, "name", "WinVolTest Voltage"); + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "~", mqttName); + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "dev_cla", "voltge"); + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "unit_of_meas", "V"); + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "val_tpl", "{{ float(value)*0.1|round(2) }}"); + // in this example, i am using channel 23 + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "stat_t", "~/23/get"); + SELFTEST_ASSERT_JSON_VALUE_STRING(0, "stat_cla", "measurement"); +} void Test_HassDiscovery_Channel_Temperature() { const char *shortName = "WinTempTest"; const char *fullName = "Windows Fake Temp"; @@ -94,6 +126,7 @@ void Test_HassDiscovery_Ext() { Test_HassDiscovery_TuyaMCU_VoltageCurrentPower(); Test_HassDiscovery_Channel_Humidity(); Test_HassDiscovery_Channel_Temperature(); + Test_HassDiscovery_Channel_Voltage_div10(); }