Hi Pete!
Thank You for helping me.
Here is the Code:
// Fill-in information from your Blynk Template here (blanked out)
#define BLYNK_TEMPLATE_ID ""
#define BLYNK_DEVICE_NAME ""
#define BLYNK_AUTH_TOKEN ""
////////////////////////////////////////////////////
char ssid[] = "";
char pass[] = "";
#define BLYNK_FIRMWARE_VERSION "0.2.0"
#define BLYNK_PRINT Serial
#define BLYNK_DEBUG
#define APP_DEBUG
#define DHTPIN 3 //Digitalpin für Temp/Feuchte
#define DHTTYPE DHT22
#include "BlynkEdgent.h"
#include <DHT.h>
#include <DHT_U.h>
#include <math.h>
#include <SPI.h>
#include <RTC.h>
//#include <Time.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
//Arduino Low Power - Version: Latest
#include <ArduinoLowPower.h>
BlynkTimer timer;
DHT dht(DHTPIN, DHTTYPE);
WidgetTerminal terminal(V0);
const int ON_PIN = 8; //DigitalPin 7 zum Öffnen des Ventils; getauscht 240421
const int OFF_PIN = 7;//Digitalpin 8 zum Schliessen
const int TROCKEN_PIN = 1;//Digitalpin 1 für Regensensor
#define DHTPIN 3 //Digitalpin für Temp/Feuchte
#define DHTTYPE DHT22
float h; //humidity
float t;//temperature
int valaccu = 0;
float voltage;
int daysselected[7];
String dayname[7] = {"MO", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
String displaycurrenttimepluswifi;
//int TROCKENWERT = 0;
bool evapocrit = false;
String valvestatusoff = "\u274C";
String valvestatuson = "\U0001f6bf";
bool valveon = false;
int rainstartsecs;
int rainstopsecs;
long rainsum;
long raintimeinsecs;
float valvestream;
int area = 10;
int vegetation =1;
int rainvalue = 1;
float watervalue = 0.0;
String sun = "\xE2\x98\x80"; //Symbol sun
String rain = "\U0001f327\uFE0F"; //Symbol rain
String needed ="\U0001F44D";
String notneeded ="\U0001F44E";
float X = 0.29;
String areaname;
double Ew; // Sättigungsdampfdruck
double PT = 0.0; // Potentielle Verdunstung in mm/d
double e; // Dampfdruck der Luft in mbar
double PTSum = 0.0; // Summe potentieller Verdunstung
int critrain;
int critpotEv;
int irrig;
void setup() /////////////////////////////////////////////////////////////////
{
Serial.begin(9600);
delay(2000);
BlynkEdgent.begin();
dht.begin(); // Temp/Feuchte
pinMode(A1, INPUT);
pinMode(ON_PIN, OUTPUT);
pinMode(OFF_PIN, OUTPUT);
pinMode(TROCKEN_PIN, INPUT);
pinMode(2, OUTPUT); // 5V AN_AUS
timer.setInterval(300000L, temphumidity); // Abfrage Temp. und Feuchte
timer.setInterval(15000L, batterycheck); // Battery
timer.setInterval(2000L, checkCrit); // Criteria
timer.setInterval(2000L, checkirrig);//irrig?
timer.setInterval(10000L, raincheck); //Ransensor
}
///////////Connected///////////////
BLYNK_CONNECTED() {
Blynk.syncAll();
RELAIS_OFF();
}
/////AREA/////////
BLYNK_WRITE(V9) {
area = param.asInt();
}
/////Valve stream ////////
BLYNK_WRITE(V11) {
valvestream = param.asFloat();
}
/////Vegetation///////////
BLYNK_WRITE(V10) {
vegetation = param.asInt();
if (vegetation == 0) {
X = 0.29;
}
else if (vegetation == 1) {
X = 0.24;
}
}
/////////Area Name ///////////
BLYNK_WRITE(V12) {
areaname = param.asString();
}
/////////////Temp and Humidity and Rain/////////////////
void temphumidity() {
digitalWrite(2, HIGH);
delay(2000);
h = dht.readHumidity();
t = dht.readTemperature();
digitalWrite(2, LOW);
Blynk.virtualWrite(V20, h);
Blynk.virtualWrite(V21, t);
if (hour() == 14 && minute() <= 6){ ////////Potentielle Verdunstung///////
Ew = 6.112 * exp((17.62 * t) / (243.12 + t));
e = (h/100 * Ew);
PT = X * (Ew - e);
// PTSum = PTSum + PT;
//Blynk.virtualWrite(V7, PTSum);
}
}
/////////Battery///////////////////////
void batterycheck() {
valaccu = analogRead(A1);
voltage = (((valaccu)/1024.0) * 3.3)*4,8;//Correction voltage division
Blynk.virtualWrite(V2, voltage); // Batt.Status
}
///////Relais für 250ms an ////////////////////
void RELAIS_ON() {
if (irrig == 1) {
digitalWrite(2, HIGH);
delay(20);
digitalWrite(ON_PIN, HIGH);
delay(250);
digitalWrite(ON_PIN, LOW);
Blynk.virtualWrite(V1, 1); //Button
Blynk.virtualWrite(V5, valvestatuson);// Statussymbol
terminal.println("VALVE OPEN");
terminal.flush();
valveon = true;
digitalWrite(2, LOW);
rainstartsecs = ((hour()*3600) + (minute()*60) + second());
}
else {
terminal.println("RAIN! / Not Dry >> Valve not opened.");
Blynk.virtualWrite(V1, 0);
terminal.flush();
valveon = false;
}
}
//////////RainCheck////////////
void raincheck() {
digitalWrite(2, HIGH);
delay(20);
rainvalue = digitalRead(TROCKEN_PIN);
digitalWrite(2, LOW);
if (rainvalue == 1) {
Blynk.virtualWrite(V6, sun);
}
else if (rainvalue == 0) {
Blynk.virtualWrite(V6, rain);
}
}
///////Relais für 63ms an /////////////////////
void RELAIS_OFF() {
if (valveon == true) {
digitalWrite(2, HIGH);
delay(50);
digitalWrite(OFF_PIN, HIGH);
delay(63);
digitalWrite(OFF_PIN, LOW);
Blynk.virtualWrite(V1, 0); //Button
Blynk.virtualWrite(V5, valvestatusoff);// Statussymbol
terminal.println("VALVE CLOSED");
terminal.flush();
valveon = false;
digitalWrite(2, LOW);
rainstopsecs = ((hour()*3600) + (minute()*60) + second());
raintimeinsecs = rainstopsecs - rainstartsecs;
rainsum = (rainsum + raintimeinsecs);
//Serial.println(raintimeinsecs);
//Serial.println(rainsum);
//Serial.println(watervalue);
//watervalue = ((rainsum * valvestream) / area);
//Blynk.virtualWrite(V8, watervalue); //Water consumption
raintimeinsecs = 0;
}
}
////RESET /////////////
BLYNK_WRITE(V13) {
if (param.asInt() == 1) {
rainsum = 0.0;
PTSum = 0.0;
watervalue = 0.0;
Blynk.virtualWrite(V8, 0.0);
Blynk.virtualWrite(V7, 0.0);
}
}
///////////////MANUAL///////////////////////////////////////////////////
BLYNK_WRITE(V1) // ON-OFF Manual
{
if (param.asInt() == 1) { // boton encendido
irrig = 1;
RELAIS_ON();
}
else {
RELAIS_OFF();
}
}
//////////////CHECKING FOR CRITERIA/////////////////////////////////////////////////
BLYNK_WRITE(V3) { critrain = param.asInt(); }
BLYNK_WRITE(V4) { critpotEv = param.asInt(); }
/////////////////Checking SmartIrrigation ///////////
void checkCrit() {
Serial.println(critrain);
Serial.println(critpotEv);
Serial.println(watervalue);
Serial.println(PTSum);
Serial.println(rainvalue);
watervalue = ((rainsum * valvestream) / area);
Blynk.virtualWrite(V8, watervalue); //Water consumption
PTSum = PTSum + PT;
Blynk.virtualWrite(V7, PTSum);
if ((critrain == 0) && (critpotEv == 0)) { // alle aus
irrig = 1; // rain go!
}
else if (critrain == 0 && critpotEv == 1) { // potEv ein
if (watervalue <= PTSum) { irrig = 1;}
else { irrig = 0;}
}
else if (critrain == 1 && critpotEv == 0) { // raincrit an
if (rainvalue == 1) { irrig = 1;}
else {irrig = 0;}
}
else if (critrain == 1 && critpotEv == 1) { // alle an
if ((rainvalue == 1) && (watervalue <= PTSum)) {
irrig = 1;}
else {irrig = 0; }
}
}
void checkirrig() {
if (irrig == 0) {
Blynk.virtualWrite(V14, notneeded);
}
else {
Blynk.virtualWrite(V14, needed);
}
Blynk.syncVirtual(V14);
//Serial.println(irrig);
}
void loop() { //////////////////////////////////////////////////////////////////////////////
BlynkEdgent.run();
timer.run();
}