mirror of
https://github.com/wled/WLED.git
synced 2025-07-19 16:56:35 +00:00
UM SHT: Made type a setting instead of buildflag
This commit is contained in:
parent
987dd36401
commit
19146d8012
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
#include "SHT85.h"
|
#include "SHT85.h"
|
||||||
|
|
||||||
|
#define USERMOD_SHT_TYPE_SHT30 0
|
||||||
|
#define USERMOD_SHT_TYPE_SHT31 1
|
||||||
|
#define USERMOD_SHT_TYPE_SHT35 2
|
||||||
|
#define USERMOD_SHT_TYPE_SHT85 3
|
||||||
|
|
||||||
class ShtUsermod : public Usermod
|
class ShtUsermod : public Usermod
|
||||||
{
|
{
|
||||||
@ -10,9 +14,10 @@ class ShtUsermod : public Usermod
|
|||||||
bool firstRunDone = false;
|
bool firstRunDone = false;
|
||||||
bool initDone = false;
|
bool initDone = false;
|
||||||
bool haMqttDiscovery = false;
|
bool haMqttDiscovery = false;
|
||||||
SHT *shtTempHumidSensor;
|
|
||||||
|
|
||||||
// SHT vars
|
// SHT vars
|
||||||
|
SHT *shtTempHumidSensor;
|
||||||
|
byte shtType = 0;
|
||||||
bool shtInitDone = false;
|
bool shtInitDone = false;
|
||||||
bool shtReadDataSuccess = false;
|
bool shtReadDataSuccess = false;
|
||||||
byte shtI2cAddress = 0x44;
|
byte shtI2cAddress = 0x44;
|
||||||
@ -26,29 +31,13 @@ class ShtUsermod : public Usermod
|
|||||||
|
|
||||||
void initShtTempHumiditySensor()
|
void initShtTempHumiditySensor()
|
||||||
{
|
{
|
||||||
PinManagerPinType pins[2] = { { i2c_sda, true }, { i2c_scl, true } };
|
switch (shtType) {
|
||||||
if (!pinManager.allocateMultiplePins(pins, 2, PinOwner::HW_I2C)) {
|
case USERMOD_SHT_TYPE_SHT30: shtTempHumidSensor = (SHT *) new SHT30(); break;
|
||||||
DEBUG_PRINTF("[%s] SHT pin allocation failed!\n", _name);
|
case USERMOD_SHT_TYPE_SHT31: shtTempHumidSensor = (SHT *) new SHT31(); break;
|
||||||
shtInitDone = false;
|
case USERMOD_SHT_TYPE_SHT35: shtTempHumidSensor = (SHT *) new SHT35(); break;
|
||||||
cleanupShtTempHumiditySensor();
|
case USERMOD_SHT_TYPE_SHT85: shtTempHumidSensor = (SHT *) new SHT85(); break;
|
||||||
cleanup();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USERMOD_SHT_TYPE_SHT31
|
|
||||||
shtTempHumidSensor = (SHT *) new SHT31();
|
|
||||||
#else
|
|
||||||
#ifdef USERMOD_SHT_TYPE_SHT35
|
|
||||||
shtTempHumidSensor = (SHT *) new SHT35();
|
|
||||||
#else
|
|
||||||
#ifdef USERMOD_SHT_TYPE_SHT85
|
|
||||||
shtTempHumidSensor = (SHT *) new SHT85();
|
|
||||||
#else
|
|
||||||
shtTempHumidSensor = (SHT *) new SHT30();
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
shtTempHumidSensor->begin(shtI2cAddress, i2c_sda, i2c_scl);
|
shtTempHumidSensor->begin(shtI2cAddress, i2c_sda, i2c_scl);
|
||||||
if (shtTempHumidSensor->readStatus() == 0xFFFF) {
|
if (shtTempHumidSensor->readStatus() == 0xFFFF) {
|
||||||
DEBUG_PRINTF("[%s] SHT init failed!\n", _name);
|
DEBUG_PRINTF("[%s] SHT init failed!\n", _name);
|
||||||
@ -67,9 +56,6 @@ class ShtUsermod : public Usermod
|
|||||||
shtTempHumidSensor->reset();
|
shtTempHumidSensor->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
pinManager.deallocatePin(i2c_sda, PinOwner::HW_I2C);
|
|
||||||
pinManager.deallocatePin(i2c_scl, PinOwner::HW_I2C);
|
|
||||||
|
|
||||||
delete shtTempHumidSensor;
|
delete shtTempHumidSensor;
|
||||||
|
|
||||||
shtInitDone = false;
|
shtInitDone = false;
|
||||||
@ -81,6 +67,9 @@ class ShtUsermod : public Usermod
|
|||||||
cleanupShtTempHumiditySensor();
|
cleanupShtTempHumiditySensor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pinManager.deallocatePin(i2c_sda, PinOwner::HW_I2C);
|
||||||
|
pinManager.deallocatePin(i2c_scl, PinOwner::HW_I2C);
|
||||||
|
|
||||||
enabled = false;
|
enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,6 +84,7 @@ class ShtUsermod : public Usermod
|
|||||||
static const char _name[];
|
static const char _name[];
|
||||||
static const char _enabled[];
|
static const char _enabled[];
|
||||||
static const char _haMqttDiscovery[];
|
static const char _haMqttDiscovery[];
|
||||||
|
static const char _shtType[];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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.
|
||||||
@ -103,6 +93,15 @@ class ShtUsermod : public Usermod
|
|||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
|
PinManagerPinType pins[2] = { { i2c_sda, true }, { i2c_scl, true } };
|
||||||
|
if (!pinManager.allocateMultiplePins(pins, 2, PinOwner::HW_I2C)) {
|
||||||
|
DEBUG_PRINTF("[%s] SHT pin allocation failed!\n", _name);
|
||||||
|
shtInitDone = false;
|
||||||
|
cleanupShtTempHumiditySensor();
|
||||||
|
cleanup();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
initShtTempHumiditySensor();
|
initShtTempHumiditySensor();
|
||||||
|
|
||||||
initDone = true;
|
initDone = true;
|
||||||
@ -156,12 +155,25 @@ class ShtUsermod : public Usermod
|
|||||||
if (haMqttDiscovery) publishHomeAssistantAutodiscovery();
|
if (haMqttDiscovery) publishHomeAssistantAutodiscovery();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void appendConfigData() {
|
||||||
|
oappend(SET_F("dd=addDropdown('"));
|
||||||
|
oappend(_name);
|
||||||
|
oappend(SET_F("','"));
|
||||||
|
oappend(_shtType);
|
||||||
|
oappend(SET_F("');"));
|
||||||
|
oappend(SET_F("addOption(dd,'SHT30',0);"));
|
||||||
|
oappend(SET_F("addOption(dd,'SHT31',1);"));
|
||||||
|
oappend(SET_F("addOption(dd,'SHT35',2);"));
|
||||||
|
oappend(SET_F("addOption(dd,'SHT85',3);"));
|
||||||
|
}
|
||||||
|
|
||||||
void addToConfig(JsonObject &root)
|
void addToConfig(JsonObject &root)
|
||||||
{
|
{
|
||||||
JsonObject top = root.createNestedObject(FPSTR(_name)); // usermodname
|
JsonObject top = root.createNestedObject(FPSTR(_name)); // usermodname
|
||||||
|
|
||||||
top[FPSTR(_enabled)] = enabled;
|
top[FPSTR(_enabled)] = enabled;
|
||||||
top[FPSTR(_haMqttDiscovery)] = haMqttDiscovery;
|
top[FPSTR(_haMqttDiscovery)] = haMqttDiscovery;
|
||||||
|
top[FPSTR(_shtType)] = shtType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -179,9 +191,11 @@ class ShtUsermod : public Usermod
|
|||||||
|
|
||||||
bool oldEnabled = enabled;
|
bool oldEnabled = enabled;
|
||||||
bool oldHaMqttDiscovery = haMqttDiscovery;
|
bool oldHaMqttDiscovery = haMqttDiscovery;
|
||||||
|
byte oldShtType = shtType;
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
// 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) {
|
||||||
@ -198,6 +212,11 @@ class ShtUsermod : public Usermod
|
|||||||
publishHomeAssistantAutodiscovery();
|
publishHomeAssistantAutodiscovery();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (oldShtType != shtType) {
|
||||||
|
cleanupShtTempHumiditySensor();
|
||||||
|
initShtTempHumiditySensor();
|
||||||
|
}
|
||||||
|
|
||||||
DEBUG_PRINTF("[%s] Config (re)loaded\n", _name);
|
DEBUG_PRINTF("[%s] Config (re)loaded\n", _name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,6 +326,7 @@ class ShtUsermod : public Usermod
|
|||||||
|
|
||||||
// strings to reduce flash memory usage (used more than twice)
|
// strings to reduce flash memory usage (used more than twice)
|
||||||
// Config settings
|
// Config settings
|
||||||
const char ShtUsermod::_name[] PROGMEM = "SHT Sensor";
|
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";
|
Loading…
x
Reference in New Issue
Block a user