This commit is contained in:
1 parent
8c0b3ee72a
commit
5fec66ddc5
1 file changed
+58
-3
@@ -66,10 +66,15 @@ decode_results results;
|
|||||||
#define mqtt_user "your_username" // not compulsory if you set it uncomment line 143 and comment line 145
|
#define mqtt_user "your_username" // not compulsory if you set it uncomment line 143 and comment line 145
|
||||||
#define mqtt_password "your_password" // not compulsory if you set it uncomment line 143 and comment line 145
|
#define mqtt_password "your_password" // not compulsory if you set it uncomment line 143 and comment line 145
|
||||||
|
|
||||||
|
//variables to avoid duplicates for RF
|
||||||
|
#define time_avoid_duplicate 3000 // if you want to avoid duplicate mqtt message received set this to > 0, the value is the time in milliseconds during which we don't publish duplicates
|
||||||
|
// array to store previous received RFs codes and their timestamps
|
||||||
|
long ReceivedRF[10][2] ={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}};
|
||||||
|
|
||||||
#define subjectMQTTtoX "home/commands/#"
|
#define subjectMQTTtoX "home/commands/#"
|
||||||
//RF MQTT Subjects
|
//RF MQTT Subjects
|
||||||
#define subject433toMQTT "home/sensors/rf"
|
#define subject433toMQTT "home/433toMQTT"
|
||||||
#define subjectMQTTto433 "home/commands/rf"
|
#define subjectMQTTto433 "home/MQTTto433/"
|
||||||
//IR MQTT Subjects
|
//IR MQTT Subjects
|
||||||
#define subjectIRtoMQTT "home/sensors/ir"
|
#define subjectIRtoMQTT "home/sensors/ir"
|
||||||
#define subjectMQTTtoIRCOOLIX "home/commands/sendCOOLIX"
|
#define subjectMQTTtoIRCOOLIX "home/commands/sendCOOLIX"
|
||||||
@@ -199,16 +204,22 @@ void loop()
|
|||||||
if (mySwitch.available()) {
|
if (mySwitch.available()) {
|
||||||
// Topic on which we will send data
|
// Topic on which we will send data
|
||||||
trc("Receiving 433Mhz signal");
|
trc("Receiving 433Mhz signal");
|
||||||
long MQTTvalue;
|
unsigned long MQTTvalue;
|
||||||
MQTTvalue=mySwitch.getReceivedValue();
|
MQTTvalue=mySwitch.getReceivedValue();
|
||||||
mySwitch.resetAvailable();
|
mySwitch.resetAvailable();
|
||||||
if (client.connected()) {
|
if (client.connected()) {
|
||||||
|
if (!isAduplicate(MQTTvalue)) {// conditions to avoid duplications of RF -->MQTT
|
||||||
trc("Sending 433Mhz signal to MQTT");
|
trc("Sending 433Mhz signal to MQTT");
|
||||||
trc(String(MQTTvalue));
|
trc(String(MQTTvalue));
|
||||||
sendMQTT(subject433toMQTT,String(MQTTvalue));
|
sendMQTT(subject433toMQTT,String(MQTTvalue));
|
||||||
|
storeValue(MQTTvalue);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (reconnect()) {
|
if (reconnect()) {
|
||||||
|
trc("Sending 433Mhz signal to MQTT after reconnect");
|
||||||
|
trc(String(MQTTvalue));
|
||||||
sendMQTT(subject433toMQTT,String(MQTTvalue));
|
sendMQTT(subject433toMQTT,String(MQTTvalue));
|
||||||
|
storeValue(MQTTvalue);
|
||||||
lastReconnectAttempt = 0;
|
lastReconnectAttempt = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -228,6 +239,50 @@ void loop()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void storeValue(long MQTTvalue){
|
||||||
|
long now = millis();
|
||||||
|
// find oldest value of the buffer
|
||||||
|
int o = getMin();
|
||||||
|
trc("Minimum index: " + String(o));
|
||||||
|
// replace it by the new one
|
||||||
|
ReceivedRF[o][0] = MQTTvalue;
|
||||||
|
ReceivedRF[o][1] = now;
|
||||||
|
trc("send this code :" + String(ReceivedRF[o][0])+"/"+String(ReceivedRF[o][1]));
|
||||||
|
trc("Col: value/timestamp");
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
trc(String(i) + ":" + String(ReceivedRF[i][0])+"/"+String(ReceivedRF[i][1]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int getMin(){
|
||||||
|
int minimum = ReceivedRF[0][1];
|
||||||
|
int minindex=0;
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
if (ReceivedRF[i][1] < minimum) {
|
||||||
|
minimum = ReceivedRF[i][1];
|
||||||
|
minindex = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minindex;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isAduplicate(long value){
|
||||||
|
trc("isAduplicate");
|
||||||
|
// check if the value has been already sent during the last "time_avoid_duplicate"
|
||||||
|
for (int i=0; i<10;i++){
|
||||||
|
if (ReceivedRF[i][0] == value){
|
||||||
|
long now = millis();
|
||||||
|
if (now - ReceivedRF[i][1] < time_avoid_duplicate){
|
||||||
|
trc("don't send this code :" + String(ReceivedRF[i][0])+"/"+String(ReceivedRF[i][1]));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void subscribing(String topicNameRec){ // MQTT subscribing to topic
|
void subscribing(String topicNameRec){ // MQTT subscribing to topic
|
||||||
char topicStrRec[26];
|
char topicStrRec[26];
|
||||||
topicNameRec.toCharArray(topicStrRec,26);
|
topicNameRec.toCharArray(topicStrRec,26);
|
||||||
|
|||||||
Reference in new issue
Block a user