diff --git a/src/ebusd/mainloop.cpp b/src/ebusd/mainloop.cpp index bcc0c0a8..5da3e2c3 100644 --- a/src/ebusd/mainloop.cpp +++ b/src/ebusd/mainloop.cpp @@ -265,7 +265,7 @@ string MainLoop::executeRead(vector &args) if (!hasCache || (message != NULL && message->getLastUpdateTime() > cacheMessage->getLastUpdateTime())) cacheMessage = message; // message is newer/better - if (cacheMessage != NULL && (cacheMessage->getLastUpdateTime() + maxAge > now || cacheMessage->isPassive())) { + if (cacheMessage != NULL && (cacheMessage->getLastUpdateTime() + maxAge > now || (cacheMessage->isPassive() && cacheMessage->getLastUpdateTime() != 0))) { result_t ret = cacheMessage->decodeLastData(result, verbose, fieldIndex==-2 ? NULL : fieldName.c_str(), fieldIndex); if (ret != RESULT_OK) return getResultCode(ret); diff --git a/src/lib/ebus/message.cpp b/src/lib/ebus/message.cpp index d254f17a..fc249d91 100644 --- a/src/lib/ebus/message.cpp +++ b/src/lib/ebus/message.cpp @@ -395,9 +395,11 @@ result_t Message::decodeLastData(ostringstream& output, offset = 0; leadingSeparator = output.str().length() > startPos; result = m_data->read(pt_slaveData, m_lastSlaveData, offset, output, leadingSeparator, verbose, fieldName, fieldIndex, separator); + if (result < RESULT_OK) + return result; if (empty && result == RESULT_EMPTY) return RESULT_ERR_NOTFOUND; - return result; + return RESULT_OK; } bool Message::isLessPollWeight(const Message* other)