ESP32: SPIFFS CSV in Custom Array einlesen

Hallo, ich speichere meine Sensoren mit der Zuordnung (eindeutige ID, was für ein Sensor, die Zone, etc.) in einer CSV Formatierung ab:

ID;TYPE;ZONE;BIT;PRO;TIME
4543828;0;1;24;1;470
11969537;0;1;24;1;364
11969538;0;1;24;1;364

Maximal erlaubt sind 100 eingebuchte Sensoren, löst ein Sensor aus wird er rausgesucht und ein Alarm ausgelöst...

Jetzt kann ich einfach jedesmal meine Spiffs Datei durchsuchen, aber ich will ja auch evtl. Sachen ändern und zurückschreiben, also möchte ich die Datei komplett in den SRAM einlesen.

Ein Datensatz besteht aus einer Long und 5 INT, also habe ich mir gedacht:

unsigned long sensor_l [100];
int           sensor_i [100][5];

Kann ich auch ein Array bauen das eine Long und 5 Int hat? Also aus verschiedenen Datentypen?

Kann man das Array auch zur Laufzeit in einer eigenen Void generieren, so etwa:

void sensor_eingebucht(){
int datensaetze = 38;
long sensor_l [datensaetze];
sensor_i [datensaetze][5];
// ...
}

Hi

Du kannst ein Array aus einem eigenem Datentyp bauen, Welcher eben aus verschiedenen Datentypen besteht.
Das sollte mit struct gehen - damit definierst Du eigene Datentypen.

//Sensoren
typedef struct {
  alias bezeichner;               //So heißt diese Zeile / Zugriff über diesen 'Namen'
  union {                     //Knoten, wo dieser Sensor angeschlossen ist
    uint16_t _word;           //wir benutzen nur die Standard-ID (11 Bit), sonst bräuchten wir hier uint32_t (für 29 Bit)
    byte _byte[2];
  } knotennummer;
  byte sensornummer;          //Nummer des Sensor (externe Nummer)
  uint32_t lastseen;          //zuletzt gültigen Messwert gesehen um
  union {
    int16_t rawword;          //raw-Wert
    byte rawbyte[2];          //raw-Bytes
  } raw;
  byte changeit;              //Bei Änderungsantrag wird hier ein Wert eingetragen (RND), Der bei der Änderung passen muß.
} Tsensor;
Tsensor tempsensor[] = {
  /*
     Knoten-Nr + Relais-ID (externe ID)
               Lastseen - wann wurde der Sensor zuletzt hier eingetragen
                  RAW-Wert des Sensor (bei DS18B20 Temperatur in 1/16tel Grad)
  */
  {T0, 0xe2, 0xFF, 0, 0, 0},   //Platinenfühler E2 - hier Sensor 0

  //Sensoren 0-4 an Thermischer Anlage, 0-2 Module, 3=Außen, 4=Platine

  {T1, 0xe1, 1, 0,  0, 0},    //TH-Modul 1
  {T2, 0xe1, 2, 0,  0, 0},    //TH-Modul 2
//...
}

Zugegriffen wird dann mittels
tempsensor[ x ].raw.rawword
Wobei x die Nummer des Sensor ist, hier im Beispiel 0...2 (da drei Sensoren eingetragen sind - die Bezeichnung T0,T1,T2 wird gerade erst frisch eingearbeitet, könnte auch wild gemischt sein, ist eine enum-Aufzählung)

MfG

postmaster-ino:
Hi
Du kannst ein Array aus einem eigenem Datentyp bauen, Welcher eben aus verschiedenen Datentypen besteht.
Das sollte mit struct gehen - damit definierst Du eigene Datentypen.

Uh, ja ich kanns lesen, werd es versuchen, Danke.