Wenn das Dach gut gedämmt ist, dann müsste es dort oben eigentlich am wärmsten sein, weil ja Hitze bekanntlich nach oben steigt. Also so rein von der Physik her. Ist aber nicht so. Ich sitze ja täglich im Homeoffice dort oben und da ist es bei weitem nicht so warm wie im Erdgeschoss, wo geheizt wird.
Das wollte ich genau wissen und habe auf jedem Stockwerk ein Thermometer aufgestellt. Im Erdgeschoss und ersten Stock habe ich einfach die Aqara Sensoren her genommen, bis zum Dach reicht aber die Zigbee Verbindung nicht, deshalb wurde da kurzerhand ein ESP8266 mit DHT11-Sensor zusammengebaut.
Am einfachsten liest man so einen Aufbau mit ESPeasy aus, da gibt es zig Tutorials im Netz. Aber das Auslesen eines Sensors ist auch mit der Arduino-IDE kein Hexenwerk. Bindet man dann noch die WLAN- und MQTT-Lib ein und stöbert etwas bei Google sendet man die erfassten Werte übers WLAN Richtung MQTT-Server und hat die Werte damit im iobroker und kann sie bequem weiterverarbeiten.
Das ganze zusammen kopierte Stück Code schaut dann so aus:
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#define DHTPIN 0 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float t = 0.0;
float h = 0.0;
// Update these with values suitable for your network.
const char* ssid = "WIFI-name";
const char* password = "WIFI-password";
const char* mqtt_server = "MQTT-server-name-or-address";
// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup_wifi() {
delay(100);
// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect()
{
// Loop until we're reconnected
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
//if you MQTT broker has clientID,username and password
if (client.connect(clientId.c_str()))
{
Serial.println("connected");
//once connected to MQTT broker, subscribe command if any
client.subscribe("OsoyooCommand");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 6 seconds before retrying
delay(6000);
}
}
}
void setup() {
// Serial port for debugging purposes
Serial.begin(115200);
timeClient.begin();
timeClient.setTimeOffset(3600);
dht.begin();
Serial.println("Startup");
setup_wifi();
client.setServer(mqtt_server, 1883);
}
void loop() {
timeClient.update();
if (!client.connected()) {
reconnect();
}
client.loop();
float newT = dht.readTemperature();
float newH = dht.readHumidity();
String formattedTime = timeClient.getFormattedTime();
Serial.println(formattedTime);
String msgTmpStr=String(newT);
String msgHumStr=String(newH);
char msgTmp[25];
char msgHum[25];
char msgTime[25];
msgTmpStr.toCharArray(msgTmp,25);
msgHumStr.toCharArray(msgHum,25);
formattedTime.toCharArray(msgTime,25);
client.publish("esp8266/Dach/temperature", msgTmp);
client.publish("esp8266/Dach/humidity", msgHum);
client.publish("esp8266/Dach/time", msgTime);
Serial.print("Temperature: ");
Serial.print(newT);
Serial.print(" Humidity: ");
Serial.println(newH);
delay(60000);
}
Rein physikalisch hat das Haus Türen und Fenster, damit die Wärme auf dem Weg nach oben ein bisschen Wahlfreiheit hat. Ab Mitte des zweiten Absatz fühle ich mich erschlagen und der Screenshot erinnert mich an Gespräche mit Entwicklern, nachdem das Kind in den Brunnen gefallen ist.
Und du hast die Thermosensoren sicher mal eine halbe Stunde nebeneinander liegenlassen, um die Messwerte zu kalibrieren…?
Neulich, wie ich die 1-Wire Thermometer vom #GartenhausZwei im Wohnzimmer angeschlossen hab, hatte ich tatsächlich 5 unterschiedliche Werte von 5 Thermometern mit ca. 2 Grad Range. Da musste ich lachen – und tatsächlich an dich denken! Und beim Gespann ESP8266/DHT11 habe ich das Grillthermometer als Referenz genommen und gleich einen Korrekturwert mit eingebaut, damit das ansatzweise zum Rest passt.
Insgesamt habe ich ein gutes Gefühl und freue mich mehr darüber dass es funktioniert als über die Ergebnisse.