Temperaturmessung mit drei Sensoren WLAN

Guten Morgen,

ich mache eine Temperaturmessung für meine Heizung.

Die Außentemperatur wir mit einem NodeMCU über WLAN übertragen - klappt.

Die Innentemperaturm, Heizung-Vorlauf und Heizung-Rücklauf wir mit einem NodeMCU
ins Heimnetz übertragen, klappt auch soweit.

Ich habe mir verschiedene Sketche zusammengebaut.

Es erfolgt eine Ausgabe der 4 Temperaturen am Display - funktioniert
Es erfolgt eine Serielle Ausgabe, da bekomme ich nur die Innentemperatur angezeigt
Es erfolgt eine Ausgabe im Browser, da wird nur die Innentemperatur und die Außentemperatur angezeigt.

Ich würde sagen, ich habe mich bei den Variablen verdaddelt.

Kann mir da jemand weiterhelten?

Die Aussentemperatur ist der STEMP, die Innentemperaturen sind TEMP

LG

#include <OneWire.h>
#include <U8g2lib.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Arduino.h>
#define ONE_WIRE_BUS 14
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

float merketemperatur = 0;
float merkevorlauftemperatur = 0;
float merkeruecklauftemperatur = 0;
float merkeaussentemperatur = 0;

const char* ssid = "FritzWohnzimmer";
const char* pass = "GerhardeeeundJasminiii";
IPAddress ip(192, 168, 178, 233); //Feste IP des neuen Servers, frei wählbar
IPAddress gateway(192, 168, 178, 1); //Gatway (IP Router eintragen)
IPAddress subnet(255, 255, 255, 0); //Subnet Maske eintragen
ESP8266WebServer server(80);

void handleRoot() {
//Temperatur auch bei Url-Aufruf zurückgeben
String message = "*** Ueberwachungs Server - Beispiel von Gerhard ***\n";
String tempstr = String(merketemperatur, 2);
message += "Temperatur Innen : " + tempstr + "\n";
tempstr = String(merkevorlauftemperatur, 2);
message += "Temperatur Vorlauf : " + tempstr + "\n";
tempstr = String(merkeruecklauftemperatur, 2);
message += "Temperatur Ruecklauf : " + tempstr + "\n";
tempstr = String(merkeaussentemperatur, 2);
message += "Temperatur Aussen: " + tempstr + "\n";
server.send(200, "text/plain", message);
}

void handleTemperatur() {
//printUrlArg(); //fuer Debugz Zwecke
String stemp = server.arg("wert");
float temperatur = stemp.toFloat();
if (merkeaussentemperatur != temperatur) {
zeigeAussenTemperatur(temperatur);
merkeaussentemperatur = temperatur;
}
//Temperatur auch bei Url-Aufruf zurückgeben
String message = "*** Ueberwachungs Server - Beispiel von Gerhard ***\n";
String tempstr = String(merketemperatur, 2);
message += "Temperatur Innen : " + tempstr + "\n";
tempstr = String(merkevorlauftemperatur, 2);
message += "Temperatur Vorlauf: " + tempstr + "\n";
tempstr = String(merkeruecklauftemperatur, 2);
message += "TTemperatur Ruecklauf: " + tempstr + "\n";
tempstr = String(merkeaussentemperatur, 2);
message += "Temperatur Aussen: " + tempstr + "\n";
server.send(200, "text/plain", message);
}

void printUrlArg() {
//Alle Parameter seriell ausgeben
String message = "";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(200, "text/plain", message);
Serial.println(message);
}

void setup() {
u8g2.begin();
sensors.begin(); //lokale Temperaturmessung
Serial.begin(115200);
Serial.println(" \r\nINIT \r\n") ;
WiFi.begin(ssid, pass);
WiFi.config(ip, gateway, subnet);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Verbunden mit ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot) ;
server.on("/sensor/temperatur/", handleTemperatur);
server.begin();
Serial.println("HTTP Server wurde gestartet!");
sensors.begin();
}

float getTemperatur() {
float temp;
do {
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
delay(100);
} while (temp == 85.0 || temp == (-127.0));
return temp;
}

void zeigeTemperatur(float temperatur)
{
char temperaturStr[6];
dtostrf(temperatur, 2, 1, temperaturStr);
Serial.print("IT: ");
Serial.println(temperaturStr);
}
void zeigeVorlauftemperatur(float temperaturV)
{
char temperaturStr[6];
dtostrf(temperaturV, 2, 1, temperaturStr);
Serial.print("VT: ");
Serial.println(temperaturStr);
}
void zeigeRueklauftemperatur(float temperaturR)
{
char temperaturStr[6];
dtostrf(temperaturR, 2, 1, temperaturStr);
Serial.print("RT: ");
Serial.println(temperaturStr);
}
void zeigeAussenTemperatur(float temperaturA)
{
char temperaturStr[6];
dtostrf(temperaturA, 2, 1, temperaturStr);
Serial.print("AT: ");
Serial.println(temperaturStr);
}

void loop(void)
{ u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
sensors.requestTemperatures();
server.handleClient();
delay(500);
float temperatur = getTemperatur();
if (merketemperatur != temperatur) {
zeigeTemperatur(temperatur);
merketemperatur = temperatur;
}
//Read first sensor
float temp = sensors.getTempCByIndex(0);
//Print first sensor results
u8g2.setCursor(0,10);
u8g2.print("TempInnen:");
u8g2.setCursor(90,10);
u8g2.print(temp);

//Read second sensor
temp = sensors.getTempCByIndex(1);
//Print second sensor result
u8g2.setCursor(0,25);
u8g2.print("TVorlauf:");
u8g2.setCursor(90,25);
u8g2.print(temp);

//Read second sensor
temp = sensors.getTempCByIndex(2);
//Print third sensor result
u8g2.setCursor(0,40);
u8g2.print("TRueklauf:");
u8g2.setCursor(90,40);
u8g2.print(temp);

//Read Aussentemperatur
String stemp = server.arg("wert");
//Print third sensor result
u8g2.setCursor(0,55);
u8g2.print("TempAussen:");
u8g2.setCursor(90,55);
u8g2.print(stemp);
u8g2.sendBuffer(); // transfer internal memory to the display

//Wait 0.1 sec
delay(100);
}

Wenn Du quote durch code ersetzt, wird Dein Sketch besser lesbar. Ich weiß nicht, ob die schlechte Einrückung dem Quote geschuldet ist. Wenn nicht könntest Du Deinen Sketch in der IDE noch mit +T formatieren.
Das alles kannst Du durch editieren Deines Beitrags ändern.

Gruß Tommy

Dein Sketch ist für einen Laien wie mich schwer zu verstehen. Wenn ich das richtig deute werden die Temperaturen doch nur für die Display Ausgabe eingelesen bis auf die Innentemperatur, die liest du in der Loop nochmal ein!? Deine anderen seriellen Ausgaben werden doch nirgendwo aufgerufen...