From 23cbd2c7f1e543bcd80f093daab1701cee2a6fe2 Mon Sep 17 00:00:00 2001 From: Aleksey Zagorodnikov Date: Sun, 25 Jun 2023 13:28:52 +0600 Subject: [PATCH] HA discovery energy_sensor from tuyaMCU (#864) Handle EnergyTotal_kWh_div1000 --- src/httpserver/hass.c | 7 +++++++ src/httpserver/hass.h | 2 ++ src/httpserver/http_fns.c | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/httpserver/hass.c b/src/httpserver/hass.c index 7bf91835f..78114741d 100644 --- a/src/httpserver/hass.c +++ b/src/httpserver/hass.c @@ -539,6 +539,13 @@ HassDeviceInfo* hass_init_sensor_device_info(ENTITY_TYPE type, int channel, int sprintf(g_hassBuffer, "~/%d/get", channel); cJSON_AddStringToObject(info->root, "stat_t", g_hassBuffer); break; + case ENERGY_SENSOR: + cJSON_AddStringToObject(info->root, "dev_cla", "energy"); + cJSON_AddStringToObject(info->root, "unit_of_meas", "kWh"); + sprintf(g_hassBuffer, "~/%d/get", channel); + cJSON_AddStringToObject(info->root, "stat_cla", "total_increasing"); + cJSON_AddStringToObject(info->root, "stat_t", g_hassBuffer); + break; case POWERFACTOR_SENSOR: cJSON_AddStringToObject(info->root, "dev_cla", "power_factor"); //cJSON_AddStringToObject(info->root, "unit_of_meas", "W"); diff --git a/src/httpserver/hass.h b/src/httpserver/hass.h index 5c5e0c953..49638bb35 100644 --- a/src/httpserver/hass.h +++ b/src/httpserver/hass.h @@ -63,6 +63,8 @@ typedef enum { READONLYLOWMIDHIGH_SENSOR, // lx unit ILLUMINANCE_SENSOR, + + ENERGY_SENSOR, } ENTITY_TYPE; //unique_id is defined in hass_populate_unique_id and is based on CFG_GetDeviceName() whose size is CGF_DEVICE_NAME_SIZE. diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index 58c6a45fb..b75056c15 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -1981,6 +1981,24 @@ void doHomeAssistantDiscovery(const char* topic, http_request_t* request) { discoveryQueued = true; } break; + case ChType_EnergyTotal_kWh_div100: + { + dev_info = hass_init_sensor_device_info(ENERGY_SENSOR, i, 3, 2); + MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN); + hass_free_device_info(dev_info); + + discoveryQueued = true; + } + break; + case ChType_EnergyTotal_kWh_div1000: + { + dev_info = hass_init_sensor_device_info(ENERGY_SENSOR, i, 3, 3); + MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN); + hass_free_device_info(dev_info); + + discoveryQueued = true; + } + break; } } #endif