Get
- The function block is started by writing the variable bGetOpenWeatherMap in the main program to TRUE.
- The rising edge is then used to send a GET request with the IotHttpRequest function block.
- After the request has been finished, the error handling is processed. When neither the function block itself nor the HTTP status code display an error, the JSON response from the webserver is parsed.
FUNCTION_BLOCK FB_TestHTTP_Get_openWeatherMap
VAR_INPUT
bSend : BOOL;
END_VAR
VAR_IN_OUT
fbClient : FB_IotHttpClient;
END_VAR
VAR_OUTPUT
bBusy : BOOL;
bError : BOOL;
END_VAR
VAR
fbRequest : FB_IotHttpRequest;
fbJson : FB_JsonDomParser;
nState : UDINT;
RisingEdge : R_TRIG;
bGetContentResult : BOOL;
sContent : STRING(511);
bGetJsonResult : BOOL;
jsonDoc : SJsonValue;
jsonVal : SJsonValue;
sResultValue : STRING;
nReqCount : UDINT;
nResCount : UDINT;
nValidResCount : UDINT;
nErrCount : UDINT;
END_VAR
RisingEdge(CLK:= bSend);
CASE nState OF
0:
IF RisingEdge.Q THEN
IF fbRequest.SendRequest(sUri:= '/data/2.5/weather?id=123456&APPID=123456abcdef',
fbClient:= fbClient,
eRequestType:= ETcIotHttpRequestType.HTTP_Get, 0, 0, 0) THEN
nState:= 1;
nReqCount:= nReqCount+1;
bBusy:= TRUE;
bError:= FALSE;
END_IF
END_IF
1:
IF NOT fbRequest.bBusy THEN
bError:= TRUE;
IF NOT fbRequest.bError THEN
bGetContentResult:= fbRequest.GetContent(pContent:= ADR(sContent),
nContentSize:= SIZEOF(sContent),
bSetNullTermination:= TRUE);
IF fbRequest.nStatusCode >= 200 AND fbRequest.nStatusCode < 300 THEN
bGetJsonResult:= FALSE;
jsonDoc:= fbRequest.GetJsonDomContent(fbJson);
IF jsonDoc <> 0 THEN
; //do something with the weather data
nValidResCount:= nValidResCount+1;
bError:= FALSE;
END_IF
nResCount:= nResCount+1;
END_IF
END_IF
nState:= 0;
bBusy:= FALSE;
IF bError THEN
nErrCount:= nErrCount+1;
END_IF
END_IF
END_CASE