Simulator celestian-sim
celestian-sim adalah program command-line yang berpura-pura menjadi device atau gateway: tersambung ke broker dengan kredensial device sungguhan, lalu mengirim data sensor secara berkala. Berguna untuk mencoba platform, mengisi dashboard, menguji rule dan alarm, dan beban ringan.
- Satu biner statis untuk Linux dan macOS (amd64 dan arm64), tanpa dependensi.
- Berhenti rapi dengan
Ctrl+C, dan menyambung ulang otomatis bila broker terputus. - Berjalan baik di dalam
tmux.
Menyiapkan di Celestian
Section titled “Menyiapkan di Celestian”Simulator memakai akun device sungguhan:
- Buat channel (misalnya route
telemetri-gudang). - Buat device (satu per perangkat tiruan; untuk gateway, nyalakan mode gateway). Catat ID dan key (hanya tampil sekali).
- Beri koneksi publish ke channel.
- Pasang rule penyimpanan (SenML) pada channel. Tanpa rule, pesan diterima tetapi tidak tersimpan.
Data yang dikirim
Section titled “Data yang dikirim”Profil bawaan edge meniru edge node dengan 12 besaran yang saling berkaitan, bukan acak bebas:
| Nama | Satuan | Cara dibangkitkan |
|---|---|---|
temp_inlet |
Cel |
Sinus 20,5 sampai 24,5 (siklus bisa diubah) dengan derau. |
temp_outlet |
Cel |
Inlet + 2,5 + 0,0072 × daya: makin berat beban, makin panas. |
temp_ambient |
Cel |
Inlet + 1,7 + derau (opsional). |
humidity |
%RH |
Sekitar 55, turun sedikit bila lebih hangat (opsional). |
voltage |
V |
Sekitar 230 dengan drift; sesekali drop 8 sampai 15 V. |
current |
A |
Dihitung = daya / (tegangan × faktor daya). |
power_draw |
W |
Sekitar 950 ± 180. |
energy |
kWh |
Akumulasi daya terhadap waktu. |
frequency |
Hz |
50 ± 0,1. |
power_factor |
/ |
Sekitar 0,97. |
uptime |
s |
Bertambah bersama waktu. |
heap_free |
By |
Sekitar 218000, turun pelan lalu pulih. |
Format payload dipilih dengan -format senml (bawaan), flat (SenFlat v1), atau flat2 (SenFlat v2). Semua nama metrik ada di Katalog Metrik bawaan. Opsi -profile rack memakai profil lama (T, RH, V, I, S1, S2), dan -no-sht41 menghilangkan temp_ambient dan humidity.
Menjalankan
Section titled “Menjalankan”./celestian-sim device \ -broker celestian.contoh.id:1883 -workspace gudang-nusantara -channel telemetri-gudang \ -id <id-device> -key '<device-key>' -name ruang-a1 -interval 5sData masuk ke topik m/gudang-nusantara/c/telemetri-gudang/ruang-a1.
./celestian-sim gateway \ -broker celestian.contoh.id:1883 -workspace gudang-nusantara -channel telemetri-gudang \ -id <id-gateway> -key '<key-gateway>' -name gw-a \ -children 00:1A:2B:3C:4D:5E,aabbcc001122 # atau -children 3 (MAC otomatis)Data tiap anak masuk ke m/<ws>/c/<ch>/gw-a/<anak>. Tambahkan -gateway-mode batch untuk satu pesan berisi semua anak.
{ "broker": "celestian.contoh.id:1883", "workspace": "gudang-nusantara", "channel": "telemetri-gudang", "interval": "10s", "devices": [ {"name": "ruang-a1", "id": "<id-1>", "key": "<key-1>"}, {"name": "ruang-a2", "id": "<id-2>", "key": "<key-2>"} ], "gateways": [ {"name": "gw-a", "id": "<id-gw>", "key": "<key-gw>", "children": ["001a2b3c4d5e"], "mode": "batch"} ]}chmod 600 sim.json # berkas memuat key device./celestian-sim run -config sim.jsonOpsi ditulis setelah subperintah: celestian-sim device -format flat2 -once …. Memakai variabel lingkungan agar key tidak terlihat di daftar proses:
export CELESTIAN_SIM_BROKER=celestian.contoh.id:1883 CELESTIAN_SIM_WORKSPACE=gudang-nusantara CELESTIAN_SIM_CHANNEL=telemetri-gudangread -rs CELESTIAN_SIM_KEY; export CELESTIAN_SIM_KEY./celestian-sim device -id <id-device> -name ruang-a1Opsi penting
Section titled “Opsi penting”| Opsi | Arti |
|---|---|
-broker |
host[:port], mqtt://host:1883, atau mqtts://host:8883 (TLS). |
-workspace, -channel |
Route atau UUID. |
-id, -key |
ID dan device key. |
-name, -subtopic |
Label dan subtopik. |
-interval |
Jeda kirim (bawaan 10 detik). |
-qos |
1 (bawaan) atau 0. |
-format |
senml, flat, atau flat2. |
-speed N |
Mempercepat waktu simulasi (sinus dan pergantian pintu). |
-temp-period |
Periode sinus suhu (bawaan 1 jam). |
-count N, -once |
Berhenti setelah N kali kirim. |
-dry-run |
Cetak payload tanpa tersambung. |
-seed |
Benih acak agar hasil bisa diulang. |
-children, -gateway-mode, -jitter |
Khusus gateway. |
Topik, event, dan status
Section titled “Topik, event, dan status”Profil edge juga meniru topik firmware. Tiap node mengirim ke <node>/telemetry (tiap interval), <node>/event (hanya saat pintu berganti), dan <node>/status (retained saat tersambung; {state: offline} sebagai LWT dan saat berhenti wajar). Node juga berlangganan <node>/config dan <node>/cmd dan menjawab di config/reported dan cmd/result (aksi reboot, identify, ota, publish).
Riwayat gateway
Section titled “Riwayat gateway”celestian-sim history meniru gateway yang mengirim data tertahan setelah koneksi pulih (SenFlat v2, h=1), untuk menguji sisi penerima: urutan, duplikat, waktu lampau, jam salah, dan batas ukuran.
# 2 jam riwayat, 3 anak, urutan diacak, 30% dikirim ulang, satu pesan terkini lebih dulu./celestian-sim history -broker host:1883 -workspace ws -channel ch -id <id-gateway> -key <key> \ -children 3 -span 2h -step 10s -chunk 60 -order shuffle -dup 0.3 -liveOpsi: -span, -step, -end, -chunk, -order asc|desc|shuffle, -dup F, -live, -bad-clock ts0|range, -t0 first|last, -q-start, -delay, -oversize. Di akhir, simulator mencetak harapan (jumlah titik yang seharusnya tersimpan, kiriman ulang yang seharusnya terbuang, dan pesan yang seharusnya ditolak) untuk dicocokkan dengan Celestian.
Node Sentinel
Section titled “Node Sentinel”celestian-sim sentinel meniru node Sentinel SNT-G1 yang tersambung anonim ke Mosquitto gateway lewat MQTT 5, dengan metrik di1-di4, do1-do4, suhu, kelembapan, listrik, uptime, dan lat/long bergerak. Node menerima config (divalidasi seperti firmware), cmd, dan rules (dievaluasi dan menggerakkan output).
./celestian-sim sentinel # satu node ke 127.0.0.1:11884./celestian-sim sentinel -nodes a2cb8ff8768d,02aabbccdd02 -interval 5s./celestian-sim sentinel -dry-run -once # lihat pesan tanpa broker- Lihat siklus penuh dalam menit:
-speed 120 -interval 2s. - Siklus suhu harian:
-temp-period 24h. - Jumlah pesan terbatas:
-count 30. - Menguji alarm: buat rule dengan kondisi
temp_inlet > 23.5pada channel yang sama (contoh). - Anak terdaftar di Roster: jalankan gateway sekali, buka tab Roster, lalu Daftarkan sebagai device.
Pemecahan masalah
Section titled “Pemecahan masalah”| Pesan atau gejala | Penyebab umum |
|---|---|
ditolak broker: username atau password salah |
ID atau key salah, atau key sudah dibuat ulang. |
client ID ditolak |
Device nonaktif, atau (produksi) -client-id tidak diawali ID device. |
koneksi diputus broker tepat setelah tersambung |
Device belum punya koneksi publish ke channel itu, atau workspace dan channel salah. |
tidak ada PUBACK |
Broker menolak pesan; periksa koneksi publish dan topik. |