Skip to content

Mengirim data lewat MQTT ​

Satu koneksi yang tetap terbuka, untuk mengirim bacaan dan menerima perintah. Semua nilai di bawah ini juga tertulis di layar Koneksi & Integrasi perangkat Anda. Salin dari sana supaya tidak salah ketik.

Bagian MQTT di layar Koneksi & Integrasi

Program lengkap dalam setiap bahasa ada di Contoh kode, untuk port 1883 dan 8883.

Koneksi ​

PengaturanNilai
Hostapp.include.co.id
Port1883 (tanpa TLS, paling mudah) atau 8883 (dengan TLS)
Client IDID perangkat
UsernameID perangkat
PasswordDevice Token
VersiMQTT 3.1.1 atau 5

Kedua port terbuka, dan keduanya menolak perangkat yang username atau password-nya salah. Pilih sesuai perangkat Anda:

  • 1883: tanpa sertifikat, tanpa jam, ringan untuk papan kecil. Semua contoh di docs memakai port ini. Token terkirim tanpa enkripsi, jadi siapa pun yang bisa menyadap jaringan perangkat bisa membacanya.
  • 8883: koneksi dan token dienkripsi dengan TLS 1.2. Sertifikat server dari Let's Encrypt. Papan yang memeriksa sertifikat sendiri (ESP32, ESP8266) butuh sertifikat akar ISRG Root X1 dan X2; keduanya sudah ada di contoh TLS. Pilih ini kalau perangkat memakai jaringan yang tidak Anda kendalikan.

Lainnya:

  • Pakai ID perangkat sebagai Client ID. Dua koneksi dengan Client ID yang sama saling memutus: yang lama diputus saat yang baru masuk.
  • Perangkat yang hanya tahu tokennya bisa mengambil ID, topik, host, dan port lewat GET /api/v1/YOUR_DEVICE_TOKEN/mqtt-config. Lihat Mengirim data lewat HTTP.

Topik ​

ArahTopik
Kirim bacaanincludeapps/YOUR_ORG_ID/YOUR_SOLUTION_SLUG/YOUR_DEVICE_ID/telemetry
Terima perintahincludeapps/YOUR_ORG_ID/YOUR_SOLUTION_SLUG/YOUR_DEVICE_ID/command

Topik lengkap perangkat Anda tertulis di layar Koneksi & Integrasi sebagai Topik telemetri (publish) dan Topik perintah/config (subscribe).

Perangkat hanya boleh memakai topik yang berisi ID-nya sendiri. Publish atau subscribe ke topik lain langsung memutus koneksinya.

Isi pesan ​

Sama dengan HTTP: objek JSON, satu kunci satu parameter.

json
{ "temperature": 25.4, "humidity": 61 }

Dengan waktu sendiri (milidetik Unix, UTC):

json
{ "ts": 1761980400000, "values": { "temperature": 25.4 } }

QoS 0 dan 1 diterima. Pakai QoS 1 kalau setiap bacaan harus sampai.

Menerima perintah ​

Subscribe ke topik perintah. Setiap perintah berbentuk:

json
{ "method": "setAttribute", "params": { "setpoint": "25" }, "ts": 1761980400000 }
methodDikirim saat
setAttributeNilai di Config Server → Device diisi atau diubah. params berisi kunci dan nilainya.
deviceUpdatedNama atau label perangkat diubah. params berisi name dan label.
lainnyaTombol kontrol di dashboard atau aturan otomatis. params berisi key dan value.

Program Python lengkap yang menunggu perintah dan mencetaknya. Program ini ikut diuji: platform mengubah satu nilai di Config Server → Device, dan program harus mencetak command: setAttribute {'setpoint': '25'}.

py
import json

import paho.mqtt.client as mqtt

HOST = "app.include.co.id"
PORT = 1883
DEVICE_ID = "YOUR_DEVICE_ID"
DEVICE_TOKEN = "YOUR_DEVICE_TOKEN"
COMMAND_TOPIC = "includeapps/YOUR_ORG_ID/YOUR_SOLUTION_SLUG/YOUR_DEVICE_ID/command"


def on_connect(client, userdata, flags, reason_code, properties):
    print("connected:", reason_code)
    client.subscribe(COMMAND_TOPIC, qos=1)


def on_message(client, userdata, msg):
    command = json.loads(msg.payload)
    print("command:", command["method"], command["params"])
    # Act on it here, for example switch a relay when a parameter changes.


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=DEVICE_ID)
client.username_pw_set(DEVICE_ID, DEVICE_TOKEN)
client.on_connect = on_connect
client.on_message = on_message
client.connect(HOST, PORT)
client.loop_forever()

Satu perangkat boleh mengirim bacaan dan menerima perintah lewat koneksi yang sama: tambahkan subscribe dan on_message ke contoh MQTT Python.

Mencoba dari terminal ​

Dengan mosquitto_pub dari paket mosquitto-clients, lewat port 1883:

bash
mosquitto_pub -h app.include.co.id -p 1883 \
  -i YOUR_DEVICE_ID -u YOUR_DEVICE_ID -P YOUR_DEVICE_TOKEN \
  -t includeapps/YOUR_ORG_ID/YOUR_SOLUTION_SLUG/YOUR_DEVICE_ID/telemetry \
  -m '{"temperature": 25.4, "humidity": 61}'

Lewat port 8883 dengan TLS:

bash
mosquitto_pub -h app.include.co.id -p 8883 --capath /etc/ssl/certs \
  -i YOUR_DEVICE_ID -u YOUR_DEVICE_ID -P YOUR_DEVICE_TOKEN \
  -t includeapps/YOUR_ORG_ID/YOUR_SOLUTION_SLUG/YOUR_DEVICE_ID/telemetry \
  -m '{"temperature": 25.4, "humidity": 61}'

Di macOS, ganti --capath /etc/ssl/certs dengan --cafile /etc/ssl/cert.pem.

Jaringan ​

Port 1883 atau 8883 harus terbuka keluar dari jaringan perangkat. Beberapa jaringan kantor dan seluler hanya membuka 80 dan 443. Kalau perangkat tidak bisa tersambung tetapi HTTP berhasil dari jaringan yang sama, pakai HTTP.

INCLUDE AIoT Platform for Smart Industry