Storage - czyli przechowywanie danych w urządzeniach

lukfud
Posty: 1022
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

pn kwie 05, 2021 7:42 pm

Robert Błaszczak pisze:
pn kwie 05, 2021 7:11 pm
lukfud pisze:
pn kwie 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
Awatar użytkownika
klew
Posty: 2486
Rejestracja: czw cze 27, 2019 12:16 pm

pn kwie 05, 2021 8:05 pm

lukfud pisze:
pn kwie 05, 2021 7:42 pm
Robert Błaszczak pisze:
pn kwie 05, 2021 7:11 pm
lukfud pisze:
pn kwie 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 ;)
krycha88
Posty: 1880
Rejestracja: pt lis 16, 2018 7:25 am

ndz maja 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.

Kod: Zaznacz cały

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

Kod: Zaznacz cały

Wrote 1 bytes to storage at 47
Wrote 1 bytes to storage at 80
to jest normalne?
Wsparcie projektu GUI-Generic ;)
viewtopic.php?f=88&t=8435
krycha88
Posty: 1880
Rejestracja: pt lis 16, 2018 7:25 am

pn maja 10, 2021 10:49 am

krycha88 pisze:
ndz maja 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.

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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.
Wsparcie projektu GUI-Generic ;)
viewtopic.php?f=88&t=8435
Awatar użytkownika
klew
Posty: 2486
Rejestracja: czw cze 27, 2019 12:16 pm

pn maja 10, 2021 11:44 am

krycha88 pisze:
pn maja 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?
krycha88
Posty: 1880
Rejestracja: pt lis 16, 2018 7:25 am

pn maja 10, 2021 11:55 am

klew pisze:
pn maja 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
Wsparcie projektu GUI-Generic ;)
viewtopic.php?f=88&t=8435
Awatar użytkownika
klew
Posty: 2486
Rejestracja: czw cze 27, 2019 12:16 pm

pn maja 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ź.
krycha88
Posty: 1880
Rejestracja: pt lis 16, 2018 7:25 am

pn maja 10, 2021 2:22 pm

klew pisze:
pn maja 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ę:

Kod: Zaznacz cały

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:

Kod: Zaznacz cały

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
Wsparcie projektu GUI-Generic ;)
viewtopic.php?f=88&t=8435
Awatar użytkownika
klew
Posty: 2486
Rejestracja: czw cze 27, 2019 12:16 pm

pn maja 10, 2021 3:49 pm

krycha88 pisze:
pn maja 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
krycha88
Posty: 1880
Rejestracja: pt lis 16, 2018 7:25 am

pn maja 10, 2021 6:49 pm

klew pisze:
pn maja 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 :)
Wsparcie projektu GUI-Generic ;)
viewtopic.php?f=88&t=8435
ODPOWIEDZ

Wróć do „Arduino IDE”