2#if defined(USE_ZIGBEE) && defined(USE_NRF52) && defined(USE_SWITCH)
4#include <zephyr/settings/settings.h>
8#include <zboss_api_addons.h>
9#include <zb_nrf_platform.h>
10#include <zigbee/zigbee_app_utils.h>
11#include <zb_error_to_string.h>
16static const char *
const TAG =
"zigbee_on_off.switch";
21 " Endpoint: %d, present_value %u",
29 ESP_LOGD(TAG,
"Set attribute endpoint: %d, present_value %d", this->
endpoint_,
31 ZB_ZCL_SET_ATTRIBUTE(this->
endpoint_, ZB_ZCL_CLUSTER_ID_BINARY_OUTPUT, ZB_ZCL_CLUSTER_SERVER_ROLE,
39 zb_zcl_device_callback_param_t *p_device_cb_param = ZB_BUF_GET_PARAM(bufid, zb_zcl_device_callback_param_t);
40 zb_zcl_device_callback_id_t device_cb_id = p_device_cb_param->device_cb_id;
41 zb_uint16_t cluster_id = p_device_cb_param->cb_param.set_attr_value_param.cluster_id;
42 zb_uint16_t attr_id = p_device_cb_param->cb_param.set_attr_value_param.attr_id;
44 p_device_cb_param->status = RET_OK;
46 switch (device_cb_id) {
48 case ZB_ZCL_SET_ATTR_VALUE_CB_ID:
49 if (cluster_id == ZB_ZCL_CLUSTER_ID_BINARY_OUTPUT) {
50 uint8_t value = p_device_cb_param->cb_param.set_attr_value_param.values.data8;
51 ESP_LOGI(TAG,
"Binary output attribute setting to %hd", value);
53 this->
defer([
this, value]() {
60 ESP_LOGI(TAG,
"Unhandled cluster attribute id: %d", cluster_id);
64 p_device_cb_param->status = RET_ERROR;
68 ESP_LOGD(TAG,
"%s status: %hd", __func__, p_device_cb_param->status);
73static zb_ret_t check_value_binary_output_server(zb_uint16_t attr_id, zb_uint8_t endpoint,
75 zb_ret_t ret = RET_OK;
81 ret = ZB_ZCL_CHECK_BOOL_VALUE(*value) ? RET_OK : RET_ERROR;
100 zb_zcl_add_cluster_handlers(ZB_ZCL_CLUSTER_ID_BINARY_OUTPUT, ZB_ZCL_CLUSTER_SERVER_ROLE,
101 esphome::zigbee::check_value_binary_output_server,
102 (zb_zcl_cluster_write_attr_hook_t) NULL, (zb_zcl_cluster_handler_t) NULL);
106 zb_zcl_add_cluster_handlers(ZB_ZCL_CLUSTER_ID_BINARY_OUTPUT, ZB_ZCL_CLUSTER_CLIENT_ROLE,
107 (zb_zcl_cluster_check_value_t) NULL, (zb_zcl_cluster_write_attr_hook_t) NULL,
108 (zb_zcl_cluster_handler_t) NULL);
ESPDEPRECATED("Use const char* overload instead. Removed in 2026.7.0", "2026.1.0") void defer(const std voi defer)(const char *name, std::function< void()> &&f)
Defer a callback to the next loop() call.
void add_on_state_callback(std::function< void(bool)> &&callback)
Set callback for state changes.
void publish_state(bool state)
Publish a state to the front-end from the back-end.
void add_callback(zb_uint8_t endpoint, std::function< void(zb_bufid_t bufid)> &&cb)
ZigbeeComponent * parent_
BinaryAttrs * cluster_attributes_
void zcl_device_cb_(zb_bufid_t bufid)
void dump_config() override
switch_::Switch * switch_
const zb_uint8_t ZB_ZCL_BINARY_OUTPUT_STATUS_FLAG_MAX_VALUE
void zb_zcl_binary_output_init_client()
void zb_zcl_binary_output_init_server()
@ ZB_ZCL_ATTR_BINARY_OUTPUT_OUT_OF_SERVICE_ID
@ ZB_ZCL_ATTR_BINARY_OUTPUT_STATUS_FLAG_ID
@ ZB_ZCL_ATTR_BINARY_OUTPUT_PRESENT_VALUE_ID