krycha88 wrote: Wed Jun 21, 2023 10:12 am
Czyli wystarczy dodać dodatkowe reakcje do przycisków:
Code: Select all
CONDITIONAL_ON_PRESS
CONDITIONAL_ON_RELEASE
CONDITIONAL_ON_CHANGE
?
Mniej więcej
. Ale tam jest trochę więcej logiki dodane (np. ustawianie stanu początkowego).
Natomiast te "CONDITIONAL_" zostały dodane, aby nie generować eventu w trakcie np. wieloklika. Czyli CONDITIONAL_ON_PRESS wykona się jak wciśniesz przycisk (zawsze). Jeśli puścisz przycisk to poleci CONDITIONAL_ON_RELEASE. Ale jeśli przytrzymasz i będzie ON_HOLD, to ten CONDITIONAL_ON_RELEASE już nie będzie wygenerowany.
Jeśli dalej będziesz klikał (wieloklik) to CONDITIONAL_ON_PRESS i CONDITIONAL_ON_RELEASE nie będą się generować przy kolejnych kliknięciach.
Dodałem to głównie pod kątem obsługi wchodzenia do trybu CFG przez przycisk podpięty do przekaźnika. Ujednoliciłem tutaj zachowanie między starym sdk opartym na espresifie a nową supla-device. Tam to działa tak, że wielokliki nie są wykrywane, gdy nie masz ustawionej reakcji w Cloud. W takiej sytuacji, przycisk działa po staremu, reagując szybko na on_press lub on_release. Jak dodasz AT w Cloud, to wtedy urządzenie przestawia obsługę lokalnego przekaźnika na on_click_1. Natomiast gdy pracuje w trybie "on_press/release" to nadal można wejść do trybu cfg i aby nie generować zbytniego migania światłem, to dodałem też te "CONDITIONAL_".
Ogólnie jest to dość zawiła funkcjonalność i nie radziłbym robić tego samemu
. Lepiej jest dodać instancje klas Button, Relay, ActionTrigger i przycisk podłączyć do relay->attach(button); i analogicznie at->attach(button);
Reszta powinna się sama poustawiać zależnie jaki ustawisz tryb przycisku (setButtonType(mono/bi/motion..))