mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2026-03-14 03:08:20 +01:00
tuyamcu discovery for dimmers - p1, unfinished
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user