Problem with publish function to ifttt

photon
Tags: #<Tag:0x00007fe228ead690>

#1

Hi all, I’m new to Particle Photon since a month or so. have some programming experience in vb and stuff… I have a particle photon connected to my garageport and with BLYNK i made an app to open and close my garageport. I have 2 reed sensors connected to monitor open and closed status of the door. I want to track when the port opens and closes in a google sheet. I managed to get this all working, but each time i publish something via ifttt to google sheet i get ± 13 entries in my sheet…

Can anyone suggest a better way to avoid this problem? Thanks a lot!!!
my code:

// This #include statement was automatically added by the Particle IDE.
#include <SparkCorePolledTimer.h>

// This #include statement was automatically added by the Particle IDE.
#include <blynk.h>

char auth[] = "-------"; 

SparkCorePolledTimer updateTimer(1000);                         //Create a timer object and set it's timeout in milliseconds

const int reedSwitchClosed = A0;                                // REED SWITCH CLOSED STATUS
const int reedSwitchOpen = A1;                                  // REED SWITCH OPEN STATUS
const int relaySwitch = D0;                                     // RELAY GARAGE PORT OUTPUT

int reedStatusClosed = 0;                                       // CLOSED STATUS INITIALISATION
int reedStatusOpen = 1;                                         // OPEN STATUS INITIALISATION
int openTimer = 0;                                              // TIMER INITIALISATION

BLYNK_WRITE(V2) {                                               // GPS TRIGGER - SENDS "1" TO V4 WHEN AWAY, - SENDS "2" to V4 WHEN COMING HOME
  int state = param.asInt(); 
    if (state) {
      Blynk.virtualWrite(4, 1);
  } else {
        Blynk.virtualWrite(4, 2);
  }
}


void setup() 
{
    Serial.begin(9600); 
    Blynk.begin(auth);
    pinMode(relaySwitch, OUTPUT);                               // WRITE OUTPUT TO "A0" TO OPEN/CLOSE PORT
    pinMode(reedSwitchClosed, INPUT_PULLDOWN);                  //CHECK PORT CLOSED STATUS
    pinMode(reedSwitchOpen, INPUT_PULLDOWN);                    //CHECK PORT OPEN STATUS
    updateTimer.SetCallback(garageStatus);                      // UPDATE TIMER
    reedStatusClosed = digitalRead(reedSwitchClosed);           //COPY PORT CLOSED STATUS TO CONST
    reedStatusOpen = digitalRead(reedSwitchOpen);               //COPY PORT OPEN STATUS TO CONST
}

void garageStatus(void)
{
reedStatusClosed = digitalRead(reedSwitchClosed);               //COPY PORT CLOSED STATUS TO CONST
reedStatusOpen = digitalRead(reedSwitchOpen); 
if (reedStatusClosed == LOW) {                                  //CHECK IF PORT IS NOT CLOSED. (CLOSED SWITCH NOT IN POSITION)                
Blynk.virtualWrite(0, 0);                                       // WRITE "0" TO V0 IF PORT IS NOT CLOSED
Particle.publish("POORT OPEN!");
openTimer++;
}
//else if (reedStatusOpen == LOW) {                               //CHECK IF PORT IS NOT OPEN (OPEN SWITCH NOT IN POSITION)
//Blynk.virtualWrite(3,0);                                        // WRITE "0" TO V3 IS PORT IS NOT FULLY OPENED
//openTimer++;
//}
//else if (reedStatusOpen == HIGH) {                              //CHECK IF PORT IS OPEN (OPEN SWITCH IN POSITION)
//Blynk.virtualWrite(3,1);                                        // WRITE "1" TO V3 IS PORT IS FULLY OPENED
//openTimer++;
//}
//else if (reedStatusClosed == HIGH) {                             // CHECK IF PORT IS CLOSED (CLOSED SWITCH IN POSITION)
//Blynk.virtualWrite(0,1);                                        // WRITE "1" TO V0 IF PORT IS FULLY CLOSED
//openTimer++;
//}
else {        
Blynk.virtualWrite(0,1);
Particle.publish("POORT GESLOTEN!");
openTimer = 0;                                                  //STOP TIMER
}
if (reedStatusOpen == LOW) {                                  //CHECK IF PORT IS NOT CLOSED. (CLOSED SWITCH NOT IN POSITION)                
Blynk.virtualWrite(3, 0);                                       // WRITE "0" TO V0 IF PORT IS NOT CLOSED
openTimer++;
}
//else if (reedStatusOpen == LOW) {                               //CHECK IF PORT IS NOT OPEN (OPEN SWITCH NOT IN POSITION)
//Blynk.virtualWrite(3,0);                                        // WRITE "0" TO V3 IS PORT IS NOT FULLY OPENED
//openTimer++;
//}
//else if (reedStatusOpen == HIGH) {                              //CHECK IF PORT IS OPEN (OPEN SWITCH IN POSITION)
//Blynk.virtualWrite(3,1);                                        // WRITE "1" TO V3 IS PORT IS FULLY OPENED
//openTimer++;
//}
//else if (reedStatusClosed == HIGH) {                             // CHECK IF PORT IS CLOSED (CLOSED SWITCH IN POSITION)
//Blynk.virtualWrite(0,1);                                        // WRITE "1" TO V0 IF PORT IS FULLY CLOSED
//openTimer++;
//}
else {        
Blynk.virtualWrite(3,1); 
openTimer = 0;                                                  //STOP TIMER
}
}


void loop() 
{ 
    Blynk.run(); 
    updateTimer.Update();
    
}







#2

Usually you don’t want to publish the state over and over unless it changes.
For that you should use a persistent variable that stores the previously published state and only publish again when the current state differes from that stored value.