diff --git a/src/httpserver/hass.c b/src/httpserver/hass.c index d747843f0..4a88ef651 100644 --- a/src/httpserver/hass.c +++ b/src/httpserver/hass.c @@ -50,6 +50,7 @@ void hass_populate_unique_id(ENTITY_TYPE type, int index, char* uniq_id) { sprintf(uniq_id, "%s_%s_%d", longDeviceName, "relay", index); break; + case VCP_SENSOR: case POWER_SENSOR: sprintf(uniq_id, "%s_%s_%d", longDeviceName, "sensor", index); break; @@ -138,6 +139,7 @@ void hass_populate_device_config_channel(ENTITY_TYPE type, char* uniq_id, HassDe case CO2_SENSOR: case TVOC_SENSOR: case POWER_SENSOR: + case VCP_SENSOR: case BATTERY_SENSOR: case BATTERY_VOLTAGE_SENSOR: case TEMPERATURE_SENSOR: @@ -212,15 +214,22 @@ HassDeviceInfo* hass_init_device_info(ENTITY_TYPE type, int index, const char* p //for 2 PWM case. sprintf(g_hassBuffer, "Light"); break; - case POWER_SENSOR: + case VCP_SENSOR: isSensor = true; #ifndef OBK_DISABLE_ALL_DRIVERS if ((index >= OBK_VOLTAGE) && (index <= OBK_POWER)) sprintf(g_hassBuffer, "%s", sensor_mqttNames[index]); else if ((index >= OBK_CONSUMPTION_TOTAL) && (index <= OBK_CONSUMPTION_STATS)) sprintf(g_hassBuffer, "%s", counter_mqttNames[index - OBK_CONSUMPTION_TOTAL]); + else + sprintf(g_hassBuffer, "Power"); + #endif break; + case POWER_SENSOR: + isSensor = true; + sprintf(g_hassBuffer, "Power"); + break; case TEMPERATURE_SENSOR: isSensor = true; @@ -412,7 +421,7 @@ HassDeviceInfo* hass_init_power_sensor_device_info(int index) { //device_class automatically assigns unit,icon if ((index >= OBK_VOLTAGE) && (index <= OBK_POWER)) { - info = hass_init_device_info(POWER_SENSOR, index, NULL, NULL); + info = hass_init_device_info(VCP_SENSOR, index, NULL, NULL); cJSON_AddStringToObject(info->root, "dev_cla", sensor_mqtt_device_classes[index]); //device_class=voltage,current,power cJSON_AddStringToObject(info->root, "unit_of_meas", sensor_mqtt_device_units[index]); //unit_of_measurement @@ -423,7 +432,7 @@ HassDeviceInfo* hass_init_power_sensor_device_info(int index) { } else if ((index >= OBK_CONSUMPTION_TOTAL) && (index <= OBK_CONSUMPTION_STATS)) { - info = hass_init_device_info(POWER_SENSOR, index, NULL, NULL); + info = hass_init_device_info(VCP_SENSOR, index, NULL, NULL); const char* device_class_value = counter_devClasses[index - OBK_CONSUMPTION_TOTAL]; if (strlen(device_class_value) > 0) { cJSON_AddStringToObject(info->root, "dev_cla", device_class_value); //device_class=energy diff --git a/src/httpserver/hass.h b/src/httpserver/hass.h index bcc9c3647..6bddb6c12 100644 --- a/src/httpserver/hass.h +++ b/src/httpserver/hass.h @@ -25,6 +25,8 @@ typedef enum { LIGHT_RGBCW, /// @brief Power sensors (voltage, current, power) + VCP_SENSOR, + POWER_SENSOR, /// @Brief Binary Sensor diff --git a/src/selftest/selftest_hass_discovery_ext.c b/src/selftest/selftest_hass_discovery_ext.c index ed713bc69..2f998cf8f 100644 --- a/src/selftest/selftest_hass_discovery_ext.c +++ b/src/selftest/selftest_hass_discovery_ext.c @@ -29,6 +29,31 @@ void Test_HassDiscovery_TuyaMCU_VoltageCurrentPower() { } +void Test_HassDiscovery_TuyaMCU_Power10() { + const char *shortName = "WinTuyatest"; + const char *fullName = "Windows Fake Tuya"; + const char *mqttName = "testTuya"; + SIM_ClearOBK(shortName); + SIM_ClearAndPrepareForMQTTTesting(mqttName, "bekens"); + + CFG_SetShortDeviceName(shortName); + CFG_SetDeviceName(fullName); + + CHANNEL_SetType(1, ChType_Power_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);*/ + +} + void Test_HassDiscovery_Channel_Humidity() { const char *shortName = "WinHumTest"; @@ -379,6 +404,7 @@ void Test_HassDiscovery_Channel_Toggle_2x() { } void Test_HassDiscovery_Ext() { Test_HassDiscovery_TuyaMCU_VoltageCurrentPower(); + Test_HassDiscovery_TuyaMCU_Power10(); Test_HassDiscovery_Channel_Humidity(); Test_HassDiscovery_Channel_Temperature(); Test_HassDiscovery_Channel_Temperature_div10();