#1 - feature to remove duplicates RF -->MQTT
if you want to avoid duplicate mqtt message received set time_avoid_duplicate to > 0, the value is the time in milliseconds during which we don't publish duplicates
This commit is contained in:
1 parent
2cd6862c2c
commit
0ed24d594a
1 file changed
+15
-11
+15
-11
@@ -1,16 +1,13 @@
|
|||||||
/*
|
/*
|
||||||
433toMQTTto433 - ESP8266 program for home automation
|
433toMQTTto433 - ESP8266 program for home automation
|
||||||
|
|
||||||
Act as a wifi gateway between your 433mhz nodes and a MQTT broker
|
Act as a wifi gateway between your 433mhz nodes and a MQTT broker
|
||||||
Send and receiving command by MQTT
|
Send and receiving command by MQTT
|
||||||
|
|
||||||
This program enables to:
|
This program enables to:
|
||||||
- receive MQTT data from a topic and send RF 433Mhz signal corresponding to the received MQTT data
|
- receive MQTT data from a topic and send RF 433Mhz signal corresponding to the received MQTT data
|
||||||
- publish MQTT data to a different topic related to received 433Mhz signal
|
- publish MQTT data to a different topic related to received 433Mhz signal
|
||||||
|
|
||||||
Contributor:
|
Contributor:
|
||||||
- 1technophile
|
- 1technophile
|
||||||
|
|
||||||
Based on:
|
Based on:
|
||||||
- MQTT library (https://github.com/knolleary)
|
- MQTT library (https://github.com/knolleary)
|
||||||
- RCSwitch (https://github.com/sui77/rc-switch)
|
- RCSwitch (https://github.com/sui77/rc-switch)
|
||||||
@@ -18,24 +15,19 @@
|
|||||||
|
|
||||||
Project home: https://github.com/1technophile/433toMQTTto433_ESP8266
|
Project home: https://github.com/1technophile/433toMQTTto433_ESP8266
|
||||||
Blog, tutorial: http://1technophile.blogspot.com/2016/09/433tomqttto433-bidirectional-esp8266.html
|
Blog, tutorial: http://1technophile.blogspot.com/2016/09/433tomqttto433-bidirectional-esp8266.html
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
subject to the following conditions:
|
subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
Some usefull commands to test gateway with mosquitto:
|
Some usefull commands to test gateway with mosquitto:
|
||||||
Subscribe to the subject for data receiption from RF signal
|
Subscribe to the subject for data receiption from RF signal
|
||||||
mosquitto_sub -t home/433toMQTT
|
mosquitto_sub -t home/433toMQTT
|
||||||
|
|
||||||
Send data by MQTT to convert it on RF signal
|
Send data by MQTT to convert it on RF signal
|
||||||
mosquitto_pub -t home/MQTTto433/ -m 1315153
|
mosquitto_pub -t home/MQTTto433/ -m 1315153
|
||||||
*/
|
*/
|
||||||
@@ -55,6 +47,13 @@ RCSwitch mySwitch = RCSwitch();
|
|||||||
#define mqtt_user "your_username" // not compulsory if you set it uncomment line 127 and comment line 129
|
#define mqtt_user "your_username" // not compulsory if you set it uncomment line 127 and comment line 129
|
||||||
#define mqtt_password "your_password" // not compulsory if you set it uncomment line 127 and comment line 129
|
#define mqtt_password "your_password" // not compulsory if you set it uncomment line 127 and comment line 129
|
||||||
|
|
||||||
|
//variables to avoid duplicates
|
||||||
|
#define time_avoid_duplicate 2000 // 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
|
||||||
|
// Time to avoid duplicate
|
||||||
|
long lastReceivedRFTime = 0;
|
||||||
|
// string to store previous received RF
|
||||||
|
String lastReceivedRF;
|
||||||
|
|
||||||
//adding this to bypass to problem of the arduino builder issue 50
|
//adding this to bypass to problem of the arduino builder issue 50
|
||||||
void callback(char*topic, byte* payload,unsigned int length);
|
void callback(char*topic, byte* payload,unsigned int length);
|
||||||
WiFiClient espClient;
|
WiFiClient espClient;
|
||||||
@@ -214,6 +213,10 @@ void receivingMQTT(String topicNameRec, String callbackstring) {
|
|||||||
//send MQTT data dataStr to topic topicNameSend
|
//send MQTT data dataStr to topic topicNameSend
|
||||||
void sendMQTT(String topicNameSend, String dataStr){
|
void sendMQTT(String topicNameSend, String dataStr){
|
||||||
|
|
||||||
|
long now = millis();
|
||||||
|
if ((now - lastReceivedRFTime > time_avoid_duplicate)||(dataStr != lastReceivedRF)) {// conditions to avoid duplications of RF -->MQTT
|
||||||
|
lastReceivedRFTime = now;
|
||||||
|
lastReceivedRF = dataStr;
|
||||||
char topicStrSend[26];
|
char topicStrSend[26];
|
||||||
topicNameSend.toCharArray(topicStrSend,26);
|
topicNameSend.toCharArray(topicStrSend,26);
|
||||||
char dataStrSend[200];
|
char dataStrSend[200];
|
||||||
@@ -223,7 +226,10 @@ void sendMQTT(String topicNameSend, String dataStr){
|
|||||||
trc(dataStr);
|
trc(dataStr);
|
||||||
trc("to ");
|
trc("to ");
|
||||||
trc(topicNameSend);
|
trc(topicNameSend);
|
||||||
|
}else{
|
||||||
|
trc("duplicate found");
|
||||||
|
trc(dataStr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//trace
|
//trace
|
||||||
@@ -232,5 +238,3 @@ void trc(String msg){
|
|||||||
Serial.println(msg);
|
Serial.println(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Reference in new issue
Block a user