Storage - czyli przechowywanie danych w urządzeniach

krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

Jeszcze jedna mała wątpliwość, dlaczego przy starcie urządzenia najpierw wykonuje się onSaveState a dopiero później onLoadState ?? Czy to nie powinno być odwrotnie?
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

krycha88 wrote: Sun May 16, 2021 2:13 pm Jeszcze jedna mała wątpliwość, dlaczego przy starcie urządzenia najpierw wykonuje się onSaveState a dopiero później onLoadState ?? Czy to nie powinno być odwrotnie?
Robi się onSaveState z opcją dryRun, które nic nie zapisują, a tylko udają. W efekcie zliczają ile bajtów pamięci jest potrzebne do zapisu i jest sprawdzane czy zgadza się to z aktualnym rozmiarem sektora.
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Sun May 16, 2021 2:31 pm
krycha88 wrote: Sun May 16, 2021 2:13 pm Jeszcze jedna mała wątpliwość, dlaczego przy starcie urządzenia najpierw wykonuje się onSaveState a dopiero później onLoadState ?? Czy to nie powinno być odwrotnie?
Robi się onSaveState z opcją dryRun, które nic nie zapisują, a tylko udają. W efekcie zliczają ile bajtów pamięci jest potrzebne do zapisu i jest sprawdzane czy zgadza się to z aktualnym rozmiarem sektora.
Dzięki :) dopiero zacząłem na "poważnie" wykorzystywać ten sposób przechowywania danych. Więc mnie proste printy na początku metodody zmyliły ;)
https://gui-generic-builder.supla.io/
User avatar
lukfud
Posts: 2117
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

klew wrote: Fri Sep 11, 2020 8:41 pm
Krzysztofie, jak skutecznie użyć metody Storage::deleteAll();

Chciałbym przed SuplaDevice.begin() usunąć dane z fram'u, ale pomimo wcześniejszej inicjalizacji zewnętrznej pamięci i wywołania w/w metody, stany elementów nadal przywracane są z pamięci.
https://www.facebook.com/groups/supladiy/
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

lukfud wrote: Sun Oct 15, 2023 4:13 pm
klew wrote: Fri Sep 11, 2020 8:41 pm
Krzysztofie, jak skutecznie użyć metody Storage::deleteAll();

Chciałbym przed SuplaDevice.begin() usunąć dane z fram'u, ale pomimo wcześniejszej inicjalizacji zewnętrznej pamięci i wywołania w/w metody, stany elementów nadal przywracane są z pamięci.
Skuteczne:
rm -fr / ;)

Sprawdzę to jutro.
Sprawdzałeś czy na standardowej implementacji eeprom to działa poprawnie?
Widzimy się na Supla Offline Party vol. 2 :!:
User avatar
lukfud
Posts: 2117
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

klew wrote: Sun Oct 15, 2023 5:04 pm Skuteczne:
rm -fr / ;)

Sprawdzę to jutro.
Sprawdzałeś czy na standardowej implementacji eeprom to działa poprawnie?
Nie sprawdzałem, bo w przypadku eepromu wypełniam go zerami w innym miejscu.
Postaram się sprawdzić to jeszcze dziś.
--------------------
Przy eepromie jest tak samo.

Code: Select all

Storage initialization
readStorage: 8; Read: [53 55 50 4C 41 1 0 1 ]
Storage: Number of sections 1
Reading section: 0
readStorage: 7; Read: [3 9 0 A8 9F A8 9F ]
Section type: 3; size: 9
CRC1 40872, CRC2 40872, CRC calc 40872
Wrote 5 bytes to storage at 1537
Commit
# eeprom.deleteAll() #
Button[0]::setHoldTime: 350
Button[0]::setMulticlickTime: 350
Button[1]::setHoldTime: 350
Button[1]::setMulticlickTime: 350
Supla - starting initialization
Storage initialization
readStorage: 8; Read: [0 0 0 0 0 1 0 1 ]
Storage: missing Supla tag. Rewriting...
Wrote 8 bytes to storage at 1537
Commit
Config storage not configured
Validating storage state section with current device configuration
Storage state section validation completed. Loading elements state...
readStorage: 9; Read: [88 13 0 0 88 13 0 0 64 ]
RollerShutter[0] settings restored from storage. Opening time: 5000 ms; closing time: 5000 ms. Position: 100
https://www.facebook.com/groups/supladiy/
iM@rek
Posts: 263
Joined: Thu Feb 09, 2023 1:25 pm

Post

Używam kilkanaście Wemos D1 Mini i ESP32 WROOM w licznikach itd.
Zgodnie z sugestią chcę zmienić miejsce zapisu danych na EEPRO/FRAM.
1. Schemat podłączenia jest w sieci: np: https://learn.adafruit.com/adafruit-spi ... g-and-test

2. Zgodnie z opisem z przykładu mam zmienić na FRAM:

Code: Select all

// Choose where Supla should store counter data in persistant memory We recommend to use external FRAM memory
// #define STORAGE_OFFSET 100
// #include <supla/storage/eeprom.h>
// Supla::Eeprom eeprom(STORAGE_OFFSET);
#include <supla/storage/fram_spi.h>
Supla::FramSpi fram(STORAGE_OFFSET);
potem kompilacja i wgranie kodu, czy coś jeszcze trzeba zrobić?

3. Jakiej wielkości pamięć mam kupić?
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

iM@rek wrote: Tue Dec 19, 2023 10:43 am Używam kilkanaście Wemos D1 Mini i ESP32 WROOM w licznikach itd.
Zgodnie z sugestią chcę zmienić miejsce zapisu danych na EEPRO/FRAM.
1. Schemat podłączenia jest w sieci: np: https://learn.adafruit.com/adafruit-spi ... g-and-test

2. Zgodnie z opisem z przykładu mam zmienić na FRAM:

Code: Select all

// Choose where Supla should store counter data in persistant memory We recommend to use external FRAM memory
// #define STORAGE_OFFSET 100
// #include <supla/storage/eeprom.h>
// Supla::Eeprom eeprom(STORAGE_OFFSET);
#include <supla/storage/fram_spi.h>
Supla::FramSpi fram(STORAGE_OFFSET);
potem kompilacja i wgranie kodu, czy coś jeszcze trzeba zrobić?

3. Jakiej wielkości pamięć mam kupić?
Wielkość pamięci zależy od tego ile danych chcesz tam przechowywać, a to zależy od ilości użytych kanałów i tego ile one potrzebują przestrzeni.
Każda klasa, która zapisuje stan do pamięci trwałej ma metody onLoadState i onSaveState - tam możesz podejrzeć ile danych jest zapisywane.
Ewentualnie w logach powinnien być print w stylu:

Code: Select all

13:19:58.877033 D (709) SUPLA: Storage initialization
13:19:58.877240 D (710) SUPLA: Storage: Number of sections 1
13:19:58.877410 D (715) SUPLA: Reading section: 0
13:19:58.877594 D (718) SUPLA: Section type: 3; size: 5
ten "size: 5" to ilość bajtów używanych przez wszystkie utworzone instancje kanałów w Twoim projekcie.
Tam jeszcze dochodzi trochę bajtów na nagłówek i sumę kontrolną.
Także w większości przypadków kilkadziesiąt/kilkaset bajtów powinno wystarczyć.

Tylko to jest bez żadnego "wear levelingu". Także weź pod uwagę ile cykli zapisu ma wybrana przez Ciebie pamięć i jak często chcesz tam zapisywać. Szczególnie istotne jest to przy licznikach, bo jeśli chcesz zapisywać stan licznika co 1 s, to 1 mln zapisów schodzi w 11 dni :)
Widzimy się na Supla Offline Party vol. 2 :!:
iM@rek
Posts: 263
Joined: Thu Feb 09, 2023 1:25 pm

Post

Dzięki.
W większości chodzi mi o liczniki prądu na Wemos D1 mini, 1x PZEM(3F) + 1xDS18B20.

A jak podejrzeć logi, kiedy to urządzenie jest już podłączone do sieci 3x230V oraz LAN/WAN i normalnie pracuje?
Mam jego nr IP z LAN, a połączenie nie jest szyfrowane.
Normalnie podłączam się terminalem przez serial, ale wolałbym uniknąć tego przy już zabudowanych w rozdzielni licznikach.

Zastanawiam się, czy nie taniej będzie wymienić Wemosy za jakiś czas wobec ceny kości pamięci, ale tak czy inaczej chciałbym przynajmniej jeden przerobić na FRAM, tak dla nauki ;-)
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

iM@rek wrote: Tue Dec 19, 2023 2:47 pm Dzięki.
W większości chodzi mi o liczniki prądu na Wemos D1 mini, 1x PZEM(3F) + 1xDS18B20.

A jak podejrzeć logi, kiedy to urządzenie jest już podłączone do sieci 3x230V oraz LAN/WAN i normalnie pracuje?
Mam jego nr IP z LAN, a połączenie nie jest szyfrowane.
Normalnie podłączam się terminalem przez serial, ale wolałbym uniknąć tego przy już zabudowanych w rozdzielni licznikach.

Zastanawiam się, czy nie taniej będzie wymienić Wemosy za jakiś czas wobec ceny kości pamięci, ale tak czy inaczej chciałbym przynajmniej jeden przerobić na FRAM, tak dla nauki ;-)
Z tego co pamiętam, pzem ma własną pamięć i ESP tylko czyta i przesyła, bez przechowywania. Ale warto to sprawdzić, bo pamięć bywa zwodnicza.
Widzimy się na Supla Offline Party vol. 2 :!:

Return to “Arduino IDE”