From 1ddb479f58c014cc74c2a1da9ad3d13d21b53ba8 Mon Sep 17 00:00:00 2001 From: Sven Ebenfeld Date: Sun, 10 Jan 2021 18:18:28 +0100 Subject: [PATCH] add option to use DS18x20 ID in naming --- tasmota/xsns_05_ds18x20.ino | 11 ++++++++++- tasmota/xsns_05_ds18x20_esp32.ino | 12 +++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/tasmota/xsns_05_ds18x20.ino b/tasmota/xsns_05_ds18x20.ino index b09375b06..eafe668de 100644 --- a/tasmota/xsns_05_ds18x20.ino +++ b/tasmota/xsns_05_ds18x20.ino @@ -26,6 +26,7 @@ #define XSNS_05 5 //#define USE_DS18x20_RECONFIGURE // When sensor is lost keep retrying or re-configure +//#define DS18x20_USE_ID_AS_NAME // Use last 3 bytes for naming of sensors #define DS18S20_CHIPID 0x10 // +/-0.5C 9-bit #define DS1822_CHIPID 0x22 // +/-2C 12-bit @@ -56,7 +57,7 @@ uint8_t ds18x20_sensors = 0; uint8_t ds18x20_pin = 0; // Shelly GPIO3 input only uint8_t ds18x20_pin_out = 0; // Shelly GPIO00 output only bool ds18x20_dual_mode = false; // Single pin mode -char ds18x20_types[12]; +char ds18x20_types[17]; #ifdef W1_PARASITE_POWER uint8_t ds18x20_sensor_curr = 0; unsigned long w1_power_until = 0; @@ -443,7 +444,15 @@ void Ds18x20Name(uint8_t sensor) } GetTextIndexed(ds18x20_types, sizeof(ds18x20_types), index, kDs18x20Types); if (ds18x20_sensors > 1) { +#ifdef DS18x20_USE_ID_AS_NAME + char address[17]; + for (uint32_t j = 0; j < 3; j++) { + sprintf(address+2*j, "%02X", ds18x20_sensor[ds18x20_sensor[sensor].index].address[3-j]); // Only last 3 bytes + } + snprintf_P(ds18x20_types, sizeof(ds18x20_types), PSTR("%s%c%s"), ds18x20_types, IndexSeparator(), address); +#else snprintf_P(ds18x20_types, sizeof(ds18x20_types), PSTR("%s%c%d"), ds18x20_types, IndexSeparator(), sensor +1); +#endif } } diff --git a/tasmota/xsns_05_ds18x20_esp32.ino b/tasmota/xsns_05_ds18x20_esp32.ino index 6b6394b25..ec0226c9b 100644 --- a/tasmota/xsns_05_ds18x20_esp32.ino +++ b/tasmota/xsns_05_ds18x20_esp32.ino @@ -25,6 +25,8 @@ #define XSNS_05 5 +//#define DS18x20_USE_ID_AS_NAME // Use last 3 bytes for naming of sensors + #define DS18S20_CHIPID 0x10 // +/-0.5C 9-bit #define DS1822_CHIPID 0x22 // +/-2C 12-bit #define DS18B20_CHIPID 0x28 // +/-0.5C 12-bit @@ -44,7 +46,7 @@ uint8_t ds18x20_address[DS18X20_MAX_SENSORS][8]; uint8_t ds18x20_index[DS18X20_MAX_SENSORS]; uint8_t ds18x20_valid[DS18X20_MAX_SENSORS]; uint8_t ds18x20_sensors = 0; -char ds18x20_types[12]; +char ds18x20_types[17]; /********************************************************************************************/ @@ -157,7 +159,15 @@ void Ds18x20Name(uint8_t sensor) } GetTextIndexed(ds18x20_types, sizeof(ds18x20_types), index, kDs18x20Types); if (ds18x20_sensors > 1) { +#ifdef DS18x20_USE_ID_AS_NAME + char address[17]; + for (uint32_t j = 0; j < 3; j++) { + sprintf(address+2*j, "%02X", ds18x20_sensor[ds18x20_sensor[sensor].index].address[3-j]); // Only last 3 bytes + } + snprintf_P(ds18x20_types, sizeof(ds18x20_types), PSTR("%s%c%s"), ds18x20_types, IndexSeparator(), address); +#else snprintf_P(ds18x20_types, sizeof(ds18x20_types), PSTR("%s%c%d"), ds18x20_types, IndexSeparator(), sensor +1); +#endif } }