
#include "esp_log.h"
#include <stdio.h>
#include <time.h>
#include <onewire.h>
#include <ds18b20.h>  // Die Header-Datei mit DS18B20-Funktionen
#include <task.h>
#include <esp_wifi.h>
#include <FreeRTOSConfig.h>

struct appldata;
float getTemp();
int getUpTime();
void getmac();

struct appldata{
    uint8_t mac;
    float temp;
    float battaryVoltage;
    int upTime;
};


struct appldata app_main() {
  //tiem delay
  vTaskDelay(5000 / portTICK_PERIOD_MS);

  //creat var vor mac addres
  uint8_t baseMac[6] = {0};
  getmac(baseMac,6);


  //fill struct
  struct appldata send;
  send.mac = baseMac ;
  send.upTime = getUpTime(); 
  send.temp = getTemp();
  send.battaryVoltage = 3.3;



  //print mac
  printf("Station MAC: ");
    for (int i = 0; i < 5; i++) {
      printf("%02X:", (baseMac[i]));
    }
  printf("%02X\n", baseMac[5]);

  //print uptime
  int uptime = getUpTime();
  printf("%d", uptime);

  //print temp
  float temp = getTemp();
  printf("Temperature = %.4f\n", temp);

  //end func
  return send;
}



void getmac(uint8_t *buf, int count){
  for(int i = 0; i < count; ++i)
        buf[i] = i;
  // Get MAC address of the WiFi station interface
  esp_read_mac(buf, ESP_MAC_WIFI_STA);
}

int getUpTime(){
    int uptime = (xTaskGetTickCount() * (1000/configTICK_RATE_HZ));

    return uptime;
}

float getTemp() {
    float temp = 0;
    // Create variable for handler
    ds18b20_handler_t sensor;

    // Check for any initialization failures
    if (!ds18b20_init(&sensor, GPIO_NUM_2, TEMP_RES_12_BIT))        
    {
    ESP_LOGE("TAG", "Failed to initalize DS18B20!");
    return 0; // Exit
    } 
    //Print temperature with 4 decimal places 
    // (12 bit resolution measurement accuracy is 0.0625 Celsius)
    //ESP_LOGI("TAG", "Temperature = %.4f", temp);
    // Initalize conversion
    ds18b20_convert_temp(&sensor);
    temp = ds18b20_read_temp(&sensor);
    
    return temp;

}


