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

zzrr
Posts: 548
Joined: Wed Oct 26, 2022 7:35 pm

Post

lukfud wrote: Wed Oct 09, 2024 8:13 pm Przekazuję tylko to, co podpowiedział mi kiedyś @klew ;)
Atam atam... wiadomo że wiedza @klewa w tych tematach to przygniata. Ale Twoja też... ;)
nebraska
Posts: 118
Joined: Thu Dec 08, 2022 3:00 pm

Post

zzrr wrote: Wed Oct 09, 2024 8:16 pm
lukfud wrote: Wed Oct 09, 2024 8:13 pm Przekazuję tylko to, co podpowiedział mi kiedyś @klew ;)
Atam atam... wiadomo że wiedza @klewa w tych tematach to przygniata. Ale Twoja też... ;)
Dokładnie tak, potwierdzam jak najbardziej.
iM@rek
Posts: 353
Joined: Thu Feb 09, 2023 1:25 pm

Post

nebraska wrote: Thu Oct 10, 2024 6:15 pm Dokładnie tak, potwierdzam.
Potwierdzam 👍
User avatar
malarz
Posts: 175
Joined: Wed Jan 27, 2021 4:04 pm

Post

Jak najlepiej przekazać przez WebInterface adres IPv4 do klasy PV::Fronius?

Trochę mi się nie podoba przekazanie przez 4 liczby całkowite. Ale też nie podoba mi się pisanie kodu parsującego ciąg znaków na 4 inty, które wykorzystam do konfiguracji:

Code: Select all

int32_t ip1, ip2, ip3, ip4;

// ... tutaj wczytanie wartości przez Supla::Storage::ConfigInstance()->getString() i jej przerobienie na ip1..ip4

new Supla::PV::Fronius(IPAddress(ip1, ip2, ip3, ip4));
Pewnie jest jakiś lepszy sposób w bibliotece. Tylko jeszcze za mało ją znam.
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
User avatar
malarz
Posts: 175
Joined: Wed Jan 27, 2021 4:04 pm

Post

W związku z tym, że jakieś rozwiązanie doprowadziłem do końca to je pokazuję:

Nie wiem czy ładnie, ale skutecznie:

Code: Select all

const char FRONIUSIP[] = "FroniusIPAddr";

...

  new Supla::Html::CustomTextParameter(FRONIUSIP, "Adres IP inwertera Fronius", 15);

  char ip[50] = {};
  if (Supla::Storage::ConfigInstance()->getString(FRONIUSIP, ip, 50)) {
    SUPLA_LOG_DEBUG(" **** Param[%s]: %s", FRONIUSIP, ip);
  } else {
    SUPLA_LOG_DEBUG(" **** Param[%s] is not set", FRONIUSIP);
  }
 
  IPAddress ipAddr;
  size_t index = 0;
  int i = 0;
  ipAddr[index] = 0;
  while (ip[i]) {
    if (isdigit(ip[i])) {
      ipAddr[index] *= 10;
      ipAddr[index] += ip[i] - '0';
    } else {
      index++;
      ipAddr[index] = 0;
    }
    i++;
  }
  new Supla::PV::Fronius(ipAddr);
Uwagi mile widziane.
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
User avatar
lukfud
Posts: 2314
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

malarz wrote: Sun Dec 15, 2024 1:09 pm W związku z tym, że jakieś rozwiązanie doprowadziłem do końca to je pokazuję:

Nie wiem czy ładnie, ale skutecznie:

Code: Select all

const char FRONIUSIP[] = "FroniusIPAddr";

...

  new Supla::Html::CustomTextParameter(FRONIUSIP, "Adres IP inwertera Fronius", 15);

  char ip[50] = {};
  if (Supla::Storage::ConfigInstance()->getString(FRONIUSIP, ip, 50)) {
    SUPLA_LOG_DEBUG(" **** Param[%s]: %s", FRONIUSIP, ip);
  } else {
    SUPLA_LOG_DEBUG(" **** Param[%s] is not set", FRONIUSIP);
  }
 
  IPAddress ipAddr;
  size_t index = 0;
  int i = 0;
  ipAddr[index] = 0;
  while (ip[i]) {
    if (isdigit(ip[i])) {
      ipAddr[index] *= 10;
      ipAddr[index] += ip[i] - '0';
    } else {
      index++;
      ipAddr[index] = 0;
    }
    i++;
  }
  new Supla::PV::Fronius(ipAddr);
Uwagi mile widziane.
https://github.com/espressif/arduino-es ... s.cpp#L111

Code: Select all

ipAddr.fromString(ip);
https://www.facebook.com/groups/supladiy/
User avatar
malarz
Posts: 175
Joined: Wed Jan 27, 2021 4:04 pm

Post

lukfud wrote: Sun Dec 15, 2024 4:52 pm https://github.com/espressif/arduino-es ... s.cpp#L111

Code: Select all

ipAddr.fromString(ip);
Dzięki.

A to się nie pogryzie z https://github.com/SUPLA/supla-device/b ... ddress.cpp ?
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
User avatar
klew
Posts: 10689
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

malarz wrote: Sun Dec 15, 2024 7:30 pm
lukfud wrote: Sun Dec 15, 2024 4:52 pm https://github.com/espressif/arduino-es ... s.cpp#L111

Code: Select all

ipAddr.fromString(ip);
Dzięki.

A to się nie pogryzie z https://github.com/SUPLA/supla-device/b ... ddress.cpp ?
Nie. Ta klasa jest brana gdy nie używasz Arduino
User avatar
malarz
Posts: 175
Joined: Wed Jan 27, 2021 4:04 pm

Post

klew wrote: Sun Dec 15, 2024 7:37 pm Nie. Ta klasa jest brana gdy nie używasz Arduino
Fajnie zadziałało. Teraz zachciałem jeszcze dodać do projektu OTA na bazie
viewtopic.php?p=183168#p183168
viewtopic.php?p=187557#p187557

Code: Select all

#define STATUS_LED_GPIO 13
#define RELAY_GPIO 12
#define BUTTON_CFG_RELAY_GPIO 0

#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/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_text_parameter.h>
#include <supla/device/supla_ca_cert.h>
#include <supla/events.h>
#include <supla/pv/fronius.h>

Supla::ESPWifi wifi;
Supla::LittleFsConfig configSupla;

Supla::Device::StatusLed statusLed(STATUS_LED_GPIO, true); // inverted state
Supla::EspWebServer suplaServer;
#ifdef ARDUINO_ARCH_ESP32
#include <HTTPUpdateServer.h>
HTTPUpdateServer httpUpdater;
#else
#include <ESP8266HTTPUpdateServer.h>
ESP8266HTTPUpdateServer httpUpdater;
#endif

// 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 FRONIUSIP[] = "FroniusIPAddr";

void setup() {
  
  Serial.begin(115200);

  // 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:
  // 15 - maximum text length accepted by your input
  new Supla::Html::CustomTextParameter(FRONIUSIP, "Adres IP inwertera Fronius", 15);

  Supla::Storage::Init();
  char ip[50] = {};
  if (Supla::Storage::ConfigInstance()->getString(FRONIUSIP, ip, 50)) {
    SUPLA_LOG_DEBUG(" +++++ Param[%s]: %s", FRONIUSIP, ip);
  } else {
    SUPLA_LOG_DEBUG(" +++++ Param[%s] is not set", FRONIUSIP);
  }
 
  // Channels configuration
  // CH 0 - Fronius inverter
  IPAddress ipAddr;
  ipAddr.fromString(ip);
  new Supla::PV::Fronius(ipAddr);

  // Buttons configuration
  auto buttonCfgRelay = new Supla::Control::Button(BUTTON_CFG_RELAY_GPIO, true, true);
  buttonCfgRelay->configureAsConfigButton(&SuplaDevice);

  // dodaj updater
  httpUpdater.setup(suplaServer.getServerPtr(), "/update");
  // configure defualt Supla CA certificate
  SuplaDevice.setSuplaCACert(suplaCACert);
  SuplaDevice.setSupla3rdPartyCACert(supla3rdCACert);
  SuplaDevice.begin();
}

void loop() {
  SuplaDevice.iterate();
}
I powyższy kod nie działa najlepiej, tzn. samo urządzenie działa, ale po przełączeniu w tryb konfiguracji startuje sieć WiFi, można się z nią połączyć i już nie da się połączyć z http://192.168.4.1. Strona ładowania OTA też nie działa. Wyrzucenie linii

Code: Select all

  httpUpdater.setup(suplaServer.getServerPtr(), "/update");
powoduje powrót działania strony konfiguracji, ale OTA jak nie było tak nie ma. Gdzie zrobiłem błąd. Testuję na Sonoff BasciR3.
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
User avatar
lukfud
Posts: 2314
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

malarz wrote: Mon Dec 16, 2024 8:19 pm
Wrzuciłem Twój szkic na Wemosa D1 mini i działa poprawnie.
https://www.facebook.com/groups/supladiy/

Return to “Arduino IDE”