Storage - czyli przechowywanie danych w urządzeniach

User avatar
lukfud
Posts: 2117
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

Robert Błaszczak wrote: Mon Apr 05, 2021 7:11 pm
lukfud wrote: Mon Apr 05, 2021 7:02 pm Czy będziesz dodawał zapis dla pzem'ów?
Jeśli dobrze kojarzę, to PZEM trzyma wartość energii w swojej pamięci. Więc tu nie ma takiej potrzeby.
Ok, dzięki za info.
Widzę, że energię mierzy do 9999,99kWh, a co potem? :)
https://github.com/mandulaj/PZEM-004T-v ... ifications
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: Mon Apr 05, 2021 7:42 pm
Robert Błaszczak wrote: Mon Apr 05, 2021 7:11 pm
lukfud wrote: Mon Apr 05, 2021 7:02 pm Czy będziesz dodawał zapis dla pzem'ów?
Jeśli dobrze kojarzę, to PZEM trzyma wartość energii w swojej pamięci. Więc tu nie ma takiej potrzeby.
Ok, dzięki za info.
Widzę, że energię mierzy do 9999,99kWh, a co potem? :)
https://github.com/mandulaj/PZEM-004T-v ... ifications
Potem trzeba wymienić na nowy ;)
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

napotkałem na dziwny problem lub jest dobrze i zawsze tak było ;)

mam metodę do zapisywani, gdzie _currentWhen to bool.

Code: Select all

void onSaveState() {
  Supla::Storage::WriteState((unsigned char *)&_currentWhen,
                             sizeof(_currentWhen));
}
zmieniam wartość boola to zapis robi mi się dwa razy:

Code: Select all

Wrote 1 bytes to storage at 47
Wrote 1 bytes to storage at 80
to jest normalne?
https://gui-generic-builder.supla.io/
krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

krycha88 wrote: Sun May 09, 2021 7:07 pm napotkałem na dziwny problem lub jest dobrze i zawsze tak było ;)

mam metodę do zapisywani, gdzie _currentWhen to bool.

Code: Select all

void onSaveState() {
  Supla::Storage::WriteState((unsigned char *)&_currentWhen,
                             sizeof(_currentWhen));
}
zmieniam wartość boola to zapis robi mi się dwa razy:

Code: Select all

Wrote 1 bytes to storage at 47
Wrote 1 bytes to storage at 80
to jest normalne?
@klew wypowiesz się? Bo nie wiem czy to błąd po mojej stronie czy tylko jakieś podwójne sprawdzenie zapisanej wartości.
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: Mon May 10, 2021 10:49 am @klew wypowiesz się? Bo nie wiem czy to błąd po mojej stronie czy tylko jakieś podwójne sprawdzenie zapisanej wartości.
Rzuciłem okiem na kod biblioteki i raczej nie powinno tam być podwójnego zapisu.

Zapis pojawia się na dwóch różnych adresach.
Czy te dwa priny pojawiają się zawsze razem? Dasz link do całego kodu tej klasy?
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Mon May 10, 2021 11:44 am Zapis pojawia się na dwóch różnych adresach.
Czy te dwa priny pojawiają się zawsze razem? Dasz link do całego kodu tej klasy?
Akurat tą zmienną mam tylko lokalnie bo napotkałem na ten problem ją dodając. Ale z tego co zaobserwowałem to dla pozostałych zmiennych z klasy działa tak samo

https://github.com/krycha88/GUI-Generic ... 12.cpp#L91

Jeszcze co mnie zdziwiło to, że przy starcie metoda HLW_8012::onLoadState() wykonuje się dwa razy.

Może to jest spowodowane, że definuję wskaźnik do klasy?
https://github.com/krycha88/GUI-Generic ... GUI.h#L157
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

onLoadState jest wołane tylko raz w trakcie "SuplaDevice.begin".
Jedyne co mi przychodzi do głowy, to to, że w jakiś sposób rejestrujesz ten obiekt dwa razy jako "Element".

Ok, chyba znalazłem ;)
https://github.com/krycha88/GUI-Generic ... 8012.h#L33

Dodałeś drugi raz dziedziczenie po Element. OnePhaseElectricityMeter dziedziczy po ElectricityMeter, które dziedziczy po Element.
Wyrzuć to drugie dziedziczenie po Element i sprawdź.
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Mon May 10, 2021 12:15 pm onLoadState jest wołane tylko raz w trakcie "SuplaDevice.begin".
Jedyne co mi przychodzi do głowy, to to, że w jakiś sposób rejestrujesz ten obiekt dwa razy jako "Element".

Ok, chyba znalazłem ;)
https://github.com/krycha88/GUI-Generic ... 8012.h#L33

Dodałeś drugi raz dziedziczenie po Element. OnePhaseElectricityMeter dziedziczy po ElectricityMeter, które dziedziczy po Element.
Wyrzuć to drugie dziedziczenie po Element i sprawdź.
Super dzięki teraz mam jeden zapis :)

Ale mam jeszcze problem z przywracaniem zapisanych wartości.
Przy zapisie wyświetla się:

Code: Select all

Initialization of elementStateOffset: 8
Update Storage preamble
Wrote 8 bytes to storage at 0
Wrote 8 bytes to storage at 15
Wrote 8 bytes to storage at 23
Wrote 8 bytes to storage at 31
Wrote 8 bytes to storage at 39
Wrote 1 bytes to storage at 47
Wrote 8 bytes to storage at 56
Wrote 8 bytes to storage at 64
Wrote 8 bytes to storage at 72
Wrote 7 bytes to storage at 8
Commit
zapisuję tylko 5 zmiennych pomimo to zapisuje się ich więcej. Nie mam dodanego innego kanału który by to mógł powodować.
https://github.com/krycha88/GUI-Generic ... 12.cpp#L94

przy odczytywaniu dostaję błąd:

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 41 0 0 0 0 0 ]
Section type: 3; size: 65
Validating storage state section with current device configuration
Element state section size doesn't match current device configuration
Coś to nie chce ze mną współpracować :D
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: Mon May 10, 2021 2:22 pm Coś to nie chce ze mną współpracować :D
Musisz pisać i czytać tyle samo bajtów. Zapis musi być bez warunków - aby za każdym razem pisać tyle samo.

Przy pierwszym zapisie inicjalizującym zapis stanu będzie trochę więcej tych printów, bo zapisuje się jeszcze nagłówek, rozmiar sekcji itp
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Mon May 10, 2021 3:49 pm Musisz pisać i czytać tyle samo bajtów. Zapis musi być bez warunków - aby za każdym razem pisać tyle samo.

Przy pierwszym zapisie inicjalizującym zapis stanu będzie trochę więcej tych printów, bo zapisuje się jeszcze nagłówek, rozmiar sekcji itp
Dodałem trochę printów i doszedłem, że jak to zawsze błąd po mojej stronie ;) Problem powodował CSE7766 przy zapisywaniu nie sprawdzałem czy GPIO jest wybrane i zawsze dodawałem go.

Dzięki za pomoc :)
https://gui-generic-builder.supla.io/

Return to “Arduino IDE”