

LteGnssTrackerを参考にAWS-IoTにデータを送信すると、何時間か経過してエラーが頻発します。  
ソースは単純で以下になります。

[code]

    mqttClient.beginMessage(topic_ini);
    mqttClient.print(buff); 
    mqttClient.endMessage();
    
[/code]

エラーの状態は以下の3種類あります。

(1)ERROR: mbedtls_ssl_write() error : -0x50  
(2)ERROR: mbedtls_ssl_write() error : -0x7100  
(3)ERROR: mbedtls_ssl_write() error : -0x4e

(1)(2)の場合は、connect()を再実行で復帰できますが、  
(3)の場合はendMessage()で10分程度フリーズして(endMessageから戻ってこない)、  
その後、connect()を再実行で復帰できる時と、できない時があります。

動作環境は、SPRESENSE v2.5.1、LTE RK2.1.2.10.108.54にUpdateしてます。  
そ  
対処方法をご存じの方、ご教授いただけると助かります。


CC BY-SA 4.0
2022-07-09T09:04:52.763
89858
2022-09-27T02:38:07.127
2022-07-09T09:13:38.097
3060
53457
question
spresense
spresense LTEボードを使用した AWS-IoT 送信時に mbedtls_ssl_write() error が発生する


MbedTLSのエラーコードは、以下の2ファイルに定義されております。

<https://github.com/sonydevworld/spresense/blob/master/externals/mbedtls/mbedtls-v2/include/mbedtls/ssl.h#L78>  
<https://github.com/sonydevworld/spresense/blob/master/externals/mbedtls/mbedtls-v2/include/mbedtls/net_sockets.h#L52>

これによると、エラー内容は以下のようになります。

(1) ERROR: mbedtls_ssl_write() error : -0x50 → `Connection was reset by peer.`  
(2) ERROR: mbedtls_ssl_write() error : -0x7100 → `Bad input parameters to
function.`  
(3) ERROR: mbedtls_ssl_write() error : -0x4e → `Sending information through
the socket failed.`

(1) は単純に接続相手から切断されてしまっていると思います。  
(2)
については、`mbedtls_ssl_write`に与えるパラメータに不備があるという意味なので、パラメータが誤っているか、外的要因でパラメータが使用できなくなってしまったかが考えられます。  
(3) については、Socketの送信に失敗しているので、接続相手が見つからなくなった(Closeはされていないのに通信できない)ことが考えられます。

私の経験上、(3)は1日に1度ほどLTEネットワークからIPアドレスが変更されたタイミングで起きていることが多いです。  
なので、このエラーが発生しているときはIPを変える作業が裏で走っているため、処理に時間がかかっているのではないかと思います。

参考になれば幸いです。


CC BY-SA 4.0
2022-08-26T01:44:45.240
90762
2022-08-26T05:30:20.100
2022-08-26T05:30:20.100
3060
32034
89858
answer


ご回答ありがとうございました。  
(2) ERROR: mbedtls_ssl_write() error : -0x7100  
これに関しては、LTEボードをRK2⇒RK3に変えたところ全く出なくなりました。  
(3) ERROR: mbedtls_ssl_write() error : -0x4e  
これはNATタイプのSIMを使用すると出やすいとSIMメーカーの見解を聞きました。  
動的グローバルIPのSIMにすると良くなるかもとのことでした。

結果的にフリーズ現象を止めることは出来ていませんので、  
フリーズ時にウォッチドッグを使い、再スタートさせて対処しました。


CC BY-SA 4.0
2022-09-27T02:38:07.127
91326
2022-09-27T02:38:07.127
53458
89858
answer