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

nebraska
Posty: 93
Rejestracja: czw gru 08, 2022 3:00 pm

lukfud pisze: pt gru 16, 2022 11:09 pm
nebraska pisze: pt gru 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.
lukfud podstawiłem jak zaleciłeś ale niestety nie odczytuje. Pewnie tu jest problem nie wiem jak tu podstawić bo czyta te teksty.
Powiedz proszę jak to rozwiązać drugi dzień męcze to i nie potrafię :cry:
const char TelegramBOT[] = "tele_bot";
const char TelegramCHATID[] = "tele_chat_id";

Kod: Zaznacz cały

connecting to ..api.telegram.org
requesting URL: /bottele_bot/sendMessage?chat_id=tele_chat_id&text=Przekaźnik Włączony!!! 

Kod: Zaznacz cały

// 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[] = "tele_bot";
const char TelegramCHATID[] = "tele_chat_id";
const char PARAM2[] = "param2";
const char PARAM_CMD1[] = "cmd1";
const char PARAM_CMD2[] = "cmd2";

byte stan = 0;
auto r1 = new Supla::Control::Relay(18, false);

#define TELEGRAM_HOST "api.telegram.org"
#define TELEGRAM_SSL_PORT 443
//#define BOT_TOKEN "5081602654:AAEaeI_7aOc2yxgJVV1nVObH4Ol6RlrC_KI"
//#define BOT_CHAT_ID  "-632947517"


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, "Telegram BOT_Token", 100);
  new Supla::Html::CustomTextParameter(TelegramCHATID, "Telegram 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();

 if ((digitalRead(18) == LOW) && (stan == 0)) {
      stan = 1;
      direct_telegram(TelegramCHATID, "Przekaźnik Włączony!!! ");
    } else if (digitalRead(13) == HIGH) {
      stan = 0;
    }
  }
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

nebraska pisze: sob gru 17, 2022 6:19 pm
Podrzuć mi proszę cały program razem z biblioteką telegramu, której używasz.
https://www.facebook.com/groups/supladiy/
nebraska
Posty: 93
Rejestracja: czw gru 08, 2022 3:00 pm

Biblioteki nie używam łaćze się po URL z api telegram. Problem w tym, że nie można z tej zmiennej wyciągnąć tego klucza

Kod: Zaznacz cały

if (Supla::Storage::ConfigInstance()->getString(TelegramBOT, buf, 200)) {
    SUPLA_LOG_DEBUG(" **** Param[%s]: %s", TelegramBOT, buf);
z tego pokazuje się klucz ale jak z tego ten klucz podstawić dalej do zmiennej telegram?
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

nebraska pisze: sob gru 17, 2022 6:19 pm lukfud podstawiłem jak zaleciłeś ale niestety nie odczytuje. Pewnie tu jest problem nie wiem jak tu podstawić bo czyta te teksty.
Powiedz proszę jak to rozwiązać drugi dzień męcze to i nie potrafię :cry:
Ciężko pomóc jak nie wstawiasz całego kodu.

Nastomiat cały czas popełniasz jeden i ten sam błąd. Nazwa parametru (klucz), pod którym jest przechowywana wartość, to nie jest to samo co wartość tego parametru.

Twoje pudełko nazywa się "TELE_ID", a Ciebie interesuje zawartość tego pudełka. Wstawiając nazwę pudełka nie otrzymasz jego zawartości.

Musisz mieć osobne zmienne tekstowe, np.

Kod: Zaznacz cały

char teleID[200] = {};
char chatID[200] = {};
do których odczytasz wartości parametrów z konfiguracji. Następnie powinieneś używać tych zmiennych. Oczywiście pod warunkiem, że te polecenia od biblioteki do telegrama przyjmują tablicę znaków jako input.

Jeśli nie wiesz o czym piszę, to poświęć 3-4 dni i zrób sobie jakiś podstawowy kurs programowania w C lub C++ - znajdziesz ich dużo w sieci.
Nie wszystko da się zrobić podstawiając na czuja jakieś rzeczy.
Widzimy się na Supla Offline Party vol. 2 :!:
Zibi
Posty: 614
Rejestracja: śr lip 31, 2019 9:20 am
Lokalizacja: Białogard

@klew Świetna robota tego brakowało. Nawet już dodałeś w biblii :mrgreen:
Bravo!
Awatar użytkownika
Elektryk Szczecin
Posty: 92
Rejestracja: pt sty 03, 2020 11:14 pm

Tak dobra robota :D

Awatar użytkownika
veeroos
Posty: 271
Rejestracja: ndz mar 20, 2022 9:30 am
Lokalizacja: Głogów

Hej. A ja mam takie pytanie. Chodzi mi o pole tekstowe, czy mogę jakoś w to pole nadpisać wartość? Mianowicie o co mi chodzi, z poziomu webserwera wpisuję sobię jakąś wartość liczbową (tak wiem to jest pole tekstowe), konwertuję ją w programie ze zmiennej "string" na zmienną typu "float" i to wszystko działa, ale czy można z poziomu programu tą wartość nadpisać, tak abym jak wejdę w tryb konfiguracyjny tą zmienioną wartość widział?
Zamel Mew-01, Wemos D1 mini Pro + Ikea vindriktning + BME280, 3x - SonOff mini, 3x - SonOff Basic, 3xGosund SP111, SonOff S55, 2x GOSUND WB4
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

veeroos pisze: czw sty 19, 2023 12:03 pm Hej. A ja mam takie pytanie. Chodzi mi o pole tekstowe, czy mogę jakoś w to pole nadpisać wartość? Mianowicie o co mi chodzi, z poziomu webserwera wpisuję sobię jakąś wartość liczbową (tak wiem to jest pole tekstowe), konwertuję ją w programie ze zmiennej "string" na zmienną typu "float" i to wszystko działa, ale czy można z poziomu programu tą wartość nadpisać, tak abym jak wejdę w tryb konfiguracyjny tą zmienioną wartość widział?
Ogólnie tak.

Pola z przykładu opisywanego w tym wątku są zawsze zapisywane do "Configa" i przechowywane w pamięci flash.
Tutaj jest przykład jak odczytać: https://github.com/SUPLA/supla-device/b ... s.ino#L176

Analogicznie możesz wywołać metodę "setString" i podać ten sam klucz parametru i przypisać tam wartość.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
veeroos
Posty: 271
Rejestracja: ndz mar 20, 2022 9:30 am
Lokalizacja: Głogów

klew pisze: czw sty 19, 2023 12:06 pm
Ogólnie tak.

Pola z przykładu opisywanego w tym wątku są zawsze zapisywane do "Configa" i przechowywane w pamięci flash.
Tutaj jest przykład jak odczytać: https://github.com/SUPLA/supla-device/b ... s.ino#L176

Analogicznie możesz wywołać metodę "setString" i podać ten sam klucz parametru i przypisać tam wartość.
Hmm próbowałem tak zrobić jak napisałeś, ale napotkałem problem, bo zmienną którą chcę zapisać do Configa próbowałem przekonwertować raz na typ "char" drugi raz na "string" i wyskakuje mi błąd że ani jeden ani drugi typ zmiennej nie może być przekonwertowana na "const char". Znaczy moje zmienne przekonwertowane, ale jak próbuję je dodać do konfiga to wyskakuje mi błąd konwersji
Zamel Mew-01, Wemos D1 mini Pro + Ikea vindriktning + BME280, 3x - SonOff mini, 3x - SonOff Basic, 3xGosund SP111, SonOff S55, 2x GOSUND WB4
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

veeroos pisze: czw sty 19, 2023 6:10 pm
klew pisze: czw sty 19, 2023 12:06 pm
Ogólnie tak.

Pola z przykładu opisywanego w tym wątku są zawsze zapisywane do "Configa" i przechowywane w pamięci flash.
Tutaj jest przykład jak odczytać: https://github.com/SUPLA/supla-device/b ... s.ino#L176

Analogicznie możesz wywołać metodę "setString" i podać ten sam klucz parametru i przypisać tam wartość.
Hmm próbowałem tak zrobić jak napisałeś, ale napotkałem problem, bo zmienną którą chcę zapisać do Configa próbowałem przekonwertować raz na typ "char" drugi raz na "string" i wyskakuje mi błąd że ani jeden ani drugi typ zmiennej nie może być przekonwertowana na "const char". Znaczy moje zmienne przekonwertowane, ale jak próbuję je dodać do konfiga to wyskakuje mi błąd konwersji
Pokaż kod
Widzimy się na Supla Offline Party vol. 2 :!:
ODPOWIEDZ

Wróć do „Arduino IDE”