Yapay zekâ tarafından English dilinden çevrildi ·
Bunu geçen yıl römork takip cihazlarımızda ölçtüm, çünkü operatör faturamız çok saçmaydı. SIM7600 üzerinde, TLS 1.2 ile platformun broker’ı kullanılarak paket yakalamalarından alınan kaba değerler:
- tam yeniden bağlantı (TCP + sertifika zincirli TLS el sıkışması + CONNECT + SUBSCRIBE’lar): yaklaşık 5 ila 6 KB
- bir keepalive gidiş-dönüşü (TLS içinde PINGREQ/PINGRESP, artı TCP/IP başlıkları ve ACK’ler): yaklaşık 150 ila 200 bayt
- 80 baytlık okumanız, TLS içinde PUBACK ile QoS 1 publish olarak: yine birkaç yüz bayt
Yani her 5 dakikada bir yeniden bağlanmak ayda yaklaşık 8.640 el sıkışma, 45+ MB demek. Çok daha kötü. Keepalive 60 ayda 43.200 ping, yaklaşık 8 MB demek. Bu, 25 MB’lik kotanızın büyük bir kısmı.Bizde işe yarayan yöntem:Keepalive’ı 300 s’ye kadar çıkarın (broker, maksimumunun üzerindeki değerleri zaten 300 olarak kabul ediyor). Bu, ping sayısını beşte bire indirir. Operatörünüzün boşta kalan NAT oturumlarını daha hızlı düşürmediğini kontrol edin; bizimki 6 dakika tuttu, bazıları 2 ila 4 dakikada düşürüyor. Cihazın Log sekmesinde keepalive_timeout görürseniz değeri aşağı çekin.Toplu gönderim. Her 5 dakikada bir publish yerine, 3 okumayı tamponlayın ve zaman damgalarıyla tek bir dizi olarak gönderin (ESP32’de NTP var, bu yüzden ts kullanmak sorunsuz):
[{"ts":1762336800000,"values":{"flow":12.1,"pressure":2.4,"pump":1}},
{"ts":1762337100000,"values":{"flow":12.3,"pressure":2.4,"pump":1}},
{"ts":1762337400000,"values":{"flow":11.9,"pressure":2.3,"pump":1}}]
Veri aynı, tek publish, ayrıca aylık kotaya üç mesaj yerine tek mesaj olarak sayılır.Gereksiz trafik kaynaklarına bakın. Bizde en kötüsü, firmware’in her publish’te istemci özniteliklerini (IP, RSSI, firmware sürümü) göndermesiydi. Bunları yalnızca değiştiğinde gönderin.Çevrimdışı durumu hakkında: Çevrimiçi kuralı olarak Live connection kullanıldığında, MQTT oturumu açık olduğu sürece cihazlar çevrimiçi kalır; dolayısıyla keepalive 300 iken hiçbir şey değişmez. Eğer bağlan-gönder-bağlantıyı kes yöntemine geçerseniz, cihazları Recent message olan bir profile geçirin; aksi halde gönderimler arasında çevrimdışı görünürler.
I measured this on our trailer trackers last year because our carrier bill was silly. Rough numbers from packet captures on a SIM7600, TLS 1.2, the platform’s broker:
- full reconnect (TCP + TLS handshake with certificate chain + CONNECT + SUBSCRIBEs): about 5 to 6 KB
- one keepalive round trip (PINGREQ/PINGRESP inside TLS, plus TCP/IP headers and ACKs): roughly 150 to 200 bytes
- your 80-byte reading as a QoS 1 publish inside TLS with PUBACK: also a couple of hundred bytes
So reconnecting every 5 minutes would cost about 8,640 handshakes a month, 45+ MB. Way worse. Keepalive 60 is 43,200 pings a month, around 8 MB. That’s a big chunk of your 25 MB.
What worked for us:
Keepalive up to 300 s (the broker serves anything above its maximum at 300 anyway). That cuts pings by five. Check your carrier doesn’t drop idle NAT sessions faster; ours held 6 minutes, some drop at 2 to 4. If you see keepalive_timeout in the device’s Log tab, step it down.
Batch. Instead of one publish every 5 minutes, buffer 3 readings and send them as one array with timestamps (ESP32 has NTP, so ts is fine):
[{"ts":1762336800000,"values":{"flow":12.1,"pressure":2.4,"pump":1}},
{"ts":1762337100000,"values":{"flow":12.3,"pressure":2.4,"pump":1}},
{"ts":1762337400000,"values":{"flow":11.9,"pressure":2.3,"pump":1}}]
Same data, one publish, and it also counts as one message against the monthly quota instead of three.
Look for chatty extras. In our case the worst was the firmware sending client attributes (IP, RSSI, firmware version) on every publish. Only send them on change.
On offline: with Live connection as the online rule they stay online as long as the MQTT session is open, so with keepalive 300 nothing changes. If you ever do go connect-send-disconnect, switch them to a profile with Recent message, otherwise they’d show offline between sends.

