Wykonanie wielokrotnie handleAction dla tego samego stanu

krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

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/
Awatar użytkownika
Goral64
Posty: 3131
Rejestracja: pt gru 27, 2019 6:22 pm
Lokalizacja: Żerniki Wrocławskie
Kontakt:

krycha88 pisze: śr wrz 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 2 :D

Obrazek
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Goral64 pisze: śr wrz 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/
Awatar użytkownika
Goral64
Posty: 3131
Rejestracja: pt gru 27, 2019 6:22 pm
Lokalizacja: Żerniki Wrocławskie
Kontakt:

krycha88 pisze: śr wrz 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 2 :D

Obrazek
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

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.
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

akurat testowałem to na VirtualRelay.
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

krycha88 pisze: śr wrz 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
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

to u mnie coś nie działa :(

Kod: Zaznacz cały

 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ę:

Kod: Zaznacz cały

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:

Kod: Zaznacz cały

 **** 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/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

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.
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

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/
ODPOWIEDZ

Wróć do „Arduino IDE”