Solved/Eventor with moisture sensor works only when app open/active

Hey there,

I have really gone through all of the threads pertaining to my issue, have read all of the documentation provided and yet cannot solve my possibly very silly mistake i am doing. This is the only comment that might have shown me i am doing something wrong, so I really hope you can help me.

I have added this bit of code to my script :
BLYNK_READ(V5) // Display Widget set to reading rate frequency
{
Blynk.virtualWrite(V5, analogRead(A0)); // Send analog pin value to display Widget at set frequency
}

I have added a gauge that is perfectly reading moisture levels when set to V5, and a set frequency (1 sec)

My Eventor conditions work perfectly as long as I am inside the app, just like you said, but I can’t for the life of me, understand what I have to do to have the conditions constantly working.

Would really appreciate any help with that :slight_smile:

cpp

#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <SPI.h>;
#include <ESP8266WiFi.h>;
#include <BlynkSimpleEsp8266.h>;
#include <SimpleTimer.h>;
#include <DHT.h>;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "";
char pass[] = "";


BLYNK_READ(V5)  
{
  Blynk.virtualWrite(V5, analogRead(A0)); 
}



#define DHTPIN 4 // What digital pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21 // DHT 21, AM2301

DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;

// This function sends Arduino's up time every second to Virtual Pin (5, 6, 7 &amp;amp;amp;amp;amp;amp; 8).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void sendSensor()
{
 float h = dht.readHumidity();
 float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

 if (isnan(h) || isnan(t)) {
 Serial.println("Failed to read from DHT sensor!");
 return;
 }
 // You can send any value at any time.
 // Please don't send more that 10 values per second.
 Blynk.virtualWrite(V4, h); // Humidity for gauge
 Blynk.virtualWrite(V6, t); // Temperature for gauge
}

void setup()
{
 Serial.begin(115200); // See the connection status in Serial Monitor
 Blynk.begin(auth, ssid, pass);

 dht.begin();

 // Setup a function to be called every second
 timer.setInterval(1000L, sendSensor);
}

void loop()
{
 Blynk.run(); // Initiates Blynk
 timer.run(); // Initiates SimpleTimer
}

It may have to do with your use of V5 twice.

and

Change one of them to a different Vpin, and modify your app accordingly.

Thank you for that, i have removed the second part mentioned, and still cannot get the conditions to work outside of the app.

"I believe it could have something to do with gunner’s comment that i saw on another thread :
You can also have the Display widget, by itself, determine the frequency of the data read (but only works when the App/Project is active).

BLYNK_READ(V5)  // Display Widget set to reading rate frequency
{
  Blynk.virtualWrite(V5, analogRead(A0));  // Send analog pin value to display Widget at set frequency
}

"

But i dont know how to go around this.

Use Blynk.virtualWrite() commands in a coded and timed function to PUSH your data to the server/app (the Widget also needs to be set to PUSH)

To collect data and use any of the widgets, the project must be active/running.

I would think both BLYNK_READ and BLYNK_WRITE would work in the same fashion. One is just the server/app telling the device when to take a measurement and send it to the Virtual Pin, and the other is the device deciding when to take the measurement (via a timer or such) and sending it to the Virtual Pin.

Either way the Virtual Pin gets updated, and should trigger the event in the Eventor Widget.

Oh my god man, thank you so much! This must have been one of the promptest and most useful reply, what a great community :slight_smile:

Yes, that makes sense of course. I had the project set as active all the time. it seems that putting the write comman in a timed function made it all work!


BlynkTimer timer;

void myTimerEvent()
{
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5,analogRead(A0));
}
1 Like

That is the general rule but there are exceptions to the rule e.g. Webhook widget.