mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
dallas: bus not idle error handling
This commit is contained in:
@@ -70,9 +70,19 @@ void DallasSensor::loop() {
|
||||
bus_.skip();
|
||||
bus_.write(CMD_CONVERT_TEMP, parasite_ ? 1 : 0);
|
||||
state_ = State::READING;
|
||||
scanretry_ = 0;
|
||||
} else {
|
||||
// no sensors found
|
||||
// LOG_ERROR(F("Bus reset failed")); // uncomment for debug
|
||||
if (sensors_.size()) {
|
||||
sensorfails_++;
|
||||
if (++scanretry_ > SCAN_MAX) { // every 30 sec
|
||||
scanretry_ = 0;
|
||||
LOG_ERROR(F("Bus reset failed"));
|
||||
for (auto & sensor : sensors_) {
|
||||
sensor.temperature_c = EMS_VALUE_SHORT_NOTSET;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
last_activity_ = time_now;
|
||||
}
|
||||
@@ -142,7 +152,7 @@ void DallasSensor::loop() {
|
||||
bus_.depower();
|
||||
}
|
||||
// check for missing sensors after some samples
|
||||
if (++scancnt_ > 5) {
|
||||
if (++scancnt_ > SCAN_MAX) {
|
||||
for (auto & sensor : sensors_) {
|
||||
if (!sensor.read) {
|
||||
sensor.temperature_c = EMS_VALUE_SHORT_NOTSET;
|
||||
@@ -151,11 +161,11 @@ void DallasSensor::loop() {
|
||||
sensor.read = false;
|
||||
}
|
||||
scancnt_ = 0;
|
||||
} else if (scancnt_ == -2) { // startup
|
||||
} else if (scancnt_ == SCAN_START + 1) { // startup
|
||||
firstscan_ = sensors_.size();
|
||||
LOG_DEBUG(F("Adding %d dallassensor(s) from first scan"), firstscan_);
|
||||
} else if ((scancnt_ <= 0) && (firstscan_ != sensors_.size())) { // check 2 times for no change of sensor #
|
||||
scancnt_ = -3;
|
||||
scancnt_ = SCAN_START;
|
||||
sensors_.clear(); // restart scaning and clear to get correct numbering
|
||||
}
|
||||
state_ = State::IDLE;
|
||||
|
||||
@@ -95,6 +95,9 @@ class DallasSensor {
|
||||
static constexpr uint8_t CMD_CONVERT_TEMP = 0x44;
|
||||
static constexpr uint8_t CMD_READ_SCRATCHPAD = 0xBE;
|
||||
|
||||
static constexpr int8_t SCAN_START = -3;
|
||||
static constexpr int8_t SCAN_MAX = 5;
|
||||
|
||||
static uuid::log::Logger logger_;
|
||||
|
||||
#ifndef EMSESP_STANDALONE
|
||||
@@ -114,12 +117,13 @@ class DallasSensor {
|
||||
|
||||
bool registered_ha_[MAX_SENSORS];
|
||||
|
||||
int8_t scancnt_ = -3;
|
||||
int8_t scancnt_ = SCAN_START;
|
||||
uint8_t firstscan_ = 0;
|
||||
uint8_t dallas_gpio_ = 0;
|
||||
bool parasite_ = false;
|
||||
bool changed_ = false;
|
||||
uint32_t sensorfails_ = 0;
|
||||
int8_t scanretry_ = 0;
|
||||
};
|
||||
|
||||
} // namespace emsesp
|
||||
|
||||
Reference in New Issue
Block a user