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

User avatar
klew
Posts: 9630
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Dodałem do biblioteki nowe rodzaje inputów do HTMLa oraz przykład jak ich używać:
https://github.com/SUPLA/supla-device/b ... Inputs.ino

W przykładzie jest w miarę dokładnie wszystko opisane.

Kod dostępny na branchu "main" - jeszcze nie jest oficjalnie wydany, także z menadżera bibliotek Arduino jeszcze nie pobierzecie (za kilka dni powinien być oficjalne wydanie, więc tam też się pojawi).

Są tam użyte inputy:
- Supla::Html::CustomTextParameter - pozwala na dodanie inputa do wprowadzania wartości tekstowych. Wprowadzona wartość jest zapisywana do pamięci konfiguracji urządzenia i można z niej korzystać w programie
- Supla::Html::CustomParameter - j/w z tym, że akceptuje liczby całkowite
- Supla::Html::TextCmdInputParameter - pozwala na zdefiniowanie komend tekstowych, które po wysłaniu formularza HTML (np. przy kliknięciu przycisku "SAVE"), wykonają ustawioną w programie akcję
- Supla::Html::SelectCmdInputParameter - j/w z tym, że zamiast pola tekstowego, mamy pole typu "select" (rozwijana lista) ze wszystkimi dostępnymi komendami.

Dajcie znać czy działa i czy jest jasno napisane :)

Na ESP8266 mam jakiś problem z tym trybem konfiguracyjnym. Dość często przy renderowaniu HTML następuje rozłączenie klienta, przez co tylko część HTML dociera do przeglądarki. Jeszcze nie znalazłem co jest przyczyną, także gdyby się www zacinało, to odświeżcie kilka razy stronę.

Pamiętajcie też o ustawieniu domyślnych GPIO (w przykładzie jest przekaźnik oraz przycisk). GPIO12 na ESP32 nie zadziała :)

Inputy typu "komenda" można użyć np. do resetowania liczników energii, włączania kalibracji układu pomiarowego, tarowania wagi, itp. Sky is the limit ;)
2022-12-15_14-55.png
You do not have the required permissions to view the files attached to this post.
Kiedy będzie Supla Offline Party / SOP#2025 ?
nebraska
Posts: 101
Joined: Thu Dec 08, 2022 3:00 pm

Post

Czy ktoś podpowie jak odczytać wpisaną wartość w konfigu zeby czytał jako liczby bo nie mogę sobie z tym poradzić czyta jako tekst.
Potrzebuje żeby odczytał te klucze "5081602654:AAEaeI_7aOc2eerrrVV1nVObH4Ol6RlrC_KI" , "-452947517"

const char TelegramBOT[] = "token";
const char TelegramChatID[] = "chatid";

//------------------------- TELEGRAM ---------------------------------
#define BOT_TOKEN "token" //"5081602654:AAEaeI_7aOc2eerrrVV1nVObH4Ol6RlrC_KI"
#define BOT_CHAT_ID "chatid" //"-452947517"
User avatar
lukfud
Posts: 2255
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

nebraska wrote: Fri Dec 16, 2022 2:13 pm Czy ktoś podpowie jak odczytać wpisaną wartość w konfigu zeby czytał jako liczby bo nie mogę sobie z tym poradzić czyta jako tekst.
Pokaż kod
https://www.facebook.com/groups/supladiy/
radzik_r
Posts: 424
Joined: Sun Aug 11, 2019 5:32 pm

Post

klew wrote: Thu Dec 15, 2022 1:58 pm Dodałem do biblioteki nowe rodzaje inputów do HTMLa oraz przykład jak ich używać:
https://github.com/SUPLA/supla-device/b ... Inputs.ino

W przykładzie jest w miarę dokładnie wszystko opisane.

Kod dostępny na branchu "main" - jeszcze nie jest oficjalnie wydany, także z menadżera bibliotek Arduino jeszcze nie pobierzecie (za kilka dni powinien być oficjalne wydanie, więc tam też się pojawi).

Są tam użyte inputy:
- Supla::Html::CustomTextParameter - pozwala na dodanie inputa do wprowadzania wartości tekstowych. Wprowadzona wartość jest zapisywana do pamięci konfiguracji urządzenia i można z niej korzystać w programie
- Supla::Html::CustomParameter - j/w z tym, że akceptuje liczby całkowite
- Supla::Html::TextCmdInputParameter - pozwala na zdefiniowanie komend tekstowych, które po wysłaniu formularza HTML (np. przy kliknięciu przycisku "SAVE"), wykonają ustawioną w programie akcję
- Supla::Html::SelectCmdInputParameter - j/w z tym, że zamiast pola tekstowego, mamy pole typu "select" (rozwijana lista) ze wszystkimi dostępnymi komendami.

Dajcie znać czy działa i czy jest jasno napisane :)

Na ESP8266 mam jakiś problem z tym trybem konfiguracyjnym. Dość często przy renderowaniu HTML następuje rozłączenie klienta, przez co tylko część HTML dociera do przeglądarki. Jeszcze nie znalazłem co jest przyczyną, także gdyby się www zacinało, to odświeżcie kilka razy stronę.

Pamiętajcie też o ustawieniu domyślnych GPIO (w przykładzie jest przekaźnik oraz przycisk). GPIO12 na ESP32 nie zadziała :)

Inputy typu "komenda" można użyć np. do resetowania liczników energii, włączania kalibracji układu pomiarowego, tarowania wagi, itp. Sky is the limit ;)

2022-12-15_14-55.png
SUPER, przykłady działają, testowałem na ESP32

@klew czy pole - Supla::Html::CustomParameter może mieć wartość ograniczoną?
tak jak to jest w button_multiclick_parameters


Supla::Html::SelectCmdInputParameter
pole z wyborem mógłbyś stworzyć drugą wersję z pamięcią, coś takiego jak jest pole ze statusem led
You do not have the required permissions to view the files attached to this post.
Last edited by radzik_r on Fri Dec 16, 2022 10:42 pm, edited 1 time in total.
nebraska
Posts: 101
Joined: Thu Dec 08, 2022 3:00 pm

Post

lukfud wrote: Fri Dec 16, 2022 6:07 pm
nebraska wrote: Fri Dec 16, 2022 2:13 pm Czy ktoś podpowie jak odczytać wpisaną wartość w konfigu zeby czytał jako liczby bo nie mogę sobie z tym poradzić czyta jako tekst.
Pokaż kod
Klucz z TelegramBOT jest pobierany z if (Supla::Storage::ConfigInstance()->getString(TelegramBOT, buf, 200)) {
SUPLA_LOG_DEBUG(" **** Param[%s]: %s", TelegramBOT, buf);
i prawidłowo odczytuje tylko nie wiem jak te pobrane klucze które wpisuje w CFG podstawić do tych define' ow, zeby czytał te klucze

Code: Select all

Enter normal mode
 **** Param[param1]: 5081602654:AAEaeI_7aOc2yxgJVV1nVObH4Ol6RlrC_KI
 **** Param[param2]: 0
#define BOT_TOKEN "token" //"5081602654:AAEaeI_7aOc2yxgJVV1nVObH4Ol6RlrC_KI"
#define BOT_CHAT_ID "chatid" //"-632947517"

Code: Select all

#define STATUS_LED_GPIO 2
#define RELAY_GPIO 15
#define BUTTON_CFG_RELAY_GPIO 4

#include <SuplaDevice.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/relay.h>
#include <supla/control/button.h>
#include <supla/control/action_trigger.h>
#include <supla/device/status_led.h>
#include <supla/storage/littlefs_config.h>
#include <supla/network/esp_web_server.h>
#include <supla/device/supla_ca_cert.h>
#include <supla/events.h>

// Includes for HTML elements
#include <supla/network/html/device_info.h>
#include <supla/network/html/protocol_parameters.h>
#include <supla/network/html/status_led_parameters.h>
#include <supla/network/html/wifi_parameters.h>
#include <supla/network/html/custom_parameter.h>
#include <supla/network/html/custom_text_parameter.h>
#include <supla/network/html/text_cmd_input_parameter.h>
#include <supla/network/html/select_cmd_input_parameter.h>
#include <WiFiClientSecure.h>

// Choose where Supla should store roller shutter data in persistent memory
// We recommend to use external FRAM memory
#include <supla/storage/eeprom.h>
Supla::Eeprom eeprom;
// #include <supla/storage/fram_spi.h>
// Supla::FramSpi fram(STORAGE_OFFSET);

// This class provides Wi-Fi network connectivity for your device
Supla::ESPWifi wifi;

// This class provides web server to handle config mode
Supla::EspWebServer suplaServer;

// This class provides configuration storage (like SSID, password, all
// user defined parameters, etc. We use LittleFS.
Supla::LittleFsConfig configSupla;

Supla::Device::StatusLed statusLed(STATUS_LED_GPIO, true); // inverted state

auto r1 = new Supla::Control::Relay(13, false); // Relay Lampka
uint8_t stan=0;

// Those tags are used for HTML element names and for keys to access parameter
// values in Config storage class. Max length of those values is 15 chars.
const char TelegramBOT[] = "token";
const char TelegramChatID[] = "chatid";
const char PARAM2[] = "param2";

const char PARAM_CMD1[] = "cmd1";
const char PARAM_CMD2[] = "cmd2";
const char PARAM_CMD3[] = "cmd3";

//------------------------- TELEGRAM ---------------------------------
#define TELEGRAM_HOST "api.telegram.org"
#define TELEGRAM_SSL_PORT 443
#define BOT_TOKEN  "token" //"5081602654:AAEaeI_7aOc2yxgJVV1nVObH4Ol6RlrC_KI"
#define BOT_CHAT_ID  "chatid"  //"-632947517"
//#define BOT_CHAT_ID2 "-729189328"
//--------------------------------------------------------------------

void setup() {

  Serial.begin(115200);
  // Channels configuration
  // CH 0 - Relay
  auto r1 = new Supla::Control::Relay(RELAY_GPIO);
  // CH 1 - Action trigger
  auto at1 = new Supla::Control::ActionTrigger();

  // Buttons configuration
  auto buttonCfgRelay = new Supla::Control::Button(BUTTON_CFG_RELAY_GPIO, true, true);

  buttonCfgRelay->configureAsConfigButton(&SuplaDevice);
  buttonCfgRelay->addAction(Supla::TOGGLE, r1, Supla::ON_CLICK_1);

  // Action trigger configuration
  at1->setRelatedChannel(r1);
  at1->attach(buttonCfgRelay);

  // configure defualt Supla CA certificate
  SuplaDevice.setSuplaCACert(suplaCACert);
  SuplaDevice.setSupla3rdPartyCACert(supla3rdCACert);

  // HTML www component (they appear in sections according to creation
  // sequence).
  new Supla::Html::DeviceInfo(&SuplaDevice);
  new Supla::Html::WifiParameters;
  new Supla::Html::ProtocolParameters;
  new Supla::Html::StatusLedParameters;

  // Here user defined inputs are defined.
  // Simple text input:
  // PARAM1 - input name and key used for storage in Config instance
  // "Please provide text value" - label for field on config page
  // 100 - maximum text length accepted by your input
  new Supla::Html::CustomTextParameter(TelegramBOT, "Klucz BOT Token", 100);
  new Supla::Html::CustomTextParameter(TelegramChatID, "Klucz CHAT ID", 100);

  // Numeric input:
  // PARAM2 - input name and key used for storage in Config instance
  // "Your age" - label for field on config page
  // 100 - maximum text length accepted by your input
  new Supla::Html::CustomParameter(PARAM2, "Your age");

  // Text based command input
  // PARAM_CMD1 - Html field input name
  // "Relay control" - label that is displayed on config page
  auto textCmd = new Supla::Html::TextCmdInputParameter(PARAM_CMD1, "Relay control");
  // First we register allowed text input values and we assign which event
  // should be generated:
  textCmd->registerCmd("ON", Supla::ON_EVENT_1);
  textCmd->registerCmd("OFF", Supla::ON_EVENT_2);
  textCmd->registerCmd("TOGGLE", Supla::ON_EVENT_3);
  // Then we link events with actions on a relay.
  // Last "true" parameter will make sure that those actions won't be disabled
  // when we enter config mode. By default actions are disabled when device
  // enters config mode, but those text commands can be used only in config
  // mode, so we want to have them enabled.
  textCmd->addAction(Supla::TURN_ON, r1, Supla::ON_EVENT_1, true);
  textCmd->addAction(Supla::TURN_OFF, r1, Supla::ON_EVENT_2, true);
  textCmd->addAction(Supla::TOGGLE, r1, Supla::ON_EVENT_3, true);

  // Select based command input - exactly the same configuration as for text
  // field
  // PARAM_CMD2 - Html field input name
  // "Relay control" - label that is displayed on config page
  auto selectCmd = new Supla::Html::SelectCmdInputParameter(PARAM_CMD1, "Relay control");
  // First we register allowed text input values and we assign which event
  // should be generated:
  selectCmd->registerCmd("ON", Supla::ON_EVENT_1);
  selectCmd->registerCmd("OFF", Supla::ON_EVENT_2);
  selectCmd->registerCmd("TOGGLE", Supla::ON_EVENT_3);
  // Then we link events with actions on a relay.
  // Last "true" parameter will make sure that those actions won't be disabled
  // when we enter config mode. By default actions are disabled when device
  // enters config mode, but those text commands can be used only in config
  // mode, so we want to have them enabled.
  selectCmd->addAction(Supla::TURN_ON, r1, Supla::ON_EVENT_1, true);
  selectCmd->addAction(Supla::TURN_OFF, r1, Supla::ON_EVENT_2, true);
  selectCmd->addAction(Supla::TOGGLE, r1, Supla::ON_EVENT_3, true);

  // Set custom device name
  SuplaDevice.setName("SUPLA-INPUT-EXAMPLE");
  // Start!
  SuplaDevice.begin();

  // Below lines show how to access values provided by user via config mode.
  // It has to be used after SuplaDevice.begin() or in loop(). If you would
  // like to access them before begin(), then please first call:
  // Supla::Storage::Init();
  char buf[200] = {};
  if (Supla::Storage::ConfigInstance()->getString(TelegramBOT, buf, 200)) {
    SUPLA_LOG_DEBUG(" **** Param[%s]: %s", TelegramBOT, buf);
  } else {
    SUPLA_LOG_DEBUG(" **** Param[%s] is not set", TelegramBOT);
  }
    if (Supla::Storage::ConfigInstance()->getString(TelegramChatID, buf, 200)) {
    SUPLA_LOG_DEBUG(" **** Param[%s]: %s", TelegramChatID, buf);
  } else {
    SUPLA_LOG_DEBUG(" **** Param[%s] is not set", TelegramChatID);
  }
  int32_t intValue = 0;
  if (Supla::Storage::ConfigInstance()->getInt32(PARAM2, &intValue)) {
    SUPLA_LOG_DEBUG(" **** Param[%s]: %d", PARAM2, intValue);
  } else {
    SUPLA_LOG_DEBUG(" **** Param[%s] is not set", PARAM2);
  }
}

void loop() {
  SuplaDevice.iterate();
}
User avatar
lukfud
Posts: 2255
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

nebraska wrote: Fri Dec 16, 2022 9:55 pm
Pobrałeś już swoje dane do zmiennych TelegramBOT i TelegramChatID

Code: Select all

#define BOT_TOKEN "token" //"5081602654:AAEaeI_7aOc2yxgJVV1nVObH4Ol6RlrC_KI"
#define BOT_CHAT_ID "chatid" //"-632947517"
Te definicje to tylko przykład stałych wartości na potrzeby przykładu biblioteki telegramu.
W dalszej części programu nie używasz BOT_TOKEN ani BOT_CHAT_ID tylko wymienione wyżej Twoje zmienne.
https://www.facebook.com/groups/supladiy/
nebraska
Posts: 101
Joined: Thu Dec 08, 2022 3:00 pm

Post

Tak tylko chodzi mi o to jak podstawic klucze do tych define żeby czytał z konfigu? Bo teraz tylko mi czyta jak są wpisane obok co mam obecnie zakomentiwane bo chce żeby czytał je z konfigu.
Jak tego param1 gdzie obok jest klucz na logu wrzucić go do define BOT TOKEN?

Może inaczej jak z tej linii przenieść klucz do define BOT TOKEN żeby tam go odczytywał

Code: Select all

Param[param1]: 5081602654:AAEaeI_7aOc2yxgJVV1nVObH4Ol6RlrC_KI
User avatar
lukfud
Posts: 2255
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

nebraska wrote: Fri Dec 16, 2022 10:58 pm Tak tylko chodzi mi o to jak podstawic klucze do tych define żeby czytał z konfigu? Bo teraz tylko mi czyta jak są wpisane obok co mam obecnie zakomentiwane bo chce żeby czytał je z konfigu.
Jak tego param1 gdzie obok jest klucz na logu wrzucić go do define BOT TOKEN?
Nie potrzebujesz tych definicji.
Poprzez #define nadajesz w kodzie nazwę stałej wartości.
Ty nie będziesz posługiwał się w tym programie stałą wartością, tylko zmienną, więc tam gdzie telegram potrzebuje BOT_TOKEN wstaw zmienną TelegramBOT, tak samo z chatID.
https://www.facebook.com/groups/supladiy/
nebraska
Posts: 101
Joined: Thu Dec 08, 2022 3:00 pm

Post

lukfud Dziękuję za wyjaśnienie. Będę próbował dam znać.
nebraska
Posts: 101
Joined: Thu Dec 08, 2022 3:00 pm

Post

Nie mogę od wczoraj połączyć się z ESP32 działało robiłem testy i przestało wgrywam tryb konfiguracji jak wyżej i ciągle nie ma połączenia z WIFI wcześniej mi działało. Wifi działa w domu ok, wgrałem inny soft suplowy i jest zielony kafelek w Supli.
WEMOS LOLIN ESP32 LITE
ARDUINO 1.8.16
MANAGER BOARD 2.0.5

Code: Select all

Warning: network is not ready (30 s)
WiFi Station disconnected
WiFi Station disconnected
WiFi Station disconnected
WiFi Station disconnected
Warning: network is not ready (40 s)
WiFi Station disconnected
WiFi Station disconnected
WiFi Station disconnected
Warning: network is not ready (50 s)
WiFi Station disconnected
WiFi Station disconnected
WiFi Station disconnected
WiFi Station disconnected
Warning: network is not ready (60 s)
Network layer restart requested. Trying to setup network interface again
WiFi: resetting WiFi connection

Return to “Arduino IDE”