Prevent storing duplicate RF/IT signals (#717)
* Check if signal is duplicate * Fix storing duplicate RF/IR Codes * Lint formatting Co-authored-by: Jonathan Wells <jonathan-wells@oist.jp>
This commit is contained in:
1 parent
8d79bebab8
commit
15e7f5ab1a
2 files changed
+11
-10
No files matched your search
+2
-1
@@ -94,7 +94,8 @@ void RFtoMQTT() {
|
||||
RFtoMQTTdiscovery(MQTTvalue);
|
||||
# endif
|
||||
pub(subjectRFtoMQTT, RFdata);
|
||||
Log.trace(F("Store val: %lu" CR), MQTTvalue);
|
||||
// Casting "receivedSignal[o].value" to (unsigned long) because ArduinoLog doesn't support uint64_t for ESP's
|
||||
Log.trace(F("Store val: %u" CR), (unsigned long)MQTTvalue);
|
||||
storeSignalValue(MQTTvalue);
|
||||
if (repeatRFwMQTT) {
|
||||
Log.trace(F("Pub RF for rpt" CR));
|
||||
|
||||
+9
-9
@@ -1366,10 +1366,12 @@ void storeSignalValue(SIGNAL_SIZE_UL_ULL MQTTvalue) {
|
||||
// replace it by the new one
|
||||
receivedSignal[o].value = MQTTvalue;
|
||||
receivedSignal[o].time = now;
|
||||
Log.trace(F("store code : %u / %u" CR), receivedSignal[o].value, receivedSignal[o].time);
|
||||
|
||||
// Casting "receivedSignal[o].value" to (unsigned long) because ArduinoLog doesn't support uint64_t for ESP's
|
||||
Log.trace(F("store code : %u / %u" CR), (unsigned long)receivedSignal[o].value, receivedSignal[o].time);
|
||||
Log.trace(F("Col: val/timestamp" CR));
|
||||
for (int i = 0; i < struct_size; i++) {
|
||||
Log.trace(F("mem code : %u / %u" CR), receivedSignal[i].value, receivedSignal[i].time);
|
||||
Log.trace(F("mem code : %u / %u" CR), (unsigned long)receivedSignal[i].value, receivedSignal[i].time);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1379,7 +1381,7 @@ void storeSignalValue(SIGNAL_SIZE_UL_ULL MQTTvalue) {
|
||||
int getMin() {
|
||||
unsigned int minimum = receivedSignal[0].time;
|
||||
int minindex = 0;
|
||||
for (int i = 0; i < struct_size; i++) {
|
||||
for (int i = 1; i < struct_size; i++) {
|
||||
if (receivedSignal[i].time < minimum) {
|
||||
minimum = receivedSignal[i].time;
|
||||
minindex = i;
|
||||
@@ -1410,16 +1412,14 @@ void receivingMQTT(char* topicOri, char* datacallback) {
|
||||
StaticJsonBuffer<JSON_MSG_BUFFER> jsonBuffer;
|
||||
JsonObject& jsondata = jsonBuffer.parseObject(datacallback);
|
||||
|
||||
if (strstr(topicOri, subjectMultiGTWKey) != NULL) // storing received value so as to avoid publishing this value if it has been already sent by this or another OpenMQTTGateway
|
||||
{
|
||||
#if defined(ZgatewayRF) || defined(ZgatewayIR) || defined(ZgatewaySRFB) || defined(ZgatewaySRFB) || defined(ZgatewayWeatherStation)
|
||||
SIGNAL_SIZE_UL_ULL data = 0;
|
||||
data = jsondata.success() ? jsondata["value"] : STRTO_UL_ULL(datacallback, NULL, 10);
|
||||
if (data != 0) {
|
||||
if (strstr(topicOri, subjectMultiGTWKey) != NULL) { // storing received value so as to avoid publishing this value if it has been already sent by this or another OpenMQTTGateway
|
||||
SIGNAL_SIZE_UL_ULL data = jsondata.success() ? jsondata["value"] : STRTO_UL_ULL(datacallback, NULL, 10);
|
||||
if (data != 0 && !isAduplicateSignal(data)) {
|
||||
storeSignalValue(data);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
if (jsondata.success()) { // json object ok -> json decoding
|
||||
// log the received json
|
||||
|
||||
Reference in new issue
Block a user