Storage - czyli przechowywanie danych w urządzeniach

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

Post

klew wrote: Tue Dec 09, 2025 6:15 am
nebraska wrote: Mon Dec 08, 2025 11:13 pm Na logach nic nie widać, żeby zapisywało do eeprom. Po resecie zmienna cały czas na serialu widze taka sama.
A masz gdzieś odczyt pamięci?
Tak, używam metody cfg->getInt8("moja_zm_1", &zmienna); chyba że źle interpretuje pliki źródłowe :roll:

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);
Supla::LittleFsConfig configSupla(2048);

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

bool flaga{false};
int8_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 = true;
    }

  }
};
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); 

  cfg->getInt8("moja_zm_1", &zmienna);

if(zmienna == 3){
  Serial.print("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEprom: ");
  Serial.println(zmienna);
    }
  
  SuplaDevice.begin();                   
}
void loop() {

  if(flaga) {
    printf("zapis do eeprom \n");
    flaga= false;
    zmienna = 3;
    Serial.println(zmienna);
    
     cfg->setInt8("moja_zm_1", zmienna);
     cfg->saveWithDelay(200);
  }
}

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: Tue Dec 09, 2025 11:48 am
Wrzuć logi ze startu tego urządzenia.
Najlepsze suple dla Twojego domu :mrgreen:
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

klew wrote: Tue Dec 09, 2025 12:18 pm
nebraska wrote: Tue Dec 09, 2025 11:48 am
Wrzuć logi ze startu tego urządzenia.
Dałem ciała. Przeglądałem jeszcze źródła, ale nie wiedziałem do końca. Myślałem że bez SuplaDevice.iterate(); też to zadziała że po prostu biblia wykona ten zapis.
Dodałem w loop i wygląda na to że jest zapis. Dziękuje Krzysztof jak zawsze na 6.
Jeszcze mam pytanie odnosząc się do kolegi postu @zzrr. Czy taki zapis jest prawidłowy?

Code: Select all

Supla::Config *cfg = nullptr;

void setup()
 { Supla::Storage::Init();
cfg = Supla::Storage::ConfigInstance();
}

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 0 0 0 0 0 0 ]
Section type: 3; size: 0
storedCRC 0, CRC calc 65535
LittleFsConfig: file "/supla-dev.cfg" size 109
LittleFsConfig: initializing storage from file...
LittleFsConfig: init result success
Button[0] setMulticlickTime: 500
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEprom: 3
 *** Supla - starting initialization (platform 0)
Clock not configured, using default clock
SD: add flag DEVICE_CONFIG_SUPPORTED
SD: add flag CALCFG_RESTART_DEVICE
 *** Supla - Config initalization
SD: add flag CALCFG_ENTER_CFG_MODE
SD: add flag CALCFG_FACTORY_RESET_SUPPORTED
Automatic firmware update is disabled
Device mode: 0
Config incomplete: missing server
Config incomplete: missing email
Security level: Supla CA
 *** Supla - Config load for elements
 Button[0] setButtonType: monostable (0)
Button[0] enabling IN as config button
RemoteDeviceConfig: Registering field 0x000000010
Clock: automaticTimeSync: 1
 *** Supla - Config load for elements done
 *** Supla - Load state storage
Validating storage state section with current device configuration
Storage state section validation successful
 *** Supla - Load state storage done
 *** Supla - Init elements
Button[0]: Initialized: pin 4, pullUp 1, invertLogic 1, state 1
 *** Supla - Init elements done
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: Tue Dec 09, 2025 1:02 pm Dałem ciała. Przeglądałem jeszcze źródła, ale nie wiedziałem do końca. Myślałem że bez SuplaDevice.iterate(); też to zadziała że po prostu biblia wykona ten zapis.
Dodałem w loop i wygląda na to że jest zapis. Dziękuje Krzysztof jak zawsze na 6.
Jeszcze mam pytanie odnosząc się do kolegi postu @zzrr. Czy taki zapis jest prawidłowy?

Code: Select all

Supla::Config *cfg = nullptr;

void setup()
 { Supla::Storage::Init();
cfg = Supla::Storage::ConfigInstance();
}
Tak, to jest poprawne.
Najlepsze suple dla Twojego domu :mrgreen:
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

klew wrote: Tue Dec 09, 2025 1:11 pm
nebraska wrote: Tue Dec 09, 2025 1:02 pm Dałem ciała. Przeglądałem jeszcze źródła, ale nie wiedziałem do końca. Myślałem że bez SuplaDevice.iterate(); też to zadziała że po prostu biblia wykona ten zapis.
Dodałem w loop i wygląda na to że jest zapis. Dziękuje Krzysztof jak zawsze na 6.
Jeszcze mam pytanie odnosząc się do kolegi postu @zzrr. Czy taki zapis jest prawidłowy?

Code: Select all

Supla::Config *cfg = nullptr;

void setup()
 { Supla::Storage::Init();
cfg = Supla::Storage::ConfigInstance();
}
Tak, to jest poprawne.
Dziękuje.
Czy jest możliwość w Supli wyłączenia logów. Jeśli tak to w jakim pliku źródłowym szukać?
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

nebraska wrote: Tue Dec 09, 2025 1:24 pm Czy jest możliwość w Supli wyłączenia logów. Jeśli tak to w jakim pliku źródłowym szukać?
logów jako tako to chyba nie wyłączysz w plikach źródłowych. Możesz czasami co najwyżej zablokować w mikrokontrolerze czy będzie Ci wyrzucał logi na UART czy USB. Sam sposób zrobienia zależy też od tego jaki używasz Interface do programowania PlatformIO, ArduinoIDE i tego jakiego to dotyczy mikrokontrolera. Czemu chcesz w to wchodzić? Po co chcesz sobie robotę dodawać?
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

zzrr wrote: Tue Dec 09, 2025 1:59 pm
nebraska wrote: Tue Dec 09, 2025 1:24 pm Czy jest możliwość w Supli wyłączenia logów. Jeśli tak to w jakim pliku źródłowym szukać?
logów jako tako to chyba nie wyłączysz w plikach źródłowych. Możesz czasami co najwyżej zablokować w mikrokontrolerze czy będzie Ci wyrzucał logi na UART czy USB. Sam sposób zrobienia zależy też od tego jaki używasz Interface do programowania PlatformIO, ArduinoIDE i tego jakiego to dotyczy mikrokontrolera. Czemu chcesz w to wchodzić? Po co chcesz sobie robotę dodawać?
Czasami jak piszę swoją część programu razem z Supla wgrywam sprawdzam na bieżąco kod to myślę że ułatwiłoby to debugowanie swojej częsci kodu. Supla wypluwa sporo na UART i cięzko czyta się wszystko. W gąszczu tych wszystkich danych z UART trzeba sie wpatrywać dobrze w środowisku Arduino IDE.
User avatar
vajera
Posts: 7285
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

nebraska wrote: Tue Dec 09, 2025 2:59 pm
zzrr wrote: Tue Dec 09, 2025 1:59 pm
nebraska wrote: Tue Dec 09, 2025 1:24 pm Czy jest możliwość w Supli wyłączenia logów. Jeśli tak to w jakim pliku źródłowym szukać?
logów jako tako to chyba nie wyłączysz w plikach źródłowych. Możesz czasami co najwyżej zablokować w mikrokontrolerze czy będzie Ci wyrzucał logi na UART czy USB. Sam sposób zrobienia zależy też od tego jaki używasz Interface do programowania PlatformIO, ArduinoIDE i tego jakiego to dotyczy mikrokontrolera. Czemu chcesz w to wchodzić? Po co chcesz sobie robotę dodawać?
Czasami jak piszę swoją część programu razem z Supla wgrywam sprawdzam na bieżąco kod to myślę że ułatwiłoby to debugowanie swojej częsci kodu. Supla wypluwa sporo na UART i cięzko czyta się wszystko. W gąszczu tych wszystkich danych z UART trzeba sie wpatrywać dobrze w środowisku Arduino IDE.
Wstaw sobie dodatkowe znaczniki dla swoich logów, np.

Code: Select all

"<<<<<<<<<<<<<<<<<<<<<<<nebraska LOG ON>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
...
"<<<<<<<<<<<<<<<<<<<<<<<nebraska LOG OFF>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
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: Tue Dec 09, 2025 3:07 pm
nebraska wrote: Tue Dec 09, 2025 2:59 pm
zzrr wrote: Tue Dec 09, 2025 1:59 pm
logów jako tako to chyba nie wyłączysz w plikach źródłowych. Możesz czasami co najwyżej zablokować w mikrokontrolerze czy będzie Ci wyrzucał logi na UART czy USB. Sam sposób zrobienia zależy też od tego jaki używasz Interface do programowania PlatformIO, ArduinoIDE i tego jakiego to dotyczy mikrokontrolera. Czemu chcesz w to wchodzić? Po co chcesz sobie robotę dodawać?
Czasami jak piszę swoją część programu razem z Supla wgrywam sprawdzam na bieżąco kod to myślę że ułatwiłoby to debugowanie swojej częsci kodu. Supla wypluwa sporo na UART i cięzko czyta się wszystko. W gąszczu tych wszystkich danych z UART trzeba sie wpatrywać dobrze w środowisku Arduino IDE.
Wstaw sobie dodatkowe znaczniki dla swoich logów, np.

Code: Select all

"<<<<<<<<<<<<<<<<<<<<<<<nebraska LOG ON>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
...
"<<<<<<<<<<<<<<<<<<<<<<<nebraska LOG OFF>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
Dokładnie tat robie. Jeszcze mam ostatnie pytanie. Ostatnio czytam o konstruktorach. Czy taki zapis jest poprwany?

Code: Select all

class MojaKlasa {

private:
uint8_t zmiennaNr1;
uint8_t zmiennaNr2;

MojaKlasa(uint8_t zmiennaNr1 = 0, uint8_t zmiennaNr2 = -1) 
: zmiennaNr1(zmiennaNr1), zmiennaNr2(zmiennaNr2) {

}
};
User avatar
vajera
Posts: 7285
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

nebraska wrote: Tue Dec 09, 2025 3:35 pm Dokładnie tat robie. Jeszcze mam ostatnie pytanie. Ostatnio czytam o konstruktorach. Czy taki zapis jest poprwany?

Code: Select all

class MojaKlasa {

private:
uint8_t zmiennaNr1;
uint8_t zmiennaNr2;

MojaKlasa(uint8_t zmiennaNr1 = 0, uint8_t zmiennaNr2 = -1) 
: zmiennaNr1(zmiennaNr1), zmiennaNr2(zmiennaNr2) {

}
};
Formalnie jest poprawny, ale:

1. nie utworzysz obiektu takiej klasy ponieważ jej konstruktor jest prywatny - proponuję :

Code: Select all

class MojaKlasa {

public:
MojaKlasa(uint8_t zmiennaNr1 = 0, uint8_t zmiennaNr2 = -1) 
: zmiennaNr1(zmiennaNr1), zmiennaNr2(zmiennaNr2) {
}

private:
uint8_t zmiennaNr1;
uint8_t zmiennaNr2;
};
Druga kwestia - C++ pozwala na taką konwencję, ale jak zawsze się boję, że mi się to w którymś momencie pomiesza, więc osobiście zrobiłbym tak:

Code: Select all

class MojaKlasa {

public:
MojaKlasa(uint8_t zmiennaNr1 = 0, uint8_t zmiennaNr2 = -1) 
: _zmiennaNr1(zmiennaNr1), _zmiennaNr2(zmiennaNr2) {
}

private:
uint8_t _zmiennaNr1;
uint8_t _zmiennaNr2;
};
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277

Return to “Arduino IDE”