Sgp30 with dht11 sensor

Hi everyone

Following various posts I created this little code to make a sgp30 sensor work with a dht11.
I removed everything in the “void loop” to make it work with Blynk and used Blynktimer.
Reading the sensor instructions of the SGP30 sensor it is recommended that it work together with a temperature and humidity sensor but I need help.
I don’t know how to connect the two sensors in the code.
Someone has already done this?
Always on the instructions it is advisable to record the value of the SGP30 sensor to prevent it from losing all values if the power supply fails. This sensor is stable if it is switched on for a long time (12 hours and more)
Here too I need help I don’t know where to record a value so that turning off the power does not lose the data

Thi is my code:

#define BLYNK_TEMPLATE_ID "xxxxxxxxxxxxxx"
#define BLYNK_DEVICE_NAME "xxxxxxxxxxxxx"
#include <Wire.h>
#include "Adafruit_SGP30.h"
#include <BlynkSimpleEsp8266.h>
#include "stationCredentials.h"
#include "DHT.h"


/* DHT11*/
#define DHTPIN D3  
#define DHTTYPE DHT11 
float airHum = 0;
float airTemp = 0;
DHT dht(DHTPIN, DHTTYPE);

Adafruit_SGP30 sgp;
BlynkTimer timer;

/* return absolute humidity [mg/m^3] with approximation formula
* @param temperature [°C]
* @param humidity [%RH]
*/
uint32_t getAbsoluteHumidity(float temperature, float humidity) {
    // approximation formula from Sensirion SGP30 Driver Integration chapter 3.15
    const float absoluteHumidity = 216.7f * ((humidity / 100.0f) * 6.112f * exp((17.62f * temperature) / (243.12f + temperature)) / (273.15f + temperature)); // [g/m^3]
    const uint32_t absoluteHumidityScaled = static_cast<uint32_t>(1000.0f * absoluteHumidity); // [mg/m^3]
    return absoluteHumidityScaled;
}





void setup() {
  
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
  dht.begin();
  timer.setInterval(1000L, sensorCO2);    //timer will run every sec 
  timer.setInterval(1000L, sensordht11);  //timer will run every sec
  
  while (!Serial) { delay(10); } // Wait for serial console to open!

  Serial.println("SGP30 test");

  if (! sgp.begin()){
    Serial.println("Sensor not found :(");
    while (1);
  }
  Serial.print("Found SGP30 serial #");
  Serial.print(sgp.serialnumber[0], HEX);
  Serial.print(sgp.serialnumber[1], HEX);
  Serial.println(sgp.serialnumber[2], HEX);

  // If you have a baseline measurement from before you can assign it to start, to 'self-calibrate'
  //sgp.setIAQBaseline(0x8E68, 0x8F41);  // Will vary for each sensor!

  
}


int counter = 0;

void loop() {
 Blynk.run();        // run Blynk magic
 timer.run();        // run timer every second
}



void sensorCO2() {

 // If you have a temperature / humidity sensor, you can set the absolute humidity to enable the humditiy compensation for the air quality signals
  //float temperature = 22.1; // [°C]
  //float humidity = 45.2; // [%RH]
  //sgp.setHumidity(getAbsoluteHumidity(temperature, humidity));

  if (! sgp.IAQmeasure()) {
    Serial.println("Measurement failed");
    return;
  }
  Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb\t");
  Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm");

  if (! sgp.IAQmeasureRaw()) {
    Serial.println("Raw Measurement failed");
    return;
  }
  Serial.print("Raw H2 "); Serial.print(sgp.rawH2); Serial.print(" \t");
  Serial.print("Raw Ethanol "); Serial.print(sgp.rawEthanol); Serial.println("");
 
  delay(1000);

  counter++;
  if (counter == 30) {
    counter = 0;

    uint16_t TVOC_base, eCO2_base;
    if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) {
      Serial.println("Failed to get baseline readings");
      return;
    }
    Serial.print("****Baseline values: eCO2: 0x"); Serial.print(eCO2_base, HEX);
    Serial.print(" & TVOC: 0x"); Serial.println(TVOC_base, HEX);
  }
}  




void sensordht11()
{

  float airHum = dht.readHumidity();
  float airTemp = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

  if (isnan(airHum) || isnan(airTemp)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  
  Blynk.virtualWrite(V10, airTemp);  //virtual pin V10
  Blynk.virtualWrite(V11, airHum);   //virtual pin V11
  Blynk.virtualWrite(V15, sgp.TVOC);  //virtual pin V10
  Blynk.virtualWrite(V14, sgp.eCO2);  //virtual pin V11

  
}

Thank you

Best regards