best-smart/best-smart.ino0000755000000000000000000002631214071443115012624 0ustar //#define BLYNK_PRINT Serial // disable baris ini jika sudah fix #include // lib wifi #include // lib blynk #include // lib sensor DHT11 #include #include //lib cek realtime waktu // DEFINISIKAN PIN #define PIR D1 // triger ping (5v) #define DHTPIN D5 // input sensor DHT #define RELkabut D6 // output Relay-1 #define RELteras D7 // output Relay-2 #define RELpir D9 // output Relay-2 #define DHTTYPE DHT11 // jenis sensor DHT 11 DHT dht(DHTPIN, DHTTYPE); BlynkTimer timer; BlynkTimer timerPIR; BlynkTimer timerSEND; BlynkTimer timerCek; WidgetLED led2(V6); // PREDEFINE long duration; int distance; bool Connected2Blynk = false; int statusnya = 0; int lamaON = 0; int lamaOFF = 0; int statusMalam = 0; //int air = 1; bool pirValue = LOW; int timezone = 8 * 3600; // time zone int dst = 0; int jam; int menit; unsigned long waktuSebelumPIR=0; bool statusPIR=LOW; bool simpanPIR=LOW; // PREDEFINE TIMER SLIDER int WM1=3; int timerON=5; // Global variable used in Slider widget and runEveryMinute() int timerOFF=60; // Global variable used in Slider widget and runEveryMinute() int bacasuhu,setsuhu=28; int bacahumap,sethumap=70; int x, y; int CounterOn = 0; int CounterOff = 0; int ledStatus = 0; //PASTE KODE TOKEN char auth[] = "A5BWvt9B0hFHtssytdYQ_Giaek_RW1dK"; // char ssid[] = "wildan"; // ssid untuk konek internet char pass[] = "99887766"; // pass ssid //------- start ambil nilai slider time mist BLYNK_WRITE(V3) { // add a slider to your project on V0 range 0 to 120 (seconds) x = param.asInt(); // set variable as Slider value timerON = x; } BLYNK_WRITE(V4) { // add a slider to your project on V1 range 0 to 120 (seconds) y = param.asInt(); // set variable as Slider value timerOFF = y; } BLYNK_WRITE(V11) { // add a slider to your project on V1 range 0 to 120 (seconds) bacahumap = param.asInt(); // set variable as Slider value sethumap = bacahumap; } BLYNK_WRITE(V12) { // add a slider to your project on V1 range 0 to 120 (seconds) bacasuhu= param.asInt(); // set variable as Slider value setsuhu = bacasuhu; // } } //--------- end ambil nilai slider time mist //----start membuat blink indikator //void statusLED() // { // digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) // delay(200); // wait for a second // digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW // delay(100); // } //----end membuat blink indikator //----- start kontrol misting void led_control() { if ((CounterOn > 0) && (ledStatus == 0))// && (siram == 1)) // && (air==1)) { // digitalWrite(WM1,HIGH); //write to pin to turn the LED on. //Serial.print(minute()); //Serial.print(": LED on\n"); //Blynk.virtualWrite(V6, 150); // digitalWrite(REL2, LOW); // RELkabut HIGH (dibalik) digitalWrite(RELkabut, LOW); // RELkabut HIGH (dibalik) ledStatus = 1; CounterOff = 0; } if ((CounterOn > 0) && (ledStatus == 1)) { CounterOn = (CounterOn - 1); Blynk.virtualWrite(V8, CounterOn); //countdown timeON led2.setValue(250); } if ((CounterOff == 0) && (CounterOn == 0) && (ledStatus == 1)) // && (air==1)) { CounterOff = timerOFF; } if ((CounterOff > 0) && (ledStatus == 1))// && (siram == 1)) // && (air==1)) { //digitalWrite(WM1,LOW); //write to pin to turn the LED off. //Serial.print(minute()); //Serial.print(": LED off\n"); digitalWrite(RELkabut, HIGH); // RELkabut LOW (dibalik) // digitalWrite(REL2, HIGH); // RELkabut LOW (dibalik) Blynk.virtualWrite(V6, 10); ledStatus = 0; CounterOn = 0; } if ((CounterOff > 0) && (ledStatus == 0)) { CounterOff = (CounterOff - 1); Blynk.virtualWrite(V9, CounterOff); //countdown timeoff } if ((CounterOff == 0) && (CounterOn == 0) && (ledStatus == 0)) { CounterOn = timerON+1; } } //----- end kontrol misting //----start dht sensor void sendSensor() { //--- START SEND SENSOR DHT float h = dht.readHumidity(); float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit if (isnan(h) || isnan(t)) { Serial.println("sensor gak kepasang Failed to read from DHT sensor!"); Blynk.virtualWrite(V2, "KEGAGALAN SENSOR"); return; } // You can send any value at any time. // Please don't send more that 10 values per second. //Serial.println(h); //Serial.println(t); digitalWrite(D4, HIGH); Blynk.virtualWrite(V2, "SENSOR OK!"); Blynk.virtualWrite(V0, t); Blynk.virtualWrite(V1, h); Blynk.virtualWrite(V3,timerON); Blynk.virtualWrite(V4,timerOFF); Blynk.virtualWrite(V11,sethumap); Blynk.virtualWrite(V12,setsuhu); //----ping end if (h > sethumap){ //&& (jarak<100)){ // menyalakan misting jika lembab <70 // siram = 1; //air=1; Blynk.virtualWrite(V10, "MISTING.."); } // else // if (jarak >=100) { // Blynk.virtualWrite(V10, "AIR HABIS, OFF"); // digitalWrite(RELkabut, HIGH); //RELkabut LOW (dibalik) // digitalWrite(REL2, HIGH); //RELkabut LOW (dibalik) // Blynk.virtualWrite(V6, 10); // CounterOn = 0; // CounterOff = 0; // siram=0; // //air=0; // } else if (h <= sethumap) { CounterOn = 0; CounterOff = 0; Blynk.virtualWrite(V10, "KELEMBABAN CUKUP, OFF"); digitalWrite(RELkabut, HIGH); //RELkabut LOW (dibalik) // digitalWrite(REL2, HIGH); //RELkabut LOW (dibalik) Blynk.virtualWrite(V6, 10); // siram=0; //air = 0; } } //--- END SEND SENSOR DHT void CheckConnection(){ Connected2Blynk = Blynk.connected(); if(!Connected2Blynk){ //Serial.println("Gak bisa konek ke Blynk server"); Blynk.connect(3333); // timeout set to 10 seconds and then continue without Blynk } else{ //Serial.println("Wes..Connected to Blynk server"); } //------- cek koneksi /*Serial.println(""); Serial.print("hostname :"); Serial.println( WiFi.hostname()); Serial.print("Status: "); Serial.println(WiFi.status()); Serial.print("IP: "); Serial.println(WiFi.localIP()); Serial.print("Subnet: "); Serial.println(WiFi.subnetMask()); Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP()); Serial.print("SSID: "); Serial.println(WiFi.SSID()); Serial.print("Signal: "); Serial.println(WiFi.RSSI()); Serial.print("Networks: "); Serial.println(WiFi.scanNetworks()); Serial.println("Connected to wifi"); Serial.println("Starting TCP Server"); */ // server.begin( ); // start TCP server } void LampuPir(){ time_t now = time(nullptr); /* mengambil time*/ struct tm* p_tm = localtime(&now); jam=(p_tm->tm_hour); // ambil jam menit=(p_tm->tm_min); // ambil menit // TIMER LAMPU TERAS if (jam >= 18 || jam <= 6) { //aksi sesuai jam //Blynk.virtualWrite(V13, "LAMPU senja menyala"); Blynk.virtualWrite(V13, 255); digitalWrite(RELteras, LOW); // Serial.print("MALAM"); statusMalam=1; } else { //Blynk.virtualWrite(RELteras, "lampu terasa mati"); Blynk.virtualWrite(V13, 50); digitalWrite(RELteras, HIGH); // Serial.print("SIANG"); statusMalam=0; } //Serial.print(jam); //Serial.println(menit); //millis pir - nyala lampu utama teras jika malam dan ada orang pirValue = digitalRead(PIR); //Serial.println(pirValue); unsigned long waktuSekarangPIR=millis(); // milis - delay tanpa mempenaruhi timing yg lain // jika ada org siang hari if (pirValue==1){ //&& statusMalam == 0) { // start hitung mundur milis waktuSebelumPIR=waktuSekarangPIR; // Serial.println("ADA ORANG BOS!! ----------siang"); // Blynk.virtualWrite(V18, 255); } // jika ada orang malam hari // else if ((pirValue==1)&& statusMalam ==1) { // waktuSebelumPIR=waktuSekarangPIR; // Serial.println("ADA ORANG BOS!! malam"); // Blynk.virtualWrite(V18, 255); //digitalWrite(RELpir, HIGH); //} else { // Serial.println("SEPI"); Blynk.virtualWrite(V18, 50); //digitalWrite(RELpir, LOW); } if (((waktuSekarangPIR - waktuSebelumPIR) < 150000) && (statusMalam = 1)) { //waktuSebelumPIR=millis(); Blynk.virtualWrite(V7, "Ada Tamu malam!"); Blynk.virtualWrite(V18, 255); digitalWrite(RELpir, LOW); // Serial.println("Ada Tamu.."); } else if (((waktuSekarangPIR - waktuSebelumPIR) < 150000) && (statusMalam = 0)) { Blynk.virtualWrite(V7, "Ada Tamu siang!"); Blynk.virtualWrite(V18, 255); digitalWrite(RELpir, HIGH); // digitalWrite(RELpir, LOW); } else { Blynk.virtualWrite(V7, "Aman..."); Blynk.virtualWrite(V18, 50); digitalWrite(RELpir, HIGH); // Serial.println("SEPI"); } } void setup() { if (timerON== 0) { timerON=1; } if (timerOFF== 0) { timerOFF=1; } // pinMode(triggerPin, OUTPUT); // pinMode(echoPin, INPUT); pinMode(LED_BUILTIN, OUTPUT); pinMode(RELkabut, OUTPUT); pinMode(RELpir, OUTPUT); pinMode(RELteras, OUTPUT); digitalWrite(RELkabut, HIGH); digitalWrite(RELpir,HIGH); digitalWrite(RELteras,HIGH); // Serial.begin(9600); // Debug console (matikan jika sudah fix) // Serial.println(WiFi.macAddress()); // Blynk.begin(auth, ssid, pass, "103.133.222.53",9443); // https://34.101.75.215/ server GCP bestblynk (penulisan boleh spt ini (diserial port tampil, buat troubleshoot) WiFi.begin(ssid, pass); Blynk.config(auth,"103.133.222.53",8080); // port untuk nodemcu konek ke server = 8080, port app blynk = 8443 // Blynk.config(auth,"103.133.222.53"); Serial.println(WiFi.macAddress()); Blynk.connect(3333); // timeout set to 10 seconds and then continue without Blynk Blynk.syncAll(); //This will sync the last state of your device dht.begin(); configTime(timezone, dst, "pool.ntp.org","time.nist.gov"); //Serial.println("\nWaiting for Internet time"); while(!time(nullptr)){ Serial.print("*"); delay(1000); } //Serial.println("\nTime response....OK"); // end koneksi timerSEND.setInterval(1000L, sendSensor); // timer kirim data sensor tiap 1s //timerSEND.setInterval(1000L, tandonPIR); CounterOn = timerON+1; timerPIR.setInterval(1000L, LampuPir); // timer cek PIR timer.setInterval(2000L, led_control); //timer 60s = 60000L untuk SATUAN menit timer 2 slider, jika ingin SATUAN detik ganti 1000L kirim data sensor DHT timerCek.setInterval(11000L, CheckConnection); // cek konekssi } //--------------LOOOOOOOOOOOOOOOP void loop() { timerCek.run(); if(Connected2Blynk=true){ Blynk.run(); } //timerBLINK.run(); //Blynk.run(); timerSEND.run(); timerPIR.run(); timer.run(); //Serial.println(timerON); //Serial.println(timerOFF); //Serial.println(sethumap); //Serial.println(setsuhu); }