Bresser 7 in 1 Wetterstation: Daten mit Wemos D1 Mini in Homemematic CCU-Systemvariablen schreiben

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
Mik
Beiträge: 9
Registriert: 19.09.2008, 15:10
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Bresser 7 in 1 Wetterstation: Daten mit Wemos D1 Mini in Homemematic CCU-Systemvariablen schreiben

Beitrag von Mik » 08.03.2022, 12:27

Hallo

Nachdem es ja letztens ein wenig stürmisch war, musste Aufgrund einer zerstörten Außeneinheit eine neue Wetterstation her.
Meine Wahl fiel auf eine Bresser 7 in 1 Wetterstation mit Wlan. Diese kann ihre Wetterdaten auch an Wunderground usw schicken.
Da ich die Daten aber nicht an Wunderground usw schicken wollte, aber gerne für meine Homematic nutzen, bzw visualisieren wollte, ist folgende Lösung entstanden:

(Ja ich weiß:
-An Wunderground schicken und mit IO-Broker Adapter wiederholen - Wollte ich nicht.
-Script direkt auf die CCU installieren wie im Beitrag "Einbinden von WH3000 SE WiFi Wetterstation und kompatible" funktionierte bei mir nicht....
)

Benötigte Hardware : 1 Wemos D1 Mini

Vorgehensweise:

1. Homematic

In der CCU die benötigten Sysemvariablen anlegen:
z.B:
Bresser7in1_Aussentemperatur_CCU_Systemvariable
Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable
Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable
Bresser7in1_Windboee_CCU_Systemvariable
Bresser7in1_Taupunkt_CCU_Systemvariable
Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable
Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable
Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable
Bresser7in1_Innentemperatur_CCU_Systemvariable
Bresser7in1_Innenluftfeuchte_CCU_Systemvariable
Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable
Bresser7in1_Regenmenge_Tag_CCU_Systemvariable
Bresser7in1_Windrichtung_CCU_Systemvariable
Bresser7in1_UVindex_CCU_Systemvariable

Alle als Werte mit Wertebereich 65000 bis -65000 ....
Variablennamen sind frei wählbar ...

Anschließend mit ht**://EURE HOMEMATIC IP-ADRESSE/config/xmlapi/sysvarlist.cgi
die Variablenliste eurer CCU aufrufen und die entsprechenden ise_ID für die erstellten Variablen notieren
(Diese werden später für die Konfiguration des Wemos Access-Points benötigt!)

2. Wemos D1 Mini

Sketch mit Arduino IDE auf den Wemos D1 Mini schreiben

( Vorher falls nötig die benötigten Bibliotheken hinzufügen ... siehe Sketch)

Hinweis: Bitte die ArduinoJson-5.x Bibliothek benutzen .... 6 funktioniert nicht.

An diese Stelle ein wichtiger Hinweis:

Als Basis für diesen Sketch habe ich das Projekt von Jérôme (jp112sdl) benutzt (den Wlan Access-Point...), siehe : https://github.com/jp112sdl/WemosD1_Hom ... WiFiSensor
@Jérôme : Ich hoffe das ist OK für dich. Falls nicht, dann benachrichtige mich bitte, dann werde ich diesen Beitrag wieder entfernen.
Und wo ich gerade dabei bin: Vielen Dank für deine vielen interessanten Projekte und Beiträge.

Hier der Sketch:

Code: Alles auswählen

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiManager.h>
#include <FS.h>
#include <ArduinoJson.h>

//
#define TasterPin      D7 //Taster gegen GND, um den Konfigurationsmodus zu aktivieren (Taster betätigen, und Versorgungsspannung einschalten)

#define LEDPin      D4 //LED Pin Abhängig vom Wemos !!!

int ErsterProgrammzyklus = 0;

char sleepTimeMin[4]  = "60";
char ccuip[16];


// Port des Web Servers auf 80 setzen

WiFiServer server(80);

//Variablen für Homematic

String url="";
int httpCode ;
String value = "";


// Variablendefinitionen 

String header;

String Homematic_IP;

String Bresser7in1_Station_ID;//         Bresser7in1 Station ID
String EmpfBresser7in1_Station_ID; 


String Bresser7in1_Station_Key;//         Bresser7in1 Station Key
String EmpfBresser7in1_Station_Key;


String Bresser7in1_Aussentemperatur_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Aussentemperatur ="";
float Aussentemp = 0;
float AussentemperaturCelsius = 0;


String Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Aussenluftf ="";
float Aussenluftfeuchte = 0;

String Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Windgeschwindigkeit ="";
float Windgeschw = 0;
float WindgeschwindigkeitKmh = 0;
float Windgeschwindigkeitms = 0;

String Bresser7in1_Windboee_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Windboee ="";
float Windb = 0;
float WindboeeKmh = 0;
float Windboeems = 0;

String Bresser7in1_Taupunkt_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Taupunkt ="";
float Taup = 0;
float TaupunktCelsius = 0;

String Bresser7in1_UVindex_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String UVin ="";
float UVindex = 0;

String Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String SonneneinstrahlungWm2 ="";
float Sonneneinstr = 0;
float SonneneinstrahlungLux = 0;

String Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String LuftdruckinHg ="";
float Luftdr = 0;
float LuftdruckmmHg = 0;
float LuftdruckmBar = 0;
float LuftdruckmBarAbs = 0;

String Bresser7in1_Innentemperatur_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Innentemperatur ="";
float Innentemp = 0;
float InnentemperaturCelsius = 0;

String Bresser7in1_Innenluftfeuchte_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Innenluftf ="";
float Innenluftfeuchte = 0;

String Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Regenmenge ="";
float Regenm = 0;
float Regenmengemm = 0;

String Bresser7in1_Regenmenge_Tag_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String RegenmengeTag ="";
float RegenmTag = 0;
float RegenmengemmTag = 0;

String Bresser7in1_Windrichtung_CCU_Systemvariable;//         Systemvariablen-ID in der Homematic CCU
String Windrichtung ="";
float Windr = 0;



bool SerialDEBUG = true;


//WifiManager - don't touch
byte ConfigPortalTimeout = 180;
bool shouldSaveConfig        = false;
String configJsonFile        = "config.json";
bool wifiManagerDebugOutput = false;
char ip[16]      = "0.0.0.0";
char netmask[16] = "0.0.0.0";
char gw[16]      = "0.0.0.0";
boolean startWifiManager = false;

void setup() {
  pinMode(TasterPin,      INPUT_PULLUP);

  pinMode(LEDPin,    OUTPUT);


  digitalWrite(LEDPin,  LOW);

  wifiManagerDebugOutput = true;
  Serial.begin(115200);
  printSerial("Programmstart...");

  if (digitalRead(TasterPin) == LOW) {
    startWifiManager = true;
    bool state = LOW;
    for (int i = 0; i < 7; i++) {
      state = !state;
      digitalWrite(LEDPin, state);
      delay(100);
    }
  }

  
  loadSystemConfig();

  if (doWifiConnect()) {
    printSerial("WIfi connected");
    digitalWrite(LEDPin,  HIGH);  // LED ausschalten
  } else ESP.restart();
  delay(100);

}


void printSerial(String text) {
  if (SerialDEBUG) {
    Serial.println(text);
  }
}


bool doWifiConnect() {
  String _ssid = WiFi.SSID();
  String _psk = WiFi.psk();

  const char* ipStr = ip; byte ipBytes[4]; parseBytes(ipStr, '.', ipBytes, 4, 10);
  const char* netmaskStr = netmask; byte netmaskBytes[4]; parseBytes(netmaskStr, '.', netmaskBytes, 4, 10);
  const char* gwStr = gw; byte gwBytes[4]; parseBytes(gwStr, '.', gwBytes, 4, 10);

  WiFiManager wifiManager;
  wifiManager.setDebugOutput(wifiManagerDebugOutput);
  wifiManager.setAPCallback(configModeCallback);
  wifiManager.setSaveConfigCallback(saveConfigCallback);
  WiFiManagerParameter custom_ccuip("ccu", "IP-Adresse der Homematic-CCU", ccuip, 16);  
  
  ////////////////////////////////////////////////////////////////

  char Bresser7in1_Station_IDAsCHAR[50];
  Bresser7in1_Station_ID.toCharArray(Bresser7in1_Station_IDAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Station_ID("Bresser7in1_Station_ID", "Bresser7in1 Station ID", Bresser7in1_Station_IDAsCHAR, 50);

  char Bresser7in1_Station_KeyAsCHAR[50];
  Bresser7in1_Station_Key.toCharArray(Bresser7in1_Station_KeyAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Station_Key("Bresser7in1_Station_Key", "Bresser7in1 Station Key", Bresser7in1_Station_KeyAsCHAR, 50);
 
  char Bresser7in1_Aussentemperatur_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Aussentemperatur_CCU_Systemvariable.toCharArray(Bresser7in1_Aussentemperatur_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Aussentemperatur_CCU_Systemvariable("Bresser7in1_Aussentemperatur_CCU_Systemvariable", "Bresser7in1 Aussentemperatur CCU Systemvariablen-ID", Bresser7in1_Aussentemperatur_CCU_SystemvariableAsCHAR, 50);
 
  char Bresser7in1_Aussenluftfeuchte_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable.toCharArray(Bresser7in1_Aussenluftfeuchte_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable("Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable", " Bresser7in1 Aussenluftfeuchte CCU Systemvariablen-ID",  Bresser7in1_Aussenluftfeuchte_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_Windgeschwindigkeit_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable.toCharArray(Bresser7in1_Windgeschwindigkeit_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable("Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable", " Bresser7in1 Windgeschwindigkeit CCU Systemvariablen-ID",  Bresser7in1_Windgeschwindigkeit_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_Windboee_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Windboee_CCU_Systemvariable.toCharArray(Bresser7in1_Windboee_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Windboee_CCU_Systemvariable("Bresser7in1_Windboee_CCU_Systemvariable", " Bresser7in1 Windboee CCU Systemvariablen-ID",  Bresser7in1_Windboee_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_Taupunkt_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Taupunkt_CCU_Systemvariable.toCharArray(Bresser7in1_Taupunkt_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Taupunkt_CCU_Systemvariable("Bresser7in1_Taupunkt_CCU_Systemvariable", " Bresser7in1 Taupunkt CCU Systemvariablen-ID",  Bresser7in1_Taupunkt_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_UVindex_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_UVindex_CCU_Systemvariable.toCharArray(Bresser7in1_UVindex_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_UVindex_CCU_Systemvariable("Bresser7in1_UVindex_CCU_Systemvariable", " Bresser7in1 UVindex CCU Systemvariablen-ID",  Bresser7in1_UVindex_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_Sonneneinstrahlung_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable.toCharArray(Bresser7in1_Sonneneinstrahlung_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable("Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable", " Bresser7in1 Sonneneinstrahlung CCU Systemvariablen-ID",  Bresser7in1_Sonneneinstrahlung_CCU_SystemvariableAsCHAR, 50);


  char Bresser7in1_Luftdruck_Absolut_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable.toCharArray(Bresser7in1_Luftdruck_Absolut_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable("Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable", " Bresser7in1 Luftdruck Absolut CCU Systemvariablen-ID",  Bresser7in1_Luftdruck_Absolut_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_Luftdruck_Relativ_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable.toCharArray(Bresser7in1_Luftdruck_Relativ_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable("Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable", " Bresser7in1 Luftdruck Relativ CCU Systemvariablen-ID",  Bresser7in1_Luftdruck_Relativ_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_Innentemperatur_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Innentemperatur_CCU_Systemvariable.toCharArray(Bresser7in1_Innentemperatur_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Innentemperatur_CCU_Systemvariable("Bresser7in1_Innentemperatur_CCU_Systemvariable", " Bresser7in1 Innentemperatur CCU Systemvariablen-ID",  Bresser7in1_Innentemperatur_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_Innenluftfeuchte_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Innenluftfeuchte_CCU_Systemvariable.toCharArray(Bresser7in1_Innenluftfeuchte_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Innenluftfeuchte_CCU_Systemvariable("Bresser7in1_Innenluftfeuchte_CCU_Systemvariable", " Bresser7in1 Innenluftfeuchte CCU Systemvariablen-ID",  Bresser7in1_Innenluftfeuchte_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_Regenmenge_Aktuell_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable.toCharArray(Bresser7in1_Regenmenge_Aktuell_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable("Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable", " Bresser7in1 Regenmenge Aktuell CCU_Systemvariablen-ID",  Bresser7in1_Regenmenge_Aktuell_CCU_SystemvariableAsCHAR, 50);

  char Bresser7in1_Regenmenge_Tag_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Regenmenge_Tag_CCU_Systemvariable.toCharArray(Bresser7in1_Regenmenge_Tag_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Regenmenge_Tag_CCU_Systemvariable("Bresser7in1_Regenmenge_Tag_CCU_Systemvariable", " Bresser7in1 Regenmenge Tag CCU Systemvariablen-ID",  Bresser7in1_Regenmenge_Tag_CCU_SystemvariableAsCHAR, 50);
 
  char Bresser7in1_Windrichtung_CCU_SystemvariableAsCHAR[50];
  Bresser7in1_Windrichtung_CCU_Systemvariable.toCharArray(Bresser7in1_Windrichtung_CCU_SystemvariableAsCHAR, 50);
  WiFiManagerParameter custom_Bresser7in1_Windrichtung_CCU_Systemvariable("Bresser7in1_Windrichtung_CCU_Systemvariable", " Bresser7in1 Windrichtung CCU Systemvariablen-ID",  Bresser7in1_Windrichtung_CCU_SystemvariableAsCHAR, 50);



  WiFiManagerParameter custom_ip("custom_ip", "IP-Adresse", "", 16);
  WiFiManagerParameter custom_netmask("custom_netmask", "Netzmaske", "", 16);
  WiFiManagerParameter custom_gw("custom_gw", "Gateway", "", 16);


 const char * text =  "<center><h5>Bresser 7 in 1 Wetterstation Homematic-Gateway</h5></center>";
  WiFiManagerParameter custom_modetext(text);

 const char * text2 =  "<center><h5>____________________________________________</h5></center>";
  WiFiManagerParameter custom_modetext2(text2); 
  
  
  
  wifiManager.addParameter(&custom_modetext);
    wifiManager.addParameter(&custom_modetext2);
  wifiManager.addParameter(&custom_ccuip); 
 
 ////////////////////////////////////////////////////////////////
  wifiManager.addParameter(&custom_Bresser7in1_Station_ID);
  wifiManager.addParameter(&custom_Bresser7in1_Station_Key);
  wifiManager.addParameter(&custom_Bresser7in1_Aussentemperatur_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Windboee_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Taupunkt_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_UVindex_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Innentemperatur_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Innenluftfeuchte_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Regenmenge_Tag_CCU_Systemvariable);
  wifiManager.addParameter(&custom_Bresser7in1_Windrichtung_CCU_Systemvariable);

  WiFiManagerParameter custom_text("<br/><br>Statische IP (wenn leer, dann DHCP):");
  wifiManager.addParameter(&custom_text);
  wifiManager.addParameter(&custom_ip);
  wifiManager.addParameter(&custom_netmask);
  wifiManager.addParameter(&custom_gw);

  String Hostname = "Bresser 7 in 1 Gateway";
  char a[] = "";
  Hostname.toCharArray(a, 30);

  wifiManager.setConfigPortalTimeout(ConfigPortalTimeout);

  if (startWifiManager == true) {
    digitalWrite(LEDPin, LOW);
    if (_ssid == "" || _psk == "" ) {
      wifiManager.resetSettings();
    }
    else {
      if (!wifiManager.startConfigPortal(a)) {
        printSerial("failed to connect and hit timeout");
        delay(1000);
        ESP.restart();
      }
    }
  }

  wifiManager.setSTAStaticIPConfig(IPAddress(ipBytes[0], ipBytes[1], ipBytes[2], ipBytes[3]), IPAddress(gwBytes[0], gwBytes[1], gwBytes[2], gwBytes[3]), IPAddress(netmaskBytes[0], netmaskBytes[1], netmaskBytes[2], netmaskBytes[3]));

  wifiManager.autoConnect(a);

  printSerial("Wifi Connected");
  printSerial("CUSTOM STATIC IP: " + String(ip) + " Netmask: " + String(netmask) + " GW: " + String(gw));
  if (shouldSaveConfig) {
    SPIFFS.begin();
    printSerial("saving config");
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();
    if (String(custom_ip.getValue()).length() > 5) {
      printSerial("Custom IP Address is set!");
      strcpy(ip, custom_ip.getValue());
      strcpy(netmask, custom_netmask.getValue());
      strcpy(gw, custom_gw.getValue());
    } else {
      strcpy(ip,      "0.0.0.0");
      strcpy(netmask, "0.0.0.0");
      strcpy(gw,      "0.0.0.0");
    }
    strcpy(ccuip, custom_ccuip.getValue());

    
 ////////////////////////////////////////////////////////////////

    Bresser7in1_Station_ID = custom_Bresser7in1_Station_ID.getValue();
    Bresser7in1_Station_Key = custom_Bresser7in1_Station_Key.getValue();       
    Bresser7in1_Aussentemperatur_CCU_Systemvariable = custom_Bresser7in1_Aussentemperatur_CCU_Systemvariable.getValue();
    Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable = custom_Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable.getValue();
    Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable = custom_Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable.getValue();
    Bresser7in1_Windboee_CCU_Systemvariable = custom_Bresser7in1_Windboee_CCU_Systemvariable.getValue();
    Bresser7in1_Taupunkt_CCU_Systemvariable = custom_Bresser7in1_Taupunkt_CCU_Systemvariable.getValue();
    Bresser7in1_UVindex_CCU_Systemvariable = custom_Bresser7in1_UVindex_CCU_Systemvariable.getValue();
    Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable = custom_Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable.getValue();
    Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable = custom_Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable.getValue();
    Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable = custom_Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable.getValue();
    Bresser7in1_Innentemperatur_CCU_Systemvariable = custom_Bresser7in1_Innentemperatur_CCU_Systemvariable.getValue();
    Bresser7in1_Innenluftfeuchte_CCU_Systemvariable = custom_Bresser7in1_Innenluftfeuchte_CCU_Systemvariable.getValue();
    Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable = custom_Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable.getValue();
    Bresser7in1_Regenmenge_Tag_CCU_Systemvariable = custom_Bresser7in1_Regenmenge_Tag_CCU_Systemvariable.getValue();
    Bresser7in1_Windrichtung_CCU_Systemvariable = custom_Bresser7in1_Windrichtung_CCU_Systemvariable.getValue();





    
    json["ip"] = ip;
    json["netmask"] = netmask;
    json["gw"] = gw;
    
    json["ccuip"] = ccuip;

 ////////////////////////////////////////////////////////////////
    json["Bresser7in1_Station_ID"] = Bresser7in1_Station_ID;
    json["Bresser7in1_Station_Key"] = Bresser7in1_Station_Key;       
    json["Bresser7in1_Aussentemperatur_CCU_Systemvariable"] = Bresser7in1_Aussentemperatur_CCU_Systemvariable;
    json["Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable"] = Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable ;
    json["Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable"] = Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable ;
    json["Bresser7in1_Windboee_CCU_Systemvariable"] = Bresser7in1_Windboee_CCU_Systemvariable ;
    json["Bresser7in1_Taupunkt_CCU_Systemvariable"] = Bresser7in1_Taupunkt_CCU_Systemvariable ;
    json["Bresser7in1_UVindex_CCU_Systemvariable"] = Bresser7in1_UVindex_CCU_Systemvariable ;
    json["Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable"] = Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable ;
    json["Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable"] = Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable ;
    json["Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable"] = Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable ;
    json["Bresser7in1_Innentemperatur_CCU_Systemvariable"] = Bresser7in1_Innentemperatur_CCU_Systemvariable ;
    json["Bresser7in1_Innenluftfeuchte_CCU_Systemvariable"] = Bresser7in1_Innenluftfeuchte_CCU_Systemvariable ;
    json["Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable"] = Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable ;
    json["Bresser7in1_Regenmenge_Tag_CCU_Systemvariable"] = Bresser7in1_Regenmenge_Tag_CCU_Systemvariable ;
    json["Bresser7in1_Windrichtung_CCU_Systemvariable"] = Bresser7in1_Windrichtung_CCU_Systemvariable ;

    SPIFFS.remove("/" + configJsonFile);
    File configFile = SPIFFS.open("/" + configJsonFile, "w");
    if (!configFile) {
      printSerial("failed to open config file for writing");
    }

    if (SerialDEBUG) {
      json.printTo(Serial);
      Serial.println("");
    }
    json.printTo(configFile);
    configFile.close();

    SPIFFS.end();
    delay(100);
    ESP.restart();
  }

  return true;
}


void configModeCallback (WiFiManager *myWiFiManager) {
  printSerial("AP-Modus ist aktiv!");
}

void saveConfigCallback () {
  printSerial("Should save config");
  shouldSaveConfig = true;
}

void parseBytes(const char* str, char sep, byte* bytes, int maxBytes, int base) {
  for (int i = 0; i < maxBytes; i++) {
    bytes[i] = strtoul(str, NULL, base);
    str = strchr(str, sep);
    if (str == NULL || *str == '\0') {
      break;
    }
    str++;
  }
}

bool loadSystemConfig() {
  printSerial("mounting FS...");
  if (SPIFFS.begin()) {
    printSerial("mounted file system");
    if (SPIFFS.exists("/" + configJsonFile)) {
      printSerial("reading config file");
      File configFile = SPIFFS.open("/" + configJsonFile, "r");
      if (configFile) {
        printSerial("opened config file");
        size_t size = configFile.size();
        std::unique_ptr<char[]> buf(new char[size]);
        configFile.readBytes(buf.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf.get());
        if (SerialDEBUG) {
          json.printTo(Serial);
          Serial.println("");
        }
        if (json.success()) {
          printSerial("\nparsed json");
          strcpy(ip,          json["ip"]);
          strcpy(netmask,    json["netmask"]);
          strcpy(gw,         json["gw"]);
          strcpy(ccuip,      json["ccuip"]);

          const char* jsonccuip = json["ccuip"];
          Homematic_IP = jsonccuip;

          
 ////////////////////////////////////////////////////////////////

          const char* jsonBresser7in1_Station_ID = json["Bresser7in1_Station_ID"];         
          Bresser7in1_Station_ID = jsonBresser7in1_Station_ID;

          const char* jsonBresser7in1_Station_Key = json["Bresser7in1_Station_Key"];         
          Bresser7in1_Station_Key = jsonBresser7in1_Station_Key;  

          const char* jsonBresser7in1_Aussentemperatur_CCU_Systemvariable = json["Bresser7in1_Aussentemperatur_CCU_Systemvariable"];         
          Bresser7in1_Aussentemperatur_CCU_Systemvariable = jsonBresser7in1_Aussentemperatur_CCU_Systemvariable;

          const char* jsonBresser7in1_Aussenluftfeuchte_CCU_Systemvariable  = json["Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable"];         
          Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable  = jsonBresser7in1_Aussenluftfeuchte_CCU_Systemvariable ;

          const char* jsonBresser7in1_Windgeschwindigkeit_CCU_Systemvariable  = json["Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable"];         
          Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable  = jsonBresser7in1_Windgeschwindigkeit_CCU_Systemvariable ;

          const char* jsonBresser7in1_Windboee_CCU_Systemvariable  = json["Bresser7in1_Windboee_CCU_Systemvariable"];         
          Bresser7in1_Windboee_CCU_Systemvariable  = jsonBresser7in1_Windboee_CCU_Systemvariable ;

          const char* jsonBresser7in1_Taupunkt_CCU_Systemvariable  = json["Bresser7in1_Taupunkt_CCU_Systemvariable"];         
          Bresser7in1_Taupunkt_CCU_Systemvariable  = jsonBresser7in1_Taupunkt_CCU_Systemvariable ;

          const char* jsonBresser7in1_UVindex_CCU_Systemvariable  = json["Bresser7in1_UVindex_CCU_Systemvariable"];         
          Bresser7in1_UVindex_CCU_Systemvariable  = jsonBresser7in1_UVindex_CCU_Systemvariable ;

          const char* jsonBresser7in1_Sonneneinstrahlung_CCU_Systemvariable  = json["Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable"];         
          Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable  = jsonBresser7in1_Sonneneinstrahlung_CCU_Systemvariable ;

          const char* jsonBresser7in1_Luftdruck_Absolut_CCU_Systemvariable  = json["Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable"];         
          Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable  = jsonBresser7in1_Luftdruck_Absolut_CCU_Systemvariable ;

          const char* jsonBresser7in1_Luftdruck_Relativ_CCU_Systemvariable  = json["Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable"];         
          Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable  = jsonBresser7in1_Luftdruck_Relativ_CCU_Systemvariable ;

          const char* jsonBresser7in1_Innentemperatur_CCU_Systemvariable  = json["Bresser7in1_Innentemperatur_CCU_Systemvariable"];         
          Bresser7in1_Innentemperatur_CCU_Systemvariable  = jsonBresser7in1_Innentemperatur_CCU_Systemvariable ;

          const char* jsonBresser7in1_Innenluftfeuchte_CCU_Systemvariable  = json["Bresser7in1_Innenluftfeuchte_CCU_Systemvariable"];         
          Bresser7in1_Innenluftfeuchte_CCU_Systemvariable  = jsonBresser7in1_Innenluftfeuchte_CCU_Systemvariable ;

          const char* jsonBresser7in1_Regenmenge_Aktuell_CCU_Systemvariable  = json["Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable"];         
          Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable  = jsonBresser7in1_Regenmenge_Aktuell_CCU_Systemvariable ;

          const char* jsonBresser7in1_Regenmenge_Tag_CCU_Systemvariable  = json["Bresser7in1_Regenmenge_Tag_CCU_Systemvariable"];         
          Bresser7in1_Regenmenge_Tag_CCU_Systemvariable  = jsonBresser7in1_Regenmenge_Tag_CCU_Systemvariable ;

          const char* jsonBresser7in1_Windrichtung_CCU_Systemvariable  = json["Bresser7in1_Windrichtung_CCU_Systemvariable"];         
          Bresser7in1_Windrichtung_CCU_Systemvariable  = jsonBresser7in1_Windrichtung_CCU_Systemvariable ;







          
          itoa(json["sleeptime"], sleepTimeMin, 10);
        } else {
          printSerial("failed to load json config");
        }
      }
      return true;
    } else {
      printSerial("/" + configJsonFile + " not found.");
      return false;
    }
    SPIFFS.end();
  } else {
    printSerial("failed to mount FS");
    return false;
  }
}

void loop() {

// Einstellungen bei erstem Progammzyklus seriell ausgeben

if (ErsterProgrammzyklus == 0) {

printSerial("Homematic-CCU IP-Adresse: ");
printSerial(Homematic_IP);

printSerial("Bresser7in1_Station_ID: ");
printSerial(Bresser7in1_Station_ID);

printSerial("Bresser7in1_Station_Key: ");
printSerial(Bresser7in1_Station_Key);

printSerial("Bresser7in1_Aussentemperatur_CCU_Systemvariable: ");
printSerial(Bresser7in1_Aussentemperatur_CCU_Systemvariable);

printSerial("Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable: ");
printSerial(Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable);

printSerial("Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable: ");
printSerial(Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable);

printSerial("Bresser7in1_Windboee_CCU_Systemvariable: ");
printSerial(Bresser7in1_Windboee_CCU_Systemvariable);

printSerial("Bresser7in1_Taupunkt_CCU_Systemvariable: ");
printSerial(Bresser7in1_Taupunkt_CCU_Systemvariable);

printSerial("Bresser7in1_UVindex_CCU_Systemvariable: ");
printSerial(Bresser7in1_UVindex_CCU_Systemvariable);


printSerial("Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable: ");
printSerial(Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable);

printSerial("Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable: ");
printSerial(Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable);

printSerial("Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable: ");
printSerial(Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable);

printSerial("Bresser7in1_Innentemperatur_CCU_Systemvariable: ");
printSerial(Bresser7in1_Innentemperatur_CCU_Systemvariable);

printSerial("Bresser7in1_Innenluftfeuchte_CCU_Systemvariable: ");
printSerial(Bresser7in1_Innenluftfeuchte_CCU_Systemvariable);

printSerial("Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable: ");
printSerial(Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable);

printSerial("Bresser7in1_Regenmenge_Tag_CCU_Systemvariable: ");
printSerial(Bresser7in1_Regenmenge_Tag_CCU_Systemvariable);

printSerial("Bresser7in1_Windrichtung_CCU_Systemvariable: ");
printSerial(Bresser7in1_Windrichtung_CCU_Systemvariable);


Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();                      // Server starten




ErsterProgrammzyklus = ErsterProgrammzyklus +1;

 }

//////////////////////////////////////////////////////////////////////////////////////

 

WiFiClient client = server.available();   // Auf Clients (Server-Aufrufe) warten
  if (client) {                             // Bei einem Aufruf des Servers
    Serial.println("Client available");
    String currentLine = "";                // String definieren für die Anfrage des Clients

    while (client.connected()) { // Loop, solange Client verbunden ist

      if (client.available()) {
        char c = client.read();             // Ein (1) Zeichen der Anfrage des Clients lesen
//        Serial.write(c);                    // und es im Seriellen Monitor ausgeben
        header += c;
       
        if (c == '\n') {                    // bis eine Neue Zeile ausgegeben wird

          // Wenn der Client eine Leerzeile sendet, ist das Ende des HTTP Request erreicht
          if (currentLine.length() == 0) {

            // Der Server sendet nun eine Antwort an den Client
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();

            // Die Webseite anzeigen
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\"></head>");
            client.println("<body><h1 align=\"center\">Wetterdaten von Bresser 7in1 Wetterstation </h1></body></html>");
            client.println("<body><h5 align=\"center\">(c)2022 Mik </h5></body></html>");



client.println("<!DOCTYPE HTML>");                   // Jetzt wird das HTML-Kontrukt für den Webserver erstellt.
client.println("<html>");                            // Websiten werden in der Regel in der Programmiersprache "HTML" kontruiert. 
client.println("<br>");                              // Dies erreichen wir mit dem Befehl "client.println" , ähnlich wie "Serial.println"
client.println("<br>");                              // "<br>" erschafft eine Leerzeile (bzw. definiert das Ende einer Zeile)

 if (EmpfBresser7in1_Station_ID == Bresser7in1_Station_ID && EmpfBresser7in1_Station_Key == Bresser7in1_Station_Key) { 
  client.println("Empfangsdaten OK! Daten werden zur Homematic-CCU gesendet !");
  client.println("");
  client.println("<br>");  
 }
else { 
  client.println("Empfangsdaten FEHLERHAFT! Es werden KEINE Daten zur Homematic-CCU gesendet !");
  client.println("");
  client.println("<br>");  
 }

  client.println("<br>");  
  
client.println("Bresser7in1 Station-ID:  ");
client.println(Bresser7in1_Station_ID);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println("<br>");  

client.println("Empfangene Bresser7in1 Station-ID:  ");
client.println(EmpfBresser7in1_Station_ID);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println("<br>");  

client.println("Bresser7in1 Station-Key:  ");
client.println(Bresser7in1_Station_Key);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println("<br>");  

client.println("Empfangener Bresser7in1 Station-Key:  ");
client.println(EmpfBresser7in1_Station_Key);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println("<br>");  


client.println("Aussentemperatur:  ");
client.println(AussentemperaturCelsius);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" Grad Celsius.");
client.println("<br>");     
client.println("Aussenluftfeuchte:  ");
client.println(Aussenluftfeuchte);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" %Rh");
client.println("<br>"); 
client.println("Windgeschwindigkeit in Km/h:  ");
client.println(WindgeschwindigkeitKmh);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" Km/h");
client.println("<br>"); 
client.println("Windgeschwindigkeit m/s:  ");
client.println(Windgeschwindigkeitms);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" m/s");
client.println("<br>"); 
client.println("Windboee in Km/h:  ");
client.println(WindboeeKmh);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" Km/h");
client.println("<br>"); 
client.println("Windboee in m/s: ");
client.println(Windboeems);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" m/s");
client.println("<br>");                              // "<br>" erschafft eine Leerzeile (bzw. definiert das Ende einer Zeile)
client.println("Taupunkt:  ");
client.println(TaupunktCelsius);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" Grad Celsius.");
client.println("<br>");     
client.println("UV-Index:  ");
client.println(UVindex);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println("<br>");     
client.println("Sonneneinstrahlung:  ");
client.println(Sonneneinstr);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" W/m2");
client.println("<br>");     
client.println("Sonneneinstrahlung:  ");
client.println(SonneneinstrahlungLux);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" Lux");
client.println("<br>"); 
client.println("Luftdruck (Rel):  ");
client.println(LuftdruckmBar);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" mbar (hPa) ");
client.println("<br>");
client.println("Luftdruck (Abs):  ");
client.println(LuftdruckmBarAbs);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" mbar (hPa) ");
client.println("<br>");  
client.println("Innentemperatur:  ");
client.println(InnentemperaturCelsius);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" Grad Celsius.");
client.println("<br>");     
client.println("Innenluftfeuchte:  ");
client.println(Innenluftfeuchte);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" %Rh");
client.println("<br>");   
client.println("Windrichtung:  ");
client.println(Windr);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" Grad");
client.println("<br>");   
client.println("Regenmenge:  ");
client.println(Regenmengemm);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" mm/m2 pro Stunde = Liter pro Quadratmeter pro Stunde");
client.println("<br>");   
client.println("Regenmenge Tag:  ");
client.println(RegenmengemmTag);                         // An dieser Stelle soll die Variable ausgegeben werden.
client.println(" mm/m2 = Liter pro Quadratmeter");
client.println("<br>");








            // Die Antwort mit einer Leerzeile beenden
            client.println();
            // Den Loop beenden
            break;
          } else { // Bei einer Neuen Zeile, die Variable leeren
            currentLine = "";
          }
        } else if (c != '\r') {  // alles andere als eine Leerzeile wird
          currentLine += c;      // der Variable hinzugefüht
        }
      }
    }
    // Variable zerlegen
     Serial.println(header);

 // Länge bestimmen
  int Laenge = header.length(); 
  Serial.print("L\u00e4nge des Strings: "); 
  Serial.println(String(Laenge) + " Zeichen.");  

 // String to Char
    String stringOne = header;
    char Empfangsdaten[Laenge];
    header.toCharArray(Empfangsdaten, Laenge);


    

// Empfangsdaten zerlegen

char delimiter[] = "&= ";
char *ptr;

// initialisieren und ersten Abschnitt erstellen
int Anzahl = 0;

ptr = strtok(Empfangsdaten, delimiter);

while(ptr != NULL) {
  Serial.print(Anzahl+1);
  Serial.printf("Abschnitt gefunden: %s\n", ptr);
  Anzahl = Anzahl +1;


// Station-ID in String 
  if (Anzahl == 3) {
  EmpfBresser7in1_Station_ID = ptr;
  }

// Station-Key in String
  if (Anzahl == 5) {
  EmpfBresser7in1_Station_Key = ptr;
  }

 if (EmpfBresser7in1_Station_ID == Bresser7in1_Station_ID && EmpfBresser7in1_Station_Key == Bresser7in1_Station_Key) {              // Vergleichen, ob Station-ID und Station-Key übereinstimmen

  
 // Aussentemperatur in Float umwandeln
  if (Anzahl == 17) {
  Aussentemperatur = ptr;
  Aussentemp = Aussentemperatur.toFloat();
  // Umrechnung Fahrenheit in Celsius
  AussentemperaturCelsius = (Aussentemp-32)*.5556;
  }

 // Aussenluftfeuchte in Float umwandeln
  if (Anzahl == 21) {
  Aussenluftf = ptr;
  Aussenluftfeuchte = Aussenluftf.toFloat();
  }


  // Windgeschwindigkeit in Float umwandeln
  if (Anzahl == 23) {
  Windgeschwindigkeit = ptr;
  Windgeschw = Windgeschwindigkeit.toFloat();
  // Umrechnung M/ph in Km/h
  WindgeschwindigkeitKmh =  Windgeschw*1.60934;
  // Umrechnung Km/h in m/s
  Windgeschwindigkeitms =  WindgeschwindigkeitKmh*0.277778;
  }


  // Windgboee in Float umwandeln
  if (Anzahl == 25) {
  Windboee = ptr;
  Windb = Windboee.toFloat();
  // Umrechnung M/ph in Km/h
  WindboeeKmh =  Windb*1.60934;
  // Umrechnung Km/h in m/s
  Windboeems =  WindboeeKmh*0.277778;
  }

// Taupunkt in Float umwandeln
  if (Anzahl == 19) {
  Taupunkt = ptr;
  Taup = Taupunkt.toFloat();
  // Umrechnung Fahrenheit in Celsius
  TaupunktCelsius = (Taup-32)*.5556;
  }

// UV-Index in Float umwandeln
  if (Anzahl == 35) {
  UVin = ptr;
  UVindex = UVin.toFloat();
  }


// Sonneneinstrahlung in Float umwandeln
  if (Anzahl == 33) {
  SonneneinstrahlungWm2 = ptr;
  Sonneneinstr = SonneneinstrahlungWm2.toFloat();
  // Umrechnung W/m2 in Lux
  SonneneinstrahlungLux = Sonneneinstr*126.7;
  }

// Luftdruck in Float umwandeln
  if (Anzahl == 15) {
  LuftdruckinHg = ptr;
  Luftdr = LuftdruckinHg.toFloat();
  // Umrechnung in/Hg in mm/Hg
  LuftdruckmmHg = Luftdr*25.4;
  // Umrechnung mm/Hg in mbar (hPa)
  LuftdruckmBar = LuftdruckmmHg*1.33322;
  LuftdruckmBarAbs = LuftdruckmBar + 20;
  }


 // Innentemperatur in Float umwandeln
  if (Anzahl == 37) {
  Innentemperatur = ptr;
  Innentemp = Innentemperatur.toFloat();
  // Umrechnung Fahrenheit in Celsius
  InnentemperaturCelsius = (Innentemp-32)*.5556;
  }

 // Innenluftfeuchte in Float umwandeln
  if (Anzahl == 39) {
  Innenluftf = ptr;
  Innenluftfeuchte = Innenluftf.toFloat();
  }

// Windrichtung in Float umwandeln
  if (Anzahl == 27) {
  Windrichtung = ptr;
  Windr = Windrichtung.toFloat();
  }

// Regenmenge in Float umwandeln
  if (Anzahl == 29) {
  Regenmenge = ptr;
  Regenm = Regenmenge.toFloat();
  // Umrechnung InchesOfRain in Liter/mm ( =Liter/m2)
  Regenmengemm = Regenm*25.4;
  }

// Regenmenge pro Tag in Float umwandeln
  if (Anzahl == 31) {
  RegenmengeTag = ptr;
  RegenmTag = RegenmengeTag.toFloat();
  // Umrechnung InchesOfRain in Liter/mm ( =Liter/m2)
  RegenmengemmTag = RegenmTag*25.4;
  }

 }
  
  // naechsten Abschnitt erstellen
  ptr = strtok(NULL, delimiter);

  }

  if (EmpfBresser7in1_Station_ID == Bresser7in1_Station_ID && EmpfBresser7in1_Station_Key == Bresser7in1_Station_Key) { 
  Serial.print("Empfangsdaten OK!");
  Serial.println("");
 }
else { 
  Serial.print("Empfangsdaten FEHLERHAFT! Es werden keine Daten zur CCU gesendet !");
 Serial.println("");
 }


Serial.print(Anzahl);
 Serial.println("");
Serial.print(Bresser7in1_Station_ID);
  Serial.println("");
Serial.print(EmpfBresser7in1_Station_ID);
  Serial.println("");
Serial.print(Bresser7in1_Station_Key);
  Serial.println("");
Serial.print(EmpfBresser7in1_Station_Key);
  Serial.println("");
Serial.print(Aussentemperatur);
  Serial.println("");
Serial.print(AussentemperaturCelsius);
 Serial.println("");
Serial.print(Aussenluftfeuchte);
 Serial.println("");
Serial.print(WindgeschwindigkeitKmh);
 Serial.println("");
Serial.print(Windgeschwindigkeitms);
  Serial.println("");
Serial.print(WindboeeKmh);
 Serial.println("");
Serial.print(Windboeems); 
 Serial.println("");
Serial.print(TaupunktCelsius);
 Serial.println("");
Serial.print(UVindex);
 Serial.println("");
Serial.print(Sonneneinstr);
  Serial.println("");
Serial.print(SonneneinstrahlungLux);
 Serial.println("");
Serial.print(LuftdruckmBar);
 Serial.println("");
Serial.print(LuftdruckmBarAbs);
  Serial.println("");
Serial.print(InnentemperaturCelsius);
 Serial.println("");
Serial.print(Innenluftfeuchte);
 Serial.println("");
Serial.print(Windr);
 Serial.println("");
Serial.print(Regenmengemm);
 Serial.println("");
Serial.print(RegenmengemmTag);
 Serial.println("");

// Daten an Homematic senden
if (EmpfBresser7in1_Station_ID == Bresser7in1_Station_ID && EmpfBresser7in1_Station_Key == Bresser7in1_Station_Key) { 

digitalWrite(LEDPin,  LOW);    // LED einschalten

value = AussentemperaturCelsius;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Aussentemperatur_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
HTTPClient http;
http.begin(url);
httpCode = http.GET();

value = Aussenluftfeuchte;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Aussenluftfeuchte_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = WindgeschwindigkeitKmh;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Windgeschwindigkeit_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = WindboeeKmh;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Windboee_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = Windr;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Windrichtung_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = LuftdruckmBarAbs;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Luftdruck_Absolut_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = LuftdruckmBar;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Luftdruck_Relativ_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = TaupunktCelsius;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Taupunkt_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = Regenmengemm;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Regenmenge_Aktuell_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = RegenmengemmTag;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Regenmenge_Tag_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = SonneneinstrahlungLux;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Sonneneinstrahlung_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = UVindex;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_UVindex_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = InnentemperaturCelsius;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Innentemperatur_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

value = Innenluftfeuchte;
url = "http://" + Homematic_IP + ":8181/egal.exe?x=dom.GetObject(" + Bresser7in1_Innenluftfeuchte_CCU_Systemvariable + ").State(" + value + "))";
Serial.println("setStateCCU URL: " + url);
http.begin(url);
httpCode = http.GET();

digitalWrite(LEDPin,  HIGH);     // LED ausschalten

}

 
    // Variable für den Header leeren 
    
    
    header = "";
    // Die Verbindung beenden
    client.stop();
//    Serial.println("Client disconnected");
    Serial.println("");
 }



}




In Zeile

869 LuftdruckmBarAbs = LuftdruckmBar + 20;

die 20 durch den Wert ersetzen, der den Aufstellungsort eurer Wetterstation entspricht (Hier sollte Google weiterhelfen...)
ODER - Falls ihr die Koordinaten in der Konfiguration eurer Wetterstation korrekt eingestellt habt:
Lest den Absoluten und den Relativen Luftdruck dort ab, und ersetzt die 20 in Codezeile 869 mit der Differenz aus diesen beiden Werten :-)

... wenn ihr den seriellen Monitor der Arduino IDE öffnet, seht ihr dort einige Infos, welche z.B. bei auftretenden Fehlern helfen können ....


Der D1 Mini erzeugt einen WLAN Accesspoint mit dem Namen "Bresser 7 in 1 Gateway" - Dieser kann in Codezeile 290 natürlich auch geändert werden.

Verbindet euch mit dem Accesspoint und ruft im Browser http://192.168.4.1 auf.

Unter Wlan konfigurieren :
SSID: WLAN aus der Liste auswählen, oder SSID manuell eingeben
WLAN-Key: WLAN Passwort
IP der CCU2: selbsterklärend
Die ise_ID der Systemvariablen entsprechend eingeben.
Station ID eingeben: Frei wählbar, aber merken! Wird später noch bei der Konfiguration der Wetterstation benötigt ! z.B: 4711
Station Key: Frei wählbar, aber merken! Wird später noch bei der Konfiguration der Wetterstation benötigt ! z.B: 0815

Speichern ... Fertig

Der Wemos verbindet sich mit eurem WLan...

Bei DHCP: In eurem Router die zugewiesene IP-Adresse des Wemos nachschauen, und notieren!


3. Bresser Wetterstation

Wie ihr in das Konfigurationsmenü gelangt, könn ihr im Zweifelsfall in der Bedienungsanleitung nachlesen ...
(Zitat aus der Bresser Bedienungsanleitung:

"Konfiguration / Einrichten einer WIFI-Verbindung

Beim ersten Start oder durch Drücken der WIFI / SENSOR-Taste für 6 Sekunden wechselt die Station in den AP-Modus. In diesem Modus ist die Station bereit für die WLAN-Einrichtung.
Die Station erstellt nun ein eigenes WIFI-Netzwerk, mit dem Sie sich mit Ihrem Smartphone oder Computer verbinden können. Suchen und verbinden Sie sich mit der SSID der WIFI-Station (z. BampDatei: PWS-XXXXXX)
...
"


WIFI - Einstellungen (logischerweise das gleiche Netz wie der Wemos und die Homematic CCU), Zeiserver, Ort usw sind selbsterklärend.
Bei Weather Server Setup :

URL: "Die IP des Wemos D1, welche er nach Anmelden in euer WLAN-Netz zugewiesen bekommen hat - oder eine feste IP - Halt das , was ihr konfiguriert habt":80
Station ID: ID, welche ihr bei der Konfiguration des WLAN Access-Points des Wemos D1 mini vergeben habt.
Station Key: Key , welchen ihr bei der Konfiguration des WLAN Access-Points des Wemos D1 mini vergeben habt.

Speichern ... fertig

nach Neustart der Wetterstation werden dann die Daten in die CCU Sytemvariablen geschrieben.


Gruß Mik

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Bresser 7 in 1 Wetterstation: Daten mit Wemos D1 Mini in Homemematic CCU-Systemvariablen schreiben

Beitrag von jp112sdl » 08.03.2022, 12:30

Mik hat geschrieben:
08.03.2022, 12:27
@Jérôme : Ich hoffe das ist OK für dich
Kein Problem. Ich hab das WLAN Zeugs ja schon vor Jahren ad acta gelegt.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

tom2013
Beiträge: 41
Registriert: 14.02.2013, 09:43
Hat sich bedankt: 1 Mal

Re: Bresser 7 in 1 Wetterstation: Daten mit Wemos D1 Mini in Homemematic CCU-Systemvariablen schreiben

Beitrag von tom2013 » 26.08.2022, 19:03

Hallo Mik,

bin gestern auf deinen Beitrag gestoßen, es war genau was ich seit Wochen für meine Bresser 7in1 gesucht habe.
Die Installation des Sketches auf dem Wemos verlief ohne Probleme und der erste Start war erfolgreich.
Nun würde ich aber gern meine Variablennamen kürzen.

Statt: "Bresser7in1_Aussentemperatur_CCU_Systemvariable"
z.b. "_W_Aussentemperatur"

Frage:
Würde es reichen den Prefix "Bresser7in1"und Suffix "_CCU_Systemvariable" einfach an allen Stellen im Sketch zu entfernen oder gibt es noch andere Abhängigkeiten.

Danke für die Hilfe

Tom

Mik
Beiträge: 9
Registriert: 19.09.2008, 15:10
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Bresser 7 in 1 Wetterstation: Daten mit Wemos D1 Mini in Homemematic CCU-Systemvariablen schreiben

Beitrag von Mik » 04.10.2022, 19:04

Hallo Tom

... ersteinmal sorry wegen der "etwas" verspäteten Antwort. Ich war krankheitsbedingt außer Gefecht...

Freut mich, das du mein "Projekt" brauchen konntest.

Zu Deiner Frage:
Die Variablennamen im Arduino Sketch sind alle frei wählbar. Du musst nur darauf achten, daß Du sie an jeder verwendeten Stelle im Sketch änderst. Sonst funktioniert der Sketch nicht mehr. Ich empfehle dazu die Suchen-Funktion innerhalb der Arduino IDE.

Gruß Mik

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“