Tryb konfiguracyjny i różne inputy do wprowadzania parametrów

jaku2k
Posts: 920
Joined: Sun May 24, 2020 8:40 pm
Has thanked: 1 time

Post

Zawrzeliście w tym wątku dużo informacji nt. inputów, dziękuję.
Nie udaje mi się przekazać danych z inputów "do Supli".
Choć @lukfud wytłumaczył to chyba w pierwszych postach, nie mogę przekazać wartości z customTextParameter do Supli. Chodzi mi o możliwość ustawienia nazwy urządzenia. Robię tak jak @lukfud w kodzie LORATAP:

Code: Select all

const char DEV_NAME[] = "dev_name";
char devName[30] = {};
i potem w setupie:

Code: Select all

  if (Supla::Storage::ConfigInstance()->getString(DEV_NAME, devName, 30)) {
    SUPLA_LOG_DEBUG("# Param[%s]: %s", DEV_NAME, devName);
  } else {
    SUPLA_LOG_DEBUG("# Param[%s] is not set", DEV_NAME);
  }
  // nazwa urządzenia
  new Supla::Html::CustomTextParameter(DEV_NAME, "Nazwa urządzenia", 30);
  SuplaDevice.setName(devName);
Podobnie mam z inputami przeznaczonymi dla liczb całkowitych, ale na razie nie będę się rozpisywał, mam nadzieję, że znając rozwiązanie tego problemu, będę w stanie poprawić inne. Proszę o pomoc.
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

jaku2k wrote: Mon Dec 30, 2024 2:02 pm
Dodałeś?

Code: Select all

Supla::Storage::Init();
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
malarz
Posts: 506
Joined: Wed Jan 27, 2021 4:04 pm
Been thanked: 2 times

Post

Dodałem do mojego przykładu zmianę nazwy urządzenia. Całość wrzuciłem na githubie. Sprawdzone - działa.

Istotna część kodu:

Code: Select all

  Supla::Storage::Init();
  
  ...
  
  #define DEFAULT_DEV_NAME "jakaś nazwa domyślna"
  char devName[30] = {};
  auto DeviceName = new Supla::Html::CustomTextParameter(PARAM_NAME, "Nazwa urządzenia", 30);
  if (!DeviceName->getParameterValue(devName, 30)) {
    SUPLA_LOG_DEBUG(" **** Param[%s]: setting default %s", PARAM_NAME, DEFAULT_DEV_NAME);
    DeviceName->setParameterValue(DEFAULT_DEV_NAME);
  }
  if (Supla::Storage::ConfigInstance()->getString(PARAM_NAME, devName, 30)) {
    SUPLA_LOG_DEBUG(" **** Param[%s]: %s", PARAM_NAME, devName);
    SuplaDevice.setName(devName);
  } else {
    SUPLA_LOG_DEBUG(" **** Param[%s] is not set", PARAM_NAME);
    SuplaDevice.setName(DEFAULT_DEV_NAME);
  }
Można oczywiście wywalić całą nazwę domyślną, ale ja chciałem przy okazji pobawić się w jej ustalanie. Bez tego za pierwszym razem masz pustą nazwę.
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
jaku2k
Posts: 920
Joined: Sun May 24, 2020 8:40 pm
Has thanked: 1 time

Post

To było to, dziękuję!

Teraz drugi problem, nie mogę sobie z nim poradzić. Chcę dodać rozwijane listy do wyboru pinów dla wybranych funkcji. Robię (chyba) zgodnie z przykładem:

Code: Select all

#ifndef CONFIG_PIN
#define CONFIG_PIN 25
#endif

const char CONFIG_PIN_PARAM[] = "config_pin"; // Nazwa parametru dla pinu przycisku
w setupie:

Code: Select all

  int32_t savedConfigPin = CONFIG_PIN;
  if (Supla::Storage::ConfigInstance()->getInt32(CONFIG_PIN_PARAM, &savedConfigPin)) {
      SUPLA_LOG_DEBUG("# Param[%s]: %d", CONFIG_PIN_PARAM, savedConfigPin);
  } else {
      SUPLA_LOG_DEBUG("# Param[%s] is not set, using default: %d", CONFIG_PIN_PARAM, CONFIG_PIN);
  }

  // Dodanie przycisku CONFIG
  auto configButton = new Supla::Control::Button(CONFIG_PIN, true, true);
  configButton->setHoldTime(1500); // Ustawienie czasu HOLD przycisku
  configButton->addAction(Supla::ENTER_CONFIG_MODE, SuplaDevice, Supla::ON_CLICK_5); // ustawienie trybu CONFIG
  configButton->addAction(Supla::TOGGLE, customHandler, Supla::ON_CLICK_1); // Przypisanie akcji przełączania trybów
  configButton->addAction(Supla::TOGGLE, rgbwToggleHandler, Supla::ON_HOLD); // Przypisanie akcji włączania/wyłączania

  // Dodanie HTML do wyboru CONFIG_PIN
  auto configPinSelect = new Supla::Html::SelectInputParameter(CONFIG_PIN_PARAM, "Pin przycisku (CONFIG) (domyślnie: IO25)");
  configPinSelect->registerValue("0", 0);
  configPinSelect->registerValue("4", 4);
  configPinSelect->registerValue("5", 5);
  configPinSelect->registerValue("15", 15);
  configPinSelect->registerValue("16", 16);
  configPinSelect->registerValue("17", 17);
Mimo tego wartości nie są "przekazywane".
Pozdrawiam
Jakub
User avatar
malarz
Posts: 506
Joined: Wed Jan 27, 2021 4:04 pm
Been thanked: 2 times

Post

jaku2k wrote: Mon Dec 30, 2024 5:30 pm

Code: Select all

  int32_t savedConfigPin = CONFIG_PIN;
  if (Supla::Storage::ConfigInstance()->getInt32(CONFIG_PIN_PARAM, &savedConfigPin)) {
      SUPLA_LOG_DEBUG("# Param[%s]: %d", CONFIG_PIN_PARAM, savedConfigPin);
  } else {
      SUPLA_LOG_DEBUG("# Param[%s] is not set, using default: %d", CONFIG_PIN_PARAM, CONFIG_PIN);
  }

  // Dodanie przycisku CONFIG
  auto configButton = new Supla::Control::Button(CONFIG_PIN, true, true);
  configButton->setHoldTime(1500); // Ustawienie czasu HOLD przycisku
  configButton->addAction(Supla::ENTER_CONFIG_MODE, SuplaDevice, Supla::ON_CLICK_5); // ustawienie trybu CONFIG
  configButton->addAction(Supla::TOGGLE, customHandler, Supla::ON_CLICK_1); // Przypisanie akcji przełączania trybów
  configButton->addAction(Supla::TOGGLE, rgbwToggleHandler, Supla::ON_HOLD); // Przypisanie akcji włączania/wyłączania

   ....
Mimo tego wartości nie są "przekazywane".
Przecież nigdzie nie wykorzystałeś wczytanej wartości savedConfigPin

Zmień

Code: Select all

  auto configButton = new Supla::Control::Button(CONFIG_PIN, true, true);
na

Code: Select all

  auto configButton = new Supla::Control::Button(savedConfigPin , true, true);
i powinno działać
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
jaku2k
Posts: 920
Joined: Sun May 24, 2020 8:40 pm
Has thanked: 1 time

Post

Faktycznie, dzięki.
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

Witam
W cloud jest opcja przełącz urządzenie w tryb konfiguracji Czy poda ktoś przykład jak w kodzie dodać żeby urządzenie startowało w tryb konfiguracji z poziomu cloud?
User avatar
klew
Posts: 13906
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

nebraska wrote: Thu Mar 06, 2025 8:21 pm Witam
W cloud jest opcja przełącz urządzenie w tryb konfiguracji Czy poda ktoś przykład jak w kodzie dodać żeby urządzenie startowało w tryb konfiguracji z poziomu cloud?
Jeśli używasz standardowych komponentów z SD, to nic nie trzeba robić. Przykład WebInterface, albo inne z tymi elementami wystarczą:

Code: Select all

Supla::ESPWifi wifi;
Supla::LittleFsConfig configSupla;
Supla::EspWebServer suplaServer;
Najlepsze suple dla Twojego domu :mrgreen:
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

klew wrote: Thu Mar 06, 2025 8:36 pm
nebraska wrote: Thu Mar 06, 2025 8:21 pm Witam
W cloud jest opcja przełącz urządzenie w tryb konfiguracji Czy poda ktoś przykład jak w kodzie dodać żeby urządzenie startowało w tryb konfiguracji z poziomu cloud?
Jeśli używasz standardowych komponentów z SD, to nic nie trzeba robić. Przykład WebInterface, albo inne z tymi elementami wystarczą:

Code: Select all

Supla::ESPWifi wifi;
Supla::LittleFsConfig configSupla;
Supla::EspWebServer suplaServer;
Dokładnie tak używam, ale ze mnie gapa nawet tego nie sprawdziłem. Dziękuje @Krzysztof.
Dejw0089
Posts: 2
Joined: Fri Oct 07, 2022 11:10 am

Post

Panowie może ktoś pomoże?
Używam najnowszej biblioteki 25.11.0 i po wgraniu do czystego ESP32 urządzenie startuje w trybie offline i nie można wejść na stronę konfiguracji.
Dodanie przycisku config wykrzacza działanie całkiem (panic):

Code: Select all

  // Buttons configuration
  auto buttonCfgRelay = new Supla::Control::Button(BUTTON_CFG_RELAY_GPIO, true, true);
  buttonCfgRelay->configureAsConfigButton(&SuplaDevice);
  
Czy można jakoś ustawić tryb konfiguracji gdy nie ma ustawień ( jak w poprzednich wersjach bibliotek)?

Return to “Arduino IDE”