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);
}