Skip to content

Commit 9056e5f

Browse files
committed
Add Dropdown to select 9 or 12 bit resolution
1 parent 3017145 commit 9056e5f

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

usermods/Temperature/Temperature.cpp

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ float UsermodTemperature::readDallas() {
3131
// 12-bit precision - 4-bit fraction part
3232
result = (data[1] << 8) | data[0];
3333
retVal = float(result) * 0.0625f; // 2^(-4)
34+
if (!highResolution) {
35+
result = retVal * 2.f;
36+
retVal = float(result) * 0.5f;
37+
}
3438
break;
3539
}
3640
}
@@ -277,6 +281,7 @@ void UsermodTemperature::addToConfig(JsonObject &root) {
277281
top[FPSTR(_parasite)] = parasite;
278282
top[FPSTR(_parasitePin)] = parasitePin;
279283
top[FPSTR(_domoticzIDX)] = idx;
284+
top[FPSTR(_highResolution)] = highResolution;
280285
DEBUG_PRINTLN(F("Temperature config saved."));
281286
}
282287

@@ -304,6 +309,7 @@ bool UsermodTemperature::readFromConfig(JsonObject &root) {
304309
parasite = top[FPSTR(_parasite)] | parasite;
305310
parasitePin = top[FPSTR(_parasitePin)] | parasitePin;
306311
idx = top[FPSTR(_domoticzIDX)] | idx;
312+
highResolution = top[FPSTR(_highResolution)] | highResolution;
307313

308314
if (!initDone) {
309315
// first run: reading from cfg.json
@@ -324,14 +330,18 @@ bool UsermodTemperature::readFromConfig(JsonObject &root) {
324330
}
325331
}
326332
// use "return !top["newestParameter"].isNull();" when updating Usermod with new features
327-
return !top[FPSTR(_domoticzIDX)].isNull();
333+
return !top[FPSTR(_highResolution)].isNull();
328334
}
329335

330336
void UsermodTemperature::appendConfigData() {
331337
oappend(F("addInfo('")); oappend(String(FPSTR(_name)).c_str()); oappend(F(":")); oappend(String(FPSTR(_parasite)).c_str());
332338
oappend(F("',1,'<i>(if no Vcc connected)</i>');")); // 0 is field type, 1 is actual field
333339
oappend(F("addInfo('")); oappend(String(FPSTR(_name)).c_str()); oappend(F(":")); oappend(String(FPSTR(_parasitePin)).c_str());
334340
oappend(F("',1,'<i>(for external MOSFET)</i>');")); // 0 is field type, 1 is actual field
341+
oappend(F("dd=addDD('")); oappend(String(FPSTR(_name)).c_str());
342+
oappend(F("','")); oappend(String(FPSTR(_highResolution)).c_str()); oappend(F("');"));
343+
oappend(F("addO(dd,'0.5 °C (9-bit) resolution (legacy)',0);"));
344+
oappend(F("addO(dd,'0.0625°C (12-bit) resolution',1);"));
335345
}
336346

337347
float UsermodTemperature::getTemperature() {
@@ -345,16 +355,17 @@ const char *UsermodTemperature::getTemperatureUnit() {
345355
UsermodTemperature* UsermodTemperature::_instance = nullptr;
346356

347357
// strings to reduce flash memory usage (used more than twice)
348-
const char UsermodTemperature::_name[] PROGMEM = "Temperature";
349-
const char UsermodTemperature::_enabled[] PROGMEM = "enabled";
350-
const char UsermodTemperature::_readInterval[] PROGMEM = "read-interval-s";
351-
const char UsermodTemperature::_parasite[] PROGMEM = "parasite-pwr";
352-
const char UsermodTemperature::_parasitePin[] PROGMEM = "parasite-pwr-pin";
353-
const char UsermodTemperature::_domoticzIDX[] PROGMEM = "domoticz-idx";
354-
const char UsermodTemperature::_sensor[] PROGMEM = "sensor";
355-
const char UsermodTemperature::_temperature[] PROGMEM = "temperature";
356-
const char UsermodTemperature::_Temperature[] PROGMEM = "/temperature";
357-
const char UsermodTemperature::_data_fx[] PROGMEM = "Temperature@Min,Max;;!;01;pal=54,sx=255,ix=0";
358+
const char UsermodTemperature::_name[] PROGMEM = "Temperature";
359+
const char UsermodTemperature::_enabled[] PROGMEM = "enabled";
360+
const char UsermodTemperature::_readInterval[] PROGMEM = "read-interval-s";
361+
const char UsermodTemperature::_parasite[] PROGMEM = "parasite-pwr";
362+
const char UsermodTemperature::_parasitePin[] PROGMEM = "parasite-pwr-pin";
363+
const char UsermodTemperature::_domoticzIDX[] PROGMEM = "domoticz-idx";
364+
const char UsermodTemperature::_highResolution[] PROGMEM = "high-resolution";
365+
const char UsermodTemperature::_sensor[] PROGMEM = "sensor";
366+
const char UsermodTemperature::_temperature[] PROGMEM = "temperature";
367+
const char UsermodTemperature::_Temperature[] PROGMEM = "/temperature";
368+
const char UsermodTemperature::_data_fx[] PROGMEM = "Temperature@Min,Max;;!;01;pal=54,sx=255,ix=0";
358369

359370
static uint16_t mode_temperature() {
360371
float low = roundf(mapf((float)SEGMENT.speed, 0.f, 255.f, -150.f, 150.f)); // default: 15°C, range: -15°C to 15°C

usermods/Temperature/UsermodTemperature.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class UsermodTemperature : public Usermod {
4848

4949
bool HApublished = false;
5050
int16_t idx = -1; // Domoticz virtual sensor idx
51+
int8_t highResolution = 0; // 0: 9-bit - 1: 12-bit
5152

5253
// strings to reduce flash memory usage (used more than twice)
5354
static const char _name[];
@@ -56,6 +57,7 @@ class UsermodTemperature : public Usermod {
5657
static const char _parasite[];
5758
static const char _parasitePin[];
5859
static const char _domoticzIDX[];
60+
static const char _highResolution[];
5961
static const char _sensor[];
6062
static const char _temperature[];
6163
static const char _Temperature[];

0 commit comments

Comments
 (0)