Wykonanie wielokrotnie handleAction dla tego samego stanu

krycha88
Posts: 5417
Joined: Fri Nov 16, 2018 7:25 am

Post

hej,
Mam stan ON i chciałbym aby wykonanie akcji TURN_ON ponownie wykonało handleAction. Jak to osiągnąć? Bo teraz jeżeli stan się zgadza ze stanem przekaźnika to nie wykonuje się handleAction.
https://gui-generic-builder.supla.io/
User avatar
Goral64
Posts: 3162
Joined: Fri Dec 27, 2019 6:22 pm
Location: Żerniki Wrocławskie

Post

krycha88 wrote: Wed Sep 29, 2021 8:00 am hej,
Mam stan ON i chciałbym aby wykonanie akcji TURN_ON ponownie wykonało handleAction. Jak to osiągnąć? Bo teraz jeżeli stan się zgadza ze stanem przekaźnika to nie wykonuje się handleAction.
No bo po co włączać coś, co melduje, że jest włączone? :) I odwrotnie :)
Widzimy się na Supla Offline Party Season 2025 :D

Image
krycha88
Posts: 5417
Joined: Fri Nov 16, 2018 7:25 am

Post

Goral64 wrote: Wed Sep 29, 2021 8:12 am No bo po co włączać coś, co melduje, że jest włączone? :) I odwrotnie :)
A bo to co robię to nie melduje swojego stanu ;)
https://gui-generic-builder.supla.io/
User avatar
Goral64
Posts: 3162
Joined: Fri Dec 27, 2019 6:22 pm
Location: Żerniki Wrocławskie

Post

krycha88 wrote: Wed Sep 29, 2021 8:19 am A bo to co robię to nie melduje swojego stanu ;)
Wiem, uroki większości urządzeń RF...
Widzimy się na Supla Offline Party Season 2025 :D

Image
User avatar
klew
Posts: 10022
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Na jakim elemencie? Relay? Jeśli tak, to Relay po otrzymaniu "TURN_ON" za każdym razem odpali "handleAction", które odpali metodę "turnOn", która wykona to co turnOn ma wykonać.
Nie ma tam nigdzie sprawdzenia aktualnego stanu.
krycha88
Posts: 5417
Joined: Fri Nov 16, 2018 7:25 am

Post

akurat testowałem to na VirtualRelay.
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 10022
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

krycha88 wrote: Wed Sep 29, 2021 9:17 am akurat testowałem to na VirtualRelay.
Tam to działa tak samo, tylko virtual relay przedstawia zmienną na true, więc w zasadzie nic szczególnego się nie wydarzy
krycha88
Posts: 5417
Joined: Fri Nov 16, 2018 7:25 am

Post

to u mnie coś nie działa :(

Code: Select all

 relay[size]->addAction(Supla::TURN_ON, rf, Supla::ON_TURN_ON);
 relay[size]->addAction(Supla::TURN_OFF, rf, Supla::ON_TURN_OFF);
 
w swojej klasie mam dodaną metodę:

Code: Select all

void RFBridge::handleAction(int event, int action) {
  (void)(event);
  Serial.println("handleAction");
  Serial.print("event:");
  Serial.println(event);
  Serial.print("action: ");
  Serial.println(action);
  switch (action) {
    case TURN_ON: {
      turnOn();
      break;
    }
    case TURN_OFF: {
      turnOff();
      break;
    }
  }
}

i log wygląda następująco:

Code: Select all

 **** Digital write[0], pin: 5; value: 1
handleAction
event:18
action: 1
Channel(0) value changed to 0
 **** Digital write[0], pin: 5; value: 1
 **** Digital write[0], pin: 5; value: 1
 **** Digital write[0], pin: 5; value: 1
 **** Digital write[0], pin: 5; value: 1
Wrote 1 bytes to storage at 19
Commit
 **** Digital write[0], pin: 5; value: 0
handleAction
event:17
action: 0
Channel(0) value changed to 1
 **** Digital write[0], pin: 5; value: 0
 **** Digital write[0], pin: 5; value: 0
 **** Digital write[0], pin: 5; value: 0
Wrote 1 bytes to storage at 19
Commit
stan zmieniam z aplikacji, jak widać handleAction wykonuję się tylko raz.
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 10022
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

ok, ale tutaj robisz coś innego niż myślałem.

Akcja "ON_TURN_ON" odpala się "on turn on" przekaźnika. Tzn. stan musi się zmienić. Jak był "on", to nie zmienia się na "on", więc relay nie odpali powiadomienia, bo ono leci tylko przy zmianie stanu.

Ja bym to inaczej zrobił. Zmień tą klasę "RF bridge", aby dziedziczyła po "Relay" i nadpisz metodę "turnOn" (analogicznie jak to jest w VirtualRelay). Wtedy ta metoda "turnOn" odpali się za każdym razem, gdy przyjdzie taki sygnał z apki.
krycha88
Posts: 5417
Joined: Fri Nov 16, 2018 7:25 am

Post

dzięki za podpowiedź ale ja bym chciał działać na VirtualRelay lub Relay. Nie chciał bym traktować "RF bridge" jako osobnego kanału w aplikacji.

Bramka RF nad którą pracuję będzie dwukierunkowa. Będzie można załączyć Relay lub VirtualRelay na podstawie kodu RF oraz będzie potrafiła wysłać kod do innego urządzenia.
https://gui-generic-builder.supla.io/

Return to “Arduino IDE”