Proste dodanie dwóch guzików

PrzemexPL
Posts: 23
Joined: Fri May 01, 2020 2:14 pm

Post

Witam. Testuję, ustawiam jednak błądzę we mgle. Potrzebuje sterować dwoma GPIO w ESPie-07 z telefonu. Nie ma fizycznych guzików. Tylko w telefonie chcę dwa kanały z guzikami które po kliknięciu działają sekundę. Na zasadzie włączenia kompa. Proszę o pomoc lub jakiś przykład. Nie do końca rozumiem też zastosowanie czegoś takiego jak 'relay' Tak jakby to był mój guzik a SUPLA::CONTROL::BUTTON to inny guzik?
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

PrzemexPL wrote: Fri Jan 24, 2025 10:45 am Witam. Testuję, ustawiam jednak błądzę we mgle. Potrzebuje sterować dwoma GPIO w ESPie-07 z telefonu. Nie ma fizycznych guzików. Tylko w telefonie chcę dwa kanały z guzikami które po kliknięciu działają sekundę. Na zasadzie włączenia kompa. Proszę o pomoc lub jakiś przykład. Nie do końca rozumiem też zastosowanie czegoś takiego jak 'relay' Tak jakby to był mój guzik a SUPLA::CONTROL::BUTTON to inny guzik?
Klasy "Button" są do fizycznych przycisków podłączanych do ESP.
Ty nie podłączasz przycisku, tylko przekaźnik Relay, który ma się załącyzć na "1 s".
Dlatego potrzebujesz dodać Relay.
Najlepsze suple dla Twojego domu :mrgreen:
PrzemexPL
Posts: 23
Joined: Fri May 01, 2020 2:14 pm

Post

Okej czyli dodaję coś takiego:

Code: Select all

auto sw_relay = new Supla::Control::Relay(SW_BTN);
auto rst_relay = new Supla::Control::Relay(RST_BTN);
a niżej:

Code: Select all

auto at = new Supla::Control::ActionTrigger();
button->addAction(Supla::TOGGLE, relay, Supla::ON_CLICK_1);
at->setRelatedChannel(relay);


??
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

AT jest do przycisków, a nie przekaźników.
Także tylko te 2x Relay
Najlepsze suple dla Twojego domu :mrgreen:
PrzemexPL
Posts: 23
Joined: Fri May 01, 2020 2:14 pm

Post

klew wrote: Fri Jan 24, 2025 11:06 am AT jest do przycisków, a nie przekaźników.
Także tylko te 2x Relay
Okej, mam włączniki w supli. Fajnie. A pomożesz je przerobić, ponieważ działają na zasadzie on/off a ja potrzebuję click na chwilkę i tyle
Pietras81
Posts: 2409
Joined: Sun Feb 17, 2019 6:56 am
Location: Osielsko
Been thanked: 1 time

Post

PrzemexPL wrote: Fri Jan 24, 2025 12:12 pm
klew wrote: Fri Jan 24, 2025 11:06 am AT jest do przycisków, a nie przekaźników.
Także tylko te 2x Relay
Okej, mam włączniki w supli. Fajnie. A pomożesz je przerobić, ponieważ działają na zasadzie on/off a ja potrzebuję click na chwilkę i tyle
Zmień funkcję w cloud na schodowy i ustaw czas.
https://pietras-81.aqi.eco/
PrzemexPL
Posts: 23
Joined: Fri May 01, 2020 2:14 pm

Post

Pietras81 wrote: Fri Jan 24, 2025 1:11 pm
PrzemexPL wrote: Fri Jan 24, 2025 12:12 pm
klew wrote: Fri Jan 24, 2025 11:06 am AT jest do przycisków, a nie przekaźników.
Także tylko te 2x Relay
Okej, mam włączniki w supli. Fajnie. A pomożesz je przerobić, ponieważ działają na zasadzie on/off a ja potrzebuję click na chwilkę i tyle
Zmień funkcję w cloud na schodowy i ustaw czas.
A programowo nie da rady tego zrobić? Chciałbym, aby użytkownik miał jak najmniej do konfiguracji. Chyba, że połączę zwykły kod z suplą i użyje delay'ów :lol:
W starym kodzie mam Bistabilny Relay :lol: nie mam pojęcia jak to działało hahah
User avatar
malarz
Posts: 506
Joined: Wed Jan 27, 2021 4:04 pm
Been thanked: 2 times

Post

Funkcję możesz zmienić:

Code: Select all

auto sw_relay = new Supla::Control::Relay(SW_BTN);
sw_relay->getChannel()->setDefault(SUPLA_CHANNELFNC_STAIRCASETIMER);
Ale czas jest chyba z założenia ustawiany na serwerze. Jest co prawda funkcja setMinimumAllowedDurationMs, ale nie wiem czy to jakoś wpłynie na początkowe ustawienie po rejestracji urządzenia w cloudzie.

Zawsze możesz zrobić nową klasę, dziedziczącą po Relayu i tam na stałe wprowadzić długość impulsu.
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
PrzemexPL
Posts: 23
Joined: Fri May 01, 2020 2:14 pm

Post

malarz wrote: Sat Jan 25, 2025 11:54 am Zawsze możesz zrobić nową klasę, dziedziczącą po Relayu i tam na stałe wprowadzić długość impulsu.
O to to to, jak to zrobić :D

EDIT:

Ogólnie myślałem, że mogę software'owo ustawić 1000ms który mi po prostu wyłącza guzik ale widzę w przykładach, że to nie tak łatwo się da coś co według mnie powinno być łatwe :lol:
User avatar
malarz
Posts: 506
Joined: Wed Jan 27, 2021 4:04 pm
Been thanked: 2 times

Post

PrzemexPL wrote: Mon Jan 27, 2025 10:37 am O to to to, jak to zrobić :D
Coś takiego (piszę z głowy, nietestowane):

Code: Select all

class MojRelay : public Supla::Control::Relay {
 public:
  MojRelay(int pin)
    : Relay(pin) {
    setChannelFunction(SUPLA_CHANNELFNC_STAIRCASETIMER); // wstawiamy funkcję relay'a
  }
  
  onLoadState() override
    : onLoadState() {
    durationMS = 3000; // tu na siłę wrzucony czas impulsu w ms, czyli 3 sek.
  }
};
Tu pytanie do @klew - to chyba powinno być ustawione po onLoadState i przed onInit aby zawsze działało dobrze?


a potem:

Code: Select all

auto sw_relay = new MojRelay(SW_BTN);
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.

Return to “Pomoc”