Storage - czyli przechowywanie danych w urządzeniach

User avatar
veeroos
Posts: 1081
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

Tak Preferences działa na NVS, właśnie wiem że tam odradzają częste zapisy, dlatego szukałem jakiejś alternatywy. Chciałbym tego użyć do licznika energii, który w układzie pomiarowym nie pamięta po resecie aktualnego zużycia. Zużycie miesięczne jest normalnie zapisywane w Cloudzie (chyba). Dlatego cyklicznie co chwilę bym zapisywał dane a po resecie do aktualnego zużycia bym dopisywał zapamiętaną ostatnią przed resetem wartość. Przez Preferences to zrobiłem z zapisem co 5minut, ale nie chcę zamordować pamięci
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Kiedyś pomagałem przy pewnym projekcie w którym trzeba było szybko zapisać wartość licznika. Zrobiliśmy to tak że licznik był w RAMie a sprzęt wykrywał zanik napięcia i dopiero wówczas zapisywany był do flash’a ale tylko gdy występowała różnica w wartościach
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

veeroos wrote: Tue Jan 06, 2026 8:59 am Tak Preferences działa na NVS, właśnie wiem że tam odradzają częste zapisy, dlatego szukałem jakiejś alternatywy. Chciałbym tego użyć do licznika energii, który w układzie pomiarowym nie pamięta po resecie aktualnego zużycia. Zużycie miesięczne jest normalnie zapisywane w Cloudzie (chyba). Dlatego cyklicznie co chwilę bym zapisywał dane a po resecie do aktualnego zużycia bym dopisywał zapamiętaną ostatnią przed resetem wartość. Przez Preferences to zrobiłem z zapisem co 5minut, ale nie chcę zamordować pamięci
Wygląda na to, że zapis do NVS (EEPROM, Preferences) opiera się o wear leveling:

https://docs.espressif.com/projects/es ... lash.html
Note

NVS component includes flash wear levelling by design. Set operations are appending new data to the free space after existing entries. Invalidation of old values doesn't require immediate flash erase operations. The organization of NVS space to pages and entries effectively reduces the frequency of flash erase to flash write operations by a factor of 126.
ESP32 Arduino Preferences Lib also uses NVS, very similar to EEPROM Lib.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

vajera wrote: Tue Jan 06, 2026 10:04 am
Tak, ale ilość zapisów zależy nadal od danych oraz od rozmiaru partycji dla nvs.
Jeśli zysk byłyby te 126 razy, to z 2-3 dni życia układu, będziemy mieli około 1 roku. Nadal mało ;)

Ja tego typu zapis robię na partycji o rozmiarze około 400 kB - to daje żywotność koło 70 lat przy zapisach co kilka sekund.

Można by to rozwiązanie przenieść do "Arduino", ale wymaga ono definiowania własnych układów partycji, co w Arduino chyba do najprostszych nie należało (ale w sumie nigdy tego nie próbowałem)
Najlepsze suple dla Twojego domu :mrgreen:
[email protected]
Posts: 1584
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

https://github.com/serifpersia/esp32partitiontool

Pod starym Arduino IDE (1.8.x) cos nie działało, pod VS code i Platform.io bez problemu
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

klew wrote: Tue Jan 06, 2026 10:09 am
Można by to rozwiązanie przenieść do "Arduino", ale wymaga ono definiowania własnych układów partycji, co w Arduino chyba do najprostszych nie należało (ale w sumie nigdy tego nie próbowałem)
W sumie to nie jest skomplikowane, w bramce Z2S mamy to prawie od początku (custom partition dla 4MB FLASH).

Natomiast doczytałem, że LittleFS również wspiera WL, więc pytanie czy jest sens schodzić aż tak niskopoziomowo?

Z drugiej strony pytanie do Roberta - robisz zapis stanu licznika co 3 sekundy - czy ta częstotliwość pomiaru ma jakąś przewagę nad zapisem np. co 10 sekund? Pytam, bo nie wiem jaką wartość fizyczną mierzy ten licznik i jak dużą zmianę może odnotować w przypadku dziesięciosekundowej przerwy (która zdarzy się pewnie raz na kilka dni/tygodni)?
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

[email protected] wrote: Tue Jan 06, 2026 11:54 am https://github.com/serifpersia/esp32partitiontool

Pod starym Arduino IDE (1.8.x) cos nie działało, pod VS code i Platform.io bez problemu
W Arduino IDE wystarczy edycja pliku partitions.csv.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
[email protected]
Posts: 1584
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

vajera wrote: Tue Jan 06, 2026 12:03 pm
[email protected] wrote: Tue Jan 06, 2026 11:54 am https://github.com/serifpersia/esp32partitiontool

Pod starym Arduino IDE (1.8.x) cos nie działało, pod VS code i Platform.io bez problemu
W Arduino IDE wystarczy edycja pliku partitions.csv.
zawsze wystarczy, ale weź to przeliczaj jak przesuwasz rozmiary :P
User avatar
veeroos
Posts: 1081
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

vajera wrote: Tue Jan 06, 2026 12:02 pm Z drugiej strony pytanie do Roberta - robisz zapis stanu licznika co 3 sekundy - czy ta częstotliwość pomiaru ma jakąś przewagę nad zapisem np. co 10 sekund? Pytam, bo nie wiem jaką wartość fizyczną mierzy ten licznik i jak dużą zmianę może odnotować w przypadku dziesięciosekundowej przerwy (która zdarzy się pewnie raz na kilka dni/tygodni)?
No właśnie może to być co 10 sekund, tak jak wspomniałem wcześniej to jest układ pomiaru energii elektrycznej, zaciekawił mnie też temat:
shimano73 wrote: Tue Jan 06, 2026 10:01 am Kiedyś pomagałem przy pewnym projekcie w którym trzeba było szybko zapisać wartość licznika. Zrobiliśmy to tak że licznik był w RAMie a sprzęt wykrywał zanik napięcia i dopiero wówczas zapisywany był do flash’a ale tylko gdy występowała różnica w wartościach
Bo to by wystarczyło w zupełności, bez kombinowania, tyle czy zdążą się wartości zapisać...


A co do podziału partycji to znalazłem fajne narzędzie które generuje csv.
https://thelastoutpostworkshop.github.i ... onBuilder/
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

A można w Arduino ten plik partycji trzymać w projekcie (obok pliku ino)?
Bo jeśli trzeba modyfikować coś w boardach to 90% ludzi odpada na starcie ;)
Najlepsze suple dla Twojego domu :mrgreen:

Return to “Arduino IDE”