Lewati ke konten

Bridge ke Celestian

Gateway meneruskan pesan Sentinel ke Celestian lewat dua jalur: bridge Mosquitto untuk pesan status dan pengaturan, dan komponen history untuk telemetri dan event (Penyimpanan riwayat).

Sentinel ── sentinel/<mac>/telemetry|event (anonim, LAN rak) ──▶ Mosquitto ──▶ history (antrean di disk)
──▶ m/<ws>/c/<ch>/<ID-gateway>/telemetry|event (SenFlat v2)
── status, config/reported, cmd/result, rules/reported, … ──▶ Mosquitto ──▶ bridge ──▶ m/<ws>/c/<ch>/<mac>/…
Lokal (LAN rak) Celestian Arah Dibawa oleh
sentinel/<mac>/telemetry, event m/<ws>/c/<ch>/<ID-gateway>/telemetry, event (banyak node dalam satu pesan SenFlat v2) naik history
sentinel/<mac>/status m/<ws>/c/<ch>/<mac>/status naik bridge
config/reported, cmd/result, rules/reported, rules/current, sources/reported, sources/current, profiles/reported, profiles/current, tgroups/reported, tgroups/current m/<ws>/c/<ch>/<mac>/… naik bridge
config, cmd, rules, sources, profiles, tgroups m/<ws>/c/<ch>/<mac>/… turun bridge

<ID-gateway> adalah UUID device gateway di Celestian. Telemetri dan event yang bukan SenFlat v2 (SenFlat v1, SenML; firmware lama atau payload_format bukan flat2) diteruskan history apa adanya ke m/<ws>/c/<ch>/<mac>/…, satu per satu, tanpa riwayat.

  1. Buat device dengan Gateway mode untuk gateway ini dan simpan device key-nya.
  2. Hubungkan ke channel dengan tipe publish, dan subscribe bila ingin mengirim config/cmd ke node.
  3. Node muncul di tab Roster gateway (dikenali dari MAC). Daftarkan sebagai device dengan Serial = MAC (huruf kecil, tanpa pemisah).
  4. Buat rule penyimpanan untuk channel itu; tanpa rule, pesan tidak disimpan.

clientid bridge wajib diawali ID device gateway (kebijakan prefix broker), mis. <ID-gateway>-bridge.

Celestian punya tiga port broker: MQTT 3.1.1, MQTT 5, dan MQTTS (satu port untuk 3.1.1 dan 5). Gateway memakai satu dari empat cara, dan dua komponen yang bicara ke Celestian (history lewat .env, bridge lewat bridge.conf) harus memakai cara yang sama.

Cara Port bawaan .env bridge.conf
mqtt3 11883 CELESTIAN_MODE=mqtt3 bridge_protocol_version mqttv311, address <host>:11883
mqtt5 (bawaan) 11884 CELESTIAN_MODE=mqtt5 bridge_protocol_version mqttv50, address <host>:11884
mqtts3 18883 CELESTIAN_MODE=mqtts3 seperti mqtt3, address <host>:18883, ditambah bridge_cafile
mqtts5 18883 CELESTIAN_MODE=mqtts5 seperti mqtt5, address <host>:18883, ditambah bridge_cafile

Port tiap jenis bisa diubah di .env: CELESTIAN_PORT_MQTT3, CELESTIAN_PORT_MQTT5, CELESTIAN_PORT_MQTTS. CELESTIAN_PORT (cara lama) bila diisi mengalahkan semuanya, jadi kosongkan saat berpindah cara.

Pada MQTT 3.1.1 tidak ada properti pesan (content type), jadi Celestian harus memperlakukan payload tanpa content type sebagai JSON.

CELESTIAN_HOST dan address harus berupa nama domain yang ada di sertifikat server (alamat IP gagal diverifikasi), dan pemeriksaan sertifikat tidak boleh dimatikan. Pilih satu sumber kepercayaan, dan samakan untuk history dan bridge:

Sertifikat server .env bridge.conf
CA sendiri (CA internal Celestian) CELESTIAN_CA_FILE=/mosquitto/config/celestian-ca.crt bridge_cafile /mosquitto/config/celestian-ca.crt
CA global (publik, mis. Let’s Encrypt; server memasang fullchain.pem) CELESTIAN_CA_FILE= (kosong: bundel CA sistem) bridge_cafile /etc/ssl/certs/ca-certificates.crt

Simpan berkas CA sendiri di Gateway/mosquitto/celestian-ca.crt; satu berkas dipakai kedua komponen. Jangan pasang bridge_cafile dan bridge_capath bersamaan. Setelah mengubah:

Terminal window
docker compose up -d --build history
docker compose restart mosquitto
docker compose logs history | head # menampilkan cara koneksi yang berlaku, mis. mqtts5 (MQTT 5 + TLS)

Bridge memakai cleansession false dan, untuk MQTT 5, bridge_session_expiry_interval 3600 (butuh Mosquitto 2.1 ke atas): sesi di broker pusat bertahan 1 jam setelah bridge putus, jadi perintah dari server selama WAN putus sebentar tetap sampai.