To się nie będzie kompilować. Tzn. trzeba by wszystkie klasy, które implementują swoje "handleAction" poprawić, aby sygnatura funkcji się zgadzała.
Pytania techniczne dotyczące kodu [bramka ZigBee]
Moderator: vajera
-
vajera
- Posts: 7293
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 291 times
- Been thanked: 161 times
@klew W nawiązaniu do tego postu:
viewtopic.php?p=194477#p194477
Ten podział na subdevices - to skomplikowana sprawa? Jest szansa na jakiś przykład?
viewtopic.php?p=194477#p194477
Ten podział na subdevices - to skomplikowana sprawa? Jest szansa na jakiś przykład?
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
-
klew
- Posts: 13911
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 135 times
- Been thanked: 137 times
Podstawy powinny być proste.vajera wrote: Mon Dec 22, 2025 8:42 am @klew W nawiązaniu do tego postu:
viewtopic.php?p=194477#p194477
Ten podział na subdevices - to skomplikowana sprawa? Jest szansa na jakiś przykład?
Ja ogólnie mam klasę "DevicesConfigurator", która dziedziczy po Supla::Element i trzyma też listę sparowanych urządzeń.
W metodzie onRegistered oznaczam sobie wszystkie "subdevice" jako "do wysłania", a następnie w itarateConnected podsyłam detale każdego urządzenia z lekkim opóźnieniem (najpierw około 6 s czekam po rejestracji, a potem wysyłam - bo po samej rejestracji i tak leci masa komunikatów, więc nie chcę dokładać).
Powyższe pozwala na przesłanie nazwy, numeru seryjnego, wersji softu, wersji hw oraz "subdevice id" (liczby od 1 do 255).
Drugi ważny element, to oznaczenie każdego kanału odpowiednim subdevice id.
W kodzie każdego kanału/urządzenia:
Code: Select all
channel.setSubDeviceId(deviceId);
Code: Select all
void DevicesConfigurator::onRegistered(Supla::Protocol::SuplaSrpc *srpc) {
this->srpc = srpc;
// delay sending subdevice details to server by 1 s
lastSendTime = millis();
for (int i = 0; i < MAX_DEVICE_COUNT; i++) {
if (devices[i] != nullptr) {
devices[i]->prepareDetailsToSend();
}
}
}
bool DevicesConfigurator::iterateConnected() {
bool dataSend = false;
if (srpc == nullptr || millis() - lastSendTime < 6000) {
return !dataSend;
}
lastSendTime = millis() - 5700;
for (int i = 0; i < MAX_DEVICE_COUNT; i++) {
if (devices[i] != nullptr && devices[i]->isDeviceDetailsReadyToSend()) {
TDS_SubdeviceDetails subdeviceDetails = {};
subdeviceDetails.SubDeviceId = devices[i]->getSubDeviceId();
strncpy(subdeviceDetails.Name, devices[i]->getDeviceName(),
SUPLA_DEVICE_NAME_MAXSIZE - 1);
strncpy(subdeviceDetails.SoftVer, devices[i]->getFirmwareVersion(),
VERSION_MAX_LENGTH);
snprintf(subdeviceDetails.ProductCode,
SUPLA_SUBDEVICE_PRODUCT_CODE_MAXSIZE, "%s (%s)",
devices[i]->getProductCode(), devices[i]->getHardwareVersion());
strncpy(subdeviceDetails.SerialNumber, devices[i]->getSerialNumber(),
SERIAL_MAX_LENGTH);
srpc->sendSubdeviceDetails(&subdeviceDetails);
devices[i]->clearDeviceDetailsReadyToSend();
dataSend = true;
break;
}
}
return !dataSend;
}
Do grupowania po "subdevice" w Cloud, chyba wystarczy, że kanały oznaczysz odpowiednim setSubdeviceId(nr). A ta druga część pozwala na dosłanie detali co to za urządzenie.
Numery nie muszą być ciągłe. Wartość "0" oznacza kanał na głównym urządzeniu.
Najlepsze suple dla Twojego domu 
-
vajera
- Posts: 7293
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 291 times
- Been thanked: 161 times
Dzięki!klew wrote: Mon Dec 22, 2025 9:53 am Podstawy powinny być proste.
Ja ogólnie mam klasę "DevicesConfigurator", która dziedziczy po Supla::Element i trzyma też listę sparowanych urządzeń.
W metodzie onRegistered oznaczam sobie wszystkie "subdevice" jako "do wysłania", a następnie w itarateConnected podsyłam detale każdego urządzenia z lekkim opóźnieniem (najpierw około 6 s czekam po rejestracji, a potem wysyłam - bo po samej rejestracji i tak leci masa komunikatów, więc nie chcę dokładać).
Powyższe pozwala na przesłanie nazwy, numeru seryjnego, wersji softu, wersji hw oraz "subdevice id" (liczby od 1 do 255).
Drugi ważny element, to oznaczenie każdego kanału odpowiednim subdevice id.
W kodzie każdego kanału/urządzenia:Code: Select all
.....
W tek chwili używam IDENTIFY i RESET dla samej bramki - tutaj coś się zmieni? Urządzenia Zigbee mogą mieć funkcję IDENTIFY, z możliwością resetu chyba się nie spotkałem.Do tego jeszcze dochodzi możliwość przesyłania komend "identify" i "reset" przez urządzenia. Ale nie wiem czy tego w bramce używasz. Jakby urządzenia ZigBee to miały i chciałbyś taką opcję udostępnić, to daj znać.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
-
klew
- Posts: 13911
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 135 times
- Been thanked: 137 times
Dla bramki się nie zmienia.vajera wrote: Mon Dec 22, 2025 10:13 am W tek chwili używam IDENTIFY i RESET dla samej bramki - tutaj coś się zmieni? Urządzenia Zigbee mogą mieć funkcję IDENTIFY, z możliwością resetu chyba się nie spotkałem.
Przy subudevice można też dodać te polecenia dla konkretnego subdevice (osobno reset i identify).
Ale to nie koliduje z tym co opisałem wcześniej, więc możesz ogarnąć najpierw ten pierwszy etap.
Najlepsze suple dla Twojego domu 
-
vajera
- Posts: 7293
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 291 times
- Been thanked: 161 times
Zastosowałem się do Twoich wytycznych, zdefiniowałem odpowiednią klasę, oczywiście dostosowałem do moich struktur danych.klew wrote: Mon Dec 22, 2025 9:53 am
Podstawy powinny być proste.
Ja ogólnie mam klasę "DevicesConfigurator", która dziedziczy po Supla::Element i trzyma też listę sparowanych urządzeń.
W metodzie onRegistered oznaczam sobie wszystkie "subdevice" jako "do wysłania", a następnie w itarateConnected podsyłam detale każdego urządzenia z lekkim opóźnieniem (najpierw około 6 s czekam po rejestracji, a potem wysyłam - bo po samej rejestracji i tak leci masa komunikatów, więc nie chcę dokładać).
Powyższe pozwala na przesłanie nazwy, numeru seryjnego, wersji softu, wersji hw oraz "subdevice id" (liczby od 1 do 255).
Dałem ten sam warunek progu czasowego oraz wysłanie po jednym urządzeniu, niestety mam coś takiego:
Code: Select all
[ 12694][I][z2s_devices_table.h:780] iterateConnected(): ------------------------------
[ 12695][I][z2s_devices_table.h:781] iterateConnected(): 0: _TZE204_ltwbm23f
[ 12695][I][z2s_devices_table.h:782] iterateConnected(): ------------------------------
Sending subdevice details failed
[ 12994][I][z2s_devices_table.h:780] iterateConnected(): ------------------------------
[ 12995][I][z2s_devices_table.h:781] iterateConnected(): 1: Aqara
[ 12995][I][z2s_devices_table.h:782] iterateConnected(): ------------------------------
Sending subdevice details failed
Code: Select all
[2025-12-22 18:38:51.860] LAST STATE ADDED: Registered and ready
Code: Select all
[2025-12-22 18:38:57.721] [ 10205][I][ZigbeeGateway.cpp:2695] sendCustomClusterCmd(): _custom_cmd_last_tsn = 2
[2025-12-22 18:38:57.921] [ 10405][I][ZigbeeGateway.cpp:2703] sendCustomClusterCmd(): _custom_cmd_last_tsn_flag = 2
[2025-12-22 18:38:57.952] [ 10426][I][z2s_devices_table.h:780] iterateConnected(): ------------------------------
[2025-12-22 18:38:57.952] [ 10427][I][z2s_devices_table.h:781] iterateConnected(): 0: _TZE204_ltwbm23f
[2025-12-22 18:38:57.952] [ 10427][I][z2s_devices_table.h:782] iterateConnected(): ------------------------------
[2025-12-22 18:38:57.952] Sending subdevice details failed
[2025-12-22 18:38:58.246] [ 10726][I][z2s_devices_table.h:780] iterateConnected(): ------------------------------
[2025-12-22 18:38:58.246] [ 10727][I][z2s_devices_table.h:781] iterateConnected(): 1: Aqara
[2025-12-22 18:38:58.246] [ 10727][I][z2s_devices_table.h:782] iterateConnected(): ------------------------------
[2025-12-22 18:38:58.246] Sending subdevice details failed
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
-
vajera
- Posts: 7293
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 291 times
- Been thanked: 161 times
Jak ją podnieść - korzystam z SD sprzed tygodnia? EDIT - już wiem:
Code: Select all
SuplaDevice.begin(28);
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
-
vajera
- Posts: 7293
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 291 times
- Been thanked: 161 times
Poszło na proto 28, ale w warstwie wizualnej Cloud - bez zmian?
Czy to przypisanie:
może być po utworzeniu kanału a przed begin(28)?
Czy dopiero po przesłaniu danych urządzeń mogę ustawiać subDeviceId?
Czy to przypisanie:
Code: Select all
element->getChannel()->setSubDeviceId(zb_device_number_slot + 1);
Czy dopiero po przesłaniu danych urządzeń mogę ustawiać subDeviceId?
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
-
vajera
- Posts: 7293
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 291 times
- Been thanked: 161 times
@klew - zadziałało po tym, jak usunąłem urządzenie z Cloud i pozwoliłem bramce dodać się ponownie - to jest jedyna opcja?
You do not have the required permissions to view the files attached to this post.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
