OK, dzięki za ostrzeżenie - to dosyć istotna zmiana i muszę pomyśleć nad jej implementacją.klew wrote: Wed Nov 26, 2025 7:16 pmPlanuję pewną poprawkę w HvacBase, która dotknie termostatów na bramce Z2S.
Do tej pory obsługa czujnika binarnego (np.otwarcie okna) na urządzeniach z "wyjściem nie kontrolowanym wewnętrznie" (isOutputControlledInternally) była robiona przez ustawienie trybu "OFF" i potem przywracane przez "TURN_ON".
Ale to nie działa poprawnie. Np.
1. mam włączony termostat
2. otwieram okno
3. termostat robi się "off"
4. nic w Supli nie mogę zmienić: ani nastawy temperatury, ani trybu ręczny/program/off
No i tak nie może być.
Poprawka będzie polegała na tym, że sensor nie będzie przestawiał trybu pracy. W integracjach w stylu "bramek", tam gdzie sprawdza się tryb "getMode" trzeba będzie też dodać sprawdzenie stanu sensora (metoda HvacBase::isHvacFlagForcedOffBySensor() - dorzucę ją).
No i jak jest "forced off", to bramka powinna wyłączyć termostat ZigBee i jednocześnie nie przestawiać swojego "mode".
Kod pewnie jutro wrzucę, także ostrożnie z zaciąganiem z githuba![]()
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
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 Wracam do tematu AT z następującym pytaniem:
przycisk 3x (on press, on double press, on long press)
1. stan na teraz - dodają się 3x VR z nazwami odpowiadającymi tym stanom, każde naciśnięcie powoduje toggle() na konkretnym VR - czyli lecą lokalne akcje ON_TURN_ON/OFF, ON_CHANGE.
Dzięki temu mogę zbudować lokalną akcję wykorzystując jako source channel VR(ON_DOUBLE_PRESS), zdarzenie ON_CHANGE, destination channel XX, akcja XX.
2. Wersja z AT - utworzę AT (przycisk) i dodam mu te action caps SHORT_PRESS_1, SHORT_PRESS_2, HOLD.
Pytanie brzmi - jak odtworzyć lokalną akcję z pkt. 1 w tym scenariuszu?
przycisk 3x (on press, on double press, on long press)
1. stan na teraz - dodają się 3x VR z nazwami odpowiadającymi tym stanom, każde naciśnięcie powoduje toggle() na konkretnym VR - czyli lecą lokalne akcje ON_TURN_ON/OFF, ON_CHANGE.
Dzięki temu mogę zbudować lokalną akcję wykorzystując jako source channel VR(ON_DOUBLE_PRESS), zdarzenie ON_CHANGE, destination channel XX, akcja XX.
2. Wersja z AT - utworzę AT (przycisk) i dodam mu te action caps SHORT_PRESS_1, SHORT_PRESS_2, HOLD.
Pytanie brzmi - jak odtworzyć lokalną akcję z pkt. 1 w tym scenariuszu?
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: 136 times
- Been thanked: 137 times
Klasa AT to opakowanie wysyłające AT do serwera.vajera wrote: Thu Dec 11, 2025 11:48 am Pytanie brzmi - jak odtworzyć lokalną akcję z pkt. 1 w tym scenariuszu?
Obiektem generującym normlanie te AT w SD są Buttony. I normlanie to button generuje zdarzenie (press_2x), które coś robi oraz powiadamia o tym AT.
Także jeśli chcesz robić lokalne powiązania, to w sumie najprościej byłoby opakować te Twoje urządzenia w klasę typu "VirtualButton"
Wtedy możesz korzystać z całego dobrodziejstwa tego co dają przyciski (choć nie wiem czy te rzeczy będą potrzebne).
No i możesz też używać "addAction" na buttonie.
Tylko tam wiele mechanizmów jest dopasowanych do dotychczasowych zastosowań i nie mam pewności, czy to się dobrze da pożenić z Z2S.
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
Ha! Wiedziałem!klew wrote: Thu Dec 11, 2025 1:26 pmKlasa AT to opakowanie wysyłające AT do serwera.vajera wrote: Thu Dec 11, 2025 11:48 am Pytanie brzmi - jak odtworzyć lokalną akcję z pkt. 1 w tym scenariuszu?
Obiektem generującym normlanie te AT w SD są Buttony. I normlanie to button generuje zdarzenie (press_2x), które coś robi oraz powiadamia o tym AT.
Także jeśli chcesz robić lokalne powiązania, to w sumie najprościej byłoby opakować te Twoje urządzenia w klasę typu "VirtualButton".
Wtedy możesz korzystać z całego dobrodziejstwa tego co dają przyciski (choć nie wiem czy te rzeczy będą potrzebne).
No i możesz też używać "addAction" na buttonie.
Tylko tam wiele mechanizmów jest dopasowanych do dotychczasowych zastosowań i nie mam pewności, czy to się dobrze da pożenić z Z2S.
Mówiąc poważnie to zmiana z tych VR na AT wycięłaby całą logikę lokalną
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
-
klew
- Posts: 13911
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 136 times
- Been thanked: 137 times
Jak już pisałem: ja bym dodał wirtualny przycisk. Czyli klasę "vb", na której z z2s robisz:vajera wrote: Thu Dec 11, 2025 1:47 pm Ha! Wiedziałem!
itsatrap.jpg
Mówiąc poważnie to zmiana z tych VR na AT wycięłaby całą logikę lokalnąA gdyby do każdego VR wygenerował oddzielnie AT - to coś zmieni? Poza podwojeniem liczby kanałów?
Code: Select all
vb->generate(ON_CLICK_2);
Wtedy lokalne reakcje robisz na bazie vb i tego co normalnie obsługuje przycisk.
Z tym, że zrobienie tego ładnie i fajnie wymaga sporo pracy i będzie jednak skomplikowane (np. AT potrafi raportować, że jakieś akcje są używane lokalnie i je wyłaczać, gdy ktoś w Cloud coś na nich ustawi). Ale to nie zadziała tak po prostu. AT rozumie przyciski (Button) w tym zakresie, że przycisk może być mono/bistabilny i ma do tego zdefiniowane zdarzenia itd.
Jeśli ma nie być wyłączania lokalnych reakcji i bez informowania o tym, że są jakieś używane, to powinno to być relatywnie proste.
Najlepsze suple dla Twojego domu 
-
robertklepacki94
- Posts: 1933
- Joined: Thu Sep 02, 2021 1:06 pm
- Has thanked: 5 times
- Been thanked: 14 times
Ten post można uznać za offtop.
Ale może to rozwiązać tak jak @krycha88 w bramce RF ?
Tzn. Jeden przycisk to kanał przekaźnika a w nim zaszyte AT, i zawsze funkcja x1 ustawiona na lokalne sterowanie?
To umożliwia w pilotach zigbee ustawić wszystkie 3 akcje a w urządzeniach typu plug do gniazdka powiązać lokalny przycisk z lokalnym przekaźnikiem.
Ale może to rozwiązać tak jak @krycha88 w bramce RF ?
Tzn. Jeden przycisk to kanał przekaźnika a w nim zaszyte AT, i zawsze funkcja x1 ustawiona na lokalne sterowanie?
To umożliwia w pilotach zigbee ustawić wszystkie 3 akcje a w urządzeniach typu plug do gniazdka powiązać lokalny przycisk z lokalnym przekaźnikiem.
Wziąłem udział w Supla Offline Party 2023
-
vajera
- Posts: 7293
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 291 times
- Been thanked: 161 times
Chyba się zgubiłem?robertklepacki94 wrote: Thu Dec 11, 2025 3:06 pm Ten post można uznać za offtop.
Ale może to rozwiązać tak jak @krycha88 w bramce RF ?
Tzn. Jeden przycisk to kanał przekaźnika a w nim zaszyte AT, i zawsze funkcja x1 ustawiona na lokalne sterowanie?
To umożliwia w pilotach zigbee ustawić wszystkie 3 akcje a w urządzeniach typu plug do gniazdka powiązać lokalny przycisk z lokalnym przekaźnikiem.
Mamy przycisk Zigbee z 3 funkcjami (single, double, long) - proponujesz 3 przekaźniki I w każdym AT x1 czy jeden przekaźnik z 3 AT?
Co do wtyczek - tutaj nie masz kontroli nad przyciskiem - on jest połączony z przekaźnikiem na poziomie kodu urządzenia Zigbee.
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: 136 times
- Been thanked: 137 times
Ja bym się trzymał modelu, jeśli model na to pozwala. Tutaj mamy dedykowane klasy i kanały do odpowiednich funkcji.
Przekaźnik, to przekaźnik.
Zdarzenia z przycisków to Wyzwalacz akcji (jeden kanał na przycisk).
Nie róbmy bałaganu z przekaźnikami udającymi zdarzenia z przycisków.
Wg mnie wszystkie obecne funkcje da się ogarnąć na AT.
Przekaźnik, to przekaźnik.
Zdarzenia z przycisków to Wyzwalacz akcji (jeden kanał na przycisk).
Nie róbmy bałaganu z przekaźnikami udającymi zdarzenia z przycisków.
Wg mnie wszystkie obecne funkcje da się ogarnąć na AT.
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
Myślę nad tym i mam już jakąś wizję...tylko czasu wiecznie za małoklew wrote: Thu Dec 11, 2025 4:42 pm Ja bym się trzymał modelu, jeśli model na to pozwala. Tutaj mamy dedykowane klasy i kanały do odpowiednich funkcji.
Przekaźnik, to przekaźnik.
Zdarzenia z przycisków to Wyzwalacz akcji (jeden kanał na przycisk).
Nie róbmy bałaganu z przekaźnikami udającymi zdarzenia z przycisków.
Wg mnie wszystkie obecne funkcje da się ogarnąć na AT.
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 Krzysztof - spójrz na ten kod:
Myślisz, że wystarczyłoby:
a w definicji handleAction:
żeby zachować wsteczną kompatybilność?
Code: Select all
void LocalAction::runAction(uint16_t event) const {
auto ptr = ActionHandlerClient::begin;
while (ptr) {
if (ptr->client && ptr->trigger == this && ptr->onEvent == event &&
ptr->isEnabled()) {
ptr->client->handleAction(event, ptr->action);
}
ptr = ptr->next;
}
}
Code: Select all
.....
ptr->client->handleAction(event, ptr->action, this);
....
Code: Select all
virtual void handleAction(int event, int action, LocalAction *local_action_ptr = nullptr) = 0;
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
