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