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.
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