Rozumiem ze to o czym piszesz to wykrywanie zmian w polach? A wykrywanie naciśnięcia przycisku Save czyli generalnie zapisu do pamięci nie było by prostsze?klew wrote: Fri Jan 24, 2025 8:35 amMożesz stworzyć klasę dziedziczącą po "Supla::HtmlElement" i nadpisać jedną z poniższych metod:petione wrote: Fri Jan 24, 2025 7:04 am Koledzy podpowiecie...
Jak, skąd pozyskać informację o tym że naciśnięto przycisk Save w WebInterfejs. Potrzebuję jednym słowem uruchamiać jednorazowo jakąś akcję po naciśnięciu tego przycisku. Chyba że jest jakiś inny sposób na jednorazowe wykonanie dowolnej akcji po wykryciu zmian np w polu tekstowym.handleResponse odpala się dla każdego przetwarzanego pola przesłanego w formularzu (tylko to idzie po kolei na wszystkich zarejestrowanych HtmlElement i działa dopóki nie trafi na klasę obsługującą dane pole).Code: Select all
virtual bool handleResponse(const char *key, const char *value); virtual void onProcessingEnd();
onProcessingEnd urucahmia się na końcu po przetworzeniu całego formularza.
Modyfikacja przykładu WebInterface Arduino
-
petione
- Posts: 121
- Joined: Sat Jul 21, 2018 4:26 pm
-
klew
- Posts: 13905
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
Przycisk "save" w formularzu www, wysyła forumlarz z przeglądarki do urządzenia.petione wrote: Fri Jan 24, 2025 9:12 am
Rozumiem ze to o czym piszesz to wykrywanie zmian w polach? A wykrywanie naciśnięcia przycisku Save czyli generalnie zapisu do pamięci nie było by prostsze?
Przycisk nic sam z siebie nie zapisuje.
Mógłbym dodać generowanie "eventów" gdy w Config coś się zmieni i będzie zapis, ale ogólnie tego może być więcej, bo zapis może się zdarzyć przy starcie urządzenia, po połączeniu z Cloudem, itp. Natomiast tutaj pytałeś o przycisk "save" w www urządzenia.
Najlepsze suple dla Twojego domu 
-
petione
- Posts: 121
- Joined: Sat Jul 21, 2018 4:26 pm
Sorki że tak cię ciągnę za język ale to po prostu wynika z braku wiedzy... Domyślam się przycisk Save nic nie zapisuje ale pojawia się właśnie reakcja po jego naciśnięciu w postaci wysyłania formularza z przeglądarki do urządzenia, zresztą reakcja przycisk Save to tylko pomysł na rozwiązanie problemu. No ale dalej nie wiem jak się dobrać do tego "eventu". Może jest jakiś inny prosty sposób/przycisk...klew wrote: Fri Jan 24, 2025 9:32 amPrzycisk "save" w formularzu www, wysyła forumlarz z przeglądarki do urządzenia.petione wrote: Fri Jan 24, 2025 9:12 am
Rozumiem ze to o czym piszesz to wykrywanie zmian w polach? A wykrywanie naciśnięcia przycisku Save czyli generalnie zapisu do pamięci nie było by prostsze?
Przycisk nic sam z siebie nie zapisuje.
Mógłbym dodać generowanie "eventów" gdy w Config coś się zmieni i będzie zapis, ale ogólnie tego może być więcej, bo zapis może się zdarzyć przy starcie urządzenia, po połączeniu z Cloudem, itp. Natomiast tutaj pytałeś o przycisk "save" w www urządzenia.
Generalnie problem polega na tym że odczytuje sobie przez ESP jakiś tam parametr z otoczenia i wybierając element z listy rozwijanej w WWW mogę zapisać jego aktualną wartość w wybranej zmiennej (a później albo od razu w EEPROMIE). No ale ten zapis powinien być tylko wtedy gdy ja zdecyduję o tym czyli np kliknę chyba najprościej przycisk Save.
O ile dobrze rozumiem działanie biblioteki jeśli w WWW będzie wybrana jakaś pozycja z listy rozwijanej to fragment kodu
np
Code: Select all
if( pozycja_z _listy_rowijanej==1){EEPROM=odczytana wartość}Dobrze kombinuję?
-
klew
- Posts: 13905
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
Chyba nie. Ogólnie to co widzisz na www urządzenia zostało wygenerowane przez urządzenie w momencie otwarcia strony i urządzenie nic nie wie o tym, co się dzieje na tej stronie (co tam przełączasz/wpisujesz itp). Dopiero po wysłąniu formularza (save) dane trafiają na urządzenie.petione wrote: Fri Jan 24, 2025 10:32 am Sorki że tak cię ciągnę za język ale to po prostu wynika z braku wiedzy... Domyślam się przycisk Save nic nie zapisuje ale pojawia się właśnie reakcja po jego naciśnięciu w postaci wysyłania formularza z przeglądarki do urządzenia, zresztą reakcja przycisk Save to tylko pomysł na rozwiązanie problemu. No ale dalej nie wiem jak się dobrać do tego "eventu". Może jest jakiś inny prosty sposób/przycisk...
Generalnie problem polega na tym że odczytuje sobie przez ESP jakiś tam parametr z otoczenia i wybierając element z listy rozwijanej w WWW mogę zapisać jego aktualną wartość w wybranej zmiennej (a później albo od razu w EEPROMIE). No ale ten zapis powinien być tylko wtedy gdy ja zdecyduję o tym czyli np kliknę chyba najprościej przycisk Save.
O ile dobrze rozumiem działanie biblioteki jeśli w WWW będzie wybrana jakaś pozycja z listy rozwijanej to fragment kodu
npbędzie wykonywany z cały czas dopuki nie zmieni się aktualnie wybrany element na liście ?Code: Select all
if( pozycja_z _listy_rowijanej==1){EEPROM=odczytana wartość}
Dobrze kombinuję?
To nie są trywialne tematy, na zasadzie: "użyj metody A z klasy B".
Przykład WebInterface zawiera opis tego jak dodawać własne pola i jak jest potem sobie z flasha odczytywać (na esp nie ma eepromu i nie ma sensu dublować zapisu do flasha, skoro to samo już ogarnia Tobie Supla::Config).
Ogólnie nie rozumiem co chcesz zrobić i do czego to jest potrzebne.
Najlepsze suple dla Twojego domu 
-
petione
- Posts: 121
- Joined: Sat Jul 21, 2018 4:26 pm
Tak wiem, ale to akurat do niczego nie jest potrzebne. Strona WWW ma tylko umożliwić zapis do wybranej "zmiennej" wybieranej z rozwijanego pola i w efekcie do EEPROMU (tak wiem ze brak, to jest skrót myślowy, zamierzam użyć Preferencess).
Chyba nie. Ogólnie to co widzisz na www urządzenia zostało wygenerowane przez urządzenie w momencie otwarcia strony i urządzenie nic nie wie o tym, co się dzieje na tej stronie (co tam przełączasz/wpisujesz itp). Dopiero po wysłąniu formularza (save) dane trafiają na urządzenie.
Moze jeszcze raz już konkretnie, ale tak to jest jeśli nie zna się fachowych określeń z dziedziny programowania
Robię urządzono kopiujące kod z pilota IR (coś na wzór projektu kolegi kolegi Elmaya)
https://en-forum.supla.org/viewtopic.php?t=6404
1.Zczytuje kod pilota i jest on w jakiejś tam zmiennej w RAM
2.Wybieram z listy rozwijanej Button1, Button2... i zapisuje w pamięci nieulotnej kod IR pod wybranym "Buttonem"
3.Stosuję virtualRelay_1 i przypisuje do jego niego procedurę wysłania zapisanego w pamięci nieulotnej kodu pod "zmienną" Button1
4. Z poziomu aplikacji włączam virtualRelay_1 i w efekcie wysyłam kod IR ze " zmiennej" Button1
Wiec cały mój problem polega na tym jak zrobić poprawnie zapis kodu IR do wybieranej z listy rozwijanej na www zmiennej, Wiem jak zrobić odpowiednie pola na www, wiem jak zapisywać dane za wykorzystaniem Preferencess, wiem jak odesłać sklonowany ale mam właśnie problem jak zapisać kod IR w pamięci dopiero po naciśnięciu przycisku Save
-
petione
- Posts: 121
- Joined: Sat Jul 21, 2018 4:26 pm
Wierz mi, dzięki tamtemu wątkowi aż tu dotarłem choć na pewno nie wszystko zrozumiałem.
Na obecną chwilę zrobiłem to tak:
Code: Select all
...
auto Select_item = new Supla::Html::SelectInputParameter(POLE_ROZWIJANE, "Select button to store");
...
void setup()
{
...
Select_item->registerValue("Choose key", 0);
Select_item->registerValue("Key1", 1);
Select_item->registerValue("Key2", 2);
Select_item->registerValue("Key3", 3);
Select_item->registerValue("Key4", 4);
Select_item->registerValue("Key5", 5);
...
void loop()
{
SuplaDevice.iterate();
static bool LOCAL_WEB_SERVER = false; // zmienna do sprawdzenia czy serwer lokalny jest wlaczony
if (!LOCAL_WEB_SERVER)
{
if (Supla::Network::IsReady())
{
LOCAL_WEB_SERVER = true;
SuplaDevice.handleAction(0, Supla::START_LOCAL_WEB_SERVER);
}
}
...
-------------- poniższy fragment wykonywany jest co 1 sekundę oczywiście bez użycia Delay() ---------------------------
Supla::Storage::ConfigInstance()->getInt32(POLE_ROZWIJANE, &int_wartosc_dla_pozycji_z_listy_rozwijanej);
if (int_wartosc_dla_pozycji_z_listy_rozwijanej == 1) // sprawdzenie czy wybrano pozycje z listy rozwijanej
{
digitalWrite(LED1, !digitalRead(LED1));
Supla::Storage::ConfigInstance()->setInt32(POLE_ROZWIJANE, 0);
}
Zerknij proszę czy takie podejście (chodź działa) jest sensowne celem oczywiscie nauki na wlasnych błedach
You do not have the required permissions to view the files attached to this post.
-
petione
- Posts: 121
- Joined: Sat Jul 21, 2018 4:26 pm
Dzięki.
Pojawil mi sie natomiast jeszcze jeden niespodziewany poroblem. A mianowicie zapis do pamieci wlasnych zmiennych.
Do zapisu stosuje Preferences. Teoretycznie nie powinny kolidowac z metodą zapisu Supli a jednak cos sie gryzie. Opinie opieram na podstawie;
https://forum.supla.org/viewtopic.php?t=12427
Wszystko dziala poprawnie do momentu przeladowania WWW lub naciśnięciu Save. Gdy strona sie przeladuje lub nacisne Save zapis juz jest nieprawidlowy.. Masz koze pomysl co moze kolidować?
Pojawil mi sie natomiast jeszcze jeden niespodziewany poroblem. A mianowicie zapis do pamieci wlasnych zmiennych.
Do zapisu stosuje Preferences. Teoretycznie nie powinny kolidowac z metodą zapisu Supli a jednak cos sie gryzie. Opinie opieram na podstawie;
https://forum.supla.org/viewtopic.php?t=12427
Wszystko dziala poprawnie do momentu przeladowania WWW lub naciśnięciu Save. Gdy strona sie przeladuje lub nacisne Save zapis juz jest nieprawidlowy.. Masz koze pomysl co moze kolidować?
-
klew
- Posts: 13905
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
Jeśli mowa o tym samym preferences co w tamtym wątku to powinno być ok. Pokaż kod i logipetione wrote: Sat Jan 25, 2025 8:28 am Dzięki.
Pojawil mi sie natomiast jeszcze jeden niespodziewany poroblem. A mianowicie zapis do pamieci wlasnych zmiennych.
Do zapisu stosuje Preferences. Teoretycznie nie powinny kolidowac z metodą zapisu Supli a jednak cos sie gryzie. Opinie opieram na podstawie;
https://forum.supla.org/viewtopic.php?t=12427
Wszystko dziala poprawnie do momentu przeladowania WWW lub naciśnięciu Save. Gdy strona sie przeladuje lub nacisne Save zapis juz jest nieprawidlowy.. Masz koze pomysl co moze kolidować?
Najlepsze suple dla Twojego domu 
