espressif / esp-zigbee-sdk

Espressif Zigbee SDK
Apache License 2.0
156 stars 26 forks source link

HA_temperature_sensor - fails to join network (ConBee II) - with fix (TZ-965) #374

Open OOHehir opened 3 months ago

OOHehir commented 3 months ago

Answers checklist.

IDF version.

v5.3-beta2

esp-zigbee-lib version.

1.3.2

esp-zboss-lib version.

1.3.2

Espressif SoC revision.

ESP32-H6

What is the expected behavior?

HA_temperature_sensor sample would be discoverable & fully join to an ConBee II coordinator

What is the actual behavior?

Failed to join ConBee II coordinator

Steps to reproduce.

  1. Build HA_temperature_sensor sample
  2. Try to join ConBee II network
  3. Notice it fails to join correctly

More Information.

I believe this failure occurs because this line should be:

#define MODEL_IDENTIFIER                "\x07"CONFIG_IDF_TARGET

As CONFIG_IDF_TARGET when using an esp32c6 is 7 characters.

Changing this allows the ESP32 to join the ConBee II network.

Further to this issue however, even if the ESP32 successfully joins the network I note it is not fully recognized. I had this issue with the HA_on_off_switch sample also, but following the discussion here I was able to get the ESP32 to be recognized & controllable from the Phoscon App.

I realize there is an issue in the Zigbee ecosystem of interoperability but has anyone been able to get this sample fully recognized by a Zigbee coordinator (other than another ESP32)?

Many thanks

image

OOHehir commented 3 months ago

Further to this I tried mimicking a temperature sensor that is known to the ConBee II but without success. I was using:

// @ref: https://dresden-elektronik.github.io/deconz-rest-doc/devices/computime-salus/ss909zb_temp_sensor/
char modelid[] = {9, 'C', 'O', 'M', 'P', 'U', 'T', 'I', 'M', 'E'};
char manufname[] = {7, 'S', 'S', '9', '0', '9', 'Z', 'B'};

I see in the attributes a number that are not implemented by the sample code & I wonder if this is the issue?

xieqinan commented 3 months ago

@OOHehir ,

Based on the above description, it appears that the failure is related to the string content of model_identifier. If the following code is used, can the ESP32H2 be recognized by the ConBee II?

char modelid[] = {9, 'H', 'L', 'Q', 'D', 'Q', '0', '1', 'L', 'M'};
char manufname[] = {9, 'E', 'S', 'P', 'R', 'E', 'S', 'S', 'I', 'F''};
OOHehir commented 2 months ago

@xieqinan Thanks for the response. I've updated to commit 81ade242 of the SDK. I erased the ESP32C6 & attempted to add the ESP32C6 using the code you supplied. Unfortunately no improvement, the device joins the network:

I (166398) ESP_ZB_TEMP_SENSOR: Joined network successfully (Extended PAN ID: 00:21:2e:ff:ff:09:d2:20, PAN ID: 0x4b51, Channel:15, Short Address: 0xc787)

But seems to not to be fully recognized (Not visible in the Phoscon App). I've a Sonoff temperature sensor & notice that they have a 'Power Configuration' cluster. Perhaps that is required to 'fully join' the network?

Screenshot from 2024-07-05 09-38-59

xieqinan commented 2 months ago

@OOHehir,

I believe this is an ecological compatibility issue. We need to determine how the ConBee II recognizes the device. Is it based on the clusters residing on the device or the manufacturer code and model identifier? Could you try using an ESP32C6 device to simulate the Sonoff temperature sensor & notice device, including the carried clusters, manufacturer code, and model identifier, and then enable the device to join the ConBee II network? If the esp-zigbee-sdk lacks some APIs to accomplish this, please feel free to let us know.