UM SHT: Added Fahrenheit support

This commit is contained in:
ezcGman 2022-12-12 02:33:31 +01:00
parent 19146d8012
commit 2123e43490

View File

@ -17,14 +17,15 @@ class ShtUsermod : public Usermod
// SHT vars // SHT vars
SHT *shtTempHumidSensor; SHT *shtTempHumidSensor;
byte shtType = 0; byte shtType = 0; // Default: SHT30
byte unitOfTemp = 0; // Default: Celsius (0 = Celsius, 1 = Fahrenheit)
bool shtInitDone = false; bool shtInitDone = false;
bool shtReadDataSuccess = false; bool shtReadDataSuccess = false;
byte shtI2cAddress = 0x44; byte shtI2cAddress = 0x44;
unsigned long shtLastTimeUpdated = 0; unsigned long shtLastTimeUpdated = 0;
bool shtDataRequested = false; bool shtDataRequested = false;
float shtCurrentTemp = 0; float shtCurrentTempC = 0;
float shtLastKnownTemp = 0; float shtCurrentTempF = 0;
float shtCurrentHumidity = 0; float shtCurrentHumidity = 0;
float shtLastKnownHumidity = 0; float shtLastKnownHumidity = 0;
@ -85,6 +86,7 @@ class ShtUsermod : public Usermod
static const char _enabled[]; static const char _enabled[];
static const char _haMqttDiscovery[]; static const char _haMqttDiscovery[];
static const char _shtType[]; static const char _shtType[];
static const char _unitOfTemp[];
/* /*
* setup() is called once at boot. WiFi is not yet connected at this point. * setup() is called once at boot. WiFi is not yet connected at this point.
@ -135,7 +137,8 @@ class ShtUsermod : public Usermod
if (shtDataRequested) { if (shtDataRequested) {
if (shtTempHumidSensor->dataReady()) { if (shtTempHumidSensor->dataReady()) {
if (shtTempHumidSensor->readData(false)) { if (shtTempHumidSensor->readData(false)) {
shtCurrentTemp = shtTempHumidSensor->getTemperature(); shtCurrentTempC = shtTempHumidSensor->getTemperature();
shtCurrentTempF = shtTempHumidSensor->getFahrenheit();
shtCurrentHumidity = shtTempHumidSensor->getHumidity(); shtCurrentHumidity = shtTempHumidSensor->getHumidity();
publishTemperatureAndHumidityViaMqtt(); publishTemperatureAndHumidityViaMqtt();
@ -165,6 +168,13 @@ class ShtUsermod : public Usermod
oappend(SET_F("addOption(dd,'SHT31',1);")); oappend(SET_F("addOption(dd,'SHT31',1);"));
oappend(SET_F("addOption(dd,'SHT35',2);")); oappend(SET_F("addOption(dd,'SHT35',2);"));
oappend(SET_F("addOption(dd,'SHT85',3);")); oappend(SET_F("addOption(dd,'SHT85',3);"));
oappend(SET_F("dd=addDropdown('"));
oappend(_name);
oappend(SET_F("','"));
oappend(_unitOfTemp);
oappend(SET_F("');"));
oappend(SET_F("addOption(dd,'Celsius',0);"));
oappend(SET_F("addOption(dd,'Fahrenheit',1);"));
} }
void addToConfig(JsonObject &root) void addToConfig(JsonObject &root)
@ -174,6 +184,7 @@ class ShtUsermod : public Usermod
top[FPSTR(_enabled)] = enabled; top[FPSTR(_enabled)] = enabled;
top[FPSTR(_haMqttDiscovery)] = haMqttDiscovery; top[FPSTR(_haMqttDiscovery)] = haMqttDiscovery;
top[FPSTR(_shtType)] = shtType; top[FPSTR(_shtType)] = shtType;
top[FPSTR(_unitOfTemp)] = unitOfTemp;
} }
/** /**
@ -196,6 +207,7 @@ class ShtUsermod : public Usermod
getJsonValue(top[FPSTR(_enabled)], enabled); getJsonValue(top[FPSTR(_enabled)], enabled);
getJsonValue(top[FPSTR(_haMqttDiscovery)], haMqttDiscovery); getJsonValue(top[FPSTR(_haMqttDiscovery)], haMqttDiscovery);
getJsonValue(top[FPSTR(_shtType)], shtType); getJsonValue(top[FPSTR(_shtType)], shtType);
getJsonValue(top[FPSTR(_unitOfTemp)], unitOfTemp);
// First run: reading from cfg.json, nothing to do here, will be all done in setup() // First run: reading from cfg.json, nothing to do here, will be all done in setup()
if (!firstRunDone) { if (!firstRunDone) {
@ -253,8 +265,8 @@ class ShtUsermod : public Usermod
jsonHumidity.add(shtCurrentHumidity); jsonHumidity.add(shtCurrentHumidity);
jsonHumidity.add(F(" RH")); jsonHumidity.add(F(" RH"));
jsonTemp.add(shtCurrentTemp); unitOfTemp ? jsonTemp.add(getTemperatureF()) : jsonTemp.add(getTemperatureC());
jsonTemp.add(F(" °C")); unitOfTemp ? jsonTemp.add(F(" °F")) : jsonTemp.add(F(" °C"));
} }
void publishTemperatureAndHumidityViaMqtt() { void publishTemperatureAndHumidityViaMqtt() {
@ -262,7 +274,7 @@ class ShtUsermod : public Usermod
char buf[128]; char buf[128];
sprintf_P(buf, PSTR("%s/temperature"), mqttDeviceTopic); sprintf_P(buf, PSTR("%s/temperature"), mqttDeviceTopic);
mqtt->publish(buf, 0, false, String(shtCurrentTemp).c_str()); mqtt->publish(buf, 0, false, String((unitOfTemp ? getTemperatureF() : getTemperatureC())).c_str());
sprintf_P(buf, PSTR("%s/humidity"), mqttDeviceTopic); sprintf_P(buf, PSTR("%s/humidity"), mqttDeviceTopic);
mqtt->publish(buf, 0, false, String(shtCurrentHumidity).c_str()); mqtt->publish(buf, 0, false, String(shtCurrentHumidity).c_str());
} }
@ -314,6 +326,14 @@ class ShtUsermod : public Usermod
device[F("mf")] = F("espressif"); device[F("mf")] = F("espressif");
} }
float getTemperatureC() {
return shtCurrentTempC;
}
float getTemperatureF() {
return shtCurrentTempF;
}
/* /*
* getId() allows you to optionally give your V2 usermod an unique ID (please define it in const.h!). * getId() allows you to optionally give your V2 usermod an unique ID (please define it in const.h!).
* This could be used in the future for the system to determine whether your usermod is installed. * This could be used in the future for the system to determine whether your usermod is installed.
@ -330,3 +350,4 @@ const char ShtUsermod::_name[] PROGMEM = "SHT-Sensor";
const char ShtUsermod::_enabled[] PROGMEM = "Enabled"; const char ShtUsermod::_enabled[] PROGMEM = "Enabled";
const char ShtUsermod::_haMqttDiscovery[] PROGMEM = "Add-To-Home-Assistant-MQTT-Discovery"; const char ShtUsermod::_haMqttDiscovery[] PROGMEM = "Add-To-Home-Assistant-MQTT-Discovery";
const char ShtUsermod::_shtType[] PROGMEM = "SHT-Type"; const char ShtUsermod::_shtType[] PROGMEM = "SHT-Type";
const char ShtUsermod::_unitOfTemp[] PROGMEM = "Unit";