//(ESP32)
#include <WiFi.h> //fb //db
#include "time.h" //ZAMAN KUTUPHANESI
#include <ArduinoJson.h>
#include <MD5.h> //ISLEMCI SERI NUMARASINI SIFRELEMEK ICIN GEREKLİ KUTUPHANE
#include "DHT.h" //DHT SENSOR KÜTÜPHANESİ EKLENİYOR. //fb
#include "LoRa_E32.h" //LoRa KÜTÜPHANESİ EKLENİYOR. //fb
#include <WiFiManager.h> //AUTOCONNECT İÇİN KÜTÜPHANE EKLENİYOR.
https://github.com/tzapu/WiFiManager //fb
#include <Arduino.h> //db
#include <WiFiMulti.h> //fb //db
#include <HTTPClient.h> //fb //db
#define USE_SERIAL Serial //SERIAL MONITOR BAGLANTISI ICIN
#include "flasher.h"
//const char* googleApiKey = "AIzaSyCrfdKFOYLMbQOIY5nrrxYdFeR3Q7xc8rWFAfA"; //geolocasyon alabilmek için google cloud dan alınan apikey ekleniyor
//WifiLocation location(googleApiKey);
String VERSIYON = "5.9-sqldb"; //VERSIYON NUMARASI BURAYA YAZILACAK
String SISTEM_BILGI = "rrrrrrrrrrrrrrrrrrrrrrrr";
String token = "?#n5bH5&^2HE2VXq"; //16 haneli kod üretiliyor. //https://passwordsgenerator.net/
String cihazID; //CIHAZ NO GLOBAL DEĞİŞKEN OLARAK HAZIRLANIYOR
String KONUM; //KONUM GLOBAL DEĞİŞKEN OLARAK HAZIRLANIYOR
String anaLinkotomasyon = "
http://rrrrrrrrrr/esp/servis/?sayfa=otomasyon";
String anaLinksensor = "
http://rrrrrrrrrr/esp/servis/?sayfa=gonder";
String anaLinkrole = "
http://rrrrrrrrrr/esp/servis/?sayfa=kontrol";
String anaLinkLora = "
http://rrrrrrrrrr/esp/servis/?sayfa=kablosuz";
String linkSensor, linkData, sensorData, roleData, otomasyonData;
String str_time, vana, sensorId, zamanAcik, baslamaZaman, bitisZaman, nemSeviye, nemMin, nemMax, depoSeviye, depoMin, depoMax, basincliSu, sebeke, darbe;
int int_time, tm_wday; //anlık zaman
int data_1_vana, data_1_sensorID, data_1_zamanAcik, data_1_baslamaZaman, data_1_bitisZaman, data_1_nemSeviye, data_1_nemMin, data_1_nemMax, data_1_basincliSu, data_1_sebeke, data_1_darbe, data_1_depoSeviye, data_1_depoMin, data_1_depoMax, data_1_roleBaglantiDurum, data_1_bagliRole, data_1_timer, data_1_timer_sure, data_1_tetik, data_1_tetikZaman, data_1_otomasyonDurum;
int data_2_vana, data_2_sensorID, data_2_zamanAcik, data_2_baslamaZaman, data_2_bitisZaman, data_2_nemSeviye, data_2_nemMin, data_2_nemMax, data_2_basincliSu, data_2_sebeke, data_2_darbe, data_2_depoSeviye, data_2_depoMin, data_2_depoMax, data_2_roleBaglantiDurum, data_2_bagliRole, data_2_timer, data_2_timer_sure, data_2_tetik, data_2_tetikZaman, data_2_otomasyonDurum;
int data_3_vana, data_3_sensorID, data_3_zamanAcik, data_3_baslamaZaman, data_3_bitisZaman, data_3_nemSeviye, data_3_nemMin, data_3_nemMax, data_3_basincliSu, data_3_sebeke, data_3_darbe, data_3_depoSeviye, data_3_depoMin, data_3_depoMax, data_3_roleBaglantiDurum, data_3_bagliRole, data_3_timer, data_3_timer_sure, data_3_tetik, data_3_tetikZaman, data_3_otomasyonDurum;
int data_4_vana, data_4_sensorID, data_4_zamanAcik, data_4_baslamaZaman, data_4_bitisZaman, data_4_nemSeviye, data_4_nemMin, data_4_nemMax, data_4_basincliSu, data_4_sebeke, data_4_darbe, data_4_depoSeviye, data_4_depoMin, data_4_depoMax, data_4_roleBaglantiDurum, data_4_bagliRole, data_4_timer, data_4_timer_sure, data_4_tetik, data_4_tetikZaman, data_4_otomasyonDurum;
int data_5_vana, data_5_sensorID, data_5_zamanAcik, data_5_baslamaZaman, data_5_bitisZaman, data_5_nemSeviye, data_5_nemMin, data_5_nemMax, data_5_basincliSu, data_5_sebeke, data_5_darbe, data_5_depoSeviye, data_5_depoMin, data_5_depoMax, data_5_roleBaglantiDurum, data_5_bagliRole, data_5_timer, data_5_timer_sure, data_5_tetik, data_5_tetikZaman, data_5_otomasyonDurum;
int data_6_vana, data_6_sensorID, data_6_zamanAcik, data_6_baslamaZaman, data_6_bitisZaman, data_6_nemSeviye, data_6_nemMin, data_6_nemMax, data_6_basincliSu, data_6_sebeke, data_6_darbe, data_6_depoSeviye, data_6_depoMin, data_6_depoMax, data_6_roleBaglantiDurum, data_6_bagliRole, data_6_timer, data_6_timer_sure, data_6_tetik, data_6_tetikZaman, data_6_otomasyonDurum;
int data_7_vana, data_7_sensorID, data_7_zamanAcik, data_7_baslamaZaman, data_7_bitisZaman, data_7_nemSeviye, data_7_nemMin, data_7_nemMax, data_7_basincliSu, data_7_sebeke, data_7_darbe, data_7_depoSeviye, data_7_depoMin, data_7_depoMax, data_7_roleBaglantiDurum, data_7_bagliRole, data_7_timer, data_7_timer_sure, data_7_tetik, data_7_tetikZaman, data_7_otomasyonDurum;
int data_8_vana, data_8_sensorID, data_8_zamanAcik, data_8_baslamaZaman, data_8_bitisZaman, data_8_nemSeviye, data_8_nemMin, data_8_nemMax, data_8_basincliSu, data_8_sebeke, data_8_darbe, data_8_depoSeviye, data_8_depoMin, data_8_depoMax, data_8_roleBaglantiDurum, data_8_bagliRole, data_8_timer, data_8_timer_sure, data_8_tetik, data_8_tetikZaman, data_8_otomasyonDurum;
int root_0_vana_bir_durum, root_0_vana_iki_durum, root_0_vana_uc_durum, root_0_vana_dort_durum, root_0_makine_bir_acikmi, root_0_makine_iki_acikmi, root_0_makine_uc_acikmi, root_0_makine_dort_acikmi;
int data_basincliSu_durum, data_sebeke_durum, data_darbe_durum;
bool data1BasincSarti, data1ElektrikSarti, data1DarbeSarti, data1DepoSarti, data1NemSarti, data1ZamanSarti, data2BasincSarti, data2ElektrikSarti, data2DarbeSarti, data2DepoSarti, data2NemSarti, data2ZamanSarti, data3BasincSarti, data3ElektrikSarti, data3DarbeSarti, data3DepoSarti, data3NemSarti, data3ZamanSarti, data4BasincSarti, data4ElektrikSarti, data4DarbeSarti, data4DepoSarti, data4NemSarti, data4ZamanSarti; // 1-2-3-4 NUMARADA NEM SARTI DEGISKENI VAR
bool data5BasincSarti, data5ElektrikSarti, data5DarbeSarti, data5DepoSarti, data5ZamanSarti, data6BasincSarti, data6ElektrikSarti, data6DarbeSarti, data6DepoSarti, data6ZamanSarti, data7BasincSarti, data7ElektrikSarti, data7DarbeSarti, data7DepoSarti, data7ZamanSarti, data8BasincSarti, data8ElektrikSarti, data8DarbeSarti, data8DepoSarti, data8ZamanSarti; //5-6-7-8 NUMARADA NEM SARTI DEGISKENI YOK
bool data5TimerSarti, data5RoleSarti, data5TetikSarti, data6TimerSarti, data6RoleSarti, data6TetikSarti, data7TimerSarti, data7RoleSarti, data7TetikSarti, data8TimerSarti, data8RoleSarti, data8TetikSarti; // 5-6-7-8 NUMARALI ROLELERIN EK SART DEGISKENLERI
bool data_5_bagliRole1, data_5_bagliRole2, data_5_bagliRole3,data_5_bagliRole4; // role5 BAGLI ROLE DEGISKENLERI
bool data_6_bagliRole1, data_6_bagliRole2, data_6_bagliRole3,data_6_bagliRole4; // role6 BAGLI ROLE DEGISKENLERI
bool data_7_bagliRole1, data_7_bagliRole2, data_7_bagliRole3,data_7_bagliRole4; // role7 BAGLI ROLE DEGISKENLERI
bool data_8_bagliRole1, data_8_bagliRole2, data_8_bagliRole3,data_8_bagliRole4; // role8 BAGLI ROLE DEGISKENLERI
String str_data_1_baslamaZaman, str_data_2_baslamaZaman, str_data_3_baslamaZaman, str_data_4_baslamaZaman, str_data_5_baslamaZaman, str_data_6_baslamaZaman, str_data_7_baslamaZaman, str_data_8_baslamaZaman; // SAAT AYAR DEGISKENLERI
String str_data_1_bitisZaman, str_data_2_bitisZaman, str_data_3_bitisZaman, str_data_4_bitisZaman, str_data_5_bitisZaman, str_data_6_bitisZaman, str_data_7_bitisZaman, str_data_8_bitisZaman; //SAAT HESAP DEĞİŞKENİ
int int_baslamaSaati1, int_baslamaDakika1, int_calismaSuresiSaat1, int_calismaSuresiDakika1, int_baslamaSaati2, int_baslamaDakika2, int_calismaSuresiSaat2, int_calismaSuresiDakika2, int_baslamaSaati3, int_baslamaDakika3, int_calismaSuresiSaat3, int_calismaSuresiDakika3, int_baslamaSaati4, int_baslamaDakika4, int_calismaSuresiSaat4, int_calismaSuresiDakika4; // STRINGDEN INTEGER'E BASLAMA VE BITIS SAATI VERILERI
int int_baslamaSaati5, int_baslamaDakika5, int_calismaSuresiSaat5, int_calismaSuresiDakika5, int_baslamaSaati6, int_baslamaDakika6, int_calismaSuresiSaat6, int_calismaSuresiDakika6, int_baslamaSaati7, int_baslamaDakika7, int_calismaSuresiSaat7, int_calismaSuresiDakika7, int_baslamaSaati8, int_baslamaDakika8, int_calismaSuresiSaat8, int_calismaSuresiDakika8; // STRINGDEN INTEGER'E BASLAMA VE BITIS SAATI VERILERI
int durZamani1Saat, sonZaman1Saat, durZamani1Dakika, sonZaman1Dakika, durZamani2Saat, sonZaman2Saat, durZamani2Dakika, sonZaman2Dakika, durZamani3Saat, sonZaman3Saat, durZamani3Dakika, sonZaman3Dakika, durZamani4Saat, sonZaman4Saat, durZamani4Dakika, sonZaman4Dakika;
int durZamani5Saat, sonZaman5Saat, durZamani5Dakika, sonZaman5Dakika, durZamani6Saat, sonZaman6Saat, durZamani6Dakika, sonZaman6Dakika, durZamani7Saat, sonZaman7Saat, durZamani7Dakika, sonZaman7Dakika, durZamani8Saat, sonZaman8Saat, durZamani8Dakika, sonZaman8Dakika;
int ilkZaman1SaatVeDakika, int_anlikSaat, int_anlikDakika;
int sonZaman1SaatVeDakika;
int calismaZaman1SaatVeDakika;
int int_haftaninGunu, sonZaman1Gun;
int sistem1aktif;
int saat5=0, dakika5=0, saniye5=0, saat6=0, dakika6=0, saniye6=0, saat7=0, dakika7=0, saniye7=0, saat8=0, dakika8=0, saniye8=0;
unsigned long timer5=0, timer6=0,timer7=0, timer8=0, ilkZaman=0, simdikiZaman=0; //////////++
const unsigned long birSaniye=1000;
String data_toprak_nem;
String ortamIsi, ortamNem, ortamDarbe, ortamSuBasinc, ortamElektrik, ortamSuSeviye, ortamBatarya; //STRING E CEVRILMIS DEGERLERIN ETIKETLERI
String Str_toprakSensorNo, Str_toprakNem, Str_bataryaSeviyem, Str_toprakSicaklik;
int toprakSensorNo, toprakNem, bataryaSeviyem;
float toprakSicaklik;
char chr_time;
int su_seviye; // ESP den göndermek için su_seviye değerini integer olarak ayarla
bool su_basinci_varmi, elektrik_varmi, darbe_sensoru;
////////SAAT-TARIH ALIM AYARLARI/////////
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 10800; //TURKIYE GMT +3 (10800 sn fark var)
const int daylightOffset_sec = 0;
////////LOOP ICINDEKI GECIKME AYARLARI////////////
unsigned long zamanBir = 0; //sendDataPrevMillis
unsigned long zamanIki = 0; //sendDataPrevMillis
unsigned long zamanUc = 0; //sendDataPrevMillis
unsigned long zamanDort1 = 0; //NEM1 SENSORU KONTROL SURE DEGISKENI
unsigned long zamanDort2 = 0; //NEM2 SENSORU KONTROL SURE DEGISKENI
unsigned long zamanDort3 = 0; //NEM3 SENSORU KONTROL SURE DEGISKENI
unsigned long zamanDort4 = 0; //NEM4 SENSORU KONTROL SURE DEGISKENI
unsigned long count; //SAYAC DEGISKENI
bool on_line = false; //ONLINE-OFLINE DURUMU
uint32_t chipid; //ESP32 ID OGRENMEK ICIN GLOBAL DEGISKEN TANIMLANIYOR
///////////DHT AYARLARI//////////////////////
#define DHTPIN 21 // DHT sensor PİN NUMARASINI GİRİN. sadece giriş pini
#define DHTTYPE DHT22 // DHT SENSÖR TİPİNİ GİRİN.
DHT dht(DHTPIN, DHTTYPE);
// GSM VE LORA TX-RX PİNLERİ
#define RX 27 // LoRa rx pin bağlantı numarasını BELİRLEYİN!
#define TX 14 // LoRa tx pin bağlantı numarasını BELİRLEYİN!
HardwareSerial smartSerial(1); //HardwareSerial(1), smartSerial adıyla yeniden ayarlanıyor.
LoRa_E32 e32(TX, RX, &smartSerial, UART_BPS_RATE_9600);
//GSM TX 12
//GSM RX 13
//GİRİŞ PİNLER (INPUT) - 6 PİN
int su_seviye_sensor_pin = 34; //su_seviye_sensor_pin NUMARASINI GİRİN. sadece giriş
int su_basinc_sensor_pin = 19; //su_seviye_sensor_pin NUMARASINI GİRİN.
int batarya_seviye_pin = 22; //batarya_seviye_pin NUMARASINI GİRİN.
int darbe_sensoru_pin = 39; //darbe_sensoru_pin NUMARASINI GİRİN. sadece giriş
int elektrik_varmi_pin = 35; //elektrik_varmi_pin NUMARASINI GİRİN.
int sistem_reset_pin = 23; //sistem_reset_pin NUMARASINI GİRİN.
//ÇIKIŞ PİNLER (OUTPUT) - 10 PİN
int makine_bir_acikmi_pin = 26; //makine_bir_acikmi_pin NUMARASINI GİRİN.
int makine_iki_acikmi_pin = 25; //makine_iki_acikmi_pin NUMARASINI GİRİN.
int makine_uc_acikmi_pin = 33; //makine_uc_acikmi_pin NUMARASINI GİRİN.
int makine_dort_acikmi_pin = 32; //makine_dort_acikmi_pin NUMARASINI GİRİN.
String makina_bir_durum, makina_iki_durum, makina_uc_durum, makina_dort_durum;
bool makina1, makina2, makina3, makina4;
int vana_dort_durum_pin = 4; //vana_dort_durum_pin NUMARASINI GİRİN.
int vana_uc_durum_pin = 16; //vana_uc_durum_pin NUMARASINI GİRİN.
int vana_iki_durum_pin = 17; //vana_iki_durum_pin NUMARASINI GİRİN.
int vana_bir_durum_pin = 18; //vana_bir_durum_pin NUMARASINI GİRİN.
String vana_bir_durum, vana_iki_durum, vana_uc_durum, vana_dort_durum; //vana_dort_durum_pin NUMARASINI GİRİN.
bool vana1, vana2, vana3, vana4, vana5, vana6, vana7, vana8; //vana durum pinlerini kontrol eder
//int sistem_led_pin = 2; //sistem_led_pin NUMARASINI GİRİN.
//int fan_pin = 15; //fan_pin NUMARASINI GİRİN.
String toprak_nem_bir; //toprak_nem_bir degerler
String toprak_nem_iki; //toprak_nem_iki degerler
String toprak_nem_uc; //toprak_nem_uc degerler
String toprak_nem_dort; //toprak_nem_dort degerler
////////////////LoRa GELEN SİNYAL YAPISI BELİRTİLİYOR//////////////////
struct Sinyal {
char sifre[17] = "rrrrr"; // alıcılar tırnaklar dahil, 17 karakterlik "arrrrr" karakterlerini almazsa sinyali işleme almaz.
byte idNo[6]; //6 BYTE VERİ
byte role; //1 yada 0 gelecek
byte toprakNem[4]; //4019 gelse 4 byte eder. Byte, byte gidecek. Loop içinde float yada int olarak ayarlanabilir.
byte bataryaSeviye[4]; //9999 gelse 4 byte eder. Byte, byte gidecek. Loop içinde float yada int olarak ayarlanabilir.
byte toprakSicaklik[4];
} data;
//const char* ssid = "rrrrr";
//const char* password = "rrrrr.";
WiFiManager wm; //WiFi MANAGER NESNESİ (wm) TANIMLANIYOR. //db //fb
WiFiMulti wifiMulti;
/*
const char* ca = \
"-----BEGIN CERTIFICATE-----\n" \
"MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n" \
"MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n" \
"DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n" \
"SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n" \
"GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" \
"AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n" \
"q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n" \
"SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n" \
"Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n" \
"a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n" \
"/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n" \
"AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n" \
"CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n" \
"bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n" \
"c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n" \
"VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n" \
"ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n" \
"MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n" \
"Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n" \
"AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n" \
"uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n" \
"wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n" \
"X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n" \
"PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n" \
"KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n" \
"-----END CERTIFICATE-----\n";
*/