light driver thread implemented

This commit is contained in:
2026-03-19 19:52:13 +01:00
parent 790f537da0
commit 81b589df21
6 changed files with 60 additions and 41 deletions

View File

@@ -12,13 +12,10 @@ static char manufacturer[] = "\x05""Drath";
static char model[] = "\x15""Dimmable Zigbee Light";
static const uint8_t endpoint_no = 1;
static const uint16_t transition_on_off_ms = 500;
static const uint16_t transition_level_ms = 100; // looks like it gets lvl updates from HA every 100ms
static esp_err_t deferred_driver_init(void) {
static bool is_inited = false;
if (!is_inited) {
light_driver_init(LIGHT_DEFAULT_OFF);
xTaskCreate(light_driver_task, "light task", 4096, NULL, 6, NULL);
is_inited = true;
}
return is_inited ? ESP_OK : ESP_FAIL;
@@ -60,7 +57,7 @@ static esp_err_t zigbee_attribute_handler(const esp_zb_zcl_set_attr_value_messag
bool light_state = false;
light_state = message->attribute.data.value ? *(bool*)message->attribute.data.value : light_state;
ESP_LOGI(TAG, "Light sets to %s", light_state ? "On" : "Off");
light_driver_set_power(light_state, transition_on_off_ms);
light_driver_set_power(light_state);
}
break;
@@ -68,7 +65,7 @@ static esp_err_t zigbee_attribute_handler(const esp_zb_zcl_set_attr_value_messag
if (message->attribute.id == ESP_ZB_ZCL_ATTR_LEVEL_CONTROL_CURRENT_LEVEL_ID && message->attribute.data.type == ESP_ZB_ZCL_ATTR_TYPE_U8) {
uint8_t light_level = 0;
light_level = message->attribute.data.value ? *(uint8_t*)message->attribute.data.value : light_level;
light_driver_set_level(light_level, transition_level_ms);
light_driver_set_level(light_level);
ESP_LOGI(TAG, "Light level changes to %d", light_level);
}
break;
@@ -166,9 +163,9 @@ void zigbee_endpoint_init(esp_zb_ep_list_t *ep_list, esp_zb_cluster_list_t *clus
}
/* appearently you cant rename this? */
void esp_zb_app_signal_handler(esp_zb_app_signal_t* signal_struct) {
uint32_t* p_sg_p = signal_struct->p_app_signal;
const esp_err_t err_status = signal_struct->esp_err_status;
void esp_zb_app_signal_handler(const esp_zb_app_signal_t* signal_s) {
uint32_t* p_sg_p = signal_s->p_app_signal;
const esp_err_t err_status = signal_s->esp_err_status;
const esp_zb_app_signal_type_t sig_type = *p_sg_p;
switch (sig_type) {