finish tuyamcu dimmer+toggle combo discovery?

This commit is contained in:
openshwprojects
2023-05-04 11:29:19 +02:00
parent 5d78434941
commit f1d22cef28
3 changed files with 64 additions and 50 deletions

View File

@ -428,12 +428,14 @@ HassDeviceInfo* hass_init_light_singleColor_onChannels(int toggle, int dimmer, i
clientId = CFG_GetMQTTClientId();
dev_info = hass_init_device_info(LIGHT_PWM, toggle, "1", "0");
cJSON_AddStringToObject(dev_info->root, "stat_t", "~/led_enableAll/get"); //state_topic
sprintf(g_hassBuffer, "cmnd/%s/led_enableAll", clientId);
sprintf(g_hassBuffer, "~/%i/get", toggle);
cJSON_AddStringToObject(dev_info->root, "stat_t", g_hassBuffer); //state_topic
sprintf(g_hassBuffer, "~/%i/set", toggle);
cJSON_AddStringToObject(dev_info->root, "cmd_t", g_hassBuffer); //command_topic
cJSON_AddStringToObject(dev_info->root, "bri_stat_t", "~/led_dimmer/get"); //brightness_state_topic
sprintf(g_hassBuffer, "cmnd/%s/led_dimmer", clientId);
sprintf(g_hassBuffer, "~/%i/get", dimmer);
cJSON_AddStringToObject(dev_info->root, "bri_stat_t", g_hassBuffer); //brightness_state_topic
sprintf(g_hassBuffer, "~/%i/set", dimmer);
cJSON_AddStringToObject(dev_info->root, "bri_cmd_t", g_hassBuffer); //brightness_command_topic
cJSON_AddNumberToObject(dev_info->root, "bri_scl", brightness_scale); //brightness_scale

View File

@ -1602,6 +1602,55 @@ void doHomeAssistantDiscovery(const char* topic, http_request_t* request) {
hooks.free_fn = os_free;
cJSON_InitHooks(&hooks);
// try to pair toggles with dimmers
while (true) {
// find first dimmer
dimmer = -1;
for (i = 0; i < CHANNEL_MAX; i++) {
type = g_cfg.pins.channelTypes[i];
if (BIT_CHECK(flagsChannelPublished, i)) {
continue;
}
if (type == ChType_Dimmer) {
brightness_scale = 100;
dimmer = i;
break;
}
if (type == ChType_Dimmer1000) {
brightness_scale = 1000;
dimmer = i;
break;
}
if (type == ChType_Dimmer256) {
brightness_scale = 256;
dimmer = i;
break;
}
}
// find first togle
toggle = -1;
for (i = 0; i < CHANNEL_MAX; i++) {
type = g_cfg.pins.channelTypes[i];
if (BIT_CHECK(flagsChannelPublished, i)) {
continue;
}
if (type == ChType_Toggle) {
toggle = i;
break;
}
}
// if nothing found, stop
if (toggle == -1 || dimmer == -1) {
break;
}
BIT_SET(flagsChannelPublished, toggle);
BIT_SET(flagsChannelPublished, dimmer);
dev_info = hass_init_light_singleColor_onChannels(toggle, dimmer, brightness_scale);
MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN);
hass_free_device_info(dev_info);
}
//if (relayCount > 0) {
for (i = 0; i < CHANNEL_MAX; i++) {
if (h_isChannelRelay(i) || g_cfg.pins.channelTypes[i] == ChType_Toggle) {
@ -1729,52 +1778,6 @@ void doHomeAssistantDiscovery(const char* topic, http_request_t* request) {
discoveryQueued = true;
}
}
// try to pair toggles with dimmers
while (true) {
// find first dimmer
dimmer = -1;
for (i = 0; i < CHANNEL_MAX; i++) {
type = g_cfg.pins.channelTypes[i];
if (BIT_CHECK(flagsChannelPublished, i)) {
continue;
}
if (type == ChType_Dimmer) {
brightness_scale = 100;
dimmer = i;
break;
}
if (type == ChType_Dimmer1000) {
brightness_scale = 1000;
dimmer = i;
break;
}
if (type == ChType_Dimmer256) {
brightness_scale = 256;
dimmer = i;
break;
}
}
// find first togle
toggle = -1;
for (i = 0; i < CHANNEL_MAX; i++) {
type = g_cfg.pins.channelTypes[i];
if (BIT_CHECK(flagsChannelPublished, i)) {
continue;
}
if (type == ChType_Toggle) {
toggle = i;
break;
}
}
// if nothing found, stop
if (toggle == -1 || dimmer == -1) {
break;
}
dev_info = hass_init_light_singleColor_onChannels(toggle, dimmer, brightness_scale);
MQTT_QueuePublish(topic, dev_info->channel, hass_build_discovery_json(dev_info), OBK_PUBLISH_FLAG_RETAIN);
hass_free_device_info(dev_info);
}
for (i = 0; i < CHANNEL_MAX; i++) {
type = g_cfg.pins.channelTypes[i];