void Hauptseite()
{
Antwort = "";
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(200); // 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("-");
}
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 < 11; 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, "Sensor%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 < 11; c++)
{
sprintf(Sensor, "Sensor%d", c + 1);
MeldeWert(Sensor, NewTemp[c]);
}
}
}