diff --git a/ESPtermostat.ino b/ESPtermostat.ino index 7e1acf0..d0fd84e 100644 --- a/ESPtermostat.ino +++ b/ESPtermostat.ino @@ -175,35 +175,48 @@ void thermostatCheck() { } } -void readSensor() { - uint8_t ds18Count = sensor.getDS18Count(); +void readSensors() { + uint8_t ds18Count = sensor.getDeviceCount(); float tempC[ds18Count]; float temperature[ds18Count]; + DeviceAddress addr; + String deviceAddress[ds18Count]; int savedTemperatures = 0; - avgTemperature = 0; - for (int i = 0; i < ds18Count; i++) { - tempC[i] = sensor.getTempCByIndex(i); - if (tempC[i] != DEVICE_DISCONNECTED_C) { - temperature[i] = tempC[i] + correction[i]; - avgTemperature += temperature[i]; + for (uint8_t i = 0; i < ds18Count; i++) { + sensor.getAddress(addr, i); + deviceAddress[savedTemperatures] == ""; + for (uint8_t n = 0; n < 8; n++) { + if (addr[n] < 16) { + deviceAddress[savedTemperatures] += String(0, HEX); + } + deviceAddress[savedTemperatures] += String(addr[n], HEX); + } + + tempC[savedTemperatures] = sensor.getTempCByIndex(i); + if (tempC[savedTemperatures] != DEVICE_DISCONNECTED_C) { + if (savedTemperatures == 0) { + avgTemperature = 0; + } + temperature[savedTemperatures] = tempC[savedTemperatures] + correction[i]; + avgTemperature += temperature[savedTemperatures]; savedTemperatures++; } } - avgTemperature = avgTemperature / savedTemperatures; - - metrics = getMetricsVar(ds18Count, temperature, tempC); - + if (savedTemperatures != 0) { + avgTemperature = avgTemperature / savedTemperatures; + } + setMetricsVar(ds18Count, temperature, tempC, deviceAddress); } -String getMetricsVar(uint8_t ds18Count, float temperature[], float tempC[]) { - metrics = "temp{device=\""; +void setMetricsVar(uint8_t ds18Count, float temperature[], float tempC[], String deviceAddress[]) { + metrics = ""; for (uint8_t i = 0; i < ds18Count; i++) { - if (i != 0) { - metrics += "\ntemp{device=\""; - } + metrics += "\ntemp{device=\""; metrics += i; + metrics += "\",address=\""; + metrics += deviceAddress[i]; metrics += "\"} "; metrics += temperature[i]; } @@ -221,15 +234,13 @@ String getMetricsVar(uint8_t ds18Count, float temperature[], float tempC[]) { metrics += "\noffset "; metrics += offset; } - - return metrics; } void startConversion() { // start temperature conversion (does not block) sensor.requestTemperatures(); // schedule reading the actual temperature in 750 milliseconds - tasker.setTimeout(readSensor, 750); + tasker.setTimeout(readSensors, 750); } void ledBlink() { digitalWrite(LED_PIN, LOW);