Zgłoszenia nowych urządzeń 2026 [bramka ZigBee]

Moderator: vajera

User avatar
vajera
Posts: 7293
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 291 times
Been thanked: 161 times

Post

zzrr wrote: Mon Mar 09, 2026 7:33 pm @vajera. To co pisałem w pierwszym poście żeby była kolejność w rejestracji kanałów to nawiąże do tego. Jeśli np. na oba kanały dali byśmy sub_id różne to ikonka pójdzie tylko na pierwszy kanał. Jeśli mamy oba NO_CUSTOM_CMD_SID to ikonka będzie na obu bo sie propaguje na wszystkie takie same sub_id które bierze z pierwszego kanału. Podsumowując... jesli byś zmienił żeby drugi kanał GPM miał przypisane sub_id ikonka zostanie tylko na pierwszym czyli w moim przypadku Binary. I ten binary moze być NO_CUSTOM_CMD_SID. Da radę?
Poniżej masz kod funkcji updateSuplaBatteryLevel(...) z bramki:

Code: Select all

  while (channel_number_slot >= 0) {
    
    auto element = 
      Supla::Element::getElementByChannelNumber(
        z2s_channels_table[channel_number_slot].Supla_channel);
 
    if (element) {
      
      if (battery_level < 0xFF)
        element->getChannel()->setBatteryLevel(battery_level);

(...)

    channel_number_slot = Z2S_findChannelNumberNextSlot(
        channel_number_slot, 
        z2s_channels_table[channel_number_slot].ieee_addr, 
        -1, -1, ALL_SUPLA_CHANNEL_TYPES, NO_CUSTOM_CMD_SID);
  }
  
 
W takim kształcie każdy kanał z tym samym ieee_addr dostanie dane o baterii.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

vajera wrote: Mon Mar 09, 2026 7:40 pm
zzrr wrote: Mon Mar 09, 2026 7:33 pm @vajera. To co pisałem w pierwszym poście żeby była kolejność w rejestracji kanałów to nawiąże do tego. Jeśli np. na oba kanały dali byśmy sub_id różne to ikonka pójdzie tylko na pierwszy kanał. Jeśli mamy oba NO_CUSTOM_CMD_SID to ikonka będzie na obu bo sie propaguje na wszystkie takie same sub_id które bierze z pierwszego kanału. Podsumowując... jesli byś zmienił żeby drugi kanał GPM miał przypisane sub_id ikonka zostanie tylko na pierwszym czyli w moim przypadku Binary. I ten binary moze być NO_CUSTOM_CMD_SID. Da radę?
Poniżej masz kod funkcji updateSuplaBatteryLevel(...) z bramki:

Code: Select all

  while (channel_number_slot >= 0) {
    
    auto element = 
      Supla::Element::getElementByChannelNumber(
        z2s_channels_table[channel_number_slot].Supla_channel);
 
    if (element) {
      
      if (battery_level < 0xFF)
        element->getChannel()->setBatteryLevel(battery_level);

(...)

    channel_number_slot = Z2S_findChannelNumberNextSlot(
        channel_number_slot, 
        z2s_channels_table[channel_number_slot].ieee_addr, 
        -1, -1, ALL_SUPLA_CHANNEL_TYPES, NO_CUSTOM_CMD_SID);
  }
  
 
W takim kształcie każdy kanał z tym samym ieee_addr dostanie dane o baterii.
channel_number_slot = Z2S_findChannelNumberNextSlot
ta funkcja przelewa zdaje się na pozostałe kanały o tym samym sub_id

Ja to sprawdzałem. To co mówię zadziałało. Bo wcześniej sprawdzałem czy mi kod zrobiony działa.
User avatar
vajera
Posts: 7293
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 291 times
Been thanked: 161 times

Post

zzrr wrote: Mon Mar 09, 2026 7:42 pm
vajera wrote: Mon Mar 09, 2026 7:40 pm Poniżej masz kod funkcji updateSuplaBatteryLevel(...) z bramki:

Code: Select all

  while (channel_number_slot >= 0) {
    
    auto element = 
      Supla::Element::getElementByChannelNumber(
        z2s_channels_table[channel_number_slot].Supla_channel);
 
    if (element) {
      
      if (battery_level < 0xFF)
        element->getChannel()->setBatteryLevel(battery_level);

(...)

    channel_number_slot = Z2S_findChannelNumberNextSlot(
        channel_number_slot, 
        z2s_channels_table[channel_number_slot].ieee_addr, 
        -1, -1, ALL_SUPLA_CHANNEL_TYPES, NO_CUSTOM_CMD_SID);
  }
  
 
channel_number_slot = Z2S_findChannelNumberNextSlot
ta funkcja przelewa zdaje się na pozostałe kanały o tym samym sub_id

Ja to sprawdzałem. To co mówię zadziałało. Bo wcześniej sprawdzałem czy mi kod zrobiony działa.
Tak, ale NO_CUSTOM_CMD_SID == -1 i wtedy sub_id nie jest brane pod uwagę.

W takim kształcie każdy kanał z tym samym ieee_addr dostanie dane o baterii.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
vajera
Posts: 7293
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 291 times
Been thanked: 161 times

Post

zzrr wrote: Mon Mar 09, 2026 7:42 pm channel_number_slot = Z2S_findChannelNumberNextSlot
ta funkcja przelewa zdaje się na pozostałe kanały o tym samym sub_id

Ja to sprawdzałem. To co mówię zadziałało. Bo wcześniej sprawdzałem czy mi kod zrobiony działa.
Tutaj masz kod ten funkcji:

Code: Select all

int16_t Z2S_findChannelNumberNextSlot(
  int16_t prev_slot, esp_zb_ieee_addr_t ieee_addr, int16_t endpoint, 
  uint16_t cluster, int32_t channel_type, int8_t sub_id) {

 
  for (uint8_t channels_counter = prev_slot + 1; 
       channels_counter < Z2S_CHANNELS_MAX_NUMBER; channels_counter++) {

      if (z2s_channels_table[channels_counter].valid_record)
        if ((memcmp(z2s_channels_table[channels_counter].ieee_addr, ieee_addr, 8) == 0) && 
        ((endpoint < 0) || (z2s_channels_table[channels_counter].endpoint == endpoint)) &&
        ((channel_type < 0) || (z2s_channels_table[channels_counter].Supla_channel_type == channel_type)) &&
        ((sub_id < 0) || (z2s_channels_table[channels_counter].sub_id == sub_id))) { //tutaj sub_id < 0 ignoruje wartość sub_id kanału
        //&& (z2s_channels_table[channels_counter].cluster_id == cluster)) {
            return channels_counter;
        }
  }  
  return -1;
}
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
vajera
Posts: 7293
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 291 times
Been thanked: 161 times

Post

zzrr wrote: Mon Mar 09, 2026 7:33 pm @vajera. To co pisałem w pierwszym poście żeby była kolejność w rejestracji kanałów to nawiąże do tego. Jeśli np. na oba kanały dali byśmy sub_id różne to ikonka pójdzie tylko na pierwszy kanał. Jeśli mamy oba NO_CUSTOM_CMD_SID to ikonka będzie na obu bo sie propaguje na wszystkie takie same sub_id które bierze z pierwszego kanału. Podsumowując... jesli byś zmienił żeby drugi kanał GPM miał przypisane sub_id ikonka zostanie tylko na pierwszym czyli w moim przypadku Binary. I ten binary moze być NO_CUSTOM_CMD_SID. Da radę?
Zmieniłem sub_id na 0 i 1 odpowiednio (1.4.88-09/03/26) - możesz zrobić test i samemu się przekonać.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

vajera wrote: Mon Mar 09, 2026 7:52 pm
zzrr wrote: Mon Mar 09, 2026 7:42 pm channel_number_slot = Z2S_findChannelNumberNextSlot
ta funkcja przelewa zdaje się na pozostałe kanały o tym samym sub_id

Ja to sprawdzałem. To co mówię zadziałało. Bo wcześniej sprawdzałem czy mi kod zrobiony działa.
Tutaj masz kod ten funkcji:

Code: Select all

int16_t Z2S_findChannelNumberNextSlot(
  int16_t prev_slot, esp_zb_ieee_addr_t ieee_addr, int16_t endpoint, 
  uint16_t cluster, int32_t channel_type, int8_t sub_id) {

 
  for (uint8_t channels_counter = prev_slot + 1; 
       channels_counter < Z2S_CHANNELS_MAX_NUMBER; channels_counter++) {

      if (z2s_channels_table[channels_counter].valid_record)
        if ((memcmp(z2s_channels_table[channels_counter].ieee_addr, ieee_addr, 8) == 0) && 
        ((endpoint < 0) || (z2s_channels_table[channels_counter].endpoint == endpoint)) &&
        ((channel_type < 0) || (z2s_channels_table[channels_counter].Supla_channel_type == channel_type)) &&
        ((sub_id < 0) || (z2s_channels_table[channels_counter].sub_id == sub_id))) { //tutaj sub_id < 0 ignoruje wartość sub_id kanału
        //&& (z2s_channels_table[channels_counter].cluster_id == cluster)) {
            return channels_counter;
        }
  }  
  return -1;
}
No to ja zgłupiałem. :roll: Czyli że sie nie da tak zrobic żeby była ikonka bateryjki tylko przy binary? No dałbym głowe że miałem to tak ze pokazywało mi jedną. :roll:
User avatar
vajera
Posts: 7293
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 291 times
Been thanked: 161 times

Post

zzrr wrote: Mon Mar 09, 2026 7:58 pm
vajera wrote: Mon Mar 09, 2026 7:52 pm
zzrr wrote: Mon Mar 09, 2026 7:42 pm channel_number_slot = Z2S_findChannelNumberNextSlot
ta funkcja przelewa zdaje się na pozostałe kanały o tym samym sub_id

Ja to sprawdzałem. To co mówię zadziałało. Bo wcześniej sprawdzałem czy mi kod zrobiony działa.
Tutaj masz kod ten funkcji:

Code: Select all

int16_t Z2S_findChannelNumberNextSlot(
  int16_t prev_slot, esp_zb_ieee_addr_t ieee_addr, int16_t endpoint, 
  uint16_t cluster, int32_t channel_type, int8_t sub_id) {

 
  for (uint8_t channels_counter = prev_slot + 1; 
       channels_counter < Z2S_CHANNELS_MAX_NUMBER; channels_counter++) {

      if (z2s_channels_table[channels_counter].valid_record)
        if ((memcmp(z2s_channels_table[channels_counter].ieee_addr, ieee_addr, 8) == 0) && 
        ((endpoint < 0) || (z2s_channels_table[channels_counter].endpoint == endpoint)) &&
        ((channel_type < 0) || (z2s_channels_table[channels_counter].Supla_channel_type == channel_type)) &&
        ((sub_id < 0) || (z2s_channels_table[channels_counter].sub_id == sub_id))) { //tutaj sub_id < 0 ignoruje wartość sub_id kanału
        //&& (z2s_channels_table[channels_counter].cluster_id == cluster)) {
            return channels_counter;
        }
  }  
  return -1;
}
No to ja zgłupiałem. :roll: Czyli że sie nie da tak zrobic żeby była ikonka bateryjki tylko przy binary? No dałbym głowe że miałem to tak ze pokazywało mi jedną. :roll:
Wypróbuj 1.4.88-09/03/26 - nadałem tam obu kanałom różne sub_id, ale i tak każdy dostanie informację o baterii.
Natomiast da się oczywiście zrobić tak, żeby tylko konkretny kanał dostał taką informację, tylko to wymaga zmian w kodzie bramki.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Robinson74
Posts: 404
Joined: Sun Nov 20, 2022 9:37 am
Has thanked: 13 times
Been thanked: 6 times

Post

Robinson74 wrote: Mon Mar 09, 2026 5:37 pm
Jeszcze że tak zapytam.
Ten czujnik zalania dodał 3 kanały:
- contact
- tamper
- low battery
A propos TAMPER. Tak na chłopski rozum, to ten kanał powinien chyba zmieniać stan w przypadku poruszenia, przesunięcia, podniesienia czujnika zalania itp. Ale nie zauważyłem takiej funkcjonalności. Nie wiem, czy to w ogóle działa. Mogę to jakoś zweryfikować?
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

vajera wrote: Mon Mar 09, 2026 8:01 pm ....

Wypróbuj 1.4.88-09/03/26 - nadałem tam obu kanałom różne sub_id, ale i tak każdy dostanie informację o baterii.
Natomiast da się oczywiście zrobić tak, żeby tylko konkretny kanał dostał taką informację, tylko to wymaga zmian w kodzie bramki.
Sprawdzam. Ale zmiany dalej niż tylko w obrębie dodawanego urządzenia odpadają. Jak tak jest to tak zostaje w razie czego. Zaraz oczywiście napiszę. I martwi mnie to że na 99% masz rację ;)
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

@vajera sprawdzone. Przeanalizowałem wszystko co powiedziałeś i pokazałeś w kodzie. Cenne wskazówki do dalszej mojej zabawy z zigbee. Tak. w moim przypadku tylko zabawy. Ale nawet zdążyłem wgrać swoją wcześniejsza eksperymentalną wersję bramki. Teraz tą oryginal Z2S jak tylko się pokazała.
Niestety tak jak się obawiałem miałeś rację ;) , ale to już wiedziałem nim wgrałem kod. Dawałem głowę że jak testowałem wcześniej kod to była jedna ikonka baterii ale wychodzi na to że straciłbym głowę. Coś "pokićkałem". Sorki że tylko Ci czas tym zabrałem. Ale przynajmniej czegoś się dowiedziałem co zapewne mi się przyda. Dlatego wielkie dzięki.

Return to “Bramka ZigBee”