tuyamcu discovery for dimmers - p1, unfinished

This commit is contained in:
openshwprojects
2023-05-04 10:13:58 +02:00
parent f1e5b0a31b
commit 5d78434941
4 changed files with 100 additions and 0 deletions

View File

@@ -420,6 +420,26 @@ char *hass_generate_multiplyAndRound_template(int decimalPlacesForRounding, int
return g_hassBuffer;
}
HassDeviceInfo* hass_init_light_singleColor_onChannels(int toggle, int dimmer, int brightness_scale) {
HassDeviceInfo*dev_info;
const char* clientId;
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);
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);
cJSON_AddStringToObject(dev_info->root, "bri_cmd_t", g_hassBuffer); //brightness_command_topic
cJSON_AddNumberToObject(dev_info->root, "bri_scl", brightness_scale); //brightness_scale
return dev_info;
}
/// @brief Initializes HomeAssistant sensor device discovery storage.
/// @param type
/// @param channel

View File

@@ -85,6 +85,7 @@ typedef struct HassDeviceInfo_s {
void hass_print_unique_id(http_request_t* request, const char* fmt, ENTITY_TYPE type, int index);
HassDeviceInfo* hass_init_relay_device_info(int index, ENTITY_TYPE type);
HassDeviceInfo* hass_init_device_info(ENTITY_TYPE type, int index, char* payload_on, char* payload_off);
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, bool bInverse);

View File

@@ -1580,6 +1580,7 @@ void doHomeAssistantDiscovery(const char* topic, http_request_t* request) {
// warning - this is 32 bit
int flagsChannelPublished;
int ch;
int dimmer, toggle, brightness_scale;
// no channels published yet
flagsChannelPublished = 0;
@@ -1728,6 +1729,53 @@ 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];
// TODO: flags are 32 bit and there are 64 max channels