11#include "esp_zigbee_core.h"
13#include "ha/esp_zigbee_ha_standard.h"
18#ifdef USE_BINARY_SENSOR
25static const uint16_t ED_KEEP_ALIVE = 3000;
26static const uint8_t MAX_CHILDREN = 10;
28#define ESP_ZB_DEFAULT_RADIO_CONFIG() \
29 { .radio_mode = ZB_RADIO_MODE_NATIVE, }
31#define ESP_ZB_DEFAULT_HOST_CONFIG() \
32 { .host_connection_mode = ZB_HOST_CONNECTION_MODE_NONE, }
34uint8_t *
get_zcl_string(
const char *str, uint8_t max_size,
bool use_max_size =
false);
38class ZigbeeComponent :
public Component {
40 void setup()
override;
43 esp_err_t
create_endpoint(uint8_t endpoint_id, zb_ha_standard_devs_e device_id,
44 esp_zb_cluster_list_t *esp_zb_cluster_list);
46 void add_cluster(uint8_t endpoint_id, uint16_t cluster_id, uint8_t role);
50 void add_attr(ZigbeeAttribute *attr, uint8_t endpoint_id, uint16_t cluster_id, uint8_t role, uint16_t attr_id,
51 uint8_t max_size, T value);
54 void add_attr(uint8_t endpoint_id, uint16_t cluster_id, uint8_t role, uint16_t attr_id, uint8_t max_size, T value);
57 esp_zb_lock_acquire(portMAX_DELAY);
58 esp_zb_factory_reset();
59 esp_zb_lock_release();
82 esp_zb_nwk_device_type_t
device_role_ = ESP_ZB_DEVICE_TYPE_ROUTER;
90 std::map<uint8_t, std::tuple<zb_ha_standard_devs_e, esp_zb_cluster_list_t *>>
endpoint_list_;
92 std::map<std::tuple<uint8_t, uint16_t, uint8_t>, esp_zb_attribute_list_t *>
attribute_list_;
103 uint8_t max_size, T value) {
104 this->
add_attr<T>(
nullptr, endpoint_id, cluster_id, role, attr_id, max_size, value);
109 uint16_t attr_id, uint8_t max_size, T value) {
112 if constexpr (std::is_same<T, std::string>::value) {
114 add_attr_(attr, endpoint_id, cluster_id, role, attr_id, zcl_str);
116 }
else if constexpr (std::is_convertible<T, const char *>::value) {
118 add_attr_(attr, endpoint_id, cluster_id, role, attr_id, zcl_str);
121 add_attr_(attr, endpoint_id, cluster_id, role, attr_id, &value);
127 uint16_t attr_id, T *value_p) {
128 esp_zb_attribute_list_t *attr_list = this->
attribute_list_[{endpoint_id, cluster_id, role}];
131 if (attr !=
nullptr) {
132 this->
attributes_[{endpoint_id, cluster_id, role, attr_id}] = attr;
CallbackManager< void(bool)> join_cb_
esp_zb_ep_list_t * esp_zb_ep_list_
bool is_battery_powered()
struct esphome::zigbee::ZigbeeComponent::@200 basic_cluster_data_
std::map< std::tuple< uint8_t, uint16_t, uint8_t, uint16_t >, ZigbeeAttribute * > attributes_
esp_zb_nwk_device_type_t device_role_
void create_default_cluster(uint8_t endpoint_id, zb_ha_standard_devs_e device_id)
void add_cluster(uint8_t endpoint_id, uint16_t cluster_id, uint8_t role)
std::atomic< bool > joined
std::atomic< bool > factory_new
std::map< uint8_t, std::tuple< zb_ha_standard_devs_e, esp_zb_cluster_list_t * > > endpoint_list_
std::map< std::tuple< uint8_t, uint16_t, uint8_t >, esp_zb_attribute_list_t * > attribute_list_
void add_on_join_callback(F &&cb)
void dump_config() override
void set_basic_cluster(const char *model, const char *manufacturer, uint8_t power_source)
esp_err_t create_endpoint(uint8_t endpoint_id, zb_ha_standard_devs_e device_id, esp_zb_cluster_list_t *esp_zb_cluster_list)
std::atomic< bool > started
void add_attr(ZigbeeAttribute *attr, uint8_t endpoint_id, uint16_t cluster_id, uint8_t role, uint16_t attr_id, uint8_t max_size, T value)
esp_zb_attribute_list_t * create_basic_cluster_()
void add_attr_(ZigbeeAttribute *attr, uint8_t endpoint_id, uint16_t cluster_id, uint8_t role, uint16_t attr_id, T *value_p)
uint8_t * get_zcl_string(const char *str, uint8_t max_size, bool use_max_size)
esp_err_t esphome_zb_cluster_add_or_update_attr(uint16_t cluster_id, esp_zb_attribute_list_t *attr_list, uint16_t attr_id, void *value_p)