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

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

Post

Tamte rzeczy nie mają raczej wpływu.
Logi! ;)
Config jest przechowywany na littlefs, więc albo coś psuje tą partycję (jest to możliwe, gdy jednocześnie używa się czegoś na spifs). Może też się przepełniać (ten rozmiar co wcześniej pisaliśmy). Może też się coś crashować/resetować w trakcie zapisu pliku z config.
Z tego co pamiętam to nie ma tam odpowiednich zabezpieczeń.
zzrr
Posts: 537
Joined: Wed Oct 26, 2022 7:35 pm

Post

klew wrote: Sun Jun 02, 2024 1:40 pm Tamte rzeczy nie mają raczej wpływu.
Logi! ;)
Config jest przechowywany na littlefs, więc albo coś psuje tą partycję (jest to możliwe, gdy jednocześnie używa się czegoś na spifs). Może też się przepełniać (ten rozmiar co wcześniej pisaliśmy). Może też się coś crashować/resetować w trakcie zapisu pliku z config.
Z tego co pamiętam to nie ma tam odpowiednich zabezpieczeń.
Aha... od razu mi lepiej że wiemy co to może się dziać :shock: :?
User avatar
klew
Posts: 10163
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

zzrr wrote: Sun Jun 02, 2024 2:04 pm
klew wrote: Sun Jun 02, 2024 1:40 pm Tamte rzeczy nie mają raczej wpływu.
Logi! ;)
Config jest przechowywany na littlefs, więc albo coś psuje tą partycję (jest to możliwe, gdy jednocześnie używa się czegoś na spifs). Może też się przepełniać (ten rozmiar co wcześniej pisaliśmy). Może też się coś crashować/resetować w trakcie zapisu pliku z config.
Z tego co pamiętam to nie ma tam odpowiednich zabezpieczeń.
Aha... od razu mi lepiej że wiemy co to może się dziać :shock: :?
Logi :P
zzrr
Posts: 537
Joined: Wed Oct 26, 2022 7:35 pm

Post

klew wrote: Sun Jun 02, 2024 2:13 pm Logi :P
Logi... logi... to mam coś do tych logów ręcznie dopisać skoro w nich nic nie ma? :P
User avatar
klew
Posts: 10163
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

zzrr wrote: Sun Jun 02, 2024 2:16 pm
klew wrote: Sun Jun 02, 2024 2:13 pm Logi :P
Logi... logi... to mam coś do tych logów ręcznie dopisać skoro w nich nic nie ma? :P
Na razie dałeś tylko raz logi, gdzie nie występował problem. Logi trzeba zebrać tak, aby problem był tam widoczny. Bez tego to można sobie zgadywać ;)
zzrr
Posts: 537
Joined: Wed Oct 26, 2022 7:35 pm

Post

@klew a powiedz...
w pliku littlefs_config.cpp platformIO podkreśla niezgodność zmiennych
w tej funkcji

Code: Select all

bool Supla::LittleFsConfig::getBlob(const char* key,
                                    char* value,
                                    size_t blobSize) {
  if (blobSize < BIG_BLOG_SIZE_TO_BE_STORED_IN_FILE) {
    return Supla::KeyValue::getBlob(key, value, blobSize);
  }

  if (!initLittleFs()) {
    return false;
  }

  char filename[50] = {};
  snprintf(filename, sizeof(filename), "/supla/%s", key);
  File file = LittleFS.open(filename, "r");
  if (!file) {
    SUPLA_LOG_ERROR("LittleFsConfig: failed to open blob file \"%s\" for read",
                    key);
    LittleFS.end();
    return false;
  }
  size_t fileSize = file.size();
  if (fileSize > blobSize) {
    SUPLA_LOG_ERROR("LittleFsConfig: blob file is too big");
    file.close();
    LittleFS.end();
    return false;
  }

  int bytesRead = file.read(reinterpret_cast<uint8_t*>(value), fileSize);

  file.close();
  LittleFS.end();
  return bytesRead == fileSize;
}

Czy to może mieć jakieś znaczenie że bytesRead jest int a fileSize size_t ? Może się coś przez to dziać? Do tej pory ignorowałem ten komunikat. Jak zmieniłem tak dla próby bytesRead też na size_t to komunikatu już nie było. Ale finalnie nie zmieniłem żeby coś nie popsuć.
User avatar
klew
Posts: 10163
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

zzrr wrote: Sun Jun 02, 2024 3:21 pm @klew a powiedz...
w pliku littlefs_config.cpp platformIO podkreśla niezgodność zmiennych
w tej funkcji

Code: Select all

bool Supla::LittleFsConfig::getBlob(const char* key,
                                    char* value,
                                    size_t blobSize) {
  if (blobSize < BIG_BLOG_SIZE_TO_BE_STORED_IN_FILE) {
    return Supla::KeyValue::getBlob(key, value, blobSize);
  }

  if (!initLittleFs()) {
    return false;
  }

  char filename[50] = {};
  snprintf(filename, sizeof(filename), "/supla/%s", key);
  File file = LittleFS.open(filename, "r");
  if (!file) {
    SUPLA_LOG_ERROR("LittleFsConfig: failed to open blob file \"%s\" for read",
                    key);
    LittleFS.end();
    return false;
  }
  size_t fileSize = file.size();
  if (fileSize > blobSize) {
    SUPLA_LOG_ERROR("LittleFsConfig: blob file is too big");
    file.close();
    LittleFS.end();
    return false;
  }

  int bytesRead = file.read(reinterpret_cast<uint8_t*>(value), fileSize);

  file.close();
  LittleFS.end();
  return bytesRead == fileSize;
}

Czy to może mieć jakieś znaczenie że bytesRead jest int a fileSize size_t ? Może się coś przez to dziać? Do tej pory ignorowałem ten komunikat. Jak zmieniłem tak dla próby bytesRead też na size_t to komunikatu już nie było. Ale finalnie nie zmieniłem żeby coś nie popsuć.
To nie ma wpływu na problem, który masz
zzrr
Posts: 537
Joined: Wed Oct 26, 2022 7:35 pm

Post

klew wrote: Sun Jun 02, 2024 4:18 pm To nie ma wpływu na problem, który masz
Dodałem kilka deleyów w setup żeby się wszystko spokojnie poładowało. Ale na tą chwile to jestem skłonny stwierdzić że przyczyną był zły kontakt pinów na płytce stykowej. Co prawda nie udało się powtórzyć skasowania flasha jak na razie ale przy którejś tam próbie włączenia i wyłączania zasilania zauważyłem takie drgania diody stanu na WEMOSIE. Poprawiłem styki na ile się dało, dioda zaczęła świecić mocniej i jednostajną siłą i zobaczymy. Jak układ wyląduje już na PCB i będzie wszystko na sztywno to wtedy dopiero potestuję. Na razie odpuszczam bo może szkoda mojego czasu póki to jest wszystko na pajęczynie. Na razie @klew dzięki.
Aaa jeszcze coś bardzo ważnego... Odpaliłem PuTTY i logi idą do pliku. "Będzie Pan zadowolony" :P za tydzień wracam, powinno starczyć. Oby dysku starczyło... ;)
vajera
Posts: 610
Joined: Wed Oct 31, 2018 7:58 am

Post

Mam pytanie o oficjalną politykę zapisu własnych danych w ekosystemie SuplaDevice. ;-)

Pisząc po ludzku - mam np. 32 bitową wartość, którą chcę wczytywać przy starcie z flasha, modyfikować w trakcie pracy programu i zapisywać po każdej zmianie.
Czy mogę do tego wykorzystać klasę LittleFsConfig i funkcje setInt32/getInt32? A może Eeprom - ale jak - tworząc własną sekcję?
Czy klasycznie - odpalać klasę Eeprom np. z offsetem 128 bajtów i zapisywać swoje dane w tych pierwszych 128 bajtach EEPROM?
User avatar
klew
Posts: 10163
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

vajera wrote: Mon Jun 03, 2024 8:33 pm Mam pytanie o oficjalną politykę zapisu własnych danych w ekosystemie SuplaDevice. ;-)

Pisząc po ludzku - mam np. 32 bitową wartość, którą chcę wczytywać przy starcie z flasha, modyfikować w trakcie pracy programu i zapisywać po każdej zmianie.
Czy mogę do tego wykorzystać klasę LittleFsConfig i funkcje setInt32/getInt32? A może Eeprom - ale jak - tworząc własną sekcję?
Czy klasycznie - odpalać klasę Eeprom np. z offsetem 128 bajtów i zapisywać swoje dane w tych pierwszych 128 bajtach EEPROM?
Tu nie ma żadnej polityki :P. To Twoje urządzenie i rób sobie na nim co Ci się podoba :D

Możesz wykorzystywać dowolne mechanizmy zapisywania danych we flashu, o ile nie będą one kolidowały z tym co robi biblioteka.
Także jeśli używasz LittleFsConfig, to możesz z niej korzystać i zapisywać tam dane w posatci klucz(15 znaków ASCII)->wartość (int8, int32, char[], "blob"). Trzeba pamiętać, aby nazwa nie kolidowała z kluczami, używanymi w s-d. Dodatkowo użycie w takiej sytuacji spifs wszystko rozwali ;P. Także albo little fs, albo spifs. Na little fs możesz też zapisywać własne pliki z danymi. Tam jest dość sporo miejsca, zapis robi jakiś wear leveling. Przy LittleFsConfig trzeba też pilnować, aby config nie zrobił się zbyt duży. Domyślnie trzyma on 1000 B, ale już jeden kanał HVAC (termostat) zjadał kilkaset bajtów configa.
Możęsz też używać tej emulacji EEPROM. Jego zaleta to prostota. Wtedy wystarczy Supla::Storage ustawić z odpowiednim offsetem pisanie do EEPROMu w adresach ponizżej tego offsetu będzie bezpieczne. Tylko EEPROM chyba (?) nie robił wear levelingu, więc ostrożnie z ilością zapisów.

Return to “Arduino IDE”