#include "FirebaseESP8266.h"
#include <ESP8266WiFi.h>
#include <FirebaseESP8266.h>
#include <Servo.h>
#define FIREBASE_HOST ""
#define FIREBASE_AUTH ""
#define WIFI_SSID "Andriod" // #SSID hotspot
#define WIFI_PASSWORD "abcdefghi" // #Password hotspot

//Output
#define rainAnalog A0
#define ledPin D1
int servo_pin = D4;
#define pumpPin D5

int angle = 0;
Servo myservo;
FirebaseData fbdo;

void setup(){
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  pinMode(pumpPin, OUTPUT);
  myservo.attach(2);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();
  
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.reconnectWiFi(true);
  }
  
void loop(){
  int rainAnalogVal = analogRead(rainAnalog);
  if(rainAnalogVal<650){
    Firebase.setString(fbdo, "/rain", "Rain");
    Serial.println(rainAnalogVal);
  }
  else{
    Firebase.setString(fbdo, "/rain", "Dry");
    Serial.println(rainAnalogVal);
  }
  if(Firebase.getInt(fbdo, "/servo")){
    if(fbdo.intData()==1){
      if(angle < 180){
        angle += 36;                      
        myservo.write(angle);
        Serial.println(angle);}
      }else{
        angle=0;                    
        myservo.write(angle);
        Serial.println(angle);}
      }
  if(Firebase.getInt(fbdo, "/lamp")){
    digitalWrite(ledPin,fbdo.intData());
  }
  
  if(Firebase.getInt(fbdo, "/pump")){
    if(fbdo.intData()==1){
    Serial.println("Pompa Menyala");
    digitalWrite(pumpPin, LOW);
    }else{
    Serial.println("Pompa Mati");
    digitalWrite(pumpPin, HIGH);
    }
  }/*else{
    Serial.print("Error in get data from pump, ");
    Serial.println(fbdo.errorReason());
  }*/
}
