Storage - czyli przechowywanie danych w urządzeniach

krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Chciałem zapisać wartość double za pomocą:

Kod: Zaznacz cały

Supla::Storage::WriteState((unsigned char *)&current_multi, sizeof(current_multi));

Supla::Storage::ReadState((unsigned char *)&current_multi, sizeof(current_multi));

double current_multi;
przy próbie odczytywania dostaję błąd: Warning! Attempt to read state outside of section size

Więc jak to zrobić aby było dobrze? :)
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

krycha88 pisze: pt gru 25, 2020 7:23 pm Chciałem zapisać wartość double za pomocą:

Kod: Zaznacz cały

Supla::Storage::WriteState((unsigned char *)&current_multi, sizeof(current_multi));

Supla::Storage::ReadState((unsigned char *)&current_multi, sizeof(current_multi));

double current_multi;
przy próbie odczytywania dostaję błąd: Warning! Attempt to read state outside of section size

Więc jak to zrobić aby było dobrze? :)
Nie wiem. Powinno działać ;). A jesteś pewien, że pierwszy zapis się wykonał? Jeśli tak, to podeślij większy fragment kodu
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

klew pisze: pt gru 25, 2020 11:44 pm
krycha88 pisze: pt gru 25, 2020 7:23 pm Chciałem zapisać wartość double za pomocą:

Kod: Zaznacz cały

Supla::Storage::WriteState((unsigned char *)&current_multi, sizeof(current_multi));

Supla::Storage::ReadState((unsigned char *)&current_multi, sizeof(current_multi));

double current_multi;
przy próbie odczytywania dostaję błąd: Warning! Attempt to read state outside of section size

Więc jak to zrobić aby było dobrze? :)
Nie wiem. Powinno działać ;). A jesteś pewien, że pierwszy zapis się wykonał? Jeśli tak, to podeślij większy fragment kodu
current_multi była zmienną globalną, jeżeli zmieniłem to w taki sposób to już działa:

Kod: Zaznacz cały

  void onLoadState() {
    double _current_multi;
    Supla::Storage::ReadState((unsigned char *)&_current_multi, sizeof(_current_multi));
    current_multi = _current_multi;
  }
  
  double current_multi;
Czy jest możliwość wymuszenia zapisania do eeproma niezależnie od ustawionego czasu setStateSavePeriod ??
https://gui-generic-builder.supla.io/
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Jeszcze raz pozwolę się zapytać. Czy jest możliwość wymuszenia zapisania do eeproma niezależnie od ustawionego czasu setStateSavePeriod??

Próbowałem wykorzystać ten metody:

Kod: Zaznacz cały

Supla::Storage::SaveStateAllowed(0);
Supla::Storage::FinalizeSaveState();
zapisanie się powodzi ale przy wczytaniu wartości dostaję błąd:
"Validating storage state section with current device configuration
Element state section size doesn't match current device configuration"

da się to jakoś ugryźć?
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

krycha88 pisze: pn gru 28, 2020 9:31 am Jeszcze raz pozwolę się zapytać. Czy jest możliwość wymuszenia zapisania do eeproma niezależnie od ustawionego czasu setStateSavePeriod??

Próbowałem wykorzystać ten metody:

Kod: Zaznacz cały

Supla::Storage::SaveStateAllowed(0);
Supla::Storage::FinalizeSaveState();
zapisanie się powodzi ale przy wczytaniu wartości dostaję błąd:
"Validating storage state section with current device configuration
Element state section size doesn't match current device configuration"

da się to jakoś ugryźć?
Dodam metodę, która taki zapis wymusi. Ręcznie musiałbyś wykonać tą sekwencję:

Kod: Zaznacz cały

 Supla::Storage::PrepareState();
    for (auto element = Supla::Element::begin(); element != nullptr;
         element = element->next()) {
      element->onSaveState();
    }
    Supla::Storage::FinalizeSaveState();
 
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: pn gru 28, 2020 10:22 am Dodam metodę, która taki zapis wymusi.
Przy okazji, jak będziesz się do tego zabierał, to może auto save dla rolet po zmianie położenia?
https://www.facebook.com/groups/supladiy/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

lukfud pisze: pn gru 28, 2020 11:06 am
klew pisze: pn gru 28, 2020 10:22 am Dodam metodę, która taki zapis wymusi.
Przy okazji, jak będziesz się do tego zabierał, to może auto save dla rolet po zmianie położenia?
A co to zmienia?
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: pn gru 28, 2020 11:44 am A co to zmienia?
Nie rozumiem pytania ;)
https://www.facebook.com/groups/supladiy/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

lukfud pisze: pn gru 28, 2020 11:50 am
klew pisze: pn gru 28, 2020 11:44 am A co to zmienia?
Nie rozumiem pytania ;)
Po co zapis po zakończeniu ruchu? Co to zmienia względem aktualnej implementacji? W czym jest lepsze?
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: pn gru 28, 2020 12:16 pm
lukfud pisze: pn gru 28, 2020 11:50 am
klew pisze: pn gru 28, 2020 11:44 am A co to zmienia?
Nie rozumiem pytania ;)
Po co zapis po zakończeniu ruchu? Co to zmienia względem aktualnej implementacji? W czym jest lepsze?
Gdyby na urządzeniu oprócz rolety pojawił się inny element, dla którego chcielibyśmy ustawić interwał np. 2h, to dla rolety mógłby być on już za długi.
https://www.facebook.com/groups/supladiy/
ODPOWIEDZ

Wróć do „Arduino IDE”