Penyimpanan riwayat
Komponen history (Python, SQLite di volume history-data) berada di antara Mosquitto lokal dan Celestian. Ia menyimpan telemetri dan event di disk, menggabungkannya menjadi pesan SenFlat v2, dan mengirimnya ulang setelah koneksi ke Celestian pulih.
| Hal | Perilaku |
|---|---|
| Masuk | berlangganan sentinel/+/telemetry dan sentinel/+/event (QoS 1, sesi persisten, jadi pesan tidak hilang saat komponen mati). Kiriman ulang QoS 1 node ke Mosquitto dibuang berdasarkan (id, q) node |
| Gabung | telemetri digabung per jendela 2 detik (30 detik saat Celestian putus) atau 256 KiB; event dikirim segera. Satu pesan memuat banyak sumber; waktu titik yang dibuat node tidak pernah diubah. Maks. 512 KiB per pesan, dipecah (tidak pernah dipotong) |
q |
penghitung gateway di database, tidak pernah mundur. Kiriman ulang memakai q yang sama; Celestian membuang duplikatnya |
h dan tx |
h=0 untuk data baru; h=1 bila sudah pernah dicoba kirim atau umurnya lebih dari 30 detik. tx = waktu kirim gateway (ms) |
| Celestian putus | data menunggu di disk. Setelah tersambung, antrean dikirim berurutan (16 pesan sekaligus) dan dihapus hanya setelah PUBACK |
Ditolak izin (0x87) |
data tetap di disk dan dicoba lagi tiap 30 detik. Ditolak permanen (payload rusak atau terlalu besar) = dibuang |
| Penuh | data terlama dibuang dan dihitung di log |
Batas penyimpanan
Section titled “Batas penyimpanan”Diatur di .env:
| Variabel | Bawaan | Arti |
|---|---|---|
HISTORY_MAX_BYTES |
4 GiB | ukuran maksimum antrean di disk |
HISTORY_MAX_AGE_S |
259200 (3 hari) | umur maksimum data |
HISTORY_MAX_MESSAGES |
0 | jumlah pesan maksimum; 0 = tanpa batas |
Perkiraan beban: satu node G1 ±3,5 MB per hari; 240 node ±0,8 GB per hari. Pemasangan dengan banyak metrik Modbus jauh lebih besar per node; naikkan HISTORY_MAX_BYTES (dan pastikan SSD cukup) atau perpanjang telemetry_interval_ms di node bila batas ukuran tercapai sebelum 3 hari.
Pemeriksaan jam
Section titled “Pemeriksaan jam”Node menandai ts:1 bila NTP-nya berhasil, tetapi node tidak bisa tahu apakah chrony gateway sendiri punya hulu NTP sungguhan. history memeriksa chronyc tracking tiap 30 detik. Bila hulu NTP hilang lebih dari GATEWAY_CLOCK_STALE_S (bawaan 3 hari), sumber yang diteruskan ditandai ts:0 (Celestian menyimpannya dengan waktu perkiraan dan menandainya).
| Variabel | Arti |
|---|---|
GATEWAY_CLOCK_STALE_S |
batas hilangnya hulu NTP; 0 = ketat (ts:0 begitu hulu hilang) |
GATEWAY_CLOCK_CHECK=off |
tidak diperiksa (mis. MacBook sebagai gateway) |
Hulu NTP gateway diatur di host/gateway.env (NTP_UPSTREAM).
docker compose logs -f historyMenampilkan ringkasan antrean tiap menit. Bila log berkata “belum diisi”, isi GATEWAY_ID, GATEWAY_KEY, WORKSPACE, dan CHANNEL di .env. Bila “ditolak Celestian (0x87)”, device gateway belum punya koneksi publish ke channel itu; data aman di disk dan dikirim begitu izinnya ada.