@@ -31,6 +31,10 @@ float UsermodTemperature::readDallas() {
31
31
// 12-bit precision - 4-bit fraction part
32
32
result = (data[1 ] << 8 ) | data[0 ];
33
33
retVal = float (result) * 0 .0625f ; // 2^(-4)
34
+ if (!highResolution) {
35
+ result = retVal * 2 .f ;
36
+ retVal = float (result) * 0 .5f ;
37
+ }
34
38
break ;
35
39
}
36
40
}
@@ -277,6 +281,7 @@ void UsermodTemperature::addToConfig(JsonObject &root) {
277
281
top[FPSTR (_parasite)] = parasite;
278
282
top[FPSTR (_parasitePin)] = parasitePin;
279
283
top[FPSTR (_domoticzIDX)] = idx;
284
+ top[FPSTR (_highResolution)] = highResolution;
280
285
DEBUG_PRINTLN (F (" Temperature config saved." ));
281
286
}
282
287
@@ -304,6 +309,7 @@ bool UsermodTemperature::readFromConfig(JsonObject &root) {
304
309
parasite = top[FPSTR (_parasite)] | parasite;
305
310
parasitePin = top[FPSTR (_parasitePin)] | parasitePin;
306
311
idx = top[FPSTR (_domoticzIDX)] | idx;
312
+ highResolution = top[FPSTR (_highResolution)] | highResolution;
307
313
308
314
if (!initDone) {
309
315
// first run: reading from cfg.json
@@ -324,14 +330,18 @@ bool UsermodTemperature::readFromConfig(JsonObject &root) {
324
330
}
325
331
}
326
332
// use "return !top["newestParameter"].isNull();" when updating Usermod with new features
327
- return !top[FPSTR (_domoticzIDX )].isNull ();
333
+ return !top[FPSTR (_highResolution )].isNull ();
328
334
}
329
335
330
336
void UsermodTemperature::appendConfigData () {
331
337
oappend (F (" addInfo('" )); oappend (String (FPSTR (_name)).c_str ()); oappend (F (" :" )); oappend (String (FPSTR (_parasite)).c_str ());
332
338
oappend (F (" ',1,'<i>(if no Vcc connected)</i>');" )); // 0 is field type, 1 is actual field
333
339
oappend (F (" addInfo('" )); oappend (String (FPSTR (_name)).c_str ()); oappend (F (" :" )); oappend (String (FPSTR (_parasitePin)).c_str ());
334
340
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);" ));
335
345
}
336
346
337
347
float UsermodTemperature::getTemperature () {
@@ -345,16 +355,17 @@ const char *UsermodTemperature::getTemperatureUnit() {
345
355
UsermodTemperature* UsermodTemperature::_instance = nullptr ;
346
356
347
357
// 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" ;
358
369
359
370
static uint16_t mode_temperature () {
360
371
float low = roundf (mapf ((float )SEGMENT.speed , 0 .f , 255 .f , -150 .f , 150 .f )); // default: 15°C, range: -15°C to 15°C
0 commit comments