Storage - czyli przechowywanie danych w urządzeniach

nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

Witam
Chciałbym użyć klasy storage do zapisania wartości zmiennej np int mojaZmienna=2;
Przeglądałem metody w tej klasie. Czy to metoda writeStorage()?
Czy mógłby ktoś podać przykład jak taki zapis powinien wyglądać?
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

nebraska wrote: Mon Dec 08, 2025 8:53 pm Witam
Chciałbym użyć klasy storage do zapisania wartości zmiennej np int mojaZmienna=2;
Przeglądałem metody w tej klasie. Czy to metoda writeStorage()?
Czy mógłby ktoś podać przykład jak taki zapis powinien wyglądać?
A czemu nie chcesz używać Config? On raczej służy do przechowywania takich rzeczy
Najlepsze suple dla Twojego domu :mrgreen:
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

klew wrote: Mon Dec 08, 2025 9:22 pm
nebraska wrote: Mon Dec 08, 2025 8:53 pm Witam
Chciałbym użyć klasy storage do zapisania wartości zmiennej np int mojaZmienna=2;
Przeglądałem metody w tej klasie. Czy to metoda writeStorage()?
Czy mógłby ktoś podać przykład jak taki zapis powinien wyglądać?
A czemu nie chcesz używać Config? On raczej służy do przechowywania takich rzeczy
W sumie nie pomyslalem o tym.
Czy tak powinien wyglądać zapis?
Metoda setInt32() przyjmuje dwa argumenty. Zapis zmiennej i nie wiem co ma być w tej drugiej?

Code: Select all

#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/storage/littlefs_config.h>
#include <supla/control/action_trigger.h>
#include <supla/control/button.h>
#include <supla/storage/eeprom.h>

#define STORAGE_OFFSET 512
Supla::Eeprom eeprom(STORAGE_OFFSET);

#define BUTTON_PIN 4
auto switch1 = new Supla::Control::Button(BUTTON_PIN, true, true);

bool flaga{false};

enum default_actions { BUTTON1_CLICK1 };
class addedActionsClass : public Supla::ActionHandler, public Supla::Element {
public:
  addedActionsClass() {}
  void handleAction(int event, int action) { // obsluga przyciskow z Supli

    if (action == BUTTON1_CLICK1) {
      printf("Klik x1 \n");
      flaga = !flaga;
    }

  }
};
addedActionsClass *custAct = new addedActionsClass;


void setup() {
  Serial.begin(115200); 

  switch1->setMulticlickTime(500, false);
  switch1->addAction(BUTTON1_CLICK1, custAct, Supla::ON_CLICK_1); 
 
  SuplaDevice.begin();                   
}
void loop() {

  if(!flaga) {
    printf("zapis do eeprom \n");
    flaga= !flaga;
 
   int32_t zmienna = 3;
   Supla::Storage::ConfigInstance()->setInt32( zmienna);
  }}
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

nebraska wrote: Mon Dec 08, 2025 9:37 pm
Szukasz pliku nagłówkowego i czytasz:

Code: Select all

  virtual bool setInt32(const char* key, const int32_t value) = 0;
:)

key to jakiś klucz (tekst) do 15 znaków, którym identyfikujesz dany parametr, np

Code: Select all

   cfg->setInt32("moja_zm_1", 42);
   cfg->saveWithDelay(2000);
Najlepsze suple dla Twojego domu :mrgreen:
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

klew wrote: Mon Dec 08, 2025 9:57 pm
nebraska wrote: Mon Dec 08, 2025 9:37 pm
Szukasz pliku nagłówkowego i czytasz:

Code: Select all

  virtual bool setInt32(const char* key, const int32_t value) = 0;
:)

key to jakiś klucz (tekst) do 15 znaków, którym identyfikujesz dany parametr, np

Code: Select all

   cfg->setInt32("moja_zm_1", 42);
   cfg->saveWithDelay(2000);
Wgrałem kod i procek ciągle się resetuje.

Code: Select all

#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/storage/littlefs_config.h>
#include <supla/control/action_trigger.h>
#include <supla/control/button.h>
#include <supla/storage/eeprom.h>

#define STORAGE_OFFSET 512
Supla::Eeprom eeprom(STORAGE_OFFSET);

#define BUTTON_PIN 4
auto switch1 = new Supla::Control::Button(BUTTON_PIN, true, true);

bool flaga{false};
int32_t zmienna = 1;

auto cfg = Supla::Storage::ConfigInstance();


enum default_actions { BUTTON1_CLICK1 };
class addedActionsClass : public Supla::ActionHandler, public Supla::Element {
public:
  addedActionsClass() {}
  void handleAction(int event, int action) { // obsluga przyciskow z Supli

    if (action == BUTTON1_CLICK1) {
      printf("Klik x1 \n");
      flaga = !flaga;
      zmienna=2;
    }

  }
};
addedActionsClass *custAct = new addedActionsClass;


void setup() {
  Serial.begin(115200); 
  Supla::Storage::Init();

  switch1->setMulticlickTime(500, false);
  switch1->addAction(BUTTON1_CLICK1, custAct, Supla::ON_CLICK_1); 
 
  Serial.print("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEprom: ");
  Serial.println(zmienna);
  
  SuplaDevice.begin();                   
}
void loop() {

  if(!flaga) {
    printf("zapis do eeprom \n");
    flaga= !flaga;
   
   cfg->setInt32("moja_zm_1", zmienna);
   cfg->saveWithDelay(2000);
   
   
  }}

 
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

nebraska wrote: Mon Dec 08, 2025 10:10 pm
Najpierw musisz stworzyć instancję klasy typu "Config" i dopiero potem możesz pobrać na niego wskaźnik. Obecnie jest tam pewnie nullptr, na którym próbujesz działać -> crash.

Zobacz sobie przykłady WebInterface, albo CustomInputs.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
vajera
Posts: 7286
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

nebraska wrote: Mon Dec 08, 2025 10:10 pm Wgrałem kod i procek ciągle się resetuje.

Code: Select all

#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/storage/littlefs_config.h>
#include <supla/control/action_trigger.h>
#include <supla/control/button.h>
#include <supla/storage/eeprom.h>

#define STORAGE_OFFSET 512
Supla::Eeprom eeprom(STORAGE_OFFSET);

#define BUTTON_PIN 4
auto switch1 = new Supla::Control::Button(BUTTON_PIN, true, true);

bool flaga{false};
int32_t zmienna = 1;

auto cfg = Supla::Storage::ConfigInstance();


enum default_actions { BUTTON1_CLICK1 };
class addedActionsClass : public Supla::ActionHandler, public Supla::Element {
public:
  addedActionsClass() {}
  void handleAction(int event, int action) { // obsluga przyciskow z Supli

    if (action == BUTTON1_CLICK1) {
      printf("Klik x1 \n");
      flaga = !flaga;
      zmienna=2;
    }

  }
};
addedActionsClass *custAct = new addedActionsClass;


void setup() {
  Serial.begin(115200); 
  Supla::Storage::Init();

  switch1->setMulticlickTime(500, false);
  switch1->addAction(BUTTON1_CLICK1, custAct, Supla::ON_CLICK_1); 
 
  Serial.print("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEprom: ");
  Serial.println(zmienna);
  
  SuplaDevice.begin();                   
}
void loop() {

  if(!flaga) {
    printf("zapis do eeprom \n");
    flaga= !flaga;
   
   cfg->setInt32("moja_zm_1", zmienna);
   cfg->saveWithDelay(2000);
   
   
  }}

 
To:

Code: Select all

addedActionsClass *custAct = new addedActionsClass;
zamień na to:

Code: Select all

addedActionsClass *custAct = new addedActionsClass();
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: 7286
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

klew wrote: Mon Dec 08, 2025 10:25 pm
nebraska wrote: Mon Dec 08, 2025 10:10 pm
Najpierw musisz stworzyć instancję klasy typu "Config" i dopiero potem możesz pobrać na niego wskaźnik. Obecnie jest tam pewnie nullptr, na którym próbujesz działać -> crash.

Zobacz sobie przykłady WebInterface, albo CustomInputs.
To ma ogarnięte:

Code: Select all

auto cfg = Supla::Storage::ConfigInstance();
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

vajera wrote: Mon Dec 08, 2025 10:27 pm
nebraska wrote: Mon Dec 08, 2025 10:10 pm Wgrałem kod i procek ciągle się resetuje.

Code: Select all

#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/storage/littlefs_config.h>
#include <supla/control/action_trigger.h>
#include <supla/control/button.h>
#include <supla/storage/eeprom.h>

#define STORAGE_OFFSET 512
Supla::Eeprom eeprom(STORAGE_OFFSET);

#define BUTTON_PIN 4
auto switch1 = new Supla::Control::Button(BUTTON_PIN, true, true);

bool flaga{false};
int32_t zmienna = 1;

auto cfg = Supla::Storage::ConfigInstance();


enum default_actions { BUTTON1_CLICK1 };
class addedActionsClass : public Supla::ActionHandler, public Supla::Element {
public:
  addedActionsClass() {}
  void handleAction(int event, int action) { // obsluga przyciskow z Supli

    if (action == BUTTON1_CLICK1) {
      printf("Klik x1 \n");
      flaga = !flaga;
      zmienna=2;
    }

  }
};
addedActionsClass *custAct = new addedActionsClass;


void setup() {
  Serial.begin(115200); 
  Supla::Storage::Init();

  switch1->setMulticlickTime(500, false);
  switch1->addAction(BUTTON1_CLICK1, custAct, Supla::ON_CLICK_1); 
 
  Serial.print("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEprom: ");
  Serial.println(zmienna);
  
  SuplaDevice.begin();                   
}
void loop() {

  if(!flaga) {
    printf("zapis do eeprom \n");
    flaga= !flaga;
   
   cfg->setInt32("moja_zm_1", zmienna);
   cfg->saveWithDelay(2000);
   
   
  }}

 
To:

Code: Select all

addedActionsClass *custAct = new addedActionsClass;
zamień na to:

Code: Select all

addedActionsClass *custAct = new addedActionsClass();
Zmienione. Nie mam pomysłu skąd ten reset :roll:
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

nebraska wrote: Mon Dec 08, 2025 10:37 pm
Zmienione. Nie mam pomysłu skąd ten reset :roll:
robiłeś reset pamięci flash?

Return to “Arduino IDE”