Jak działa komunikacja button -> serwer

wladziu22
Posts: 36
Joined: Sat Dec 02, 2023 4:40 pm

Post

hej,

W jaki sposób (konkretne metoda) obiekt np button komunikuje się z cload'em ?
Chodzi mi o sytuacje: użytkownik recznie uruchamia fizyczny przycisk włączenia światła i wówczas do serwera wysyłania jest informacja o statusie, przez co widać reakcję na Supla Cload albo aplikacji w telefonie.

Czy może jest to cykliczne sprawdzanie w Timerze a następnie wołana jest metoda runAction() a w zadazie zarejestrowany callback ?

Code: Select all

void Button::onTimer() {
.....
          switch (clickCounter) {
            case 1: {
              runAction(ON_CLICK_1);
              break;
            }
...
}

Code: Select all

void LocalAction::runAction(uint16_t event) {
.....
	ptr->client->handleAction(event, ptr->action);
.....
}
}

Pytam o to gdyż chciałbym powiadomić/zaktualizować button status na podstawie dodatkowej informacji, która np przyleci do urzazenia z i2c.
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Przyciski jako takie nie są widoczne po stronie serwera.

Do serwera lecą wyzwalacze akcji (klasa ActionTrigger)
Najlepsze suple dla Twojego domu :mrgreen:
wladziu22
Posts: 36
Joined: Sat Dec 02, 2023 4:40 pm

Post

klew wrote: Sat Nov 15, 2025 12:43 pm Przyciski jako takie nie są widoczne po stronie serwera.

Do serwera lecą wyzwalacze akcji (klasa ActionTrigger)
Dziękuje.
Powiedz mi proszę jeszcze jaki obiekt/klasa powinna być użyta do reprezentacji czujnika zwarcia np kontaktron.
Czy wystarczy BinaryBase lub Binay ? Albo może powinienem użyć SimpleButton skoro czujnik zwiera kable tak jak button ?

I kolejne pytanie, czy można inicjować obiekt ww. bez wskazywania pinów podłączenia (bo ich faktycznie nie ma i nie potrzebuje)?
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

wladziu22 wrote: Mon Nov 17, 2025 3:58 pm Dziękuje.
Powiedz mi proszę jeszcze jaki obiekt/klasa powinna być użyta do reprezentacji czujnika zwarcia np kontaktron.
Czy wystarczy BinaryBase lub Binay ? Albo może powinienem użyć SimpleButton skoro czujnik zwiera kable tak jak button ?

I kolejne pytanie, czy można inicjować obiekt ww. bez wskazywania pinów podłączenia (bo ich faktycznie nie ma i nie potrzebuje)?
Klasy Button i SimpleButton są do obsługi przycisków i nie są jako takie widoczne na serwerze. To obiekty, które obsługują przyciski na urządzeniu (czy to od trybu cfg, czy do sterowania przekaźnikiem itd.)
SimpleButton jest lżejszą implementacją bez bajerów (nie ma wieloklików, przytrzymania itp) ale za to zużywa mniej RAM-u (na Arduino Mega jest to mocno istotne).

Kontaktrony to czujniki binarne, więc Supla::Sensor::Binary jest tu najlepszą opcją. BinaryBase to klasa bazowa, która obsługuje ten typ kanału w Supli, ale nie ma zaimplementowanego konkretnego sposobu odczytu stanu. Binary dziedziczy po BinaryBase i dodaje obsługę czytania stanu z GPIO.
Alternatywnie jest VirtualBinary, który nie czyta niczego, ale można na nim programowo ustawić 1/0 i to będzie prezentowane w Supli.
https://supla.github.io/supla-device/cl ... yBase.html

Jeśli nie czytasz stanu z GPIO, to Binary nie jest dobrą opcją.
Pytanie jak i skąd czytasz stan. Bo wtedy może się okazać, że jednak wrócimy do Binary, tylko trzeba dopisać np. własny interfejs udający gpio (klasy Supla::Io ). Ale może też VirtualBinary będzie dla Ciebie prostszą opcją.
Najlepsze suple dla Twojego domu :mrgreen:

Return to “supla-dev”