Fork of the espurna firmware for `mhsw` switches
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

77 lines
1.7 KiB

/*
ESPurna
DHT MODULE
Copyright (C) 2016 by Xose Pérez <xose dot perez at gmail dot com>
*/
#if ENABLE_DHT
#include <DHT.h>
#include <Adafruit_Sensor.h>
DHT dht(DHT_PIN, DHT_TYPE, DHT_TIMING);
char dhtTemperature[6];
char dhtHumidity[6];
// -----------------------------------------------------------------------------
// DHT
// -----------------------------------------------------------------------------
char * getDHTTemperature() {
return dhtTemperature;
}
char * getDHTHumidity() {
return dhtHumidity;
}
void dhtSetup() {
dht.begin();
}
void dhtLoop() {
if (!mqttConnected()) return;
// Check if we should read new data
static unsigned long last_update = 0;
if ((millis() - last_update > DHT_UPDATE_INTERVAL) || (last_update == 0)) {
last_update = millis();
// Read sensor data
double h = dht.readHumidity();
double t = dht.readTemperature();
// Check if readings are valid
if (isnan(h) || isnan(t)) {
DEBUG_MSG("[DHT] Error reading sensor\n");
} else {
dtostrf(t, 4, 1, dhtTemperature);
itoa((int) h, dhtHumidity, 10);
DEBUG_MSG("[DHT] Temperature: %s\n", dhtTemperature);
DEBUG_MSG("[DHT] Humidity: %s\n", dhtHumidity);
// Send MQTT messages
mqttSend((char *) getSetting("dhtTmpTopic", DHT_TEMPERATURE_TOPIC).c_str(), dhtTemperature);
mqttSend((char *) getSetting("dhtHumTopic", DHT_HUMIDITY_TOPIC).c_str(), dhtHumidity);
// Update websocket clients
char buffer[100];
sprintf_P(buffer, PSTR("{\"dhtVisible\": 1, \"dhtTmp\": %s, \"dhtHum\": %s}"), dhtTemperature, dhtHumidity);
wsSend(buffer);
}
}
}
#endif