Modyfikacja przykładu WebInterface Arduino

iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

[email protected] wrote: Wed Aug 28, 2024 11:25 am to zrób hotspot?
Tak, jasne, mogę to zrobić.
Na co dzień mam w domu i firmie osobne małe routery z tymi samymi SSID i przenoszone moduły się łączą z "niby" tą samą siecią.
Ten moduł przyjechał z jeszcze innej lokalizacji i nie chciało mi się zmieniać ustawień routera.
Dlatego pytam o alternatywne rozwiązanie.
To, co zaproponował Krzysztof byłoby ok, ale u mnie nie działa.
Zwieram GPIO 0 na 5-7s do GND, ale nie pojawia się sieć "ESP-cośtam" z adresem 192.168.4.1

Code: Select all

#define BUTTON_CFG_RELAY_GPIO 0
Może ktoś (Rafał?) potwierdzić, że dla ESP32 to działa?
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

iM@rek wrote: Wed Aug 28, 2024 12:02 pm

Code: Select all

#define cfgButtonPin 0
#include <supla/control/button.h>
Supla::Control::Button *cfgButton = nullptr;
setup() {
  cfgButton = new Supla::Control::Button(cfgButtonPin, true, true);
  cfgButton->configureAsConfigButton(&SuplaDevice);
}
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

lukfud wrote: Wed Aug 28, 2024 1:10 pm
Działa - dziękuję bardzo, takie małe, a bardzo przydatne. :D
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Sporo już działa, jak sobie wymyślam.
Mam następne pytanie:
W inputach chcę mieć pole do resetowania wskazań max. dobowej prędkości wiatru.
Póki co, mam Numeric Input: "Reset V-max" i tam wpisuję "1" lub "0".
Dla "1" wartość kpop z V-max jest resetowana.
A następnie program w to pole powinien wpisać "0", żeby zakończyć resetowanie.
Przykład z WebSenderem działał na polach ReadOnly. Potrzebowałbym Read/Write.
Mam pomysł z memcpy, ale może jest jakiś inny sposób na realizację.
Jak to zrobić?
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

iM@rek wrote: Wed Aug 28, 2024 9:41 pm Sporo już działa, jak sobie wymyślam.
Mam następne pytanie:
W inputach chcę mieć pole do resetowania wskazań max. dobowej prędkości wiatru.
Póki co, mam Numeric Input: "Reset V-max" i tam wpisuję "1" lub "0".
Dla "1" wartość kpop z V-max jest resetowana.
A następnie program w to pole powinien wpisać "0", żeby zakończyć resetowanie.
Przykład z WebSenderem działał na polach ReadOnly. Potrzebowałbym Read/Write.
Mam pomysł z memcpy, ale może jest jakiś inny sposób na realizację.
Jak to zrobić?
Myślę, że tutaj lepszy będzie Command Input :)
Tu jest wszystko opisane, z linkiem do przykładu:
https://forum.supla.org/viewtopic.php?t=12068
Najlepsze suple dla Twojego domu :mrgreen:
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

klew wrote: Thu Aug 29, 2024 8:05 am
Ok, patrzyłem na to.
Ale jak z automatycznym resetem tej "komendy" od strony programu po wykonaniu resetu?
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

iM@rek wrote: Thu Aug 29, 2024 9:05 am
klew wrote: Thu Aug 29, 2024 8:05 am
Ok, patrzyłem na to.
Ale jak z automatycznym resetem tej "komendy" od strony programu po wykonaniu resetu?
Te inputy od komend się czyszczą same i wyświetlają puste. Ale lepiej wstawić sobie tego "command input" na bazie "selecta" - wtedy z listy drop-down sobie wybierasz komendę i nie trzeba pamiętać jaki magiczny ciąg znaków trzeba wpisać.
Najlepsze suple dla Twojego domu :mrgreen:
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Dzięki, przyjrzałem się temu ostatniemu trybowi "Select based command input" i proszę o wyjaśnienie:

1. Najpierw część opisowa: (OK)

Code: Select all

  auto selectCmd = new Supla::Html::SelectCmdInputParameter(PARAM_CMD2, "Reset Enable");
2. wpisujemy możliwe pozycje z listy rozwijanej, u mnie chyba tylko "ON", bo chcę zainicjować reset zmiennej w programie (OK)

Code: Select all

  selectCmd->registerCmd("ON", 35);  //Supla::ON_EVENT_1);
3. Teraz połączenie zdarzenia z akcją... No właśnie...
Ja chcę, żeby po wybraniu z listy "ON" nastąpiło odczytanie tej zmiany (jakaś zmienna czy co?) i w programie sobie to przetworzę na potrzebne działania związane z resetem.
Nie ma tam żadnego przekaźnika itp.
To ma raczej działać, jak reset licznika w kanale KLOP. Resety w tych kanałów przechwyciłem i korzystam z nich.
Ale dla kanałów KPOP nie ma na stronie Supli przycisku z możliwością resetowania, więc muszę to zrobić jakoś inaczej.
Czyli coś w tym stylu:

Code: Select all

  selectCmd->addAction([Moja_zmienna_resetu = 1],[tu nie wiem co], Supla::ON_EVENT_1[35], true);
A może to przerost formy nad treścią?
[EDIT]
W znaczeniu, że ja chcę użyć armaty przeciw wróblowi.
Po prostu nie wiem, jak użyć tego fajnego inputa do moich skromnych potrzeb.
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

iM@rek wrote: Thu Aug 29, 2024 6:56 pm Po prostu nie wiem, jak użyć tego fajnego inputa do moich skromnych potrzeb.
Ten cmd input generują "eventy" w momencie ustawienia i "zapisania" określonej wartości.
Dlatego klasę cmdInput generującą event, trzeba jakoś spiąć z odbiorcą eventu, który obsłuży zdefiniowaną "akcję":

Code: Select all

  selectCmd->addAction([Moja_zmienna_resetu = 1],[tu nie wiem co], Supla::ON_EVENT_1[35], true);
Jeśli odbiorcą byłby KLOP, to:

Code: Select all

auto klop = new Supla::Sensor::GeneralPurposeMeter(.....);
...
selectCmd->addAction(Supla::RESET, klop, Supla::ON_EVENT_1, true);
Wtedy wybranie i zapisanie w web komedy "komenda 1", spowoduje, że selectCmd uruchomi "ON_EVENT_1" i na instancji "klop" wywoła metodę:

Code: Select all

  klop->handleAction(Supla::ON_EVENT_1, Supla::RESET);   // event, action
W klasie klop jest metoda:

Code: Select all

void GeneralPurposeMeter::handleAction(int event, int action) {
  (void)(event);
  switch (action) {
    case Supla::RESET: {
      setCounter(resetToValue);
      break;
    }
    case Supla::INCREMENT: {
      incCounter();
      break;
    }
    case Supla::DECREMENT: {
      decCounter();
      break;
    }
  }
}
która, dla action == Supla::RESET odpali setCounter(0).

Jeśli w swojej klasie chcesz zrobić jakąś własną akcję, to musisz napisać tam własną implementację handleAction. Jeśli chcesz to dodać do KPOP, to musisz napisać własną klasę, która dziedziczy po GeneralPurposeMeasurement oraz po Supla::ActionHandler (ona ma wirtualną metodę handleAction, pod którą możesz podstawić własną implementację).
Najlepsze suple dla Twojego domu :mrgreen:
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

klew wrote: Mon Sep 02, 2024 8:36 am
Dziękuję Ci za wyczerpującą odpowiedź.
Spróbuję zrozumieć i coś z tego wykorzystać.

Return to “Pomoc”