Wyzwalacz Akcji / Action Trigger

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

Na branchu develop https://github.com/SUPLA/supla-arduino/tree/develop wrzuciłem wstępną wersję wsparcia dla ActionTrigger (AT) dla biblioteki SuplaDevice.

Sam AT jest niezależny od innych elementów używanych do tej pory w bibliotece (jest też niezależny od przycisków).
AT posiada interfejs, który pozwala go powiązać z przyciskiem oraz z dowolnym innym elementem biblioteki, który potrafi wyzwalać wewnętrzne akcje.
Cel był taki, aby używało się go najprościej jak się tylko da.

W przypadku, gdy powiążecie AT z przyciskiem, to większość rzeczy ustawia się automatycznie podczas "onInit()".

Przykład z przyciskiem:

Kod: Zaznacz cały

#include <supla/control/action_trigger.h>
#include <supla/control/button.h>
#include <supla/control/relay.h>

// w setup:
auto relay = new Supla::Control::Relay(4);
auto button = new Supla::Control::Button(5, true, true);
auto at = new Supla::Control::ActionTrigger();

button->setMulticlickTime(800, false); // use true for bistable button
button->addAction(Supla::TOGGLE, relay, Supla::ON_CLICK_1);
at->setRelatedChannel(relay);  // action trigger will show under relay channel in Cloud
at->attach(button);
W przypadku powiązania z buttonem, zostaną automatycznie dodane wszystkie dostępne akcje (zależnie od tego czy przycisk jest bistabilny czy monostabilny - https://github.com/SUPLA/supla-arduino/ ... to.h#L1841 ).
Powiązanie z buttonem znajdzie też "lokalne" akcje buttona, które będą mogły być wyłączone, gdy ktoś ustawi w Cloud jakąś inną akcję.
Metoda setRelatedChannel przypisuje AT do wybranego kanału. Dla urządzenia nie ma to żadnego znaczenia, natomiast w Cloud taki AT pojawi się pod wybranym kanałem, a nie jako samodzielny kanał. Jeśli nic nie przypiszemy, to AT będzie pokazywany samodzielnie.

Przykład z ręcznie definiowanymi wyzwalaczami:

Kod: Zaznacz cały

#include <supla/control/action_trigger.h>
#include <supla/control/button.h>
#include <supla/control/relay.h>

// w setup:
auto relay = new Supla::Control::Relay(4);
auto button = new Supla::Control::Button(5, true, true);
auto at = new Supla::Control::ActionTrigger();

button->setMulticlickTime(800);
button->addAction(Supla::TOGGLE, relay, Supla::ON_CLICK_1);
button->addAction(Supla::SEND_AT_HOLD, at, Supla::ON_HOLD);
relay->addAction(Supla::SEND_AT_SHORT_PRESS_x1, at, Supla::ON_TURN_ON);
Tutaj AT będzie miał tylko wyzwalacze, które określimy w ramach metod addAction i nie ma dodanej żadnej automatyki wyłączającej inne akcje, gdy coś jest ustawione w Cloud.
Biblioteka nie ma tutaj żadnych ograniczeń i wyzwalacze można przypisywać do dowolnych zdarzeń w ramach urządzenia (np. do sensorów binarnych, albo po przekroczeniu zadanej temperatury, itd.)
Lista dostępnych akcji do przypisania: https://github.com/SUPLA/supla-arduino/ ... ions.h#L78
Serwer Supli udostępnia na razie tylko akcje związane z przyciskami, natomiast to są "tylko nazwy", więc można ich używać dowolnie. Akcje dla mono i bistabilnych przycisków nie wykluczają siebie.

To jest wersja "develop". Zachęcam do testowania i sprawdzania u siebie różnych standardowych i mniej standardowych pomysłów. Interfejs może się jeszcze zmienić, choć tego nie planuję.
Powyższego kodu nie kompilowałem, więc może gdzieś się pomyliłem.
Jeśli coś nie jest jasne, to pytajcie. Postaram się też dodać jutro jakieś gotowe przykłady z użyciem AT.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2100
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: śr lis 03, 2021 2:56 pm
Wszystko jasne, dzięki :)

Po dodaniu AT konieczna będzie ponowna rejestracja urządzenia?
Zresetuje się alokacja pamięci?
https://www.facebook.com/groups/supladiy/
Awatar użytkownika
klew
Posty: 8263
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

AT nie rusza pamięci, więc nic się nie zepsuje.
O ile AT dodasz na końcu, to ponowna rejestracja też nie będzie konieczna
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2100
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: śr lis 03, 2021 3:32 pm AT nie rusza pamięci, więc nic się nie zepsuje.
O ile AT dodasz na końcu, to ponowna rejestracja też nie będzie konieczna
Ok, fakt.

Jak dobrze rozumiem, w wariancie pierwszym jeśli przypiszę AT do przycisku, a także będę miał przypisane akcje do ON_CLICK_1,2,3 to te wyzwalacze znikną z Cloud?
https://www.facebook.com/groups/supladiy/
Awatar użytkownika
klew
Posty: 8263
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

lukfud pisze: śr lis 03, 2021 3:37 pm
klew pisze: śr lis 03, 2021 3:32 pm AT nie rusza pamięci, więc nic się nie zepsuje.
O ile AT dodasz na końcu, to ponowna rejestracja też nie będzie konieczna
Ok, fakt.

Jak dobrze rozumiem, w wariancie pierwszym jeśli przypiszę AT do przycisku, a także będę miał przypisane akcje do ON_CLICK_1,2,3 to te wyzwalacze znikną z Cloud?
Nie znikną. W nowej wersji Cloud pojawi się informacja, że ustawienie czegoś na tej akcji spowoduje wyłączenie lokalnej funkcji
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2100
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: śr lis 03, 2021 3:56 pm Nie znikną. W nowej wersji Cloud pojawi się informacja, że ustawienie czegoś na tej akcji spowoduje wyłączenie lokalnej funkcji
Ok, dzięki, czas na testy :)
https://www.facebook.com/groups/supladiy/
krycha88
Posty: 5195
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

8-)
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8263
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Dodam jeszcze tylko że została też podniesiona domyślna wersja wymaganego protokołu Supli do 16.
Także jeśli ktoś używa prywatnych serwerów, to muszą być aktualne aby to działało
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2100
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: śr lis 03, 2021 9:01 pm Dodam jeszcze tylko że została też podniesiona domyślna wersja wymaganego protokołu Supli do 16.
Także jeśli ktoś używa prywatnych serwerów, to muszą być aktualne aby to działało

Kod: Zaznacz cały

Clock class added
Supla - starting initialization
Storage initialization
readStorage: 8; Read: [53 55 50 4C 41 1 0 0 ]
Storage: Number of sections 0
Validating storage state section with current device configuration
Element state section size doesn't match current device configuration
 **** Digital write[0], pin: 12; value: 0
Channel[1] setting func list: 1024
Channel[1] setting func list: 3072
Channel[1] setting func list: 7168
Channel[1] setting func list: 15360
Channel[1] setting func list: 31744
Channel[1] setting func list: 64512
 **** Digital write[2], pin: 14; value: 0
Channel[3] setting func list: 1
Channel[3] setting func list: 3
Channel[3] setting func list: 7
Channel[3] setting func list: 15
Channel[3] setting func list: 31
Channel[3] setting func list: 63
Channel[3] setting func list: 127
Initializing network layer
WiFi: establishing connection with SSID: "supla_dev"
Using Supla protocol version 16
Current status: [5] SuplaDevice initialized
Current status: [8] No connection to network
Initialization of elementStateOffset: 1545
Update Storage preamble
Wrote 8 bytes to storage at 1537
Wrote 7 bytes to storage at 1545
Commit
local IP: 10.0.4.151
subnetMask: 255.255.255.0
gatewayIP: 10.0.4.1
Signal strength (RSSI): -64 dBm
Establishing Secured connection without certificate matching with: svr30.supla.org (port: 2016)
Connected to Supla Server
Current status: [10] Register in progress
Device registered (activity timeout 120 s, server version: 16, server min version: 1)
Current status: [17] Registered and ready
Changing activity timeout to 30
Activity timeout set to 30 s
Current local time: 1970-1-1 0:0:4
Received local time from server: 2021-11-3 23:5:2
AT[1] received config with active actions: 0
AT[3] received config with active actions: 0
Póki co jest dobrze :)

Testuję dla mono i bistabilnego przycisku. Mam ustawioną swoją akcję na przytrzymanie i ustawienie wyzwalacza na przytrzymanie w Cloud wyłącza lokalną akcję, ale wyczyszczenie jej w Cloud nie przywraca już lokalnej akcji. Po restarcie ESP wraca.
Przy okazji, leci u mnie "repeatOnHoldEvery" na "przełącz" w Cloud :lol:

W sumie nie tylko przytrzymanie, żadna lokalna nie wraca :(
https://www.facebook.com/groups/supladiy/
local
Posty: 491
Rejestracja: pn sty 27, 2020 11:33 am

W przypadku braku neta w ramach jednego urządzenia nie będzie można uruchomić przekaźnika przyciskiem z AT ?
4xShelly 1, Shelly 1L, 2xShelly 2.5, Sonoff T3, 2xSonoff Basic R2, 4xNeo 16A
ODPOWIEDZ

Wróć do „Arduino IDE”