#include <WiFi.h>
#include <WiFiClientSecure.h>

const char ssid[] = "YOUR_SSID";
const char passwd[] = "YOUR_PASSWORD";

int TEMP = 0;
int HUMI = 0;
int SMELL = 0;
int CDS = 0;
int NOISE = 0;
int SPACE = 0;
int HUMAN=0;
int CO=0;
int CO2=0;
int D_IN1=0;
int D_IN2=0;
int infrared=0;
int DCIN=0;
int RxFlg=0;
int CONTACT1=0;
int CONTACT2=0;

int senddata[22];

int RCV_BUFF00=0;
int RCV_BUFF01=0;
int RCV_BUFF02=0;
int RCV_BUFF03=0;
int RCV_BUFF04=0;
int RCV_BUFF05=0;
int RCV_BUFF06=0;
int RCV_BUFF07=0;
int RCV_BUFF08=0;
int RCV_BUFF09=0;
int RCV_BUFF10=0;
int RCV_BUFF11=0;
int RCV_BUFF12=0;
int RCV_BUFF13=0;
int RCV_BUFF14=0;
int RCV_BUFF15=0;
int RCV_BUFF16=0;
int RCV_BUFF17=0;
int RCV_BUFF18=0;
int RCV_BUFF19=0;
int RCV_BUFF20=0;
int RCV_BUFF21=0;
int RCV_BUFF22=0;
int RCV_BUFF23=0;
int RCV_BUFF24=0;
int RCV_BUFF25=0;
int RCV_BUFF26=0;
int RCV_BUFF27=0;
int RCV_BUFF28=0;
int RCV_BUFF29=0;
int RCV_BUFF30=0;
int RCV_BUFF31=0;

int RCV_VALUE00=0;
int RCV_VALUE01=0;
int RCV_VALUE02=0;
int RCV_VALUE03=0;
int RCV_VALUE04=0;
int RCV_VALUE05=0;
int RCV_VALUE06=0;
int RCV_VALUE07=0;
int RCV_VALUE08=0;
int RCV_VALUE09=0;
int RCV_VALUE10=0;
int RCV_VALUE11=0;
int RCV_VALUE12=0;
int RCV_VALUE13=0;
int RCV_VALUE14=0;
int RCV_VALUE15=0;
int RCV_VALUE16=0;
int RCV_VALUE17=0;
int RCV_VALUE18=0;
int RCV_VALUE19=0;
int RCV_VALUE20=0;
int RCV_VALUE21=0;
int RCV_VALUE22=0;
int RCV_VALUE23=0;
int RCV_VALUE24=0;
int RCV_VALUE25=0;
int RCV_VALUE26=0;
int RCV_VALUE27=0;
int RCV_VALUE28=0;
int RCV_VALUE29=0;
int RCV_VALUE30=0;
int RCV_VALUE31=0;

int RX_CHKDIGIT=0;

int fireflag=0;

const int httpport=80;

WiFiServer server(80);

void sendnotify(){
  const char* host = "notify-api.line.me";
  const char* token = "Sx2p---------------------------------dwHO";
  const char* message = "FIRE";
  WiFiClientSecure client;
  Serial.println("Try");
  //LineのAPIサーバに接続
  if (!client.connect(host, 443)) {
    Serial.println("Connection failed");
    return;
  }
  Serial.println("Connected");
  //リクエストを送信
  String query = String("message=") + String(message);
  String request = String("") +
               "POST /api/notify HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Authorization: Bearer " + token + "\r\n" +
               "Content-Length: " + String(query.length()) +  "\r\n" + 
               "Content-Type: application/x-www-form-urlencoded\r\n\r\n" +
                query + "\r\n";
  client.print(request);
 
  //受信終了まで待つ 
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
  }
}

void setup() {
    delay(2000);
    WiFi.begin(ssid, passwd);
    while(WiFi.status() != WL_CONNECTED) {
        delay(100);
    }
    delay(2000);
    Serial.begin(9600);
    while(Serial.available() >= 1){
      RCV_VALUE31 = Serial.read( );
    }
}

void loop() {
    if (Serial.available() >= 1) { // 受信したデータが存在する
        RCV_BUFF00 = RCV_BUFF01;
        RCV_BUFF01 = RCV_BUFF02;
        RCV_BUFF02 = RCV_BUFF03;
        RCV_BUFF03 = RCV_BUFF04;
        RCV_BUFF04 = RCV_BUFF05;
        RCV_BUFF05 = RCV_BUFF06;
        RCV_BUFF06 = RCV_BUFF07;
        RCV_BUFF07 = RCV_BUFF08;
        RCV_BUFF08 = RCV_BUFF09;
        RCV_BUFF09 = RCV_BUFF10;
        RCV_BUFF10 = RCV_BUFF11;
        RCV_BUFF11 = RCV_BUFF12;
        RCV_BUFF12 = RCV_BUFF13;
        RCV_BUFF13 = RCV_BUFF14;
        RCV_BUFF14 = RCV_BUFF15;
        RCV_BUFF15 = RCV_BUFF16;
        RCV_BUFF16 = RCV_BUFF17;
        RCV_BUFF17 = RCV_BUFF18;
        RCV_BUFF18 = RCV_BUFF19;
        RCV_BUFF19 = RCV_BUFF20;
        RCV_BUFF20 = RCV_BUFF21;
        RCV_BUFF21 = RCV_BUFF22;
        RCV_BUFF22 = RCV_BUFF23;
        RCV_BUFF23 = RCV_BUFF24;
        RCV_BUFF24 = RCV_BUFF25;
        RCV_BUFF25 = RCV_BUFF26;
        RCV_BUFF26 = RCV_BUFF27;
        RCV_BUFF27 = RCV_BUFF28;
        RCV_BUFF28 = RCV_BUFF29;
        RCV_BUFF29 = RCV_BUFF30;
        RCV_BUFF30 = RCV_BUFF31;
        RCV_BUFF31 = Serial.read( );
        RX_CHKDIGIT=RCV_BUFF00+RCV_BUFF01+RCV_BUFF02+RCV_BUFF03+RCV_BUFF04+RCV_BUFF05+RCV_BUFF06+RCV_BUFF07+RCV_BUFF08+RCV_BUFF09+RCV_BUFF10+RCV_BUFF11+RCV_BUFF12+RCV_BUFF13+RCV_BUFF14+RCV_BUFF15+RCV_BUFF16+RCV_BUFF17+RCV_BUFF18+RCV_BUFF19+RCV_BUFF20+RCV_BUFF21+RCV_BUFF22+RCV_BUFF23+RCV_BUFF24+RCV_BUFF25+RCV_BUFF26+RCV_BUFF27+RCV_BUFF28+RCV_BUFF29+RCV_BUFF30;
        RX_CHKDIGIT=RX_CHKDIGIT%256;
        if((RCV_BUFF00==255)&&(RCV_BUFF01==255)&&((RCV_BUFF30==250)||(RCV_BUFF30==255))&&(RCV_BUFF31==RX_CHKDIGIT)){
            RCV_VALUE00 = RCV_BUFF00;
            RCV_VALUE01 = RCV_BUFF01;
            RCV_VALUE02 = RCV_BUFF02;
            RCV_VALUE03 = RCV_BUFF03;
            RCV_VALUE04 = RCV_BUFF04;
            RCV_VALUE05 = RCV_BUFF05;
            RCV_VALUE06 = RCV_BUFF06;
            RCV_VALUE07 = RCV_BUFF07;
            RCV_VALUE08 = RCV_BUFF08;
            RCV_VALUE09 = RCV_BUFF09;
            RCV_VALUE10 = RCV_BUFF10;
            RCV_VALUE11 = RCV_BUFF11;
            RCV_VALUE12 = RCV_BUFF12;
            RCV_VALUE13 = RCV_BUFF13;
            RCV_VALUE14 = RCV_BUFF14;
            RCV_VALUE15 = RCV_BUFF15;
            RCV_VALUE16 = RCV_BUFF16;
            RCV_VALUE17 = RCV_BUFF17;
            RCV_VALUE18 = RCV_BUFF18;
            RCV_VALUE19 = RCV_BUFF19;
            RCV_VALUE20 = RCV_BUFF20;
            RCV_VALUE21 = RCV_BUFF21;
            RCV_VALUE22 = RCV_BUFF22;
            RCV_VALUE23 = RCV_BUFF23;
            RCV_VALUE24 = RCV_BUFF24;
            RCV_VALUE25 = RCV_BUFF25;
            RCV_VALUE26 = RCV_BUFF26;
            RCV_VALUE27 = RCV_BUFF27;
            RCV_VALUE28 = RCV_BUFF28;
            RCV_VALUE29 = RCV_BUFF29;
            RCV_VALUE30 = RCV_BUFF30;
            RCV_VALUE31 = RCV_BUFF31;
            RxFlg=1;
        }else{
        }
    }else{
    }
    if(RxFlg==1){
        RxFlg=0;
        SMELL=(RCV_VALUE02*256)+RCV_VALUE03;
        TEMP=((RCV_VALUE04*256)+RCV_VALUE05)/10;
        HUMI=RCV_VALUE06;
        CDS=(RCV_VALUE07*256)+RCV_VALUE08;
        NOISE=(RCV_VALUE09*256)+RCV_VALUE10;
        HUMAN=RCV_VALUE11;
        CO=(RCV_VALUE12*256)+RCV_VALUE13;
        CO2=(RCV_VALUE14*256)+RCV_VALUE15;
        DCIN=RCV_VALUE16;
        D_IN1=RCV_VALUE17;
        D_IN2=RCV_VALUE18;
        CONTACT1=RCV_VALUE25;
        CONTACT2=RCV_VALUE26;
        if(RCV_VALUE30==255){
            if(fireflag==1){
              sendnotify();
              fireflag=0;
            }
        }else{
        }
        if(RCV_VALUE30==250){
            if(HUMAN>=1){
                fireflag=1;
            }else{
            }
              Serial.write(255);
              Serial.write(255);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(0);
              Serial.write(254);  
        }else{
        }
    }
}