From a65e5fa595a434a9c7ff07486a54cdd9107cab20 Mon Sep 17 00:00:00 2001 From: 1technophile Date: Tue, 18 Apr 2017 22:42:43 +0200 Subject: [PATCH] spliting the code into different files Differentiate 4 categories of files: -gateway file for bridging signal and MQTT -user config -sensor files -actuators files --- GatewayIR.ino | 63 ++++++++++++++++++++++++++++ GatewayRF.ino | 73 +++++++++++++++++++++++++++++++++ OpenMQTTGateway.ino | 15 ++----- ZaddonDHT.ino => ZsensorDHT.ino | 2 +- 4 files changed, 140 insertions(+), 13 deletions(-) create mode 100644 GatewayIR.ino create mode 100644 GatewayRF.ino rename ZaddonDHT.ino => ZsensorDHT.ino (99%) diff --git a/GatewayIR.ino b/GatewayIR.ino new file mode 100644 index 0000000..8e897ac --- /dev/null +++ b/GatewayIR.ino @@ -0,0 +1,63 @@ + + + +void setupIR() +{ + + //IR init parameters +#ifdef ESP8266 + irsend.begin(); +#endif + + irrecv.enableIRIn(); // Start the receiver +} + +void receivingMQTTIR(char * topicOri, char * datacallback) { + + // IR DATA ANALYSIS + //send received MQTT value by IR signal (example of signal sent data = 1086296175) + boolean signalSent = false; + #ifdef ESP8266 // send coolix not available for arduino IRRemote library + if (topic.lastIndexOf("IR_COOLIX") != -1 ){ + irsend.sendCOOLIX(data, 24); + signalSent = true; + } + #endif + if (topic.lastIndexOf("IR_NEC")!= -1 || topic == subjectMQTTtoIR){ + irsend.sendNEC(data, 32); + signalSent = true; + } + if (topic.lastIndexOf("IR_Whynter")!=-1){ + irsend.sendWhynter(data, 32); + signalSent = true; + } + if (topic.lastIndexOf("IR_LG")!=-1){ + irsend.sendLG(data, 28); + signalSent = true; + } + if (topic.lastIndexOf("IR_Sony")!=-1){ + irsend.sendSony(data, 12); + signalSent = true; + } + if (topic.lastIndexOf("IR_DISH")!=-1){ + irsend.sendDISH(data, 16); + signalSent = true; + } + if (topic.lastIndexOf("IR_RC5")!=-1){ + irsend.sendRC5(data, 12); + signalSent = true; + } + if (topic.lastIndexOf("IR_Sharp")!=-1){ + irsend.sendSharpRaw(data, 15); + signalSent = true; + } + if (topic.lastIndexOf("IR_SAMSUNG")!=-1){ + irsend.sendSAMSUNG(data, 32); + signalSent = true; + } + if (signalSent){ + boolean result = client.publish(subjectGTWIRtoMQTT, datacallback); + if (result)trc(F("Acknowedgement of reception published")); + } + irrecv.enableIRIn(); // ReStart the IR receiver (if not restarted it is not able to receive data) +} diff --git a/GatewayRF.ino b/GatewayRF.ino new file mode 100644 index 0000000..ba7abd9 --- /dev/null +++ b/GatewayRF.ino @@ -0,0 +1,73 @@ + + +void setupRF() +{ + + //RF init parameters + mySwitch.enableTransmit(RF_EMITTER_PIN); + mySwitch.setRepeatTransmit(RF_EMITTER_REPEAT); + mySwitch.enableReceive(RF_RECEIVER_PIN); + +} + +void receivingMQTTRF(char * topicOri, char * datacallback) { + String topic = topicOri; + + trc(F("Receiving data by MQTT")); + trc(topic); + trc(F("Callback value")); + trc(String(datacallback)); + unsigned long data = strtoul(datacallback, NULL, 10); // we will not be able to pass values > 4294967295 + trc(F("Converted value to unsigned long")); + trc(String(data)); + + // Storing data received + int pos0 = topic.lastIndexOf(subjectMultiGTWKey); + if (pos0 != -1){ + trc(F("Storing signal")); + storeValue(data); + trc(F("Data stored")); + } + + // RF DATA ANALYSIS + //We look into the subject to see if a special RF protocol is defined + int valuePRT = 0; + int valuePLSL = 0; + int pos = topic.lastIndexOf(RFprotocolKey); + if (pos != -1){ + pos = pos + +strlen(RFprotocolKey); + valuePRT = (topic.substring(pos,pos + 1)).toInt(); + trc(F("RF Protocol number:")); + trc(String(valuePRT)); + } + //We look into the subject to see if a special RF pulselength is defined + int pos2 = topic.lastIndexOf(RFpulselengthKey); + if (pos2 != -1) { + pos2 = pos2 + strlen(RFpulselengthKey); + valuePLSL = (topic.substring(pos2,pos2 + 3)).toInt(); + trc(F("RF Pulse Length:")); + trc(String(valuePLSL)); + } + + if ((topic == subjectMQTTto433) && (valuePRT == 0) && (valuePLSL == 0)){ + trc(F("Sending data by RF, default parameters")); + mySwitch.setProtocol(1,350); + mySwitch.send(data, 24); + // Acknowledgement to the GTWRF topic + boolean result = client.publish(subjectGTWRFtoMQTT, datacallback); + if (result)trc(F("Acknowedgement of reception published")); + + } else if ((valuePRT != 0) || (valuePLSL != 0)){ + trc(F("Sending data by RF, user defined parameters")); + if (valuePRT == 0) valuePRT = 1; + if (valuePLSL == 0) valuePLSL = 350; + trc(String(valuePRT)); + trc(String(valuePLSL)); + mySwitch.setProtocol(valuePRT,valuePLSL); + mySwitch.send(data, 24); + // Acknowledgement to the GTWRF topic + boolean result = client.publish(subjectGTWRFtoMQTT, datacallback); + if (result)trc(F("Acknowedgement of reception published")); + } + +} diff --git a/OpenMQTTGateway.ino b/OpenMQTTGateway.ino index a12bae2..b17771e 100644 --- a/OpenMQTTGateway.ino +++ b/OpenMQTTGateway.ino @@ -130,17 +130,8 @@ void setup() lastReconnectAttempt = 0; - //IR init parameters -#ifdef ESP8266 - irsend.begin(); -#endif - - irrecv.enableIRIn(); // Start the receiver - - //RF init parameters - mySwitch.enableTransmit(RF_EMITTER_PIN); - mySwitch.setRepeatTransmit(RF_EMITTER_REPEAT); - mySwitch.enableReceive(RF_RECEIVER_PIN); + setupIR(); + setupRF(); } @@ -191,7 +182,7 @@ void loop() } else { //connected // MQTT loop client.loop(); - #ifdef ZaddonDHT + #ifdef ZsensorDHT MeasureTempAndHum(); //Addon to measure the temperature with a DHT #endif // Receive loop, if data received by RF433 or IR send it by MQTT diff --git a/ZaddonDHT.ino b/ZsensorDHT.ino similarity index 99% rename from ZaddonDHT.ino rename to ZsensorDHT.ino index 9ee8809..904c083 100644 --- a/ZaddonDHT.ino +++ b/ZsensorDHT.ino @@ -23,7 +23,7 @@ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONIN 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. */ -#ifdef ZaddonDHT +#ifdef ZsensorDHT #include #include #define TimeBetweenReading 60000