Recover from http post failure

Occasionally when using the BG96 to perform an http post there is “+QHTTPPOST: 702” error. As an http post is not actually one command, but a composite of four separate commands (AT+QHTTPURL, URL, AT+QHTTPPOST, DATA), it is not clear how to recover from this failure. Should I retry the last part of the command or from the start of the set of four commands or perhaps neither of these? I know that a reset of the BG96 will recover it, but as our application is battery powered I would much prefer to recover without having to redial the network.

Here is an example of a successful http post:

19/05/20 10:10:49.495 INFO: TX> "AT+QHTTPURL=25"
19/05/20 10:10:49.511 INFO: RX> "AT+QHTTPURL=25"
19/05/20 10:10:49.516 INFO: RX> "CONNECT"
19/05/20 10:10:49.525 INFO: TX> "http://iot.exampleurl.com"
19/05/20 10:10:49.534 INFO: RX> "OK"
19/05/20 10:10:49.539 INFO: TX> "AT+QHTTPPOST=1005"
19/05/20 10:10:49.545 INFO: RX> "AT+QHTTPPOST=1005"
19/05/20 10:10:50.259 INFO: RX> "CONNECT"
19/05/20 10:10:50.351 INFO: TX> "{"sn":"866425035318361","ni":"03EA000A008403FA2E5035000000001CC91300000000006D340000D8560000483007E80ED500000E","msgs":[{"sq":"136","fp":"4","pl":"5EC3A26B00B00B00B00B00B00B00B00D00B00B00B00D00B00B00B000"},{"sq":"137","fp":"4","pl":"5EC3A3E200B00D00D00B01100B00B01100D00D01000D00B00B00B000"},{"sq":"138","fp":"4","pl":"5EC3A55901100B00B00B00B00D00D00B00B00B00B00B00B01800D000"},{"sq":"139","fp":"4","pl":"5EC3A6D000B00B00D00D01A00D00D00D00B00B01000B00D01100B000"},{"sq":"140","fp":"4","pl":"5EC3A84701300D00D01101101001000D00D00D00D00B013011013000"},{"sq":"141","fp":"4","pl":"5EC3A9BE00B01301301101100D00B01101001000D01001C182011000"},{"sq":"142","fp":"4","pl":"5EC3AB3501101801001101101101801100B01901101300D00D00D000"},{"sq":"143","fp":"4","pl":"5EC3ACAC00D01100D00B00D01100D00D01001101100B00D010010000"},{"sq":"144","fp":"4","pl":"5EC3AE2301001101801A01101000B01A011020011011011019010000"},{"sq":"145","fp":"12","pl":"5EC3B0940000C07F0000C07F"},{"sq":"146","fp":"15","pl":"5EC3B09485EBE34134078044"}]}"
19/05/20 10:10:50.445 INFO: RX> "OK"
19/05/20 10:10:52.201 INFO: RX> "+QHTTPPOST: 0,200,0"

And here is what it looks like when the 702 error occurs:

19/05/20 15:43:47.912 INFO: TX> "AT+QHTTPURL=25"
19/05/20 15:43:47.928 INFO: RX> "AT+QHTTPURL=25"
19/05/20 15:43:47.934 INFO: RX> "CONNECT"
19/05/20 15:43:47.943 INFO: TX> "http://iot.exampleurl.com"
19/05/20 15:43:47.952 INFO: RX> "OK"
19/05/20 15:43:47.958 INFO: TX> "AT+QHTTPPOST=366"
19/05/20 15:43:47.965 INFO: RX> "AT+QHTTPPOST=366"
19/05/20 15:43:53.542 INFO: RX> "CONNECT"
19/05/20 15:43:53.578 INFO: TX> "{"sn":"866425035318361","ni":"03EA000A008403FA2E5035000000001CC91300000000006D340000D8560000483007E80ED5000013","msgs":[{"sq":"6","fp":"20","pl":"5EC3FEB201725B0000D85600006D3400004C0147534D20393030"},{"sq":"7","fp":"20","pl":"5EC3FEB201865B000022080000CC010000380147534D2031383030"},{"sq":"8","fp":"20","pl":"5EC3FEB201775B00003201000028210000430147534D20393030"}]}"
19/05/20 15:43:53.616 INFO: RX> "OK"
19/05/20 15:44:13.647 INFO: TX> "{"sn":"866425035318361","ni":"03EA000A008403FA2E5035000000001CC91300000000006D340000D8560000483007E80ED5000013","msgs":[{"sq":"6","fp":"20","pl":"5EC3FEB201725B0000D85600006D3400004C0147534D20393030"},{"sq":"7","fp":"20","pl":"5EC3FEB201865B000022080000CC010000380147534D2031383030"},{"sq":"8","fp":"20","pl":"5EC3FEB201775B00003201000028210000430147534D20393030"}]}"
19/05/20 15:44:33.715 INFO: TX> "{"sn":"866425035318361","ni":"03EA000A008403FA2E5035000000001CC91300000000006D340000D8560000483007E80ED5000013","msgs":[{"sq":"6","fp":"20","pl":"5EC3FEB201725B0000D85600006D3400004C0147534D20393030"},{"sq":"7","fp":"20","pl":"5EC3FEB201865B000022080000CC010000380147534D2031383030"},{"sq":"8","fp":"20","pl":"5EC3FEB201775B00003201000028210000430147534D20393030"}]}"
19/05/20 15:44:53.583 INFO: RX> "+QHTTPPOST: 702"

What is the correct way to recover in this case? As you can see my current mechanism of retrying the failed “data” command is not successful.

Further information on this problem. I have traced this to being an input time timeout while waiting for the data of the http post. This is clear in the latest log capture where I have used a different timeout value for input time (3s) and response time (60s) (see attached)http_post_timeout.pdf (25.9 KB)

What is confusing about this is that the debug log shows the correct number of characters sent, so I presume that this means that one or more chars has been dropped in the uart comms between the micro and the BG96 but not equivalently dropped in the log file (which shows the full 1063 chars).

Are there any debug commands that I can use to help debug this problem? For example can I send an AT command to determine how many chars of the http post data have been successfully received when the 702 timeout failure occurs? Or even to dump out the data that was received?

Thanks.

I’ve worked on this further and realised that the problem isn’t one of dropped characters between the micro and the BG96. In fact what is happening is that the network is dropping the PDP context. So I have reduced my problems considerably by disabling and re-enabling the PDP context:

 R: 17/08/20 13:49:28.575 INFO: TX> "AT+QHTTPURL=49,3"
 R: 17/08/20 13:49:28.590 INFO: RX> "AT+QHTTPURL=49,3"
 R: 17/08/20 13:49:28.596 INFO: RX> "CONNECT"
 R: 17/08/20 13:49:28.605 INFO: TX> "http://iot.exampleurl.com/v1/mm1b/868446031449065"
 R: 17/08/20 13:49:28.614 INFO: RX> "OK"
 R: 17/08/20 13:49:28.621 INFO: TX> "AT+QHTTPPOST=1087,3,60"
 R: 17/08/20 13:49:28.628 INFO: RX> "AT+QHTTPPOST=1087,3,60"
 R: 17/08/20 13:49:29.401 INFO: RX> "CONNECT"
 R: 17/08/20 13:49:29.503 INFO: TX> "{"sn":"868446031449065","ni":"03EA000A008403FA2E503500000000B9C81300000000006D340000D85600003E3007E80ED50000070800","msgs":[{"sq":"1665","fp":"4","pl":"5F3A7B7B00D00D00B00B00B00D01001000800B00D00B01100D00D0"},{"sq":"1666","fp":"4","pl":"5F3A7D0E00D00B00D01001000D00D00D00D00D00D00D01000D0110"},{"sq":"1667","fp":"4","pl":"5F3A7E8500B00D00D00D00B00B00B00B00D00B00B01000B00D00D0"},{"sq":"1668","fp":"4","pl":"5F3A7FFC00B00B00B00D00B00B01000B00B00B00B00B00D00B0110"},{"sq":"1669","fp":"4","pl":"5F3A817300B00B00B00B00B00D00B00D00D00B01000D00B00B00B0"},{"sq":"1670","fp":"4","pl":"5F3A82EA00B00B00B00B00B00D00B00D00B01100D00B00D00B00B0"},{"sq":"1671","fp":"4","pl":"5F3A846100D00D00B00B01000B00B00D00D00B00D00D00D00B00D0"},{"sq":"1672","fp":"4","pl":"5F3A85D800D00B00D00B01000B00B00D00B00B00D00B00D00D00B0"},{"sq":"1673","fp":"4","pl":"5F3A874F01100B01000B00D00D00B00B00D00B00D00D00D01000B0"},{"sq":"1674","fp":"4","pl":"5F3A88C600B00B00D00B00B01100D00B00B00D00D00B00D00B00B0"},{"sq":"1675","fp":"12","pl":"5F3A8AD30000C07F0000C07F"},{"sq":"1676","fp":"15","pl":"5F3A8AD3D7A3DC4174197C44"}]}"
 R: 17/08/20 13:49:32.402 INFO: RX> "OK"
 R: 17/08/20 13:49:32.406 INFO: RX> "+QHTTPPOST: 702"
 R: 17/08/20 13:49:32.422 INFO: TX> "AT+QIDEACT=1"
 R: 17/08/20 13:49:32.428 INFO: RX> "AT+QIDEACT=1"
 R: 17/08/20 13:49:32.918 INFO: RX> "OK"
 R: 17/08/20 13:49:32.924 INFO: TX> "AT+QIACT=1"
 R: 17/08/20 13:49:32.929 INFO: RX> "AT+QIACT=1"
 R: 17/08/20 13:49:39.142 INFO: RX> "OK"
 R: 17/08/20 13:49:39.148 INFO: TX> "AT+QIACT?"
 R: 17/08/20 13:49:39.153 INFO: RX> "AT+QIACT?"
 R: 17/08/20 13:49:39.158 INFO: RX> "+QIACT: 1,1,1,"10.131.56.86""
 R: 17/08/20 13:49:39.165 INFO: RX> "OK"
 R: 17/08/20 13:49:39.171 INFO: TX> "AT+QHTTPURL=49,3"
 R: 17/08/20 13:49:39.177 INFO: RX> "AT+QHTTPURL=49,3"
 R: 17/08/20 13:49:39.182 INFO: RX> "CONNECT"
 R: 17/08/20 13:49:39.192 INFO: TX> "http://iot.exampleurl.com/v1/mm1b/868446031449065"
 R: 17/08/20 13:49:39.201 INFO: RX> "OK"
 R: 17/08/20 13:49:39.208 INFO: TX> "AT+QHTTPPOST=1087,3,60"
 R: 17/08/20 13:49:39.214 INFO: RX> "AT+QHTTPPOST=1087,3,60"
 R: 17/08/20 13:49:40.821 INFO: RX> "CONNECT"
 R: 17/08/20 13:49:40.923 INFO: TX> "{"sn":"868446031449065","ni":"03EA000A008403FA2E503500000000B9C81300000000006D340000D85600003E3007E80ED50000070800","msgs":[{"sq":"1665","fp":"4","pl":"5F3A7B7B00D00D00B00B00B00D01001000800B00D00B01100D00D0"},{"sq":"1666","fp":"4","pl":"5F3A7D0E00D00B00D01001000D00D00D00D00D00D00D01000D0110"},{"sq":"1667","fp":"4","pl":"5F3A7E8500B00D00D00D00B00B00B00B00D00B00B01000B00D00D0"},{"sq":"1668","fp":"4","pl":"5F3A7FFC00B00B00B00D00B00B01000B00B00B00B00B00D00B0110"},{"sq":"1669","fp":"4","pl":"5F3A817300B00B00B00B00B00D00B00D00D00B01000D00B00B00B0"},{"sq":"1670","fp":"4","pl":"5F3A82EA00B00B00B00B00B00D00B00D00B01100D00B00D00B00B0"},{"sq":"1671","fp":"4","pl":"5F3A846100D00D00B00B01000B00B00D00D00B00D00D00D00B00D0"},{"sq":"1672","fp":"4","pl":"5F3A85D800D00B00D00B01000B00B00D00B00B00D00B00D00D00B0"},{"sq":"1673","fp":"4","pl":"5F3A874F01100B01000B00D00D00B00B00D00B00D00D00D01000B0"},{"sq":"1674","fp":"4","pl":"5F3A88C600B00B00D00B00B01100D00B00B00D00D00B00D00B00B0"},{"sq":"1675","fp":"12","pl":"5F3A8AD30000C07F0000C07F"},{"sq":"1676","fp":"15","pl":"5F3A8AD3D7A3DC4174197C44"}]}"
 R: 17/08/20 13:49:41.025 INFO: RX> "OK"
 R: 17/08/20 13:49:42.038 INFO: RX> "+QHTTPPOST: 0,200,2"
 R: 17/08/20 13:49:42.054 INFO: TX> "AT+QHTTPREAD"
 R: 17/08/20 13:49:42.059 INFO: RX> "AT+QHTTPREAD"
 R: 17/08/20 13:49:42.064 INFO: RX> "CONNECT"
 R: 17/08/20 13:49:42.069 INFO: RX> "{}"
 R: 17/08/20 13:49:42.073 INFO: RX> "OK"
 R: 17/08/20 13:49:42.077 INFO: RX> "+QHTTPREAD: 0"

This shows a successful recovery from the 702 error.

However deactivating and re-activating the PDP context doesn’t always work:

 R: 27/09/20 06:10:16.739 INFO: TX> "AT+QHTTPURL=49,3"
 R: 27/09/20 06:10:16.774 INFO: RX> "AT+QHTTPURL=49,3"
 R: 27/09/20 06:10:16.779 INFO: RX> "CONNECT"
 R: 27/09/20 06:10:16.789 INFO: TX> "http://iot.exampleurl.com/v1/mm1b/868446031449065"
 R: 27/09/20 06:10:16.805 INFO: RX> "OK"
 R: 27/09/20 06:10:16.812 INFO: TX> "AT+QHTTPPOST=1852,3,60"
 R: 27/09/20 06:10:16.818 INFO: RX> "AT+QHTTPPOST=1852,3,60"
 R: 27/09/20 06:10:17.853 INFO: RX> "CONNECT"
 R: 27/09/20 06:10:18.022 INFO: TX> "{"sn":"868446031449065","ni":"03EA000A008403FA2E503500000000B9C81300000000006D340000D85600003E3007E80ED50000140500","msgs":[{"sq":"3452","fp":"4","pl":"5F6FD81D00D00D00B00D00B01100D01100B00B00D00D00B00D00B0"},{"sq":"3453","fp":"4","pl":"5F6FD99400B00D00D00B00D00B00D00B01100B00D00D00D01000D0"},{"sq":"3454","fp":"4","pl":"5F6FDB0B00D01000B00B00D00B00B00B00B00D00D01001001000D0"},{"sq":"3455","fp":"4","pl":"5F6FDC8200B00B00D00D00D00B00B00D00D00B01100B00B00D00B0"},{"sq":"3456","fp":"4","pl":"5F6FDDF900D00D00B00B00B00B00B00B00B00B00B00B01100D00D0"},{"sq":"3457","fp":"4","pl":"5F6FDF7000B00B00B00B01100B00D00B00D00B01001100D00D00B0"},{"sq":"3458","fp":"4","pl":"5F6FE0E700D00B00B00B01000D01101001000D00B00D00B00B00B0"},{"sq":"3459","fp":"4","pl":"5F6FE25E00B00D00B00D00D00B00D00B01100D00B00B00D00D0110"},{"sq":"3460","fp":"4","pl":"5F6FE3D500D00B00D00B00B00D00B00B00B00B00B00B00D00B00B0"},{"sq":"3461","fp":"12","pl":"5F6FE65FD04ACE41A88B2A42"},{"sq":"3462","fp":"15","pl":"5F6FE65F5C8FD241C0287D44"},{"sq":"3463","fp":"4","pl":"5F6FE54C01000D00D00B00B00D00B00B00B00D00B00D00D00D00D0"},{"sq":"3464","fp":"4","pl":"5F6FE6C300B00D00D00D00D00B00B01100B00B01001000D00B00B0"},{"sq":"3465","fp":"4","pl":"5F6FE83A00B00B00D01100B00B00D00D01001100B01001000B00D0"},{"sq":"3466","fp":"4","pl":"5F6FE9B100D00B00D00B00B00D00D00B01000D00D01000B00B0110"},{"sq":"3467","fp":"4","pl":"5F6FEB2800B00B00B00D00D00B00B00B00B00B00B00D00B00B00B0"},{"sq":"3468","fp":"4","pl":"5F6FEC9F00B00B00B00B00D01100D00B00D00D00D00D00D00D00B0"},{"sq":"3469","fp":"4","pl":"5F6FEE1601000B00B00B00B00B00B00D00D00B00B00B00D00D00D0"},{"sq":"3470","fp":"4","pl":"5F6FEF8D00D00D00B00B00B00B00B00B00B00B00B00B00B00B00D0"},{"sq":"3471","fp":"4","pl":"5F6FF10400D00B00D00B00D00D00D00B00D00B01100D00D00B00B0"},{"sq":"3472","fp":"4","pl":"5F6FF27B00B00800D00B00D00D00D00B00B00B01100D00B00B00B0"}]}"
 R: 27/09/20 06:10:20.853 INFO: RX> "OK"
 R: 27/09/20 06:10:20.857 INFO: RX> "+QHTTPPOST: 702"
 R: 27/09/20 06:10:20.873 INFO: TX> "AT+QIDEACT=1"
 R: 27/09/20 06:10:20.878 INFO: RX> "AT+QIDEACT=1"
 R: 27/09/20 06:10:21.170 INFO: RX> "OK"
 R: 27/09/20 06:10:21.176 INFO: TX> "AT+QIACT=1"
 R: 27/09/20 06:10:21.181 INFO: RX> "AT+QIACT=1"
 R: 27/09/20 06:10:26.812 INFO: RX> "OK"
 R: 27/09/20 06:10:26.818 INFO: TX> "AT+QIACT?"
 R: 27/09/20 06:10:26.823 INFO: RX> "AT+QIACT?"
 R: 27/09/20 06:10:26.828 INFO: RX> "+QIACT: 1,1,1,"10.137.220.188""
 R: 27/09/20 06:10:26.835 INFO: RX> "OK"
 R: 27/09/20 06:10:26.841 INFO: TX> "AT+QHTTPURL=49,3"
 R: 27/09/20 06:10:26.847 INFO: RX> "AT+QHTTPURL=49,3"
 R: 27/09/20 06:10:27.142 INFO: RX> "CONNECT"
 R: 27/09/20 06:10:27.152 INFO: TX> "http://iot.exampleurl.com/v1/mm1b/868446031449065"
 R: 27/09/20 06:10:27.160 INFO: RX> "OK"
 R: 27/09/20 06:10:27.167 INFO: TX> "AT+QHTTPPOST=1852,3,60"
 R: 27/09/20 06:10:27.174 INFO: RX> "AT+QHTTPPOST=1852,3,60"
 R: 27/09/20 06:10:28.072 INFO: RX> "CONNECT"
 R: 27/09/20 06:10:28.241 INFO: TX> "{"sn":"868446031449065","ni":"03EA000A008403FA2E503500000000B9C81300000000006D340000D85600003E3007E80ED50000140500","msgs":[{"sq":"3452","fp":"4","pl":"5F6FD81D00D00D00B00D00B01100D01100B00B00D00D00B00D00B0"},{"sq":"3453","fp":"4","pl":"5F6FD99400B00D00D00B00D00B00D00B01100B00D00D00D01000D0"},{"sq":"3454","fp":"4","pl":"5F6FDB0B00D01000B00B00D00B00B00B00B00D00D01001001000D0"},{"sq":"3455","fp":"4","pl":"5F6FDC8200B00B00D00D00D00B00B00D00D00B01100B00B00D00B0"},{"sq":"3456","fp":"4","pl":"5F6FDDF900D00D00B00B00B00B00B00B00B00B00B00B01100D00D0"},{"sq":"3457","fp":"4","pl":"5F6FDF7000B00B00B00B01100B00D00B00D00B01001100D00D00B0"},{"sq":"3458","fp":"4","pl":"5F6FE0E700D00B00B00B01000D01101001000D00B00D00B00B00B0"},{"sq":"3459","fp":"4","pl":"5F6FE25E00B00D00B00D00D00B00D00B01100D00B00B00D00D0110"},{"sq":"3460","fp":"4","pl":"5F6FE3D500D00B00D00B00B00D00B00B00B00B00B00B00D00B00B0"},{"sq":"3461","fp":"12","pl":"5F6FE65FD04ACE41A88B2A42"},{"sq":"3462","fp":"15","pl":"5F6FE65F5C8FD241C0287D44"},{"sq":"3463","fp":"4","pl":"5F6FE54C01000D00D00B00B00D00B00B00B00D00B00D00D00D00D0"},{"sq":"3464","fp":"4","pl":"5F6FE6C300B00D00D00D00D00B00B01100B00B01001000D00B00B0"},{"sq":"3465","fp":"4","pl":"5F6FE83A00B00B00D01100B00B00D00D01001100B01001000B00D0"},{"sq":"3466","fp":"4","pl":"5F6FE9B100D00B00D00B00B00D00D00B01000D00D01000B00B0110"},{"sq":"3467","fp":"4","pl":"5F6FEB2800B00B00B00D00D00B00B00B00B00B00B00D00B00B00B0"},{"sq":"3468","fp":"4","pl":"5F6FEC9F00B00B00B00B00D01100D00B00D00D00D00D00D00D00B0"},{"sq":"3469","fp":"4","pl":"5F6FEE1601000B00B00B00B00B00B00D00D00B00B00B00D00D00D0"},{"sq":"3470","fp":"4","pl":"5F6FEF8D00D00D00B00B00B00B00B00B00B00B00B00B00B00B00D0"},{"sq":"3471","fp":"4","pl":"5F6FF10400D00B00D00B00D00D00D00B00D00B01100D00D00B00B0"},{"sq":"3472","fp":"4","pl":"5F6FF27B00B00800D00B00D00D00D00B00B00B01100D00B00B00B0"}]}"
 R: 27/09/20 06:10:31.072 INFO: RX> "OK"
 R: 27/09/20 06:10:31.076 INFO: RX> "+QHTTPPOST: 702"

Should I just keep deactivating and re-activating? What is the best procedure?

1 Like

Recently I’ve experience a lot error 702 with a new BG96, and I wonder how to debug as well, Cannot help you but hope to get the further information like, a log of BG96 doing stuffs?