Ich habe mit dem SIM5320 an einem MQTT-Protokoll gearbeitet. Ich bin mit der AT-Befehlsdokumentation vertraut und habe eine funktionierende Implementierung mit einem Arduino.
Zuerst öffne ich einen Netzwerk-Socket mit AT + NETOPEN, dann öffne ich eine TCP-Verbindung mit AT + CIPOPEN = 0, "TCP", "IP-Adresse", Port. Ich übertrage dann Daten für das MQTT-Protokoll mit AT + CIPSEND, das erfolgreich ausgeführt wird. Wenn ich Daten über MQTT an das SIM-Modul sende, werden diese ebenfalls empfangen und die Nachricht erkannt.
Bei MQTT gibt es ein Keep-Alive-Intervall, das angibt, wie lange der Server eine Verbindung zwischen der Kommunikation offen hält, im Grunde genommen, wie lange der Client inaktiv sein kann, bevor er zwangsweise vom Server getrennt wird. Ich habe diesen Wert jedoch auf maximal 18 Stunden eingestellt, was weitaus länger ist als die ~ 15-minütigen Unterbrechungen.
Mein Problem tritt nach ca. 15 Minuten auf, wenn ich versuche, einen Befehl an den Server zu senden, und keine Antwort erfolgt. Die SIM-Karte hat kein "+ IPCLOSE: 0,4" ausgegeben, das normalerweise auftritt, wenn der Server den Client oder eine andere Art von Anzeige zwangsweise vom Computer trennt.
Außerdem kann ich weiterhin Daten senden und es scheint, dass die CIP-Verbindung noch offen ist, wie durch "AT + CIPOPEN?" Angezeigt. Wenn ich versuche, die Verbindung mit "AT + CIPCLOSE = 0" zu schließen, erhalte ich "+ CIPCLOSE: 0,4" und "ERROR". In der Dokumentation wird nicht erwähnt, was "+ CIPCLOSE: 0,4" bedeutet. Die Verbindung scheint jedoch nicht geschlossen zu werden, da sie nicht geöffnet oder verwendet werden kann.
Ich würde wirklich gerne wissen, was in diesen 15 Minuten zwischen dem Herstellen einer Verbindung und dem Senden von Daten und dem erneuten Senden von Daten passiert. Es gibt keine Warnung oder Anzeichen dafür, dass etwas schief geht, daher bin ich ernsthaft verwirrt.
Ich habe diese Frage zunächst beim Austausch von Elektrotechnik-Stapeln gestellt, aber es wurde empfohlen, sie auch hier zu stellen.
Ich habe den Code, den ich hier geschrieben habe, für alle angehängt , die einen Blick darauf werfen möchten, und es gibt keine Bibliotheken, die Sie zum Ausführen benötigen.
quelle
Antworten:
Das Standard-TCP / IP-Zeitlimit beträgt 15 Minuten. Sie müssen innerhalb dieses Intervalls etwas senden, um die zugrunde liegende TCP-Verbindung aufrechtzuerhalten, auch wenn es sich nur um ein Synchronisierungs- / Bestätigungspaar handelt.
Das MQTT-Keepalive hängt davon ab, wann die Last Will- und Testement-Nachrichten ausgelöst werden sollen.
quelle
tcp_keepalive_time()
einen Standardwert von 7200 Sekunden, nach dem Keep Alives gesendet werden, wenn dieSO_KEEPALIVE
Socket-Option gesetzt ist. Andernfalls wird die Verbindung beendet.