mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2026-02-10 22:45:52 +00:00
TuyaMCU Hass Discovery/custom channel types should cover now Toggles, Voltage/Current/Power, and humidity/temperature
This commit is contained in:
@ -65,9 +65,16 @@ void hass_populate_unique_id(ENTITY_TYPE type, int index, char* uniq_id) {
|
||||
case BATTERY_SENSOR:
|
||||
sprintf(uniq_id, "%s_%s_%d", longDeviceName, "battery", index);
|
||||
break;
|
||||
case VOLTAGE_SENSOR:
|
||||
case BATTERY_VOLTAGE_SENSOR:
|
||||
sprintf(uniq_id, "%s_%s_%d", longDeviceName, "voltage", index);
|
||||
break;
|
||||
case CURRENT_SENSOR:
|
||||
sprintf(uniq_id, "%s_%s_%d", longDeviceName, "current", index);
|
||||
break;
|
||||
default:
|
||||
sprintf(uniq_id, "%s_%s_%d", longDeviceName, "sensor", index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -95,11 +102,12 @@ void hass_populate_device_config_channel(ENTITY_TYPE type, char* uniq_id, HassDe
|
||||
case LIGHT_RGBCW:
|
||||
sprintf(info->channel, "light/%s/config", uniq_id);
|
||||
break;
|
||||
|
||||
case RELAY:
|
||||
sprintf(info->channel, "switch/%s/config", uniq_id);
|
||||
break;
|
||||
|
||||
case BINARY_SENSOR:
|
||||
sprintf(info->channel, "binary_sensor/%s/config", uniq_id);
|
||||
break;
|
||||
case CO2_SENSOR:
|
||||
case TVOC_SENSOR:
|
||||
case POWER_SENSOR:
|
||||
@ -109,9 +117,9 @@ void hass_populate_device_config_channel(ENTITY_TYPE type, char* uniq_id, HassDe
|
||||
case HUMIDITY_SENSOR:
|
||||
sprintf(info->channel, "sensor/%s/config", uniq_id);
|
||||
break;
|
||||
|
||||
case BINARY_SENSOR:
|
||||
sprintf(info->channel, "binary_sensor/%s/config", uniq_id);
|
||||
default:
|
||||
sprintf(info->channel, "sensor/%s/config", uniq_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -323,8 +331,17 @@ HassDeviceInfo* hass_init_light_device_info(ENTITY_TYPE type) {
|
||||
/// @brief Initializes HomeAssistant binary sensor device discovery storage.
|
||||
/// @param index
|
||||
/// @return
|
||||
HassDeviceInfo* hass_init_binary_sensor_device_info(int index) {
|
||||
HassDeviceInfo* info = hass_init_device_info(BINARY_SENSOR, index, "1", "0");
|
||||
HassDeviceInfo* hass_init_binary_sensor_device_info(int index, bool bInverse) {
|
||||
const char *payload_on;
|
||||
const char *payload_off;
|
||||
if (bInverse) {
|
||||
payload_on = "1";
|
||||
payload_off = "0";
|
||||
} else {
|
||||
payload_off = "1";
|
||||
payload_on = "0";
|
||||
}
|
||||
HassDeviceInfo* info = hass_init_device_info(BINARY_SENSOR, index, payload_on, payload_off);
|
||||
|
||||
sprintf(g_hassBuffer, "~/%i/get", index);
|
||||
cJSON_AddStringToObject(info->root, "stat_t", g_hassBuffer); //state_topic
|
||||
|
||||
@ -84,7 +84,7 @@ void hass_print_unique_id(http_request_t* request, const char* fmt, ENTITY_TYPE
|
||||
HassDeviceInfo* hass_init_relay_device_info(int index, ENTITY_TYPE type);
|
||||
HassDeviceInfo* hass_init_light_device_info(ENTITY_TYPE type);
|
||||
HassDeviceInfo* hass_init_power_sensor_device_info(int index);
|
||||
HassDeviceInfo* hass_init_binary_sensor_device_info(int index);
|
||||
HassDeviceInfo* hass_init_binary_sensor_device_info(int index, bool bInverse);
|
||||
HassDeviceInfo* hass_init_sensor_device_info(ENTITY_TYPE type, int channel, int decPlaces, int decOffset);
|
||||
const char* hass_build_discovery_json(HassDeviceInfo* info);
|
||||
void hass_free_device_info(HassDeviceInfo* info);
|
||||
|
||||
@ -1601,9 +1601,9 @@ void doHomeAssistantDiscovery(const char* topic, http_request_t* request) {
|
||||
hooks.free_fn = os_free;
|
||||
cJSON_InitHooks(&hooks);
|
||||
|
||||
if (relayCount > 0) {
|
||||
//if (relayCount > 0) {
|
||||
for (i = 0; i < CHANNEL_MAX; i++) {
|
||||
if (h_isChannelRelay(i)) {
|
||||
if (h_isChannelRelay(i) || g_cfg.pins.channelTypes[i] == ChType_Toggle) {
|
||||
// TODO: flags are 32 bit and there are 64 max channels
|
||||
BIT_SET(flagsChannelPublished, i);
|
||||
if (CFG_HasFlag(OBK_FLAG_MQTT_HASS_ADD_RELAYS_AS_LIGHTS)) {
|
||||
@ -1618,14 +1618,14 @@ void doHomeAssistantDiscovery(const char* topic, http_request_t* request) {
|
||||
discoveryQueued = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
//}
|
||||
|
||||
if (dInputCount > 0) {
|
||||
for (i = 0; i < CHANNEL_MAX; i++) {
|
||||
if (h_isChannelDigitalInput(i)) {
|
||||
// TODO: flags are 32 bit and there are 64 max channels
|
||||
BIT_SET(flagsChannelPublished, i);
|
||||
dev_info = hass_init_binary_sensor_device_info(i);
|
||||
dev_info = hass_init_binary_sensor_device_info(i, false);
|
||||
MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN);
|
||||
hass_free_device_info(dev_info);
|
||||
dev_info = NULL;
|
||||
@ -1739,7 +1739,16 @@ void doHomeAssistantDiscovery(const char* topic, http_request_t* request) {
|
||||
{
|
||||
case ChType_OpenClosed:
|
||||
{
|
||||
dev_info = hass_init_binary_sensor_device_info(i);
|
||||
dev_info = hass_init_binary_sensor_device_info(i, false);
|
||||
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_OpenClosed_Inv:
|
||||
{
|
||||
dev_info = hass_init_binary_sensor_device_info(i, true);
|
||||
MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN);
|
||||
hass_free_device_info(dev_info);
|
||||
|
||||
@ -1800,6 +1809,15 @@ void doHomeAssistantDiscovery(const char* topic, http_request_t* request) {
|
||||
discoveryQueued = true;
|
||||
}
|
||||
break;
|
||||
case ChType_Current_div1000:
|
||||
{
|
||||
dev_info = hass_init_sensor_device_info(CURRENT_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;
|
||||
case ChType_Power:
|
||||
{
|
||||
dev_info = hass_init_sensor_device_info(POWER_SENSOR, i, -1, -1);
|
||||
|
||||
Reference in New Issue
Block a user