/*
  Simple http clinet for influx 
  you need an ethernetclient 
  f41_ardu 04/2024 better now as Dr. Druck
  Start the simulstion and see the serial print statements
  Remove commeted code, adopt according your requirements 
  and implement your sensors. 
  Imroved example using an real simulated sensor. 
*/
/* 
#include <SPI.h>
#include <Ethernet.h>
// replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(10, 40, 16, 23);
EthernetClient InFluxClient;
*/ 
#include "DHT.h"
#define DHTPIN 3     
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
String influxServerIP = "192.168.1.99"; // replace by our influx server IP
// InfluxDB settings
int HTTP_PORT = 6100; // Port of InfluxDB server
char HOST_NAME[] = "192.168.1.99"; // InfluxDB server IP
String token = "replace_by_your_token"; // InfluxDB token
String organisation = "private"; // InfluxDB organization name
String bucket = "ArduinoTest"; // InfluxDB bucket name 
void setup() {
  Serial.begin(9600);
  dht.begin();
}
// Function to send data to InfluxDB
void unfluxdb(String data) {
    Serial.println("Connected to InfluxDB server");
    // Construct HTTP POST request
    Serial.println("POST /api/v2/write?org=" + organisation + "&bucket=" + bucket + "&precision=ns HTTP/1.1");
    Serial.println("Host: " + String(HOST_NAME));
    Serial.println("Authorization: Token " + token);
    Serial.println("Content-Type: text/plain; charset=utf-8");
    Serial.println("Accept: application/json");
    Serial.println("Content-Length: " + String(data.length()));
    Serial.println();
    Serial.println(data);
}
void loop() {
  // Read temperature and humidity from DHT sensor
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  // Check if sensor readings are valid
  if (isnan(temperature) || isnan(humidity)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // Construct InfluxDB line protocol data
  String data = "TFAOutDoor,sensor_id=7c temperature=" + String(temperature) + ",humidity=" + String(humidity);
  // Send data to InfluxDB
  unfluxdb(data);
  // Delay before next read
  delay(5000);
}