Ich benötige mal wieder eure hilfe. Ich habe versucht mir einen Sketch zu basteln aus zwei hier im Forum geposteten. Das Ziel ist es über einen Wemos D1 mini ein Relais und einen DS18B20 "anzuklemmen" was auch soweit funktioniert. Was nicht funktioniert ist es die Daten vom DS an die CCU zu übertragen, die Systemvariable ist vorhanden funktioniert auch wenn ich den Sketch nur für den DS benutze sobald ich aber versuche das Relais da irgendwie mit einzubauen funzt es nicht mehr.
Vl. könnt ihr mal über meinen Sketch drüber schauen und mir nen Tip geben.
P.S. ich habe vom programieren so gut wie KEINE AHNUNG, das basiert eher alles auf einer try & error Methode
Code: Alles auswählen
/*
* WeMos-Schaltaktor (mit Status-Meldung an CUxD und Taster-Support)
*
* Getesteter Aufbau:
* WeMos D1 mini
* Relay Shield mini
* Pin-Belegung:
* D1: Steuerleitung Relais
* D2: Taster-Öffner
* D4: DS18B20
*/
#include <OneWire.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
// DS18S20 Temperaturchip i/o
OneWire ds(D4); // an pin D4
//Hier die Adressen von den Sensoren eingeben
#define Poolwasser1 "28 FF D0 E3 43 16 3 A6" //Dies sind nur Beispiele
// Einstellungen für Messungen und Meldungen
#define ZEITINTERVALL_MESSUNGEN 10 //Abfragezyklus der Sensoren in Sekunden
#define ZEITINTERVALL_MELDUNGEN 60 //Sendeintervall an die Homematic in Sekunden
#define DELTA_TEMPERATURSCHWELLWERT 0.1 //Temperaturdifferenz zum senden an die Homematic in °C
// ******* Netzwerkeinstellungen, bitte anpassen! *******
const char* ssid = "wlan"; // SSID des vorhandenen WLANs
const char* password = "xxxxxxxxxxxxxxxx"; // Passwort für das vorhandene WLAN
const char* host = "192.168.1.51"; // IP-Adresse der CCU
IPAddress gateway(192,168,1,1); // IP-Adresse des WLAN-Gateways
IPAddress dns_ip(192,168,1,1); // IP-Adresse DNS Server
IPAddress subnet(255,255,255,0); // Subnetzmaske
IPAddress ip(192,168,1,64); // feste IP-Adresse für den WeMos
ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
WiFiServer server2(8181);
//String tempCCUname = "Poolwasser1"; // Bezeichnung der CCU-Systemvariable für die gemessene Temperatur
// virtuelle CCU
String virtual_CCU = "nein"; // ja/nein
// ab hier muß eigentlich nichts mehr geändert werden.....
// ******* Einstellungen HTML *******
String HTML_title = "Sandfilter (Poolpumpe)";
String HTML_background_color = "0D4C75"; //0D4C75
String HTML_title_color = "C9C9C9"; //9A916C
String HTML_text_color = "FFFFFF";
String HTML_color1 = "CECECE";
String HTML_color2 = "9A916C";
String Version = "1.2";
String Status = "0";
String Status_alt = "0";
String Status_Aenderung = "nein";
String Taster = "unbekannt";
String action = "0";
String transmit_state = "ja";
String HTML_head = "<h2><font color='#" + HTML_title_color +"'>" + HTML_title + "</font></h2>";
String HTML_end = "</body></html>";
String HTML_style = "style='background-color: #" + HTML_background_color +"; color: #" + HTML_text_color +";' alink='#" + HTML_color2 +"' link='#" + HTML_color1 +"' vlink='#" + HTML_color1 +"'";
// ******* Einstellungen für CUxD, bitte anpassen! *******
String transmit_state_R1 = "ja"; // ja/nein
String CUxD_Geraet = "CUX2801012:1"; // SN:Kanal
// Definition der Ports ....
const int relay_R1 = D1 ;
const int switch_R1 = D2 ;
char ConnectString[255] = "";
String Antwort = "";
unsigned long deltaMessungSekunden = ZEITINTERVALL_MESSUNGEN; //Zeitintervall (Sekunden) nach dem eine Messung erfolgt
unsigned long deltaMeldungSekunden = ZEITINTERVALL_MELDUNGEN; // Zeitintervall (Sekunden) nach dem eine CCU-Meldung erfolgt (0 bedeutet nie)
unsigned long jetztMillis = 0;
unsigned long deltaMessungMillis = deltaMessungSekunden * 1000, letzteMessungMillis = 0;
unsigned long deltaMeldungMillis = deltaMeldungSekunden * 1000, letzteMeldungMillis = 0;
String antwort = "", meldung = "";
float deltaTemp = DELTA_TEMPERATURSCHWELLWERT; // Temperaturaenderung (*C) bei der eine CCU-Meldung erfolgt (0 bedeutet nie)
float temp = 0, tempCCU = 0;
float NewTemp[10] = {-255};
float OldTemp[10] = {-255};
String zeitstempel()
{ // Betriebszeit als Stunde:Minute:Sekunde
char stempel[10];
int lfdStunden = millis()/3600000;
int lfdMinuten = millis()/60000-lfdStunden*60;
int lfdSekunden = millis()/1000-lfdStunden*3600-lfdMinuten*60;
sprintf (stempel,"%03d:%02d:%02d", lfdStunden, lfdMinuten, lfdSekunden);
return stempel;
}
void status_aktuallisieren(){
if (digitalRead(relay_R1) == HIGH) {Status = "1";}
if (digitalRead(relay_R1) == LOW) {Status = "0";}
}
void set_CUxD() {
String meldung = "";
WiFiClient client; // Webclient initialisieren
if (!client.connect(host, 8181)) { // mit dem CCU-Port 8181 verbinden
Serial.println(" Fehler: Verbindung zur CCU konnte nicht aufgebaut werden");
delay(50);
return;
}
meldung = meldung +"GET /WeMos.exe?state=dom.GetObject('CUxD." + CUxD_Geraet + ".SET_STATE').State('" + Status + "')";
client.println(meldung); // Daten an CCU melden
}
void WLANVerbindung()
{
// WLAN-Verbindung herstellen
WiFi.config(ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
WiFi.begin(ssid, password);
Serial.print("Verbindungsaufbau");
Serial.println(" erfolgreich!");
Serial.println("");
Serial.print("Verbunden mit: ");
Serial.println(ssid);
Serial.print("Signalstaerke: ");
int rssi = WiFi.RSSI();
Serial.print(rssi);
Serial.println(" dBm");
Serial.print("IP-Adresse: ");
Serial.println(WiFi.localIP());
Serial.println("");
sprintf(ConnectString, "</br></br>Verbunden mit: %s </br>Signalstaerke: %d dBm </br></br>", ssid, rssi);
server.on("/", Hauptseite);
// HTTP-Server starten
server.begin();
Serial.println(zeitstempel() + " HTTP-Server gestartet");
if (transmit_state == "ja") {set_CUxD();}
int sensorVal = digitalRead(switch_R1);
// Serial.println(sensorVal);
if (sensorVal == HIGH) {Taster = "schliesser";} else {Taster = "oeffner";}
// Start server2
if (virtual_CCU == "ja") {server2.begin(); Serial.println(zeitstempel() + " virtuelle CCU gestarted");}
}
void cmd() { // bei Aufruf von "../cmd" R1%3D0 R1%3D1
String CUxD = server.arg("CUxD");
String R1 = server.arg("R1");
String transmit = server.arg("transmit");
if (R1 == "1" && transmit == "1") {action = "1"; action_1();}
else if (R1 == "0" && transmit == "1") {action = "0"; action_1();}
else if ( (R1 == "1" && transmit == "0") || (R1 == "1") ) {action = "1"; action_2();}
else if ( (R1 == "0" && transmit == "0") || (R1 == "0") ) {action = "0"; action_2();}
else if (R1 == "state") {get_state();}
else if (CUxD == "0") {transmit_state_R1 = "ja"; help(); Serial.println("CUxD-Meldungen: ja");}
else if (CUxD == "1") {transmit_state_R1 = "nein"; help(); Serial.println("CUxD-Meldungen: nein");}
else {
help();
delay(100);
Serial.println(zeitstempel() + " Help");
}
}
void setup(void){
// inputs/outputs initialisieren
// seriellen port starten
pinMode(relay_R1, OUTPUT); // Relais-Pin als Ausgang setzen
digitalWrite(relay_R1, LOW);
pinMode(switch_R1, INPUT_PULLUP); // Taster zum schaltet
Serial.begin(115200);
Serial.println("");
Serial.println("WeMos-Schaltaktor");
server.on("/", root);
server.on("/R1-1", [](){action = "1"; action_1();});
server.on("/R1-0", [](){action = "0"; action_1();});
server.on("/cmd", cmd);
server.on("/taster", taster);
server.on("/help", help);
//ListSensors();
WLANVerbindung();
}
bool Contains(String s, String search)
{
int max = s.length() - search.length();
for (int i = 0; i <= max; i++) {
if (s.substring(i) == search) return true; // or i
}
return false; //or -1
}
void MeldeWert(char* Sensor, float Temp) {
String meldung1 = "";
WiFiClient client; // Webclient initialisieren
if (!client.connect(host, 8181)) { // mit dem CCU-Port 8181 verbinden
Serial.println(" Fehler: Verbindung zur CCU konnte nicht aufgebaut werden");
delay(50);
return;
}
meldung1 = meldung1 +"GET /WeMos.exe?befehl=dom.GetObject('" + Sensor +"').SET_State('" + Temp + "')";
client.println(meldung1); // Daten an CCU melden
}
void root() { // bei Aufruf des Root-Verzeichnisses
String tempCCUname = "Poolwasser1"; // Bezeichnung der CCU-Systemvariable für die gemessene Temperatur
String HTML_content = "";
String button_text = "null";
String button_color = "FFD06E";
String button = "<span style='margin-left: 10px; background-color: #" + button_color +"; color: #000; display: inline-block; padding: 2px 10px; font-weight: bold; border: 2px solid #4f4f4f; border-radius: 2px; text-decoration: none;'>" + button_text +"</span>";
String HTML_start = "<html><head><meta http-equiv='refresh' content='3'><meta name='theme-color' content='#" + HTML_background_color +"'><title>" + HTML_title + "</title></head><body " + HTML_style + ">";
String temp = zeitstempel();
String WeMos_ip = WiFi.localIP().toString();
HTML_content = HTML_start + HTML_head;
if (digitalRead(relay_R1) == HIGH) {
button_text = "eingeschaltet";
button_color = "70E670";
button = "<span style='margin-left: 10px; background-color: #" + button_color +"; color: #000; display: inline-block; padding: 2px 10px; font-weight: bold; border: 2px solid #4f4f4f; border-radius: 2px; text-decoration: none;'>" + button_text +"</span>";
HTML_content = HTML_content + "<strong>Status: <a target='answer_wemos' href='http://" + WeMos_ip + "/cmd?R1=0'>" + button +"</a></strong><br><br>";
}
else {
button_text = "ausgeschaltet";
button_color = "A8A8A8";
button = "<span style='margin-left: 10px; background-color: #" + button_color +"; color: #000; display: inline-block; padding: 2px 10px; font-weight: bold; border: 2px solid #4f4f4f; border-radius: 2px; text-decoration: none;'>" + button_text +"</span>";
HTML_content = HTML_content + "<strong>Status: <a target='answer_wemos' href='http://" + WeMos_ip + "/cmd?R1=1'>" + button +"</a></strong><br><br>";
}
HTML_content = HTML_content + "Betriebszeit: <font color='#" + HTML_color2 +"'><em>" + temp + " (Std:Min:Sek)</em></font><br>";
HTML_content = HTML_content + "Verbunden mit: <font color='#" + HTML_color2 +"'><em>" + ssid + "</em></font><br>";
int rssi = WiFi.RSSI();
HTML_content = HTML_content + "Signalstaerke: <font color='#" + HTML_color2 +"'><em>" + String(rssi) + " dBm</em></font><br><br>";
HTML_content = HTML_content + "<strong><a href='http://" + WeMos_ip + "/help'>Hilfe</a></strong>";
HTML_content = HTML_content + "<iframe name='answer_wemos' frameborder='no' height='0' width='0'>Sorry, no frames.</iframe>";
server.send(300, "text/html", HTML_content + HTML_end);
delay(150);
}
void help() {
String HTML_content = "";
String HTML_start = "<html><head><meta name='theme-color' content='#" + HTML_background_color +"'><title>" + HTML_title + "</title></head><body " + HTML_style + ">";
String WeMos_ip = WiFi.localIP().toString();
HTML_content = HTML_start + HTML_head;
HTML_content = HTML_content + "<strong><font color='#" + HTML_title_color +"'>Schaltaktor mit Taster und Statusmeldung an CUxD (28)exec, CCU-RemotePC kompatibel</font>";
HTML_content = HTML_content + " <font color='#" + HTML_color2 +"'>Version: <em>" + Version + "</em></font></strong>";
HTML_content = HTML_content + "<h3>Konfiguration fuer R1:</h3>";
HTML_content = HTML_content + "<li>Status senden: <font color='#" + HTML_color2 +"'><em>" + transmit_state_R1 + "</em></font></li>";
HTML_content = HTML_content + "<li>CUxD-Geraet: <font color='#" + HTML_color2 +"'><em>" + CUxD_Geraet + "</em></font></li>";
HTML_content = HTML_content + "<li>Taster-Typ: <font color='#" + HTML_color2 +"'><em>" + Taster + "</em></font></li><br>";
HTML_content = HTML_content + "<h3>HTTP-Befehlsuebersicht:</h3>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=0</font>\" schaltet das Relais mit Statusmeldung an CUxD aus</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=1</font>\" schaltet das Relais mit Statusmeldung an CUxD ein</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=0&transmit=0</font>\" schaltet das Relais ohne Statusmeldung an CUxD aus</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=1&transmit=0</font>\" schaltet das Relais ohne Statusmeldung an CUxD ein</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=state</font>\" gibt den Schaltzustand des Relais als Logikwert (\"0\" oder \"1\") zurueck</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?CUxD=0</font>\" Statusmeldung an CUxD bis zum reboot ausschaltet</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?CUxD=1</font>\" Statusmeldung an CUxD einschaltet</li><br>";
HTML_content = HTML_content + "<h3>CUxD-Integration:</h3>";
HTML_content = HTML_content + "<li>Mit CUxD ein Geraet vom Typ (28)System/Exec/Schalter erstellen</li>";
HTML_content = HTML_content + "<li>In der CCU im Posteingang konfigurieren:<br>";
HTML_content = HTML_content + " SWITCH|CMD_SHORT: <font color='#" + HTML_color1 +"'>/usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R1-0\'</font><br>";
HTML_content = HTML_content + " SWITCH|CMD_LONG: <font color='#" + HTML_color1 +"'>/usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R1-1\'</font></li><br><br>";
HTML_content = HTML_content + " SWITCH|CMD_SHORT: <font color='#" + HTML_color1 +"'>/usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R2-0\'</font><br>";
HTML_content = HTML_content + " SWITCH|CMD_LONG: <font color='#" + HTML_color1 +"'>/usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R2-1\'</font></li><br><br>";
HTML_content = HTML_content + "<li>\"virtual_CCU\" im Sketch auf \"ja\" stellen</li>";
HTML_content = HTML_content + "<br><strong><a href='http://" + WeMos_ip + "'>zurueck</a></strong><br>";
server.send(300, "text/html", HTML_content + HTML_end);
}
void turn_on() {
digitalWrite(relay_R1, HIGH);
Serial.println("off");
}
void turn_off() {
digitalWrite(relay_R1, LOW);
Serial.println("on");
}
// Tasterfunktion
void taster(){
pinMode(D1, OUTPUT);
digitalWrite(D1, HIGH);
delay(1000); // Das ist die Schaltzeit in Millisekunden
digitalWrite(D1, LOW);
server.send(200, "text/plain", "Taster wurde betätigt");
delay(100);
Serial.println(zeitstempel() + " ueber HTTP Taster betätigt");
}
void action_1() { //keinen status senden
String aktor_status = "unbekannt";
if (action == "1") {turn_on(); aktor_status = "eingeschaltet";}
if (action == "0") {turn_off(); aktor_status = "ausgeschaltet";}
Status_alt = action;
status_aktuallisieren();
server.send(200, "text/plain", "WeMos-Schaltaktor ist "+ aktor_status +", keine Meldung an CUxD");
}
void action_2() { //status senden
String aktor_status = "unbekannt";
if (action == "1") {turn_on(); aktor_status = "eingeschaltet";}
if (action == "0") {turn_off(); aktor_status = "ausgeschaltet";}
Status_alt = action;
status_aktuallisieren();
if (transmit_state == "ja") {set_CUxD();}
server.send(200, "text/plain", "WeMos-Schaltaktor ist "+ aktor_status +", Meldung an CUxD");
}
void get_state() {
String temp = zeitstempel();
status_aktuallisieren();
server.send(200, "text/plain", Status);
delay(100);
Serial.println(zeitstempel() + " ueber HTTP Status gemeldet");
}
void get_state_CCU() {
String CCU_state = "null";
String temp = zeitstempel();
status_aktuallisieren();
if (Status == "0") {CCU_state = "<state>false</state>";} else {CCU_state = "<state>true</state>";}
server.send(200, "text/plain", CCU_state);
delay(100);
Serial.println(zeitstempel() + " ueber HTTP Status gemeldet");
}
void server_2() {
// Check if a client has connected
WiFiClient client = server2.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Match the request
if (request.indexOf("=dom.GetObject('CUxD.WeMos00000:1.STATE').State(1)") != -1) {action = "1"; action_1();}
if (request.indexOf("=dom.GetObject%28%27CUxD.WeMos00000%3A1.STATE%27%29.State%281%29") != -1) {action = "1"; action_1();}
if (request.indexOf("=dom.GetObject('CUxD.WeMos00000:1.STATE').State(0)") != -1){action = "0"; action_1();}
if (request.indexOf("=dom.GetObject%28%27CUxD.WeMos00000%3A1.STATE%27%29.State%280%29") != -1) {action = "0"; action_1();}
if (request.indexOf("=dom.GetObject('CUxD.WeMos00000:1.STATE').Value()") != -1){get_state();}
if (request.indexOf("=dom.GetObject%28%27CUxD.WeMos00000%3A1.STATE%27%29.Value%28%29") != -1) {get_state();}
// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/xml");
client.println(""); // do not forget this one
client.print("<xml><state>");
if(Status == "1") {
client.print("true");
} else {
client.print("false");
}
client.print("</state></xml>");
delay(1);
Serial.println("Client disconnected");
Serial.println("");
}
void ListSensors(void)
{
int count=0,i=0;
byte addr[8];
float Temp = 0.0;
char Adress[10][255] = {""};
while(ds.search(addr))
{
sprintf(Adress[count], "");
for( i = 0; i < 8; i++)
{
sprintf(Adress[count], "%s %X", Adress[count],addr[i]);
}
count++;
}
Antwort += "Gefundene Sensoren \n</br>";
Serial.print("\nGefundene Sensoren\n");
for(count = 0; count<10;count++)
{
if(strcmp(Adress[count], ""))
{
Antwort += Adress[count];
Serial.print(Adress[count]);
Antwort += " Poolwasser: ";
Serial.print(" Poolwasser: ");
Temp = GetRoomTemperature(Adress[count], true);
Antwort += Temp;
Serial.print(Temp);
Antwort += "\n</br>";
Serial.print("\n");
}
}
Antwort += "</br>";
Serial.print("\n");
Antwort += "Definierte Sensoren:\n</br>";
Serial.print("Definierte Sensoren:\n");
for(count = 0; count<10;count++)
{
if(Contains(Adress[count], Poolwasser1) && strcmp(Adress[count], "") && strcmp(Poolwasser1, ""))
{
Antwort += "SENSOR1: ";
Serial.print("SENSOR1: ");
Antwort += Adress[count];
Serial.print(Adress[count]);
Antwort += " Poolwasser: ";
Serial.print(" Poolwasser: ");
Temp = GetRoomTemperature(Adress[count], true);
Antwort += Temp;
Serial.print(Temp);
Antwort += "\n</br>";
Serial.print("\n");
//MeldeWert("Sensor1", Temp);
OldTemp[0] = NewTemp[0];
NewTemp[0] = Temp;
if(OldTemp[0] == -255) OldTemp[0] = Temp;
}
}
Antwort += "</br>";
Serial.print("\n");
Antwort += "Nicht definierte Sensoren:\n</br>";
Serial.print("Nicht definierte Sensoren:\n");
for(count = 0; count<10;count++)
{
//Serial.print(Adress[count]);
if(!(Contains(Adress[count], Poolwasser1) && strcmp(Poolwasser1, "")))
{
if(strcmp(Adress[count], ""))
{
Antwort += Adress[count];
Serial.print(Adress[count]);
Antwort += " Poolwasser: ";
Serial.print(" Poolwasser: ");
Temp = GetRoomTemperature(Adress[count], true);
Antwort += Temp;
Serial.print(Temp);
Antwort += "\n</br>";
Serial.print("\n");
}
}
}
letzteMessungMillis = jetztMillis;
ds.reset_search();
}
void Hauptseite(){
Antwort = "";
/*char temp[400];
int sec = millis() / 1000;
int min = sec / 60;
int hr = min / 60;
snprintf ( temp, 400,
"<html>\
<head>\
<meta http-equiv='refresh' content='5'/>\
<body>\
<p>Uptime: %02d:%02d:%02d</p></br>",
hr, min % 60, sec % 60
);
Antwort += temp;*/
Antwort += "<meta http-equiv='refresh' content='60'/>";
ListSensors();
Antwort += ConnectString;
//Antwort += "</body></html>";
server.send ( 300, "text/html", Antwort );
delay(100);
//server.send(300, "text/plain", Antwort);
//delay(150);
}
float GetRoomTemperature(char adress[255], bool doreset)
{
int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
byte i,present = 0, data[12], addr[8];
char stradd[255];
while(ds.search(addr))
{
sprintf(stradd, "");
//Serial.print("\nR=");
for( i = 0; i < 8; i++)
{
sprintf(stradd, "%s %X", stradd,addr[i]);
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start Konvertierung, mit power-on am Ende
delay(50); // 750ms sollten ausreichen
// man sollte ein ds.depower() hier machen, aber ein reset tut das auch
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Wert lesen
for ( i = 0; i < 9; i++)
{
// 9 bytes
data[i] = ds.read();
}
if(Contains(stradd, adress))
{
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
SignBit = TReading & 0x8000; // test most sig bit
if (SignBit) // negative
{
TReading = (TReading ^ 0xffff) + 1; // 2's comp
}
Tc_100 = (6 * TReading) + TReading / 4; // mal (100 * 0.0625) oder 6.25
/* Für DS18S20 folgendes verwenden Tc_100 = (TReading*100/2); */
Whole = Tc_100 / 100; // Ganzzahlen und Brüche trennen
Fract = Tc_100 % 100;
if (SignBit) // negative Werte ermitteln
{
//Serial.print("-");
}
/*
Serial.print(Whole);
Serial.print(".");
if (Fract < 10)
{
Serial.print("0");
}
Serial.print(Fract);
Serial.print("\n");
Serial.println();
*/
if(doreset)ds.reset_search();
return (float)Whole+((float)Fract/100);
}
}
}
char Sensor[16];
void loop(void)
{
server.handleClient(); // auf HTTP-Anfragen warten
jetztMillis = millis();
// neue Messung falls Zeitintervall erreicht
if(jetztMillis - letzteMessungMillis > deltaMessungMillis)
{
ListSensors();
}
for(int c = 0; c <10;c++)
{
if(deltaTemp != 0 && abs(OldTemp[c]- NewTemp[c]) > deltaTemp)
{
Serial.print("Temperatur änderung bei Sensor: ");
Serial.print(c+1);
Serial.print(" erreicht.");
OldTemp[c] = NewTemp[c];
sprintf(Sensor, "Poolwasser%d", c+1);
MeldeWert(Sensor, NewTemp[c]);
}
}
// neue Meldung an die CCU falls Zeitintervall erreicht
if(!deltaMeldungMillis == 0 && jetztMillis - letzteMeldungMillis > deltaMeldungMillis)
{
Serial.print(zeitstempel() + " Zeitintervall erreicht: \n");
letzteMeldungMillis = jetztMillis;
//melde_CCU();
for(int c = 0; c <10;c++)
{
sprintf(Sensor, "Poolwasser%d", c+1);
MeldeWert(Sensor, NewTemp[c]);
}
}
if (virtual_CCU == "ja") {server_2();}
}