รูปแบบการอ่านข้อมูล Downlink

ไอโอทีเส้นทางสู่เมืองอัจฉริยะ

Created with Sketch.

รูปแบบการอ่านข้อมูล Downlink

เป็นปกติที่การทำงานจะเป็นแบบ 2-way ที่ในตอนก่อนเราได้พูดถึงรูปแบบการเชื่อมต่อ และส่งข้อมูลขึ้นไป จะเรียกว่าเป็น Uplink ก็ได้ และมาตอนนี้ก็จะกล่าวถึงการเอาข้อมูลจาก Server ที่เราต้องการออกมา เราจำกำหนดไว้เป็น API สำหรับการอ่านข้อมูลจาก Server

เรามาดูโค้ดแบบเต็มๆ กันก่อนนะครับ เราตั้งชื่อ void นี้ว่า read_master_status_FromServer

โดยเรียกใช้ API จาก /api/getRealyStatus/…. โดยจะต้องทำการเตรียม url ด้วยรูปแบบคำสั่งตั้งแต่บรรทัดที่ 11-13 และตามด้วยการ request ด้วยคำสั่ง GET ในบรรทัดที่ 15

void read_master_status_FromServer()
{
 Serial.print("Reading control command from Server ... connecting to ");
 Serial.println(host);

WiFiClient client;
delay(1500);
if (client.connect(host, 80)) 
  {
    Serial.println("reconnecting...");
         url = "/api/getRealyStatus/"+String(dID)+"/"+String(code)+"/"+"abZYrshRYR243askdSKSKSK5646dkfmTURDsand";
         Serial.print("Requesting URL: ");
         Serial.println(url);
    
         client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" + 
                 "Connection: close\r\n\r\n");
         delay(2000);
         
         String section="header";
         
         while(client.available())
         {
            //Serial.println("Connection available ");
            String line = client.readStringUntil('\r');
            //Serial.print(line);
            // we’ll parse the HTML body here
            if (section=="header") 
              { // headers..
           
                  if (line=="\n") 
                    { // skips the empty space at the beginning 
                      section="json";
                    }
              }
            else if (section=="json") 
              {  // print the good stuff
                  section="ignore";
                  String result = line.substring(1);
                             
                  // Parse JSON
                  int size = result.length() + 1;
                  char json[size];
                  result.toCharArray(json, size);
                  StaticJsonBuffer<2000> jsonBuffer;
                  JsonObject& json_parsed = jsonBuffer.parseObject(json);
                  if (!json_parsed.success())
                    {
                      Serial.println("parseObject() failed");
                      return;
                    }
                      Serial.println("parseObject() OK ...");
                      Serial.println(result); // show all json found
                      //String led = json_parsed["led"][0]["status"];
                      String master_state = json_parsed["result"]["masterStatus"];
                      String led1 = json_parsed["result"]["relayStatus"]["data1_status"];
                      String led2 = json_parsed["result"]["relayStatus"]["data2_status"];
                      String led3 = json_parsed["result"]["relayStatus"]["data3_status"];
                      String R5 = json_parsed["result"]["relayStatus"]["data6_status"]; 
                      String R6 = json_parsed["result"]["relayStatus"]["data7_status"];
                      // string led = json_parsed["table name""][array number]["value of field"]
                      Serial.print("Relay 1 := ");Serial.println(led1);
                      Serial.print("Master state = ");Serial.println(master_state);
                      if (master_state == "0")
                      { 
                        MainPumpStop();
                        MainPump = "Stop";
                      }
                      else
                      {
                        // this loop master_state == "1
                        if (R5 =="1")
                        {
                              R5_On = "R5_On";
                              //SendTimerR5();
                              MainPumpRun();
                              MainPump = "Run" ;
                              delay(5000);
                              /// check flow sensor
                              //RequestFlowLowStatus();
                              data0 = "1";
                              if(data0 == "1")
                              {
                              MainPumpRun();  
                              flowsensor = "OK";                      
                              }
                              else
                              {
                                MainPumpStop();
                                flowsensor = "NOK";
                              }
                        
                        }
                        else
                        {
                        Serial.println("Flow low stop pump check and reset the system ... ");
                        flowsensor = "NOK";
                        MainPumpStop();
                        }
                        
                      }
                                        
                      Serial.print("Led1           : ");Serial.println(led1);
                      Serial.print("Led2           : ");Serial.println(led2);
                      Serial.print("Led3           : ");Serial.println(led3);
                      Serial.print("Master Status  : ");Serial.println(master_state);
                      Serial.print("Timer Relay R5 : ");Serial.println(R5);
                      
            
             } // if found json
          } // end while client available
          
    }
    // end if host connected
   
    else 
    {
      // if you couldn't make a connection:
      ///Serial.println("connection failed read server 1");
    }
}

บรรทัดที่ 22-111 เป็นการ parse json string ออกมาจาก Server และเลือกเอาค่ามาส่งให้กับตัวแปรที่ต้องการในบรรทัดที่ 55-60 และจากนั้นก็นำไปเข้าเงื่อนไขต่างๆ ตามการใช้งาน

ในตัวอย่างนี้ master_status จะเป็นตัวกำหนดให้ระบบรับทราบว่า จะให้บันทึกค่าที่ส่งจาก device ลงไปใน server หรือไม่ โดยในระบบกำหนดให้

  • master_status = 1 คือ บันทึก และระบบทำงาน device = On
  • master_status = 0 คือ ไม่บันทึกข้อมูล และ device = Off