Post
- Der Funktionsbaustein wird gestartet, indem die Variable bPostAwsIot im Hauptprogramm auf TRUE gesetzt wird.
- Die steigende Flanke wird dann verwendet, um eine POST-Anfrage mit dem Funktionsbaustein IotHttpRequest zu senden.
- Nachdem die Anfrage abgeschlossen ist, wird die Fehlerbehandlung durchlaufen. Wenn weder der Funktionsbaustein selbst noch der HTTP-Statuscode einen Fehler aufweisen, wird die JSON-Antwort vom Webserver geparst. Die JSON-Antwort enthält die Nachricht „OK“, wenn die POST-Anfrage erfolgreich war.
FUNCTION_BLOCK FB_TestHTTP_Post_awsIot
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;
fbPayload : FB_JsonSaxWriter;
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
fbPayload.StartObject();
fbPayload.AddKey('message');
fbPayload.AddReal(42.42);
fbPayload.EndObject();
sContent:= fbPayload.GetDocument();
fbPayload.ResetDocument();
IF fbRequest.SendRequest(sUri:= '/topics/mytopic?qos=1', fbClient:= fbClient,
eRequestType:= ETcIotHttpRequestType.HTTP_POST,
pContent:= ADR(sContent),
nContentSize:= LEN2(ADR(sContent)), 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
bGetJsonResult:= TRUE;
IF fbJson.HasMember(jsonDoc, 'message') THEN
jsonVal:= fbJson.FindMember(jsonDoc, 'message');
sResultValue:= fbJson.GetString(jsonVal);
IF sResultValue= 'OK' THEN
nValidResCount:= nValidResCount+1;
bError:= FALSE;
END_IF
END_IF
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