Forum: Mikrocontroller und Digitale Elektronik Zigbee end point auf ESP32-C6


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von M. M. (anonusr)


Lesenswert?

Ich möchte mir mit einem ESP32-C6 einen eigenen Zigbee-Sensor bauen. 
esp-idf habe ich installiert und die einfachen Beispiele (z.B. 
Lichtschalter) funktionieren und werden in Home Assistant problemlos 
erkannt.

Mein Sensor soll erst mal aus einer Temperatur/Luftfeuchtigkeitsmessung 
und drei "binary inputs" bestehen.

Nun ist mir trotz Lektüre der Espressif-docs und Internetsuche nicht 
klar, wie der Zigbee-Endpoint am besten aufgebaut wird.

In der Doku befindet sich eine Auflistung von "HA Automation Device 
Types". Muss ich mich an einen dieser halten, damit der EP von 
HomeAssistant erkannt wird? Kann ich einen Standard-Endpoint, in meinem 
Fall z.B. "temperature_sensor", erzeugen, und dann durch zusätzliche 
Cluster für die anderen Messgrössen (Feuchtigkeit, binary inputs) 
ergänzen? Oder sollten die Funktionen in separate EP eingepackt werden?

Und gibt es ev. Code-Beispiele, in welchen so was gemacht wird, so dass 
ich diese als Anhaltspunkt verwenden könnte? Die Espressif-Doku ist mehr 
eine Auflistung der einzelnen Funktionen ohne wirkliche Erklärung, wie 
diese zusammen verwendet werden.

von Christoph K. (backdraft007)


Lesenswert?

Warum muss das Zigbee sein?
Geht nicht auch einfach ESPHome?
https://www.home-assistant.io/integrations/esphome/

von M. M. (anonusr)


Lesenswert?

Christoph K. schrieb:
> Warum muss das Zigbee sein?
> Geht nicht auch einfach ESPHome?
> https://www.home-assistant.io/integrations/esphome/

Mein ganzen bestehendes Netzwerk ist Zigbee, und ich möchte dabei 
bleiben.

von Helmut -. (dc3yc)


Lesenswert?

Hast du auch die Seiten von Seeed Studio gelesen? Da steht eine Menge 
drin! https://wiki.seeedstudio.com/xiao_esp32c6_zigbee/

von M. M. (anonusr)


Lesenswert?

Danke für den Hinweis, ich habe diese Doku gerade angeschaut. Das sind 
halt die Beispiele, die Espressif mit dem sdk mitgeliefert, mit ein paar 
Code-Erläuterungen.

Meine Fragen sind wohl eher grundsätzlicher Natur.

Wenn ich z.B. Temperatur und Luftfeuchtigkeit messen möchte, nehme ich 
die Feuchtigkeit als weiteres Attribut in den Temperatur-Messcluster? 
Oder ist das dann ein weiterer Cluster im selben Endpoint? Wenn ich 
weiter "binary sensors" habe (3 Stück sollen es sein), kann ich diese da 
ebenfalls als Attribute mit in denselben Temperaturmesscluster 
reinpacken, oder geht das nicht, und es sind 3 weitere EP dafür 
notwendig? Oder ein "custom cluster", der die drei Signale kombiniert? 
Wenn ein "custom cluster", wird der dann in Home-Assistant erkannt?

Wenn ich mich da für einen vernünftigen Ansatz entschieden habe, stellt 
sich dann die Frage, wie ich das alles in Software implementiere. Wobei 
das weniger meine Sorge ist.

von M. M. (anonusr)


Lesenswert?

Hier noch ein Beispiel für die Unklarheiten, die die Espressif-Doku bei 
mir zurücklässt:

Für das Reporting von Attributen gibt es die Funktion 
[esp_zb_zcl_update_reporting_info](https://docs.espressif.com/projects/esp-zigbee-sdk/en/latest/esp32/api-reference/zcl/esp_zigbee_zcl_command.html?highlight=esp_zb_zcl_update_reporting_info#_CPPv432esp_zb_zcl_update_reporting_infoP27esp_zb_zcl_reporting_info_t).

Wie diese verwendet wird, ist aber nicht erklärt. Als Argument nimmt sie 
eine 
[esp_zb_zcl_reporting_info_t](https://docs.espressif.com/projects/esp-zigbee-sdk/en/latest/esp32/api-reference/esp_zigbee_type.html#_CPPv427esp_zb_zcl_reporting_info_s) 
entgegen. Welche Felder aber benötigt werden und welche nicht, ist 
nirgends beschrieben. In einem Beispiel wird diese struct dann so 
verwendet:
1
    esp_zb_zcl_reporting_info_t reporting_info = {
2
        .ep = ep_id,
3
        .direction = ESP_ZB_ZCL_CMD_DIRECTION_TO_SRV,
4
        .cluster_id = ESP_ZB_ZCL_CLUSTER_ID_TEMP_MEASUREMENT,
5
        .cluster_role = ESP_ZB_ZCL_CLUSTER_SERVER_ROLE,
6
        .dst.profile_id = ESP_ZB_AF_HA_PROFILE_ID,
7
        .u.send_info.min_interval = 1,
8
        .u.send_info.max_interval = 0,
9
        .u.send_info.def_min_interval = 1,
10
        .u.send_info.def_max_interval = 0,
11
        .u.send_info.delta.u16 = 100,
12
        .attr_id = ESP_ZB_ZCL_ATTR_TEMP_MEASUREMENT_VALUE_ID,
13
        .manuf_code = ESP_ZB_ZCL_ATTR_NON_MANUFACTURER_SPECIFIC,
14
    };
15
    esp_zb_zcl_update_reporting_info(&reporting_info);

Das lässt für mich z.B. unklar, welche Felder spezifiziert werden 
müssen, und ob welche optional sind.

Ich frage mich da schon, ob es nicht irgendeine Art von Doku gibt, die 
das ausführt, und die ich noch nicht gefunden habe... So muss man sich 
von Beispiel zu Beispiel durchhangeln und raten. Für Standardanwendungen 
mag das gehen, aber wenn ich etwas abweichendes programmieren möchte, 
wird es schwierig...

von Pit S. (pitschu)


Lesenswert?

Schau mal auf github und gebe ESP32C6 im Suchfeld ein, da kommen zig 
Beispiele. Ich habe mit dem C6 schon Sensoren und auch RGB Steuerung 
realisiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.