Lewati ke konten

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

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.

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).

Terminal window
docker compose logs -f history

Menampilkan 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.